YOLOv11传送带异物检测:铁棍与垃圾数据集实战指南
简介面向工业质检与安全生产场景的传送带异物检测数据集可识别铁棍、垃圾等常见异物适合从事目标检测算法训练、产线视觉方案验证的开发者与研究人员使用。数据采用YOLOv11标注格式可直接接入主流检测框架进行训练与评估。压缩包共211个文件包含105张jpg图像、105个同名txt标注文件及1个yaml配置文件整体约4.68MByaml用于定义类别与数据路径图像与标注一一对应便于快速划分训练集与验证集。图像取自监控视频抽帧覆盖不同时段与画面位置异物目标形态多样有助于提升模型对遮挡、尺度变化等情况的适应能力。目前已有351人学习下载可作为传送带异物识别项目的起步数据用于模型微调、类别扩展或检测流程验证节省自行采集与标注的时间成本。1. 传送带异物检测从铁棍到垃圾YOLOv11 数据集到底怎么落地传送带异物检测这件事真正卡住大多数团队的往往不是模型结构而是数据集。我在几个矿山和垃圾分拣现场都遇到过同一个场景皮带跑得好好的突然一块铁棍卡进托辊或者一袋混进来的垃圾把下游破碎机打停停机损失按分钟算。事后复盘大家第一反应都是上个视觉检测可一动手就发现——公开数据集里几乎没有传送带上的铁棍和垃圾这种长尾目标自己拍自己标又不知道标到什么程度算够。这个标题讲的正是这件事一套按 YOLOv11 格式标注、可识别铁棍与垃圾的传送带异物检测数据集以及围绕它怎么训练、怎么调参、怎么避坑。它适合两类人一类是现场工程师想快速验证视觉方案能不能上另一类是算法同学手里有 YOLOv11 环境但缺一份贴合工业场景的数据。下面我按数据长什么样 → 怎么喂给 YOLOv11 → 坑在哪 → 怎么把指标做实的顺序讲透。2. 传送带异物数据集长什么样类别、标注格式与采集边界2.1 铁棍与垃圾这两类目标为什么难标传送带场景的目标检测和通用 COCO 完全不是一回事。铁棍是典型的细长小目标长宽比经常到 10:1 以上在 640 分辨率下可能只占十几个像素宽垃圾则是形态发散的一类塑料袋、纸团、编织袋碎片都算边界模糊、容易被皮带纹理吞掉。这两类放在一起对标注一致性的要求极高——同一根铁棍有人框到两端有人只框中间一段训练时回归头就会来回震荡。我一般的做法是先定最小可检尺寸。现场皮带宽度、相机安装高度、镜头焦距决定了铁棍在图像里最少有多少像素低于这个尺寸的目标直接不标标了也是噪声。垃圾类则要写一份标注口径文档明确只标可见主体、不标阴影、不标皮带上的污渍否则不同标注员出来的框能差出一倍面积。2.2 YOLOv11 标注格式一行一个目标五个字段YOLOv11 沿用 YOLO 系列的 txt 标注格式每张图对应一个同名 txt每行代表一个目标class_id x_center y_center width height其中坐标全部是归一化到 0~1 的相对值x_center y_center是框中心width height是框宽高。类别 id 从 0 开始按你的data.yaml里names的顺序来。假设铁棍是 0、垃圾是 1一张 1920×1080 的图上有一根铁棍和一个垃圾袋标注文件大概长这样0 0.412500 0.638889 0.187500 0.027778 1 0.733333 0.512037 0.104167 0.092593第一行铁棍中心在 x792、y690 像素处宽 360 像素、高 30 像素归一化后就是上面的值。第二行垃圾中心 x≈1408、y≈553宽 200、高 100。这里最容易翻车的是归一化基准——必须用图像真实宽高不能用 letterbox 之后的尺寸否则框会整体偏移。2.3 目录结构与 data.yaml 的最小配置数据集目录我习惯按下面这样组织训练/验证/测试分开图片和标签同级不同文件夹dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml是 YOLOv11 训练的入口配置字段不多但每个都关键path: /data/dataset # 数据集根目录绝对路径最稳 train: images/train # 相对 path 的训练图目录 val: images/val test: images/test nc: 2 # 类别数铁棍垃圾 names: 0: iron_rod # 铁棍 1: garbage # 垃圾提示path用绝对路径能省掉一大堆找不到文件的玄学问题尤其是把数据集挂到不同机器上跑的时候。2.4 采集边界多少张图、什么角度才算够现场采集我一般按工况覆盖而不是张数来定。传送带有空载、满载、不同光照白天窗光、夜间补光、不同速度几种状态每种状态都要有正样本和负样本。铁棍这类目标出现频率低靠自然采集可能几百张才有一根所以我会在安全前提下人工摆放铁棍和垃圾做补充采集但要注意别让模型只学会摆拍的固定位置。数量上铁棍和垃圾各 800~1500 个实例是比较现实的起点总图数 2000~4000 张。低于这个量YOLOv11 也能跑但小目标的召回会很难看。采集角度要覆盖相机实际安装视角的上下左右偏移别只在一个位置拍——现场皮带会跑偏相机支架也会震。3. 用 YOLOv11 训练传送带异物模型环境、命令与参数3.1 环境配置与依赖安装YOLOv11 通过 ultralytics 包使用环境配置本身不复杂坑主要在 CUDA 和 torch 版本对上。我一般用 conda 建独立环境conda create -n yolo11 python3.10 -y conda activate yolo11 # 先装匹配 CUDA 的 torch再装 ultralytics pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install ultralytics装完用一行命令验证环境和 GPU 是否可用yolo checks这条命令会打印 ultralytics 版本、Python 版本、torch 版本和 CUDA 是否可用。如果显示 CPU only说明 torch 装成了 CPU 版训练会慢到无法接受得回去重装对应 CUDA 的 torch。这一步别省我见过太多人训练卡在第一步就是因为 torch 版本没对上。3.2 从预训练权重开始训练的最小命令传送带异物数据量不大从 COCO 预训练权重微调是最稳的路线别从零训。最小训练命令yolo detect train \ data/data/dataset/data.yaml \ modelyolo11s.pt \ epochs150 \ imgsz960 \ batch16 \ device0 \ projectruns/belt \ nameexp1逐项说下参数。modelyolo11s.pt选 s 而不是 n是因为铁棍这种细长小目标需要稍大的感受野和特征容量n 版在 960 分辨率下召回经常差几个点。imgsz960是关键——传送带图通常宽幅640 会把铁棍压成几个像素960 或 1280 能明显改善小目标。batch16按显存调显存不够就降到 8 并开ampTrue默认开。epochs150配合早停实际往往 80~120 轮就收敛。3.3 针对铁棍小目标的三个必调参数默认超参在通用数据集上表现好但传送带异物场景要动三个地方参数默认值建议值原因imgsz640960~1280铁棍细长低分辨率下像素太少mosaic1.00.5~0.8过度拼接会让小目标更碎后期可关scale0.50.3随机缩放太猛会让铁棍忽大忽小回归难收敛mosaic 数据增强在训练前期有用但传送带场景背景高度重复mosaic 拼出来的图会出现皮带接皮带的假边界模型容易学到伪特征。我的习惯是前 100 轮开 0.8后 50 轮关掉close_mosaic50让模型在真实分布上收尾。yolo detect train \ data/data/dataset/data.yaml \ modelyolo11s.pt \ epochs150 imgsz960 batch16 \ mosaic0.8 scale0.3 close_mosaic50 \ device03.4 训练过程看什么loss 曲线与 mAP 的读法训练启动后runs/belt/exp1/下会有results.csv和可视化曲线。我重点看三个信号train/box_loss是否稳定下降、metrics/mAP50-95是否还在涨、val/box_loss有没有开始反弹。如果 val loss 早早反弹而 train loss 还在降就是过拟合传送带数据量小很容易这样解决办法是加dropout、减 epoch 或补数据。铁棍这类小目标mAP50可能到 0.9 但mAP50-95只有 0.5 左右这是正常的——小目标的 IoU 对框偏移极其敏感高 IoU 阈值下掉分快。别只盯 mAP50-95现场更关心的是漏检率也就是 recall。如果 recall 上不去优先查标注质量和 imgsz而不是换模型。4. 传送带异物检测的避坑与排查五条血泪经验4.1 现象训练 mAP 很高现场一跑全是误检原因数据集里负样本纯皮带、无目标的图太少模型没见过什么都没有的皮带纹理把皮带接头、污渍、反光都当成了目标。传送带背景高度重复这个坑特别常见。解决负样本至少占训练集的 10%~15%专门采集空载、有污渍、有接头、有反光的图标签文件留空空 txt。重训后误检会明显下降。4.2 现象铁棍漏检严重尤其是斜着放的原因铁棍长宽比大默认 anchor 和损失对小目标不友好加上标注时框太紧模型学到的特征太局部。解决把 imgsz 提到 1280 试一轮标注时框稍微放宽 2~3 像素给回归留余量如果还不行考虑在 YOLOv11 里加一个针对小目标的检测头P2 层但这会增加显存和推理耗时要权衡。4.3 现象验证集指标好测试集崩了原因train/val/test 是按随机划分的但传送带同一段视频抽帧出来的图高度相似随机划分会导致验证集里混进了和训练集几乎一样的帧指标虚高。解决按时间段或采集批次划分同一批采集的图要么全进 train要么全进 test绝不混。这样测出来的指标才接近现场真实表现。4.4 现象推理速度达不到产线要求原因imgsz 提到 1280 后单帧推理时间翻倍加上后处理可能超过皮带允许的响应窗口。解决先确认产线真实需求——异物从出现到危险点有多少毫秒。如果时间紧用 TensorRT 导出加速或者降回 960 并接受一点召回损失。别盲目堆分辨率先算清楚时间预算。# 导出 TensorRT 引擎FP16 加速 yolo export modelruns/belt/exp1/weights/best.pt formatengine halfTrue device04.5 现象标注文件里出现坐标大于 1 或负数原因标注工具导出时用了 letterbox 后的尺寸做归一化或者手工改框时越界。YOLOv11 训练时这类框会被静默丢弃或产生异常 loss。解决训练前跑一遍校验脚本扫所有 txt把越界行打印出来修掉。import os bad [] for root, _, files in os.walk(labels): for f in files: if not f.endswith(.txt): continue p os.path.join(root, f) for i, line in enumerate(open(p)): vals list(map(float, line.split()[1:])) if any(v 0 or v 1 for v in vals): bad.append((p, i, line.strip())) print(f越界标注 {len(bad)} 条) for b in bad[:20]: print(b)这段脚本遍历 labels 目录下所有 txt检查后四个归一化坐标是否落在 0~1 区间越界的打印出来。跑一次几秒钟能省掉训练时莫名其妙的 loss 异常。5. 把指标做实验证策略与一个提升召回的具体技巧训练完拿到best.pt别急着上线先做两件事把指标做实。第一件是按 4.3 说的批次划分重跑一次评估确认测试集指标没有虚高第二件是拿现场真实视频抽帧做一次盲测这批图完全不参与训练和调参只看漏检和误检。盲测的 recall 才是你能对产线承诺的数字。评估命令很简单yolo detect val \ modelruns/belt/exp1/weights/best.pt \ data/data/dataset/data.yaml \ imgsz960 batch16 device0它会输出每类的 precision、recall、mAP50、mAP50-95。我重点看iron_rod那一行的 recall如果低于 0.85现场大概率会漏。这时候有个具体技巧值得试推理时降低置信度阈值配合后处理做二次过滤。YOLOv11 默认conf0.25对铁棍这种小目标0.25 会砍掉不少真目标。把 conf 降到 0.1 先拿全候选再用一个简单的规则过滤——比如铁棍的框长宽比必须大于 3垃圾的框面积必须大于某个像素数——把明显不合理的候选去掉。from ultralytics import YOLO model YOLO(runs/belt/exp1/weights/best.pt) results model.predict(test_frame.jpg, conf0.1, imgsz960) for r in results: for box in r.boxes: cls int(box.cls) x1, y1, x2, y2 box.xyxy[0].tolist() w, h x2 - x1, y2 - y1 ratio max(w, h) / max(min(w, h), 1) # 铁棍长宽比必须够大 if cls 0 and ratio 3: continue # 垃圾面积不能太小 if cls 1 and w * h 400: continue print(cls, box.conf.item(), [x1, y1, x2, y2])这段代码把 conf 降到 0.1 拿候选然后按类别做几何过滤铁棍要求长宽比大于 3垃圾要求面积大于 400 像素。逻辑很朴素但在传送带这种目标形态相对固定的场景里比单纯调阈值有效得多。参数上长宽比阈值和面积阈值要按你的实际分辨率和目标尺寸调别照抄。最后说个我自己的习惯每次换相机、换镜头、换皮带速度我都会重新采一批负样本和少量正样本做增量微调而不是直接复用旧模型。传送带场景的分布漂移比想象中快光照一变、皮带一换旧模型的误检就上来了。与其等现场报警再救火不如把增量微调做成例行维护。这套流程跑顺之后铁棍和垃圾的漏检基本能压到可接受范围剩下的就是和产线一起定报警策略了。希望帮到你。本文还有配套的精品资源点击获取