
简介这份资源面向工业视觉质检与智能工厂安全监控方向的开发者与研究人员提供一套可直接用于目标检测训练的传送带损伤数据集帮助解决工业场景下损伤样本稀缺、标注不规范的问题。数据集包含1000张高清工业传送带图像覆盖孔洞、撕裂、异物等8种损伤类别标注遵循YOLO标准格式可无缝对接YOLOv8等主流检测模型用于训练传送带运行状态的实时感知与故障预警系统。压缩包共3个文件以inscode项目配置、html说明页和gitignore为主整体约8KB属于轻量级项目代码包便于快速拉取与部署。资源同时给出训练集与验证集划分建议及配置文件示例目录结构清晰读者可据此直接搭建实验流程省去前期数据整理成本。目前已有63人学习关注适合希望快速验证工业损伤检测算法、构建预防性维护方案的中初级开发者参考使用。1. 工业传送带损伤检测数据集从“能跑”到“敢上线”的那道坎工业传送带损伤检测数据集说白了就是给皮带机做“体检”的图像弹药库。我在某矿区做巡检机器人方案时最头疼的不是模型选型而是现场跑一周就翻车——光照一变、煤灰一盖昨天还 0.92 的 mAP 直接掉到 0.6。后来复盘发现根因不在网络结构而在数据集本身撕裂、划伤、破损这几类缺陷的样本极度不均衡背景又全是重复的托辊和支架纹理模型学到的其实是“背景捷径”。这个标题背后真正要解决的问题是让损伤检测从实验室 demo 变成能扛住粉尘、水汽、振动和光照漂移的产线工具。适合两类人一是手里有巡检图像但不知道怎么组织成训练集的算法工程师二是想把皮带撕裂预警做进现有 PLC 或上位机系统的集成开发者。接下来我按“数据怎么造、模型怎么训、坑怎么避”的顺序把可复现的路径拆开讲。2. 损伤数据集怎么造采集、标注与增强的取舍2.1 先定缺陷分类再决定采什么图工业传送带损伤检测数据集的第一步不是拍图而是把缺陷定义收敛到可标注、可复现的粒度。常见做法是分四级纵向撕裂长度大于 50mm 的贯穿裂口、边缘磨损皮带边缘 30mm 内的材料缺失、表面划伤深度小于 2mm 的浅层沟痕、接头开裂硫化接头处的分离。这四类在视觉上差异明显标注员不容易混淆。我一般会先出一份标注手册每类配 5 张典型图和 3 张易混图比如把“边缘磨损”和“正常边缘毛边”放在一起对比标注一致性能从 70% 拉到 90% 以上。采集端要注意三个变量相机安装角度、光源类型、皮带速度。相机建议用 30° 到 45° 俯角正对皮带表面避免托辊遮挡光源用条形白光 LED 加漫射板别用环形光环形光会在潮湿皮带上打出镜面反射把划伤特征淹掉。皮带速度超过 3m/s 时快门要压到 1/2000s 以下否则运动模糊会让细划伤糊成一片。这些参数不是拍脑袋是我在某输送线现场用不同组合跑了 2000 张图后对比出来的。2.2 标注格式与目录结构一次定好后面少返工标注格式我推荐直接用 YOLO 的 txt 格式每行class_id x_center y_center width height归一化到 0 到 1。原因是后续做增强、切图、转 COCO 都方便而且大多数训练框架原生支持。目录结构按下面这样组织别把所有图堆一个文件夹dataset/ ├── images/ │ ├── train/ # 训练集图像约 70% │ ├── val/ # 验证集图像约 20% │ └── test/ # 测试集图像约 10% ├── labels/ │ ├── train/ # 与 images/train 一一对应的 txt │ ├── val/ │ └── test/ └── data.yaml # 数据集配置文件data.yaml内容如下路径按实际改path: ./dataset train: images/train val: images/val test: images/test nc: 4 names: [tear, edge_wear, scratch, joint_crack]这里有个血泪经验train 和 val 必须按“时间段”或“皮带段”划分不能随机抽。随机抽会导致同一段皮带的不同帧同时出现在训练和验证里验证指标虚高上线就露馅。我一般按采集日期切比如前 5 天做训练第 6 天做验证第 7 天做测试。2.3 增强策略别把划伤增强没了工业场景的增强和自然图像不一样翻转、旋转要慎用。水平翻转对纵向撕裂是安全的但垂直翻转会让“边缘磨损”跑到皮带中间语义就错了。我常用的增强组合是随机亮度对比度扰动±20%、高斯噪声sigma 0.01 到 0.03、轻微透视变换±5°、随机遮挡模拟煤灰遮挡遮挡面积不超过 10%。Mosaic 增强可以用但概率别超过 0.3否则小目标划伤会被拼丢。import albumentations as A train_transform A.Compose([ A.RandomBrightnessContrast(brightness_limit0.2, contrast_limit0.2, p0.7), A.GaussNoise(var_limit(0.01, 0.03), p0.5), A.Perspective(scale(0.02, 0.05), p0.3), A.CoarseDropout(max_holes8, max_height32, max_width32, p0.3), A.HorizontalFlip(p0.5), ], bbox_paramsA.BboxParams(formatyolo, label_fields[class_labels]))这段代码里CoarseDropout模拟煤灰遮挡Perspective模拟相机安装偏差HorizontalFlip只做水平不做垂直。参数p是触发概率别全设 1.0否则每张图都被增强原始分布就丢了。验证集和测试集不做增强只做 resize。3. 模型训练与调参从 baseline 到可部署3.1 选 YOLOv8 还是 Faster R-CNN先看推理延迟工业传送带损伤检测数据集上我优先选 YOLOv8n 或 YOLOv8s。原因很直接产线巡检要么跑在边缘盒子如 Jetson 系列要么跑在工控机上推理延迟必须压到 50ms 以内。Faster R-CNN 精度可能高 1 到 2 个点但延迟翻三倍现场等不起。如果缺陷面积极小比如小于 32×32 像素可以在 YOLOv8 基础上加一个 P2 小目标检测头代价是速度降 15% 左右。训练命令如下关键是imgsz和batch的配合yolo detect train \ datadataset/data.yaml \ modelyolov8s.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ lrf0.01 \ patience30 \ device0 \ projectruns/belt \ nameexp_v1imgsz640是精度和速度的平衡点如果划伤特别细可以提到 960但 batch 要降到 8 防止显存溢出。patience30表示 30 轮没提升就早停省时间。lr00.01是初始学习率lrf0.01是最终学习率系数余弦退火到 0.0001。3.2 类别不均衡怎么破重采样加损失加权撕裂样本通常只占 5% 到 10%直接训会让模型偏向背景。我一般两步走一是对训练集做重采样把撕裂类图像复制 2 到 3 倍但只复制图像不复制标注配合增强生成不同变体二是在损失里给撕裂类更高权重。YOLOv8 默认用 BCE 分类损失可以通过自定义cls_pw参数调整或者直接在数据集层面做。# 统计各类别实例数计算权重 import os from collections import Counter label_dir dataset/labels/train counter Counter() for f in os.listdir(label_dir): with open(os.path.join(label_dir, f)) as fp: for line in fp: cls_id int(line.split()[0]) counter[cls_id] 1 total sum(counter.values()) weights {k: total / (len(counter) * v) for k, v in counter.items()} print(weights) # 例如 {0: 3.2, 1: 0.8, 2: 1.1, 3: 2.5}算出来的权重可以传给自定义损失函数或者在采样时按权重决定复制次数。注意别过度重采样否则验证集上撕裂的误报率会飙升现场工人会被频繁报警搞烦。3.3 验证指标怎么看mAP 之外还要看单类召回训练日志里mAP50和mAP50-95是常规指标但工业场景我更关注单类召回率尤其是撕裂类。因为漏报一次撕裂可能导致皮带断裂停机损失按小时算。验证时用下面命令导出每类指标yolo detect val \ modelruns/belt/exp_v1/weights/best.pt \ datadataset/data.yaml \ imgsz640 \ conf0.25 \ iou0.5 \ save_jsonTrueconf0.25是置信度阈值现场可以调到 0.15 提高召回代价是误报增多。save_jsonTrue会输出每张图的预测结果方便做误报分析。我一般会把验证集里所有漏报的撕裂图单独挑出来看八成是光照过暗或煤灰遮挡回头补这类样本再训一轮。4. 避坑与排查现场翻车的五个真实记录4.1 现象验证集 mAP 0.9现场跑一周掉到 0.5原因数据集采集时皮带是空载现场是满载煤块覆盖了部分划伤模型没见过这种遮挡。解决补采满载工况图像至少占训练集 30%并在增强里加随机遮挡模拟煤块。别指望模型自己泛化工业场景的分布漂移比自然图像猛得多。4.2 现象模型把托辊阴影识别成撕裂原因托辊在皮带下方形成的条状阴影和纵向撕裂纹理相似标注时没把这类负样本单独标出来。解决在训练集里加入 200 张以上纯背景图无缺陷让模型学会“没有缺陷”的类别。YOLO 里可以加一个background类或者直接用空标注图但空标注图比例别超过 15%。4.3 现象训练 loss 震荡不收敛原因学习率太大或者 batch 太小导致梯度噪声大。解决先把lr0降到 0.001 试 20 轮如果 loss 平稳下降再逐步加回。batch 至少 8显存不够就降imgsz到 512别硬撑 640 配 batch 4。4.4 现象推理时同一张图多次预测结果不一致原因没开deterministic模式或者用了随机增强的 TTA。解决推理时设augmentFalse并在代码里固定随机种子。工业系统要的是可复现不是每次跑都不一样。4.5 现象边缘盒子部署后帧率只有 5 FPS原因模型导出时没做量化或者用了 FP32 推理。解决用 TensorRT 做 FP16 或 INT8 量化YOLOv8s 在 Jetson 上能跑到 30 FPS 以上。量化校准集要从训练集里抽 500 张覆盖各类缺陷和背景否则精度掉得厉害。5. 进阶技巧用切片推理把细划伤召回拉高 12 个点细划伤在 640 分辨率下可能只占 10×10 像素模型很容易漏。我后来用切片推理SAHI解决把原图切成 4×4 的 512×512 小块每块单独推理再合并结果。代价是推理时间增加 3 到 4 倍但撕裂和划伤的召回率从 0.78 拉到 0.90。具体做法是用sahi库包一层from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction detection_model AutoDetectionModel.from_pretrained( model_typeyolov8, model_pathruns/belt/exp_v1/weights/best.pt, confidence_threshold0.2, devicecuda:0 ) result get_sliced_prediction( test_image.jpg, detection_model, slice_height512, slice_width512, overlap_height_ratio0.2, overlap_width_ratio0.2 ) result.export_visuals(export_diroutput/)overlap_height_ratio0.2表示相邻切片重叠 20%防止缺陷被切在边界上。confidence_threshold0.2比常规低因为切片后每块背景更简单可以适当放宽。合并时用 NMS 去重IoU 阈值设 0.5。这个方案适合离线巡检或对实时性要求不高的场景如果产线要求 30 FPS 以上还是得用整图推理加小目标头。另一个技巧是“难例挖掘闭环”每次现场误报或漏报的图自动回传到训练集每周重训一次。我一般写个脚本监控推理日志把置信度在 0.1 到 0.3 之间的预测图挑出来人工复核确认是漏报就补标注。坚持三个月模型在特定产线的 mAP 能从 0.72 稳到 0.89。这个习惯比换任何新模型都管用希望帮到你。本文还有配套的精品资源点击获取