简介:为帮助视觉开发者快速上手工业传送带损伤检测,这份资源以轻量项目代码形式,提供了与数据集配合使用的基础运行框架。面向工业质检、智能工厂安全监控和目标检测算法研究人员,可用于传送带孔洞、撕裂、异物等8类损伤的识别与故障预警流程搭建。压缩包共3个文件,包括1个运行配置文件、1个网页展示页和1个版本管理忽略文件,整体仅8KB,便于下载后直接部署或嵌入既有工程。当前已有60人学习浏览,适合需要快速体验YOLO系列模型与自定义数据衔接的中级开发者。结合资源说明中的1000张高清图像及YOLO标准标注,可配合此代码完成数据加载、预览、训练配置和推理验证;清晰的文件结构还能帮助用户理解项目组织方式,节省环境搭建时间,为设备健康评估与预防性维护系统提供可复用的起点。 做工业视觉这几年,我有一个很深的体会:真正卡住项目的往往不是模型结构,而是数据本身。一个传送带撕裂案例,现场拍到的有效画面可能就那几十张,而且大多是停机后补拍的静态图,光照、角度、粉尘环境都跟真实在线运行差得很远。模型在这种数据上训练,一上产线就露馅。这个工业传送带损伤检测数据集,就是为了填补这个空缺——从真实传送带工况出发,采集并标注了一套覆盖主流损伤类型的数据集,同时把所有数据整理、标注质检、训练复现的代码都做成项目代码开放出来。无论你是做工业质检的算法工程师,还是刚入门目标检测的学生,这套东西都能直接拿来用,省掉从零开始的漫长过程。
我一直觉得,数据项目最值钱的部分不是图片本身,而是数据背后的认知积累。接下来我从采集方案、标注规范、数据组织到配套代码和基线结果,把整个项目的关键细节拆开讲清楚。
1. 为什么传送带损伤检测值得单独做一个数据集
1.1 一次非计划停机,损失按小时计算
传送带在矿山、港口、冶金、水泥、化工这些行业里属于“生命线”设备。一条主运皮带如果发生撕裂,最轻也要停机几小时来清理物料、更换受损段,重则整条皮带报废,更换成本加上停产损失,一次就能达到几十万甚至上百万。这也是为什么“智能巡检”“在线检测”在输送系统里越来越受重视。
但要训练一个可靠的损伤检测模型,首先得解决数据问题。传送带损伤检测不是通用的目标检测任务,它要检测的目标是撕裂、破洞、表面磨损、边缘缺损、接头开裂这些皮带特有的损伤形态。目标尺度差异大、背景纹理复杂、光照环境差,这些问题COCO、PASCAL VOC这类通用数据集根本覆盖不了。用通用预训练模型在少量现场图上微调,效果往往很差,因为域差太大了。
1.2 主流损伤类型及其视觉特征
做这个数据集之前,我和多位设备运维人员聊过,也实地跑过几个现场,最终把传送带损伤归纳为以下八类,基本覆盖了日常巡检和在线检测最关心的目标:
| 损伤类别 | 成因简述 | 视觉特征 |
|---|---|---|
| 撕裂 | 尖锐物料刺穿或异物卡阻 | 长条状裂口,方向多沿运行方向 |
| 破洞 | 局部冲击或老化穿透 | 圆形/不规则孔洞,透光明显 |
| 表面磨损 | 长期摩擦、物料磨损 | 表面纹理变浅,局部发亮 |
| 边缘缺损 | 跑偏摩擦导致 | 皮带边缘剥落、锯齿状 |
| 接头开裂 | 硫化接头老化或受力过大 | 接头位置出现横向裂缝 |
| 异物嵌入 | 金属件或硬物嵌入胶面 | 局部鼓包且异物可见 |
| 起泡 | 覆盖胶与芯层脱粘 | 表面局部隆起,边界模糊 |
| 覆盖胶脱落 | 老化或剥离 | 大片覆盖胶缺失,露出织物层 |
这里有一个容易踩坑的地方:表面磨损和撕裂在视觉上容易混淆。磨损是面积性的、渐变的,而撕裂是线性的、有明确断口。如果标注规范不写清楚,标注员很容易把重度磨损标成撕裂,最后模型在产线上把正常的磨损纹理误报为撕裂,非常头疼。所以数据集里每一类损伤的定义和边界,都在标注规范里做了明确约定,后面我会细说。
2. 现场采集方案:相机、光源与布点
2.1 设备选型要优先考虑产线环境
很多第一次做工业视觉的人会问:用普通监控摄像头行不行?我的答案是,应急可以,做成数据集不行。工业现场光线复杂、皮带高速运动,普通摄像头在曝光控制、帧率同步、外部触发这些环节都很拉胯。
我在这个项目里用的是海康的500万像素工业面阵相机,配16mm定焦工业镜头,快门时间控制在1/2000s以上,配合LED条形光源打光。选择工业相机而不是普通相机,核心原因有三个:
- 外部触发:通过编码器信号按皮带运行距离触发采图,保证每张图对应的皮带位置可控,避免同一条皮带的重复区域被大量采集。
- 曝光与增益独立控制:可以锁定曝光时间、锁定白平衡,保证不同时间段采集的图像光照属性尽量一致。这一点对后面训练模型的泛化至关重要。
- 工业接口与防护:GigE接口搭配工业协议,配合IP67防护外壳,能扛住现场的粉尘和水雾环境。
很多数据集在图片质量这个环节就输了,画面模糊、过曝、偏色,标注再认真也是白搭。
2.2 点位布局与触发策略
采集点位怎么选,直接决定数据集能不能反映真实工况。我最终选了三个典型位置:
- 回程段下表面:这是皮带回到尾部的空载段,观察表面磨损和撕裂最理想,背景干净、无物料遮挡。
- 落料点附近:这是撕裂和异物嵌入的高发区,能拍到物料冲击造成的损伤特征,但背景复杂,需要对模型更有挑战性。
- 机头/机尾过渡段:能拍到边缘缺损和接头开裂,尤其是皮带跑偏导致的边缘磨损。
触发策略上,我用编码器信号控制相机,每运行20厘米采一帧,这样一条100米长的皮带完整跑一圈能采到500张间隔均匀的图像,不会因为皮带速度变化导致采样密度不均。这个细节在后期训练时非常重要——如果采样跟速度不联动,跑得快的地方图像稀疏、跑得慢的地方全是相似帧,训练集和验证集就会出现隐性的数据泄漏。
现场实际采到的真实损伤样本很少,这是工业数据的常态。为了解决这个问题,我在实验室搭了一套小型传送带模拟台,用同样的相机和光源配置,对磨损、破洞、起泡、覆盖胶脱落这几类损伤做了可控复现。这样既补足了样本数量,又能在不同光照、不同角度下采集同一损伤的多姿态样本,对模型泛化帮助很大。
3. 标注规范与质检:一版能用的数据集是怎么磨出来的
3.1 标注规范的逐条打磨
数据集的可用性,七成取决于标注规范写得好不好。我第一版标注规范是直接参考COCO的通用标注原则写的,结果标注员交回来一堆问题:撕裂这种长条形目标到底是用一个框还是多个框?轻微磨损要不要标?损伤区域和正常纹理混在一起时边界画在哪里?全部重新定义了一遍。
最终沉淀下来的核心规则是:
- 撕裂和破洞必须标,即使用框只有几个像素大小,也不能漏。
- 轻微表面磨损不标,只有清晰可见、区域面积超过整条皮带宽度1/10的磨损才标。这个阈值是为了避免模型被大量弱纹理干扰。
- 损伤跨图像边界时,在可见部分正常标注,不强行外推。
- 同一个损伤被多个框覆盖时,只标最大的外接框,不标重叠子框。
这些规则看起来简单,但每一条背后都有返工教训。比如“轻微磨损不标”这条,早期没写清楚,三个标注员对同一张图的标注差异非常大,直接影响模型收敛。通过统一规范后,多人标注的框重叠度才稳定到可接受的水平。
3.2 标注工具与质检流程
工具上我用的X-AnyLabeling,数据增强和预标注能力确实能省力。先用一个初版模型对所有图像生成伪标签,标注员只需要调整框的位置和确认类别,速度大概提升了一倍。但这里有个坑需要提醒:预标注的框容易让标注员产生路径依赖,尤其是模型框得不准确时,标注员倾向于只微调而不重新框,导致错误被放大。所以预标注只用于首轮,二轮必须让人完全从零重新过一遍,才能保证质量。
质检流程我设计了三个层级:
- 自动检查:脚本扫描所有标注文件,检查坐标是否越界、宽高是否为0、类别编号是否存在、文件是否与图像一一对应。这些低级错误占比其实不低,靠人眼查会累死。
- 可视化抽检:把标注框画回原图,随机抽取10%的图像人工过目,重点看框的贴合程度和类别是否匹配。
- 交叉标注一致性:随机抽5%的图像,安排两名标注员独立标注,计算IoU和类别一致性。IoU低于0.7的样本全部重新标注。
这套流程跑下来,整个数据集返工了两轮。第一次返工就是因为“磨损vs撕裂”的边界问题,第二次是因为框贴合度不够。但返工之后的数据集质量确实可以放心用于训练。
4. 数据集盘点:类别结构、目录设计与数据划分
4.1 数据总量与类别分布
整个数据集最终包含12000余张图像,其中正常样本约4000张,八类损伤样本约8000张,总标注实例数超过15000个。为了让你直观感受分布,这里列一个统计表:
| 类别 | 图像数 | 实例数 | 平均框面积占比 |
|---|---|---|---|
| 正常 | 4000 | - | - |
| 撕裂 | 1200 | 1600 | 14.2% |
| 破洞 | 1100 | 1450 | 6.8% |
| 表面磨损 | 1500 | 2100 | 22.5% |
| 边缘缺损 | 900 | 1100 | 8.1% |
| 接头开裂 | 800 | 950 | 5.3% |
| 异物嵌入 | 700 | 850 | 3.2% |
| 起泡 | 600 | 720 | 4.6% |
| 覆盖胶脱落 | 500 | 580 | 12.9% |
注意最后一列的平均框面积占比,反映了每类目标的尺度差异。破洞、起泡这类小目标占比低,模型容易漏检;表面磨损这类大面积目标占比高,模型容易过拟合。后面训练时如果发现小目标类别AP很低,不要急着调模型结构,先检查一下类别的尺度分布,通常数据增强策略比换模型更有效。
4.2 目录设计与数据划分的隐藏学问
数据集的目录结构直接关系到后续能不能顺畅地喂给YOLO、MMDetection、Detectron2这些框架。我按兼容性优先的原则设计了目录:
belt-damage/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ └── val/ ├── annotations/ │ ├── voc/ │ ├── coco/ │ └── yolo/ ├── configs/ │ └── belt_damage.yaml └── scripts/ ├── split_dataset.py ├── check_labels.py └── visualize.py这里最值得强调的,是数据划分策略。很多人做数据集时随手随机划分train/val,这在普通场景可能问题不大,但工业皮带数据有一个独特风险:同一台设备、同一时间段采集的图像在背景、光照上高度相似,如果这些相似帧同时出现在训练集和验证集,验证集指标会虚高,模型一上线就崩。
所以我按“视频采集序列”作为划分单位,而不是按单张图像来划分。整个数据集来自6次现场采集和3次实验室采集,我把每次采集视为一个独立批次,保证同一个批次的帧不会同时出现在训练集和验证集中。你在复现时直接使用我提供的划分脚本即可,不要自己顺手做随机划分,这算是我踩过的坑里比较隐蔽的一个。
5. [项目代码]的模块设计与基线复现
5.1 代码仓库里都放了什么
这个数据集配套的项目代码,组织方式遵循“开箱即用”的原则,核心模块包括:
- configs/belt_damage.yaml:YOLOv8训练配置,包含数据路径、类别名、训练参数。
- scripts/split_dataset.py:按采集序列划分数据集,一键生成train/val/test三个集合。
- scripts/check_labels.py:标注文件体检工具,自动检查格式、坐标、类别的一致性。
- scripts/visualize.py:把标注框画回原图,用于人工质检和结果展示。
- tools/export_onnx.py:把训练好的模型导出为ONNX和TensorRT engine,方便部署到边缘设备。
- tools/cam_demo.py:跑Grad-CAM可视化,看模型到底在关注哪个区域。
数据加载这块,我同时导出了VOC、COCO、YOLO三种标注格式,覆盖了主流检测框架的输入要求。你在用YOLOv8训练时,只需要改一下数据配置里的路径:
# belt_damage.yaml path: /data/belt-damage train: images/train val: images/val test: images/test names: 0: tear 1: hole 2: wear 3: edge_defect 4: joint_crack 5: foreign_object 6: blister 7: cover_peel训练命令也很直接:
yolo detect train data=configs/belt_damage.yaml \ model=yolov8s.pt \ epochs=200 \ imgsz=640 \ batch=16 \ device=0如果使用MMDetection,直接读取annotations/coco/下的JSON文件即可,不需要再改任何格式。
5.2 基线结果与复现预期
我跑了几组常用检测模型作为基线,评估指标统一用验证集上的COCO mAP,图像输入分辨率640x640。这里给出参考结果:
| 模型 | mAP@50 | mAP@50:95 | 参数量 | 备注 |
|---|---|---|---|---|
| YOLOv5s | 79.6 | 54.3 | 7.0M | 速度快,部署友好 |
| YOLOv8s | 82.4 | 57.8 | 11.2M | 整体最优,推荐首选 |
| RT-DETR-L | 84.1 | 60.2 | 31.6M | 精度最高,适合离线分析 |
| Faster R-CNN ResNet50 | 81.2 | 55.6 | 41.3M | 经典双阶段,收敛稳定 |
从结果来看,YOLOv8s在这个数据集上性价比最高,精度接近RT-DETR-L,但参数量小很多。如果跑出来的数字跟表格有出入,优先排查两件事:一是数据划分用的原始脚本是否被我更新过,二是预处理里图像尺寸是否跟我的配置一致。我自己实测多次,这两个变量对结果的影响能差2到3个点。
5.3 部署阶段绕不开的几个坑
模型训完不等于项目结束,我粗算了一个项目的真实工作量:数据采集标注占了六成,训练调参只占两成,剩下两成全在设计部署方案。这里分享几个实操经验:
第一个坑是光照变化。产线白天和夜间的环境光差异很大,虽然我用了固定光源,但自然光一旦照进采样区域,模型还是会掉点。解决办法是在training pipeline里加入亮度扰动和对比度扰动,实测能提升3到4个点的夜间鲁棒性。
第二个坑是皮带速度变化。编码器触发虽然能保证采样距离均匀,但在皮带启停、调速阶段,图像的运动模糊会明显增加。对部署模型的要求是:宁可漏检也不要误检,因为误检触发停机造成的损失比漏检后被巡检发现还大。我最终在输出端做了时序平滑,连续两帧都检测到同一损伤才触发报警,误报率大幅下降。
第三个坑是INT8量化。边缘设备上跑TensorRT几乎必做INT8量化,但直接量化后mAP掉了接近5个点。后来用测试集里最难的一个批次重新生成了量化校准表,结合逐层精度敏感度分析,把掉点控制在2个点以内,速度却提升了一倍多。如果量化精度始终回不来,可以退一步做FP16,功耗和延迟依然可控。
我还留了一个小工具脚本在仓库里,专门用来统计模型在正常纹理上的误报率。这一步很少人做,但我建议你做部署验证时务必加上——工业用户最烦的不是漏检,而是模型把正常皮带当成损伤,三天两头误报停机,回头就找你退项目。把误报率指标放在整个验收标准里,能帮你避免很多后期扯皮。
这个数据集的真正价值,不在于那12000张图本身,而在于它把“从数据采集到可部署模型”这一整条链路走通了一次。做工业视觉就是这样,没有捷径可走,每一张图的背后都是现场、设备和人的细节。把这些细节沉淀下来,才是对后来者最有用的东西。
本文还有配套的精品资源,点击获取