
简介本资源为面向工业质检与计算机视觉方向的塑料瓶缺陷目标检测数据集适用于YOLO系列模型训练与算法验证可帮助读者快速搭建缺陷检测实验环境。数据按YOLOv5标准目录结构组织已划分训练集、验证集与测试集包含凹陷、缺口、扭曲三类缺陷标签为YOLO格式txt文件可直接投入检测任务使用。压缩包共约2000个文件以1999个txt标注文件与1个Python可视化脚本为主整体约117MB其中txt文件承载图像标注信息py脚本可随机读取图片并绘制边界框无需修改即可运行查看标注效果。目前已有91人学习下载适合需要真实缺陷样本进行模型训练、数据增强或改进实验的开发者参考配套的YOLOv5改进实战内容也可为后续调优提供思路。1. 塑料瓶缺陷检测数据集从拿到手到跑通第一轮训练产线上塑料瓶的凹陷、缺口、扭曲这三类缺陷靠人眼在高速传送带上盯漏检率随班次直线上升。这份资源就是冲着这个场景来的一套已经按 YOLO 格式标注并划分好的塑料瓶缺陷图像数据集类别数为 3训练集约 3200 张、验证集约 130 张、测试集约 60 张每张图片配一个同名 txt 标签目录结构直接对齐 YOLOv5 的images/labels约定还附带一个可视化脚本show.py随机传一张图就能把边界框画出来存到当前目录。适合两类人一是想快速验证缺陷检测方案可行性的算法工程师二是拿它当 YOLO 训练流程练手、需要一份真实工业缺陷数据的学生和转行者。下面按「数据长什么样 → 怎么接进训练 → 坑在哪 → 怎么验证」的顺序拆开讲。2. 数据集结构与 YOLO 标注格式先看懂再动手2.1 目录布局与文件命名这份数据按 YOLOv5 的标准文件夹组织常见形态是这样plastic_bottle_defect/ ├── images/ │ ├── train/ # 约 3200 张 jpg │ ├── val/ # 约 130 张 jpg │ └── test/ # 约 60 张 jpg ├── labels/ │ ├── train/ # 与 train 图片同名的 txt │ ├── val/ │ └── test/ ├── classes.txt # 三行凹陷、缺口、扭曲 └── show.py # 可视化脚本图片名带TicketID-xxxx-...jpg这种前缀是采集工单号标签文件名必须和图片名完全一致只换扩展名。YOLO 找标签靠的是「同名替换」图片叫a.jpg标签就得叫a.txt放在labels/下对应子目录里。很多人第一次接数据翻车就翻在这——图片和标签分在两个平行目录靠文件名对齐不是靠顺序。2.2 标签文件里到底存了什么每个 txt 里一行一个目标格式是class_id x_center y_center width height五个值用空格分隔后四个都是归一化到 0~1 的浮点数相对的是整张图的宽高不是像素。举个例子0 0.512 0.437 0.086 0.121 2 0.301 0.688 0.145 0.093第一行表示类别 0凹陷框中心在图片宽度 51.2%、高度 43.7% 的位置框宽占整图 8.6%、高占 12.1%。第二行是类别 2扭曲。这里有个容易忽略的点classes.txt里的顺序就是 class_id 的映射凹陷0、缺口1、扭曲2顺序错了标签含义就全乱训练出来的模型会把凹陷认成扭曲。2.3 用 show.py 先做一次肉眼校验拿到数据别急着开训先跑可视化确认标注没跑偏。脚本用法很直接python show.py --image images/train/TicketID-10344-h1-asb250_3_exh-_jpg.jpg如果脚本是随机抽图模式直接python show.py也行它会在当前目录生成一张画了框的图。核心逻辑无非是读图、按同名找 txt、把归一化坐标乘回像素、cv2.rectangle画框。自己写一版也就十几行import cv2, os img_path images/train/TicketID-10344-h1-asb250_3_exh-_jpg.jpg label_path img_path.replace(images, labels).rsplit(., 1)[0] .txt img cv2.imread(img_path) h, w img.shape[:2] with open(label_path) as f: for line in f: c, xc, yc, bw, bh map(float, line.split()) # 归一化坐标还原成像素左上角和右下角 x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imwrite(check.jpg, img)参数说明xc/yc是框中心归一化坐标bw/bh是归一化宽高乘回w/h得到像素值。跑完打开check.jpg重点看三件事——框有没有整体偏移说明归一化基准搞错了、框是不是只框住缺陷局部标注质量、有没有图片压根没框漏标。这一步花五分钟能省掉后面几小时的白跑。3. 接进 YOLOv5 训练配置文件与启动命令3.1 写对 data.yamlYOLOv5 训练靠一个 yaml 描述数据位置和类别。按这份数据的结构常见写法path: ./plastic_bottle_defect train: images/train val: images/val test: images/test nc: 3 names: [凹陷, 缺口, 扭曲]path是数据集根目录train/val/test是相对它的子路径。nc是类别数这里 3。names顺序必须和classes.txt一致否则标签语义错位。有个细节names用中文在某些终端和日志里会乱码训练本身不受影响但看混淆矩阵时对不上号稳妥点可以写成[dent, gap, distort]再在报告里映射回中文。3.2 选模型和启动训练YOLOv5 提供 s/m/l/x 几个尺度缺陷检测这种目标偏小、纹理细的任务建议从yolov5s起步验证流程再换yolov5m或l提精度。启动命令python train.py \ --data data/plastic_bottle.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --device 0参数逐个说--img 640是输入分辨率缺陷区域小的话可以提到 960 或 1280但显存占用按平方涨--batch 16在 8G 显存上跑 640 分辨率基本够爆显存就降到 8--epochs 100对这种三千张规模的数据集通常够收敛看results.csv里 mAP 不再涨就可以停--device 0指定第一块 GPU没卡就写cpu但三千张图 CPU 训到天亮。预训练权重yolov5s.pt建议用官方 COCO 权重小数据集上从头训几乎不可能收敛好。3.3 训练过程盯什么启动后终端会打印每个 epoch 的 box_loss、obj_loss、cls_loss 和 mAP0.5。前几个 epoch loss 下降快是正常的重点看验证集 mAP 有没有稳步爬。如果 box_loss 一直不降八成是标签坐标有问题回头用 2.3 的脚本再查一遍。训练完权重存在runs/train/exp/weights/best.pt是验证集最优last.pt是最后一轮推理用best.pt。4. 避坑与排查这几处最容易翻车4.1 图片和标签对不上号现象训练报No labels found或者 mAP 恒为 0。原因图片在images/train标签却在labels/train之外的位置或者文件名大小写、扩展名不一致.jpgvs.JPG。解决写个脚本核对两边文件名集合是否完全相等差集打印出来逐个修。4.2 类别顺序和 classes.txt 不一致现象模型能检出框但类别全错凹陷被认成扭曲。原因data.yaml里names顺序和标注时用的classes.txt顺序不同。解决以classes.txt为准逐行核对names顺序必须一模一样。4.3 验证集太小导致指标抖动现象mAP 一会儿 0.7 一会儿 0.5波动大。原因验证集只有约 130 张样本量小单张难例就能拉动整体指标。解决把训练集里划一部分进验证集或者用 K 折交叉验证看平均表现别拿单次结果下结论。4.4 小目标缺陷被漏检现象大凹陷能检出细小缺口漏检严重。原因640 分辨率下小缺陷只有几个像素特征被下采样吃掉。解决提高--img到 960/1280或在模型里加 P2 小目标检测层这是 YOLOv5 改进里最常见的操作之一。4.5 中文类别名引发日志乱码现象混淆矩阵、预测图上类别名显示成方块。原因绘图库默认字体不支持中文。解决要么把names换成英文要么在绘图代码里指定中文字体路径训练本身不受影响。5. 验证与进阶把这份数据用出第二层价值跑通第一轮训练只是起点真正决定这份数据值不值得深挖的是验证环节和后续改进空间。训练结束后先别急着看 mAP 数字用val.py在测试集上单独跑一遍python val.py \ --data data/plastic_bottle.yaml \ --weights runs/train/exp/weights/best.pt \ --img 640 \ --task test--task test会切到测试集那 60 张上评估这个集合训练全程没碰过指标更接近真实泛化能力。跑完会输出每类的 P、R、mAP0.5 和 mAP0.5:0.95重点看三类里哪类拖后腿——通常缺口这种细长目标召回最低。想进一步压榨精度几个方向按性价比排一是提分辨率到 960小缺陷召回一般能涨几个点代价是显存和推理时间二是加数据增强YOLOv5 自带 mosaic、mixup缺陷检测里 mosaic 对小目标友好但 mixup 可能把缺陷纹理糊掉建议关掉试对比三是换更大 backbone 或加注意力模块这是 YOLOv5 改进实战里的常规套路但三千张数据量下容易过拟合加之前先把 baseline 跑扎实。验证时还有个习惯值得养成把best.pt在测试集上的预测结果可视化出来逐张看漏检和误检。指标是黑匣子图才是真相。我一般会写个小脚本批量推理测试集、把预测框和真值框叠在一张图上红绿对比一眼就能看出模型是「框歪了」还是「压根没看见」。框歪多半是回归损失没收敛没看见就是特征提取不够两种问题的解法完全不同。从那以后我每次拿到新数据集都强制先跑一遍可视化校验再开训宁可多花十分钟看图也不愿训完发现标签是错的。希望这份塑料瓶缺陷数据集能帮你把缺陷检测这条路走顺。本文还有配套的精品资源点击获取