ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

传送带异物检测实战:YOLOv11数据集构建与训练调优

2026/10/4 5:06:42 拓冰建站 浏览量
传送带异物检测实战:YOLOv11数据集构建与训练调优 简介本数据集面向工业质检与安全生产场景针对传送带运输过程中混入铁棍、垃圾等异物的自动识别需求提供了一套可直接用于目标检测模型训练的标注数据适合从事视觉检测、智能分拣及边缘部署的开发者与研究人员使用。资源共211个文件包含105张jpg现场图像、105个同名txt标注文件以及1个yaml数据配置文件压缩包约4.68MB标注采用yolov11格式可直接接入YOLO系列训练流程yaml文件便于快速配置类别与路径。图像取自真实监控视频抽帧覆盖不同时段与画面编号场景贴近实际产线环境。目前已有351人学习下载读者可借此快速搭建异物检测基线模型验证铁棍与垃圾两类目标的识别效果并在此基础上进行数据增强、类别扩展或模型微调为传送带异物预警与自动化处置提供数据支撑。1. 传送带异物检测从铁棍到垃圾YOLOv11 数据集怎么落地传送带跑着跑着一块铁棍卡进托辊轻则撕带停机重则整条线停产检修。这类事故在矿山、水泥、电厂、港口散料输送场景里并不少见而传统人工盯屏或金属探测器只能覆盖一部分异物——铁棍能测到但编织袋、木板、大块垃圾往往漏掉。传送带中异物检测识别数据集要解决的正是这个问题用视觉方案把铁棍、垃圾等异物从运行中的皮带上框出来而YOLOv11 格式标注意味着这套数据可以直接喂给 Ultralytics 的检测框架训练不需要再折腾格式转换。这篇文章面向两类人手里有传送带现场、想评估视觉方案可行性的工程师以及拿到数据集却不知道怎么训、怎么调、怎么部署的算法同学。我会把数据组织、标注规范、训练参数、小目标优化和现场踩坑按可复现的顺序讲清楚让你看完能自己跑通一版基线。2. 传送带异物检测数据集类别定义、采集边界与 YOLOv11 标注规范2.1 为什么异物检测不能照搬通用目标检测数据集通用检测数据集COCO、VOC里的“物体”是语义完整的、居中的、光照均匀的而传送带异物恰恰相反铁棍可能只露出一截、被煤块半掩垃圾袋可能被压扁贴在皮带上纹理和背景高度相似异物出现的位置随机可能贴着画面边缘只占几十个像素。更麻烦的是负样本正常运行的皮带、正常物料远多于正样本如果直接拿通用预训练权重微调模型很容易把“皮带接缝”“托辊阴影”误判成异物。所以自建数据集时类别定义要克制。常见做法是分两类tiegun铁棍/金属长条和laji垃圾/杂物不要一上来就细分“塑料瓶”“编织袋”“木块”类别越细单类样本越少模型越难收敛。如果现场异物种类确实多可以先合并成“金属异物”和“非金属异物”两个粗类等数据量上来再拆。采集边界也要提前定相机是装在皮带上方俯拍还是侧方斜拍俯拍对铁棍这类细长目标更友好但垃圾袋的立体感会丢失侧拍能看清高度但铁棍容易被物料遮挡。我一般建议俯拍为主、侧拍为辅两路都采训练时先混在一起看验证集上哪路 recall 低再针对性补数据。2.2 YOLOv11 标注格式拆解与目录组织YOLOv11 沿用 Ultralytics 的标注格式每张图对应一个同名.txt每行一个目标格式为class_id x_center y_center width height坐标全部归一化到 0~1。这里有两个容易翻车的点一是class_id从 0 开始且必须和data.yaml里的names顺序严格一致二是归一化要用原图宽高不是缩放后的尺寸。很多人用标注工具导出时选了“resize 后坐标”结果训练时框全偏了。目录结构建议这样组织dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml内容path: /home/user/dataset train: images/train val: images/val test: images/test nc: 2 names: 0: tiegun 1: laji注意path写绝对路径最稳相对路径在不同 Ultralytics 版本里解析行为有差异别在这上面浪费时间。标注工具用 LabelImg、CVAT 或 X-AnyLabeling 都行导出时选 YOLO 格式。标完一定要写个脚本抽查随机抽 20 张图把标注框画回原图看一眼确认没有整体偏移、没有漏标、没有把皮带接缝标成异物。2.3 数据划分与负样本配比划分比例常见 7:2:1但传送带场景我建议 6:2:2验证集和测试集留大一点因为现场光照、物料湿度变化大验证集太小会导致指标虚高。更重要的是负样本正常皮带画面要占训练集的 15%~25%全部标为空 txtYOLO 允许空标签文件表示该图无目标。没有负样本模型会把“皮带”本身当成异物特征。另外同一段视频抽帧得到的图片要整段划到同一个子集不能随机打散否则相邻帧同时出现在训练和验证集里指标会虚高到离谱。这个坑我踩过验证集 mAP 0.95上线后实际 recall 不到 0.6血泪经验。3. 用 YOLOv11 训练异物检测模型环境、命令与关键参数3.1 环境配置避开 CUDA 与 torch 版本错配Ultralytics 官方推荐 Python 3.8~3.11torch 2.x。环境配置这块0 基础同学最容易卡在 CUDA 版本和 torch 不匹配上。先确认显卡驱动支持的 CUDA 上限nvidia-smi右上角CUDA Version是驱动支持的最高版本装 torch 时不要超过它。然后建虚拟环境conda create -n belt python3.10 -y conda activate belt pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install ultralyticscu121对应 CUDA 12.1按你nvidia-smi的结果换。装完验证import torch print(torch.__version__, torch.cuda.is_available())输出True才算通。如果False先别急着训九成是 torch 装成了 CPU 版或 CUDA 版本不匹配。3.2 训练命令与参数含义最小训练命令yolo detect train \ modelyolo11s.pt \ data/home/user/dataset/data.yaml \ epochs150 \ imgsz640 \ batch16 \ device0 \ projectbelt_run \ nameexp1逐项说明modelyolo11s.pt用 s 版平衡速度和精度现场如果边缘设备算力紧可以换yolo11n.ptimgsz640是输入分辨率铁棍这类细长小目标如果 recall 低可以提到 960 或 1280但显存和速度要重新评估batch16按显存调8G 显存跑 640 一般能到 16跑 1280 可能只能到 4epochs150是上限实际看patience早停默认 50 轮没提升就停。训练过程中重点看三个指标metrics/mAP50(B)、metrics/mAP50-95(B)和每类的recall。异物检测里 recall 比 precision 重要——漏检一根铁棍的代价远大于多报几次让复核人员看一眼。如果tiegun的 recall 明显低于laji说明小目标或细长目标没学好下一节专门处理。3.3 从训练日志判断过拟合与欠拟合训练日志里train/box_loss持续下降但val/box_loss开始上升就是过拟合常见于数据量小于 2000 张时。对策加degrees10、translate0.1、scale0.5做几何增强或者直接补数据。反过来两个 loss 都居高不下是欠拟合检查标注是否有大量漏标、类别是否标错、学习率是否太小默认lr00.01一般够用。还有一个玄学现象mAP 震荡厉害忽高忽低。多半是 batch 太小或数据分布不均把batch调大、把训练集按类别和场景重排一下通常能稳下来。4. 小目标与细长异物YOLOv11 参数调优与数据增强策略4.1 铁棍这类细长目标为什么容易漏检YOLOv11 的检测头在 8/16/32 倍下采样特征图上做预测一根在 640 分辨率下只有 10×80 像素的铁棍到 32 倍下采样后只剩不到 1 个像素特征基本消失。这就是小目标漏检的根因。垃圾袋虽然形状不规则但面积通常比铁棍大所以漏检率低一些。解决思路分三层输入分辨率、数据增强、模型结构。输入分辨率最直接imgsz从 640 提到 960铁棍在特征图上的像素翻倍recall 通常能涨 5~15 个点代价是显存和推理时间增加。如果现场用 Jetson 这类边缘设备可以训练用 960、推理用 640或者用 TensorRT 量化后再评估。4.2 针对细长目标的增强参数怎么设Ultralytics 训练配置里和细长目标相关的增强参数参数默认值建议值作用degrees0.010.0随机旋转铁棍方向多变时有用translate0.10.2平移模拟异物出现在画面任意位置scale0.50.3~0.5缩放别太大否则小目标更小mosaic1.01.0四图拼接增加小目标上下文copy_paste0.00.3复制粘贴异物直接增加正样本mixup0.00.1图像混合慎用可能让细长目标变模糊copy_paste对铁棍特别有效把标注好的铁棍抠出来贴到不同背景的皮带图上一张图能变出好几张正样本。但要注意粘贴后的标注框要同步更新且粘贴位置别太离谱比如贴到画面外。4.3 验证集评估别只看 mAP训练完跑验证yolo detect val \ modelbelt_run/exp1/weights/best.pt \ data/home/user/dataset/data.yaml \ imgsz960 \ conf0.25 \ iou0.5conf0.25是置信度阈值现场部署时这个值要按漏检和误报的容忍度调。验证输出里重点看Per-class的 recall 和confusion_matrix。如果tiegun大量被预测成background就是漏检如果background被预测成tiegun就是误报。前者调低conf或补数据后者调高conf或加负样本。另外验证集一定要包含不同光照白天/夜间/逆光、不同物料煤/矿石/粮食的图片否则指标没有参考意义。我见过只在白天煤堆场景训的模型晚上换成粮食输送直接崩掉。5. 传送带异物检测避坑5 个现场翻车记录5.1 标注框贴边导致训练报错现象训练启动后报Label class x is invalid或坐标越界。原因标注时框贴到图像边缘归一化后x_center ± width/2超出 0~1。解决写脚本遍历所有 label 文件把坐标 clip 到 [0,1]或者重新标注时留 1~2 像素边距。5.2 验证集 mAP 虚高上线就崩现象验证集 mAP50 0.92现场部署 recall 不到 0.5。原因同一段视频抽帧后随机划分相邻帧同时进训练和验证模型“见过”验证集。解决按视频段或时间段划分确保验证集和训练集来自不同时段、不同班次。5.3 铁棍 recall 始终上不去现象laji类 recall 0.85tiegun只有 0.4。原因铁棍像素少、样本少、增强不够。解决imgsz提到 960开copy_paste0.3单独统计铁棍样本数如果少于 500 张优先补采铁棍数据而不是调参。5.4 推理速度达不到产线要求现象训练指标很好但部署到工控机后单帧推理 200ms产线要求 50ms。原因模型太大或没做推理优化。解决换yolo11n.pt导出 ONNX 或 TensorRTimgsz降到 640开 FP16。实测 TensorRT FP16 比 PyTorch 原生推理快 2~4 倍。5.5 夜间或粉尘环境误报暴增现象白天正常夜间或粉尘大时误报率飙升。原因训练集缺少对应场景模型把粉尘光斑、反光当成异物。解决补采夜间和粉尘场景的负样本训练时加hsv_v扰动模拟亮度变化部署时加一个简单的帧间一致性过滤——连续 3 帧都检出同一位置才报警。6. 从训练到上线异物检测模型的导出、部署与阈值调优技巧模型训完只是开始真正决定这套方案值不值得投入的是部署后的稳定性和维护成本。导出 ONNXyolo export modelbelt_run/exp1/weights/best.pt formatonnx imgsz640 halfTruehalfTrue是 FP16 量化精度损失通常小于 1 个点速度提升明显。如果现场用 TensorRT再走一步yolo export modelbelt_run/exp1/weights/best.pt formatengine imgsz640 halfTrue device0部署时别直接把conf设死。我一般会做两级阈值conf_high0.6直接报警conf_low0.25到conf_high之间的送复核队列人工确认后把结果反馈回去做增量训练。这样既保证漏检少又不会让误报把操作员逼疯。还有一个实用技巧帧间投票。单帧检测容易受粉尘、水汽干扰连续 3~5 帧里同一位置出现 2 次以上才触发报警能砍掉大部分瞬时误报。实现上用一个简单的滑动窗口计数就行不需要复杂跟踪算法。最后说个我自己的习惯每次现场调完阈值我都会把当天的误报和漏检截图存下来按场景分类攒够 50 张就补进训练集重训一版。这套数据闭环跑起来之后模型在现场的 recall 从最初的 0.6 慢慢爬到 0.9 以上比任何一次性调参都管用。希望帮到你。本文还有配套的精品资源点击获取