塑料瓶缺陷检测数据集实战:YOLO训练从classes文件到部署
简介本资源为面向工业质检与计算机视觉方向的塑料瓶缺陷目标检测数据集采用YOLO格式标注适合从事缺陷检测算法训练、模型调优及课程实践的学生与工程师使用。数据集已按YOLOv5目录结构划分完毕包含训练集约3200张、验证集约130张、测试集约60张图片及对应标签文件类别涵盖凹陷、缺口、扭曲三类并附有classes文件明确类别定义。压缩包共约2000个文件以1999个txt标签与1个可视化py脚本为主整体约117MB其中txt文件承载标注信息py脚本可随机读取图片并绘制边界框无需修改即可直接运行查看标注效果。目前已有91人学习下载配套YOLOv5改进实战专栏便于读者快速接入训练流程、验证数据质量并开展缺陷检测实验。1. 塑料瓶缺陷检测数据集从 classes 文件到 YOLO 训练的第一公里产线上吹瓶机每分钟吐出上百个 PET 瓶瓶身黑点、瓶口缺料、瓶底裂纹这些缺陷靠人眼盯漏检率随班次直线上升。你要做的不是从零标注几万张图而是拿到一份已经划分好 train/val、带 YOLO 标注、还附了 classes 文件的塑料瓶缺陷图像目标检测数据集直接跑通训练。这份数据集解决的核心问题就一个把「找数据、标数据、切数据」这三件最耗时的脏活前置掉让你把精力放在模型选型、超参和部署上。适合谁适合刚接触 YOLO 目标检测、手头没有标注团队、又需要快速验证缺陷检测可行性的工程师和在校做课题的人。classes 文件决定了你后面所有类别索引的生死先把它读明白比急着敲训练命令重要得多。2. 拆开数据集目录结构、标注格式与 classes 文件到底管什么2.1 一个划分好的 YOLO 数据集长什么样拿到压缩包解压后常见做法是看到这样的目录树。不同来源会有细微差异但 YOLO 训练能直接吃的结构基本固定plastic_bottle_defect/ ├── images/ │ ├── train/ # 训练集图片 │ └── val/ # 验证集图片 ├── labels/ │ ├── train/ # 训练集标注 txt │ └── val/ # 验证集标注 txt ├── classes.txt # 类别名列表一行一个 └── data.yaml # 数据集描述文件部分数据集自带images 和 labels 必须同名对应images/train/bottle_001.jpg对应labels/train/bottle_001.txt。YOLO 靠文件名匹配不靠顺序所以改名时两边要同步否则训练时会出现「图片找不到标签」的静默丢样本。classes.txt 里每一行是一个类别名行号从 0 开始就是类别索引。比如black_spot neck_missing bottom_crack那么black_spot的 class_id 是 0neck_missing是 1bottom_crack是 2。标注 txt 里每行的第一个数字就是这个 id。这里有个血泪经验classes 文件的行顺序一旦和标注里的 id 对不上模型学到的就是错位标签训练 loss 照样下降但推理时把黑点认成裂纹你还以为是模型不行。2.2 YOLO 标注 txt 的五个数字怎么读每个标注文件里一行代表一个目标框格式是class_id x_center y_center width height后四个都是归一化到 0~1 的浮点数相对的是图片宽高不是像素。举例0 0.512 0.334 0.086 0.121意思是类别 0框中心在图片宽度 51.2%、高度 33.4% 的位置框宽占图宽 8.6%框高占图高 12.1%。换算成像素要乘回原图尺寸。这个格式和 COCO 的x_min y_min w h完全不同直接拿 COCO 标注改后缀是跑不通的必须做坐标转换。提示用wc -l labels/train/*.txt能快速看每个标注文件有几行行数为 0 说明这张图是负样本无缺陷YOLO 允许空标注文件但别把空文件和缺失文件搞混。2.3 校验数据集完整性的最小脚本在训练前花两分钟跑一遍校验能省掉后面几小时的排查。下面这段脚本检查图片与标签是否一一对应、类别 id 是否越界、坐标是否越界import os from pathlib import Path root Path(plastic_bottle_defect) classes (root / classes.txt).read_text(encodingutf-8).split() num_classes len(classes) print(f类别数: {num_classes}, 类别: {classes}) for split in [train, val]: img_dir root / images / split lbl_dir root / labels / split imgs {p.stem for p in img_dir.glob(*.jpg)} | {p.stem for p in img_dir.glob(*.png)} lbls {p.stem for p in lbl_dir.glob(*.txt)} # 图片有、标签无 - 会被当负样本标签有、图片无 - 直接报错 missing_lbl imgs - lbls missing_img lbls - imgs print(f[{split}] 图片 {len(imgs)} 张, 标签 {len(lbls)} 个, 缺标签 {len(missing_lbl)}, 缺图片 {len(missing_img)}) bad 0 for lbl in lbl_dir.glob(*.txt): for line in lbl.read_text().strip().splitlines(): parts line.split() if len(parts) ! 5: bad 1; continue cid int(parts[0]) coords list(map(float, parts[1:])) if cid 0 or cid num_classes: bad 1 if any(v 0 or v 1 for v in coords): bad 1 print(f[{split}] 异常标注行: {bad})逻辑说明先读 classes.txt 确定类别总数再对 train/val 分别做集合差找出图片和标签的不匹配。最后逐行解析标注检查字段数、类别 id 范围、归一化坐标范围。参数上root改成你解压后的实际目录名如果图片是.jpeg或.bmp在 glob 里补上对应后缀。跑出来「缺图片」不为 0 就必须先修否则训练直接中断。3. 把数据集接进 YOLOdata.yaml 配置与训练命令3.1 data.yaml 的四个关键字段YOLOv8/v11 系列用 data.yaml 描述数据集位置和类别。数据集如果没自带就自己写一个放在项目根目录path: /abs/path/to/plastic_bottle_defect # 数据集根目录建议绝对路径 train: images/train # 相对 path 的训练图片目录 val: images/val # 相对 path 的验证图片目录 nc: 3 # 类别数必须等于 classes.txt 行数 names: # 类别名顺序必须和 classes.txt 一致 0: black_spot 1: neck_missing 2: bottom_crack四个字段里最容易翻车的是nc和names的顺序。nc写错会直接报维度不匹配names顺序错了不报错但类别全乱。path用绝对路径最稳相对路径在不同工作目录下启动训练时经常找不到文件。3.2 用命令行跑通第一次训练环境装好 ultralytics 后最小训练命令yolo detect train \ datadata.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ device0 \ projectruns/bottle \ namebaseline逐项说明modelyolov8n.pt是最小的预训练权重缺陷检测这种单场景任务n 版通常够用先跑通再换 s/m。imgsz640是输入分辨率塑料瓶缺陷如果是细小黑点可以提到 960 或 1280但显存和速度要权衡。batch16在 8G 显存上跑 640 分辨率比较稳爆显存就降到 8。device0指定第一块 GPUCPU 训练把这里改成cpu。project和name决定权重和日志落盘位置方便你对比多次实验。3.3 训练日志里该盯哪几个数启动后终端会刷每个 epoch 的指标重点看三个box_loss持续下降说明框回归在学cls_loss下降说明分类在学mAP50是 IoU 0.5 下的平均精度缺陷检测里这个数比 mAP50-95 更直观。如果 box_loss 降但 mAP 不涨多半是标注框质量差或类别不平衡。验证集指标在每个 epoch 末计算如果 val 的 loss 开始上升而 train 还在降就是过拟合早停或加数据增强。注意第一次训练建议先跑 10 个 epoch 看曲线趋势别一上来就 300 epoch。曲线不对跑再久也是浪费电。4. 塑料瓶缺陷检测的避坑与排查五条踩出来的经验4.1 类别 id 错位loss 正常但预测全乱现象训练 loss 平稳下降mAP 也有数值但推理时把黑点框成裂纹类别完全对不上。原因classes.txt 的行顺序和标注 txt 里的 class_id 不一致或者 data.yaml 的 names 顺序和 classes.txt 不同。解决用 2.3 的校验脚本确认每个 id 都在[0, nc)内再人工抽 5 张图把标注框画回原图核对类别名。这一步别省错位标签是玄学问题的头号来源。4.2 图片标签不同名样本被静默丢弃现象训练集明明有 2000 张图日志里train: Scanning只扫到 1800 张。原因images 和 labels 里文件名不一致比如图片叫bottle_001.jpg标签叫bottle_001_.txt或者大小写、前后空格差异。YOLO 匹配不上就跳过不报错。解决跑 2.3 脚本看missing_lbl和missing_img用rename批量统一。批量改名时先备份改错了没有后悔药。4.3 小目标缺陷被下采样吃掉现象瓶身大裂纹检测很好细小黑点几乎检不出。原因640 分辨率下几个像素的黑点经过 backbone 多次下采样后特征几乎消失。解决把imgsz提到 960 或 1280或者在 data.yaml 里开启copy_paste、mosaic增强提升小目标出现频率模型侧可以换带 P2 检测头的配置P2 层保留更高分辨率特征。代价是显存和推理耗时上升产线节拍紧的话要实测。4.4 类别不平衡缺陷样本远少于正常样本现象某一类缺陷 mAP 很高另一类几乎为 0。原因数据集中各类缺陷数量差异大模型偏向多数类。解决先统计每个类别的框数量用grep -h ^0 labels/train/*.txt | wc -l这类命令按 id 计数。数量差一个数量级时可以复制少数类图片做过采样或在训练时用cls损失权重调整。别盲目上 focal loss先确认是不是数据本身的问题。4.5 验证集泄漏mAP 虚高现象验证集 mAP 高得离谱上线后一塌糊涂。原因划分数据集时同一只瓶子的多张连拍图被分到了 train 和 val 两边模型见过近似样本。解决按瓶子或按批次划分而不是随机按图片划分。如果数据集已经划分好抽几张 val 图去 train 里做相似度比对确认没有近乎重复的样本。这个坑在工业检测里特别常见因为连拍图长得太像。5. 从跑通到可用提升塑料瓶缺陷检测精度的三个进阶动作第一版模型跑通只是起点。想让它在产线上真正可用我一般会做三件事。第一件是用混淆矩阵定位类别混淆。训练完 ultralytics 会在 runs 目录生成confusion_matrix.png横轴预测、纵轴真实。如果黑点和裂纹互相混淆严重说明这两类在特征上太接近要么合并成一类「表面缺陷」要么补充更多区分性样本。第二件是调推理置信度和 IoU 阈值。默认conf0.25、iou0.7不一定适合你的场景漏检多就降 conf误检多就升 conf重叠框多就降 iou。用验证集跑一组阈值扫描画 PR 曲线找拐点比拍脑袋定值靠谱。第三件是导出并测速。产线关心的是节拍不是 mAP。用yolo export modelbest.pt formatonnx导出 ONNX再用 ONNX Runtime 或 TensorRT 测实际推理耗时。640 分辨率下一张图从预处理到后处理的总耗时才是决策依据。如果单帧超过产线节拍就得考虑降分辨率、换更小的模型或者用批处理摊薄开销。# 导出 ONNX 并做一次推理测速 yolo export modelruns/bottle/baseline/weights/best.pt formatonnx imgsz640 yolo predict modelbest.onnx sourcetest_images imgsz640 conf0.3导出时imgsz要和训练一致否则精度会掉。conf0.3是推理时的置信度门槛比训练默认略高能压掉一部分低质量框。测速要在目标硬件上做开发机的数字没有参考价值。我自己的习惯是每拿到一份新数据集先花半小时跑校验脚本和 10 epoch 试训确认数据没问题再投入正式训练。这个习惯帮我挡掉过至少三次「训练几天才发现标签错位」的翻车。数据集的质量决定模型的上限YOLO 只是把这个上限逼近的工具。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

LangGraph集成MCP:多Server工具调用的架构与踩坑实践

LangGraph集成MCP:多Server工具调用的架构与踩坑实践

有件事我得先跟你交个底:接手一个基于LangGraph的Agent项目后,我最先做的事情不是调模型,而是把和外部系统的连接方式全部推到重来了一遍。之前每个工具都是单独封装,查一个数据库写一套函数,读一次文件另写一套&#…

2026/10/12 15:59:06 阅读更多 →
8080并行接口液晶屏Linux驱动:从GPIO时序到设备树移植

8080并行接口液晶屏Linux驱动:从GPIO时序到设备树移植

简介:面向嵌入式 Linux 开发人员与运维工程师,这份资源以常用小尺寸 8080 并行接口液晶屏为切入点,完整展示了在 Linux 系统中为其编写驱动程序的全过程。内容围绕驱动初始化、数据传输、命令发送、设备注册与释放等核心任务展开,…

2026/10/16 21:40:11 阅读更多 →
PT100线制原理与选型:二线/三线/四线制本质区别

PT100线制原理与选型:二线/三线/四线制本质区别

1. 为什么PT100的“线制”不是接几根线那么简单?你手头有一支PT100热电阻,说明书上写着“支持二线制/三线制/四线制”,接线端子标着A、B、C、D——可当你真把线焊上去,用万用表一测,数值忽高忽低,温控器显示…

2026/10/16 21:21:09 阅读更多 →

最新新闻

五款智能体上架AiPy集市:Claude Code、PPT生成、发票验真、招标商机宝、量化研究来了

五款智能体上架AiPy集市:Claude Code、PPT生成、发票验真、招标商机宝、量化研究来了

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 20:52:52 阅读更多 →
软考中级考点笔记全解析:数据结构、排序与高频易错点

软考中级考点笔记全解析:数据结构、排序与高频易错点

简介:软件设计师中级考点笔记精华版定位为软考中级考证冲刺资料,面向正在系统复习数据结构、算法与程序设计的考生。内容聚焦考试常考的核心知识点、难点公式与易错陷阱,将邻接矩阵、顺序/链式/散列/索引存储结构、满二叉树、AVL树、哈夫曼树…

2026/10/17 20:52:52 阅读更多 →
SAP固定资产减值三条路径与ABAW重估配置实战解析

SAP固定资产减值三条路径与ABAW重估配置实战解析

简介:面向熟悉SAP软件并具备财务背景的专业人士,这份PDF系统讲解固定资产减值与增值的三种实现方式:部分报废冲减原值、计划外折旧、固定资产重估。每种方式均配有T-code及对应账务处理逻辑,如ABAVN处理部分报废、ABAA处理计划外折…

2026/10/17 20:52:52 阅读更多 →
通信卫星研究报告高效拆解:从现状洞察到技术落地

通信卫星研究报告高效拆解:从现状洞察到技术落地

简介:一份题为《我国下一代通信卫星研究状况和发展策略》的综述性Word文档,围绕卫星固定业务、移动业务、广播业务三类方向,系统介绍了Ka频段点波束一跳通信、L/S频段手持终端通信、特大功率转发器直接接收电视等关键技术,并结合S…

2026/10/17 20:52:52 阅读更多 →
编译器前端三步解析:词法、语法、语义分析原理与实践

编译器前端三步解析:词法、语法、语义分析原理与实践

简介:本资源是一份面向计算机专业本科生的编译原理课程设计报告,聚焦编译器前端核心模块的完整实现,适用于课程设计实践、原理理解深化与系统编程能力训练。报告详细阐述了基于递归下降法的语法分析器、支持关键字/界符动态加载的词法分析器、…

2026/10/17 20:52:52 阅读更多 →
YOLOv11-CLS ONNX Runtime C++部署避坑指南

YOLOv11-CLS ONNX Runtime C++部署避坑指南

简介:本资源是一份面向C与计算机视觉工程师的YOLOv11-CLS图像分类模型本地化部署实战指南,聚焦于ONNX Runtime在C环境下的高效集成与工程落地,适用于自动化检测、实时视频监控及安防系统等低延迟推理场景。资源为单个37KB的Word文档&#xff…

2026/10/17 20:51:51 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →