资讯详情

资讯详情

传送带皮带破损检测数据集:700张原图与YOLOv8标注实战指南

简介本数据集面向工业质检与机器视觉方向的开发者、算法工程师及高校研究人员聚焦传送带皮带表面破损缺陷的自动识别任务可用于训练与验证目标检测模型帮助解决人工巡检效率低、漏检率高等问题。资源包共1401个文件包含700张jpg原始图像、700个txt标注文件及1个yaml配置文件压缩包约68.75MB图像与标注一一对应yaml文件用于定义数据集路径与类别信息可直接接入YOLOv8训练流程。目前已有616人学习下载具备一定参考热度。标注覆盖传送带皮带上的破损缺陷区域适合用于缺陷检测模型的训练、微调与性能评估也可作为工业场景下数据标注格式转换与增强实验的基础素材便于快速搭建可复现的检测基线。1. 传送带皮带破损检测数据集700 张原图与 YOLOv8 标注到底能跑出什么传送带皮带破损检测这个场景真正卡住人的往往不是模型结构而是数据。现场皮带撕裂、划伤、边缘磨损的样本分布极不均衡负样本正常皮带又占绝大多数自己从零拍图、标注、清洗一套流程走下来少说两周。这份数据集直接给了 700 张原始图片全部按 YOLOv8 格式完成标注目标类别就是传送带上的破损缺陷拿到手就能接进ultralytics训练管线。它适合三类人想快速验证皮带缺陷检测可行性的算法工程师、需要给工控机或边缘盒子做 PoC 的落地开发者、以及拿它当目标检测练手但不想在标注上耗时间的学生。需要说清楚的是700 张属于小规模数据集它的价值在于「跑通链路、验证方向」而不是直接上线替代人工巡检。下面从数据组织、训练配置、坑位排查一路拆到进阶技巧尽量让你照着就能复现。2. 数据集结构与 YOLOv8 标注格式先看懂再动手2.1 目录组织与标签文件长什么样YOLOv8 的检测数据集遵循一套很固定的目录约定ultralytics在训练时会按这个结构去找图和标签。常见做法是拆成images和labels两个平行目录各自再分train、val文件名一一对应图片是xxx.jpg标签就是同名的xxx.txt。这份 700 张的数据集通常按 8:2 或 7:3 划分也就是训练集约 560 张、验证集约 140 张具体划分以你拿到的实际目录为准。dataset/ ├── images/ │ ├── train/ # 训练图片约 560 张 │ └── val/ # 验证图片约 140 张 ├── labels/ │ ├── train/ # 与 train 图片同名的 .txt │ └── val/ └── data.yaml # 数据集描述文件标签文件里每一行代表一个目标框格式是class_id x_center y_center width height后四个值都是归一化到 0~1 的相对坐标不是像素值。这一点是新手最容易翻车的地方如果你拿 LabelImg 或 CVAT 导出的 Pascal VOC 格式绝对像素坐标的 xmin/ymin/xmax/ymax直接改名成.txt训练时框会全部错位甚至跑到图外。这份数据集既然标注为 YOLOv8 格式理论上已经是归一化坐标但接手后仍建议抽查几个文件确认。2.2 data.yaml 怎么写路径为什么总报错data.yaml是训练入口写错路径是最常见的启动失败原因。它至少包含训练/验证路径、类别数和类别名# data.yaml path: /home/user/dataset # 数据集根目录建议写绝对路径 train: images/train # 相对 path 的训练图目录 val: images/val # 相对 path 的验证图目录 nc: 1 # 类别数皮带破损通常只有一类 names: 0: damage # 类别名按你数据集实际命名替换逻辑说明path是根train和val是相对根的路径ultralytics会把两者拼起来找图。参数上nc必须和标签里出现的最大class_id 1一致如果标签里只有0那nc就是 1写成 2 而标签里没有类别 1训练不会立刻报错但评估指标会失真。names的键要和class_id对齐顺序错了不影响训练但影响你读结果。很多人把train直接写成绝对路径同时又保留了path结果路径被拼了两次导致找不到文件——要么全用相对要么train/val直接写绝对路径并删掉path别混着来。2.3 标注质量自查三行脚本筛出坏样本700 张里混进几个坏标签很常见训练前花两分钟筛一遍能省下后面几小时的困惑。下面这段脚本检查标签是否越界、是否为空、坐标是否异常import os, glob label_dir dataset/labels/train bad [] for f in glob.glob(os.path.join(label_dir, *.txt)): with open(f) as fp: lines [l.strip() for l in fp if l.strip()] if not lines: # 空标签文件 bad.append((f, empty)) continue for l in lines: parts l.split() if len(parts) ! 5: # 字段数不对 bad.append((f, field_count)) break cls, x, y, w, h parts vals list(map(float, [x, y, w, h])) if any(v 0 or v 1 for v in vals): # 归一化坐标越界 bad.append((f, out_of_range)) break if float(w) 0 or float(h) 0: # 宽高非正 bad.append((f, zero_size)) break print(f可疑标签 {len(bad)} 个) for f, reason in bad[:20]: print(reason, f)逻辑说明逐行读标签先排除空文件再校验字段数是否为 5、坐标是否落在 0~1、宽高是否为正。参数上label_dir换成你的实际路径即可验证集同理再跑一遍。命中out_of_range的样本要么是标注工具导出格式不对要么是人工拖框拖出了边界这类样本建议直接剔除或重标别指望模型自己扛过去。3. 用 YOLOv8 训练皮带破损检测从环境到第一轮结果3.1 环境配置与依赖版本ultralytics现在装起来很省事但版本和 PyTorch、CUDA 的匹配仍是玄学高发区。我一般先确认显卡驱动和 CUDA 版本再决定装哪个 torch。GTX 1660 Ti 这类卡跑 700 张的小数据集完全够用显存 6G 也能撑住imgsz640、batch8左右的配置。# 建议在独立虚拟环境里操作避免污染全局 python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate # 先装匹配你 CUDA 的 torch再去官网复制对应命令 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 # 再装 ultralytics pip install ultralytics # 验证环境和 GPU 是否可见 yolo checks逻辑说明yolo checks会打印ultralytics版本、Python 版本、torch 版本以及 CUDA 是否可用。参数上cu121对应 CUDA 12.1你要按自己驱动支持的版本换。如果yolo checks里 CUDA 显示不可用先别急着改代码八成是 torch 装成了 CPU 版重装带cu后缀的 wheel 即可。这一步没确认就开训最后发现跑在 CPU 上700 张也能让你等到怀疑人生。3.2 训练命令与关键参数怎么设环境通了之后训练本身一条命令就能起。关键是几个参数要按小数据集的特性调不能照搬 COCO 那套。yolo detect train \ datadataset/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch8 \ lr00.01 \ patience30 \ projectruns/belt \ nameexp1逻辑说明modelyolov8n.pt用 nano 版预训练权重700 张数据量下大模型极易过拟合n 版是稳妥起点。epochs100配合patience30意思是 30 轮验证指标不提升就早停避免无效等待。lr00.01是初始学习率小数据集可以比默认略低一点更稳。imgsz640是输入分辨率皮带破损如果是细长划痕可以试imgsz960提升小目标召回但显存和速度要重新权衡。batch8是显存和梯度稳定性的折中6G 显存下如果 OOM 就降到 4。project和name决定结果落盘位置方便你多组实验对比。3.3 训练过程看什么损失曲线与指标解读训练起来之后别只盯着进度条runs/belt/exp1/下会生成results.csv和一堆曲线图。重点看三个东西box_loss是否稳定下降、mAP50是否在验证集上爬升、以及训练损失和验证损失是否开始背离。前两者正常说明在学第三者背离就是过拟合的信号。import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(runs/belt/exp1/results.csv) df.columns [c.strip() for c in df.columns] # 列名可能带空格 plt.plot(df[epoch], df[train/box_loss], labeltrain_box) plt.plot(df[epoch], df[val/box_loss], labelval_box) plt.plot(df[epoch], df[metrics/mAP50(B)], labelmAP50) plt.legend(); plt.xlabel(epoch); plt.show()逻辑说明results.csv每轮一行列名带train/、val/、metrics/前缀。参数上如果val/box_loss在后期持续上升而train/box_loss还在降说明模型开始背训练集这时候要么早停、要么加数据增强。700 张的规模下mAP50能到 0.7 以上通常就算这个数据集的上限区间了具体取决于破损目标的清晰度和标注一致性别拿 COCO 的 0.9 去对标。4. 避坑与排查皮带破损检测训练里最容易翻车的五件事4.1 现象训练启动就报 “No labels found”原因data.yaml里的train/val路径拼出来指向了不存在的目录或者labels目录名被写成了label、labels_txt之类。ultralytics找标签时会按图片路径把images替换成labels再找同名.txt目录名不一致就直接判定无标签。解决先手动ls一下data.yaml里pathtrain拼出来的目录确认图片在再确认同级有labels目录且文件名与图片一一对应。路径里带中文或空格也容易出问题尽量用纯英文路径。4.2 现象训练正常但框全画在左上角或错位原因标签不是归一化坐标而是像素坐标。常见于把 VOC 的 XML 直接转成 txt 却没做归一化或者归一化时除错了基准应该除以图片宽高不是除以 640。解决抽查一个标签文件把x_center乘以图片宽度看落点是否在目标上。如果明显偏大就是没归一化。重新用脚本按x_center (xmin xmax) / 2 / img_w这类公式转一遍。4.3 现象mAP 一直上不去验证集几乎全漏检原因类别数nc和标签里的class_id对不上或者验证集和训练集分布差异过大比如验证集全是某种罕见破损。也有可能是标注框过松把大量背景框了进去。解决先确认nc与标签最大类别号一致再可视化几张验证集预测结果看是漏检还是框歪。如果是标注框过松回看标注规范破损框应紧贴缺陷边缘别把整段皮带都框进去。4.4 现象显存 OOM训练中途崩原因batch或imgsz超过显存上限或者workers开太多导致内存也吃紧。6G 显存跑imgsz960、batch16基本必崩。解决优先降batch到 4 或 2再考虑降imgsz。workers在 Windows 上建议设 0 或 2Linux 上可以到 8但别超过 CPU 核数。开了cacheTrue会把图片缓存进内存小数据集能加速但内存小的机器要关掉。4.5 现象训练集指标很高换现场图就废原因700 张的规模决定了模型泛化能力有限如果原始图片都来自同一台传送带、同一光照条件模型学到的是「这台设备的背景」而不是「破损本身」。解决训练时开足数据增强hsv_h、hsv_s、hsv_v、mosaic、flipud都打开模拟光照和角度变化。上线前务必用另一台设备或另一时段的图片做一次独立测试别拿验证集指标当现场指标。5. 进阶小数据集下的增强策略与部署前验证700 张要榨出可用模型数据增强和验证方法比换模型更管用。默认增强里mosaic1.0会把四张图拼一张对小数据集提升明显但训练后期建议关掉close_mosaic10最后 10 轮关闭让模型在真实分布上收尾。颜色增强hsv_h0.015、hsv_s0.7、hsv_v0.4能模拟现场光照波动皮带场景尤其受用。几何上degrees10、translate0.1、scale0.5覆盖拍摄角度和距离变化。如果破损以细长划痕为主把imgsz提到 960 往往比换更大的模型更有效。yolo detect train \ datadataset/data.yaml \ modelyolov8n.pt \ epochs150 \ imgsz960 \ batch4 \ hsv_h0.015 hsv_s0.7 hsv_v0.4 \ degrees10 translate0.1 scale0.5 \ mosaic1.0 close_mosaic10 \ projectruns/belt nameexp2_aug逻辑说明这组参数针对小数据集和细长缺陷做了倾斜。close_mosaic10让最后 10 轮用未拼接的原图训练减少拼接带来的边界伪影。imgsz960提升小目标分辨率代价是显存和推理耗时上升部署到边缘设备时要重新评估帧率。部署前验证别只看mAP要落到具体漏检率和误检率上。用验证集跑一次预测导出混淆矩阵和 PR 曲线yolo detect val \ modelruns/belt/exp2_aug/weights/best.pt \ datadataset/data.yaml \ imgsz960 \ conf0.25 \ plotsTrue逻辑说明conf0.25是置信度阈值低于它的框不计入。参数上工业场景通常更怕漏检可以适当降conf换召回再靠后处理或人工复核兜底。plotsTrue会生成 PR 曲线和混淆矩阵重点看破损类的召回是否够高、正常皮带是否被误判成破损。验证项关注指标可接受参考破损召回recall(damage)越高越好漏检代价大误检正常样本被判破损的比例越低越好减少无效告警推理速度单张耗时 / FPS按现场节拍要求定小目标细长划痕是否检出结合 imgsz 调整最后说个血泪经验我早期拿这类小数据集训完看到验证集mAP500.85 就以为稳了结果换到另一条产线的图上漏检一片。从那以后我每次拿到新数据集都强制先做一次跨设备独立测试再谈指标。这份 700 张的皮带破损数据集价值在于让你用最低成本把「数据→训练→验证」这条链路走通把坑提前踩一遍。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →