模塑玻璃瓶缺陷识别数据集:28类缺陷与YOLOv5实战
简介这份资源是面向工业质检与计算机视觉方向的模塑玻璃瓶缺陷识别数据集适合从事缺陷检测算法研发、YOLO模型训练及产线视觉方案验证的工程师与学习者使用。数据集覆盖黑点、泡泡颈、破损、刮痕、裂缝等28类常见玻璃瓶缺陷标注信息完整可直接用于目标检测模型的训练与评估官方给出的识别率为75.9%并明确支持YOLO v5框架便于快速接入现有检测流程。压缩包共包含2000个文件以1999个txt标注文件和1个yaml配置文件为主txt文件对应各图像的缺陷类别与位置信息yaml则用于定义数据集路径与类别名称整体约45.53MB体量轻便、结构清晰方便按类别检索与划分训练集、验证集。目前已有21人学习下载适合需要真实工业缺陷样本、希望复现或改进YOLO v5检测效果的研究者参考使用。1. 模塑玻璃瓶缺陷识别数据集28 类缺陷、75.9% 识别率这份标注数据到底能不能直接上产线模塑玻璃瓶的质检线上最让人头疼的不是设备贵而是缺陷样本攒不起来。黑点、泡泡颈、破损、刮痕、裂缝这些缺陷单条产线一天可能就出几十个等你攒够能训模型的量产品早就换型了。这份带标注的模塑玻璃瓶缺陷识别数据集覆盖 28 种缺陷类型官方给出的识别率是 75.9%直接支持 YOLOv5 训练格式。它解决的不是从零标注的问题而是让你跳过最耗时的数据采集和标注环节把精力放在模型调优和产线适配上。适合做工业质检的算法工程师、想快速验证玻璃瓶缺陷检测方案的团队以及需要一份真实工业缺陷数据做 benchmark 的研究者。但 75.9% 这个数字背后有前提能不能直接用得看你的缺陷定义和产线光照条件跟数据集是否对齐。2. 数据集拆解28 类缺陷怎么分、标注格式长什么样2.1 缺陷类别体系与模塑工艺的对应关系模塑玻璃瓶的缺陷不是随机分布的它跟成型工艺强相关。这份数据集的 28 类缺陷大致可以归到四个工艺环节成型阶段泡泡颈、瓶颈变形、瓶身椭圆度超差。泡泡颈是玻璃液在初模中分布不均导致的表现为瓶颈处出现气泡聚集或颈径异常。表面处理阶段黑点、刮痕、划痕、麻点。黑点通常是原料杂质或窑炉耐火材料脱落刮痕和划痕则是模具磨损或输送带摩擦造成的。退火阶段裂缝、内应力纹、退火不完全导致的微裂。这类缺陷在可见光下不一定明显但数据集里做了标注说明采集时用了特定角度的光源。后道工序破损、缺口、崩边。多发生在抓取、传送、包装环节。28 类里黑点、泡泡颈、破损、刮痕、裂缝这五类是出现频率最高的也是产线质检最关注的。数据集对每类缺陷都给了边界框标注不是简单的图像分类标签。这意味着你可以直接拿来做目标检测训练而不是先做分类再定位。提示拿到数据集后第一件事是统计每类缺陷的实例数量。如果某几类只有几十个样本训练时要么做过采样要么在 loss 里给类别权重否则模型会偏向多数类。2.2 YOLOv5 标注格式与目录结构数据集按 YOLOv5 的标准格式组织每张图片对应一个同名的.txt标注文件。标注文件里每行是一个缺陷实例格式为class_id x_center y_center width height其中坐标都是归一化到 0~1 的相对值。class_id 从 0 到 27对应 28 类缺陷。目录结构常见做法是dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml里需要配置train、val、test的路径以及nc: 28和names列表。names 的顺序必须跟标注文件里的 class_id 严格对应错一个位整类缺陷的标签就全乱了。# data.yaml 示例 train: ./dataset/images/train val: ./dataset/images/val test: ./dataset/images/test nc: 28 names: 0: black_spot 1: bubble_neck 2: breakage 3: scratch 4: crack # ... 其余 23 类按实际顺序补全这里有个容易翻车的地方YOLOv5 的标注文件里class_id 是从 0 开始的整数但有些标注工具导出时会写成浮点数或者从 1 开始。训练前用脚本扫一遍所有 label 文件确认 class_id 的范围和整数格式。2.3 图像采集条件与 75.9% 识别率的边界75.9% 的识别率不是随便跑出来的。它跟图像分辨率、光照条件、缺陷尺寸都有关系。数据集里的图像大概率是在固定工位、特定光源下采集的背景比较干净瓶体位置相对固定。如果你的产线是动态拍摄、背景杂乱、光照变化大直接拿这个数据集训出来的模型mAP 会掉得很明显。我一般会先做两件事一是把数据集里的图片按缺陷类别抽样看一遍确认缺陷的视觉特征跟自己的场景差多少二是用val集跑一遍预训练权重看每类缺陷的 AP 分布。如果黑点和刮痕的 AP 都在 0.8 以上但泡泡颈只有 0.4那说明泡泡颈的样本可能太少或者特征不明显需要针对性补充数据。注意75.9% 这个数字大概率是在val集上的 mAP0.5 或者类似指标。不要把它当成产线漏检率。产线上还要考虑误检、节拍、光照衰减实际部署时指标会打折扣。3. 用 YOLOv5 跑通训练从环境配置到第一轮推理3.1 环境搭建与依赖版本锁定YOLOv5 对 PyTorch 和 CUDA 版本比较敏感版本不对容易出各种玄学错误。我一般用 Python 3.8 PyTorch 1.10 CUDA 11.3 这个组合比较稳。先建虚拟环境conda create -n bottle_defect python3.8 -y conda activate bottle_defect然后装 PyTorch 和 YOLOv5 的依赖# 安装 PyTorchCUDA 11.3 版本 pip install torch1.10.0cu113 torchvision0.11.1cu113 -f https://download.pytorch.org/whl/torch_stable.html # 克隆 YOLOv5 仓库用 v6.0 或 v7.0 都行v7.0 对小目标更友好 git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txtrequirements.txt里会装opencv-python、matplotlib、pyyaml这些。如果后面要导出 ONNX 或者 TensorRT再额外装onnx和onnxruntime-gpu。3.2 数据配置与类别名对齐把数据集放到 YOLOv5 目录下或者用绝对路径在data.yaml里指定。关键是names列表的顺序必须跟标注文件里的 class_id 一一对应。我一般会写个小脚本验证import os import yaml # 读取 data.yaml with open(data.yaml, r) as f: data yaml.safe_load(f) # 检查 names 数量和 nc 是否一致 assert len(data[names]) data[nc], names 数量与 nc 不一致 # 扫描所有 label 文件确认 class_id 范围 label_dir ./dataset/labels/train class_ids set() for fname in os.listdir(label_dir): if fname.endswith(.txt): with open(os.path.join(label_dir, fname), r) as f: for line in f: cid int(line.split()[0]) class_ids.add(cid) print(f实际出现的 class_id: {sorted(class_ids)}) print(fdata.yaml 定义的类别数: {data[nc]}) if max(class_ids) data[nc]: print(警告存在超出 nc 范围的 class_id需要检查标注文件)这个脚本跑完如果class_ids的最大值小于nc且没有负数说明标注文件的类别索引没问题。如果有超出范围的要么是标注工具导出时加了偏移要么是类别映射表写错了。3.3 训练命令与关键参数设置YOLOv5 的训练入口是train.py。针对玻璃瓶缺陷检测我一般会调整这几个参数python train.py \ --data data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch-size 16 \ --epochs 100 \ --device 0 \ --workers 4 \ --optimizer Adam \ --lr0 0.001 \ --lrf 0.01 \ --patience 20 \ --project runs/train \ --name bottle_defect_v1--img 640输入分辨率。玻璃瓶缺陷里黑点和刮痕尺寸偏小640 是底线如果显存够可以上 1280小目标召回会好一些。--batch-size 16根据显存调。如果报 OOM降到 8 或者 4。--optimizer AdamYOLOv5 默认是 SGD但工业缺陷数据量通常不大Adam 收敛更快前期 loss 下降更稳。--lr0 0.001初始学习率。Adam 下用 0.001 比较合适SGD 的话可以设 0.01。--patience 20如果 20 个 epoch 验证集指标没提升就早停防止过拟合。训练过程中重点看mAP0.5和每类的AP。如果整体 mAP 卡在 0.6 左右上不去先别急着调模型回去看数据——大概率是某几类缺陷的样本太少或者标注质量有问题。3.4 推理验证与单张图片测试训练完用detect.py跑推理python detect.py \ --weights runs/train/bottle_defect_v1/weights/best.pt \ --source ./test_images \ --img 640 \ --conf-thres 0.25 \ --iou-thres 0.45 \ --save-txt \ --project runs/detect \ --name bottle_test--conf-thres 0.25置信度阈值。产线上如果漏检代价高可以降到 0.15如果误检太多提到 0.4。--iou-thres 0.45NMS 的 IoU 阈值。玻璃瓶缺陷有时候会重叠比如刮痕和裂缝挨在一起这个值可以适当调高到 0.5。--save-txt把检测结果保存成 txt方便后续跟标注文件对比算漏检和误检。跑完看runs/detect/bottle_test里的可视化结果。重点看两类错误一是黑点被漏检通常是置信度阈值太高二是把瓶身反光误判成刮痕这种一般是训练集里反光样本太少需要补充负样本。4. 避坑与排查标注、训练、部署里最容易翻车的五件事4.1 标注文件里的 class_id 偏移现象训练 loss 正常下降但验证集 mAP 一直很低推理时所有缺陷都被识别成同一类。原因标注工具导出时 class_id 从 1 开始而 YOLOv5 默认从 0 开始。或者data.yaml里names的顺序跟标注时的类别映射表不一致。解决用 3.2 节的脚本扫一遍所有 label 文件确认 class_id 范围。如果发现从 1 开始批量减 1如果顺序不对重新生成data.yaml的names列表。4.2 小目标缺陷在 640 分辨率下丢失现象黑点和细小刮痕的 AP 明显低于破损、裂缝这些大缺陷。原因YOLOv5 的 P3 特征图下采样 8 倍640 输入下小于 8x8 像素的缺陷在特征图上几乎消失。解决把--img提到 1280或者改用 YOLOv5m/l 这种更大的模型。另一个办法是在数据增强里加--mosaic 0关掉马赛克增强因为马赛克会把小目标缩得更小。4.3 类别不平衡导致模型偏向多数类现象黑点、刮痕的 AP 很高但泡泡颈、退火纹的 AP 接近 0。原因这几类缺陷在数据集里样本量太少模型在训练时被多数类主导少数类的梯度被淹没。解决在train.py里加--cls-pw 1.0开启类别权重或者在数据加载时对少数类做过采样。更彻底的办法是单独收集这几类缺陷的图片补充到训练集里。4.4 验证集和训练集分布不一致现象训练集 loss 降到很低但验证集 mAP 波动很大有时候高有时候低。原因划分训练集和验证集时没有按缺陷类别分层抽样导致验证集里某些类别的样本跟训练集差异大。解决重新划分数据集确保每个类别在训练集和验证集里的比例大致相当。如果数据集本身是按时间顺序采集的还要注意不要让同一批次的图片同时出现在训练集和验证集里。4.5 部署时预处理不一致现象训练时 mAP 有 0.75部署到产线上漏检率却很高。原因训练时的图像预处理归一化、通道顺序、resize 方式跟部署时的预处理不一致。比如训练时用的是 RGB部署时摄像头输出的是 BGR。解决把训练时的预处理逻辑固化成一个函数部署时直接调用同一个函数。YOLOv5 的detect.py里用的是letterbox缩放部署时也要用同样的方式不能直接 resize。5. 进阶技巧用 TTA 和类别阈值把 75.9% 再往上推一推75.9% 是基线不是天花板。在不重新标注数据的前提下有两个技巧能把这个数字往上推几个点。测试时增强TTA。YOLOv5 的detect.py支持--augment参数开启后会对每张图片做水平翻转、缩放等多尺度推理然后把结果融合。代价是推理速度慢 2~3 倍但 mAP 通常能涨 1~3 个点。产线上如果节拍允许这个技巧值得开。python detect.py \ --weights runs/train/bottle_defect_v1/weights/best.pt \ --source ./test_images \ --img 640 \ --augment \ --conf-thres 0.2 \ --iou-thres 0.5按类别设置信度阈值。YOLOv5 默认对所有类别用同一个conf-thres但不同缺陷的检测难度不一样。黑点容易误检阈值可以设高一点0.35泡泡颈容易漏检阈值可以设低一点0.15。实现方式是在推理后处理阶段对每个类别单独过滤import torch # 假设 pred 是模型输出shape 为 [batch, num_anchors, 5nc] # 对每个类别单独设阈值 class_thresholds { 0: 0.35, # black_spot 1: 0.15, # bubble_neck 2: 0.25, # breakage 3: 0.30, # scratch 4: 0.20, # crack # ... 其余类别按实际调 } # 伪代码遍历每个类别用对应阈值过滤 for cls_id, thres in class_thresholds.items(): cls_mask pred[..., 5 cls_id] thres # 保留满足条件的检测框这个策略在产线上特别实用因为不同缺陷的漏检代价不一样。破损和裂缝漏检可能导致客户投诉阈值可以低一点黑点误检太多会影响产线节拍阈值可以高一点。还有一个习惯每次训练完我都会把val集的预测结果和标注结果叠在一起看逐类统计漏检和误检。如果某一类的漏检集中在某个光照条件或者某个瓶体位置那就不是模型的问题是数据采集的问题。从那以后我每次拿到新的缺陷数据集都强制走一遍「类别分布统计 → 标注格式校验 → 小目标可视化 → 单类 AP 分析」这四步少一步后面都可能翻车。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

误差椭圆详解:从协方差阵到点位精度分析

误差椭圆详解:从协方差阵到点位精度分析

1. 为什么笔记十二要单独写误差椭圆误差理论与测量平差基础这门课,大家最熟悉的肯定是协方差传播、权、条件平差、间接平差这些大块头。等这些基础过了之后,随之而来的一个非常实际的问题就是:平差算出的坐标点,到底有多可靠&…

2026/10/11 22:27:17 阅读更多 →
MySQL查询结果加序号全解析:从ROW_NUMBER到用户变量与分组排名

MySQL查询结果加序号全解析:从ROW_NUMBER到用户变量与分组排名

说实话,数据库开发里最容易被低估的需求,就是“给查询结果加个序号”。听起来不就是一列 1、2、3、4 吗?可真到动手写的时候,版本差异、排序稳定性、分页跳号、分组重排,随便一个细节都能让你在测试环境折腾半天。我这…

2026/10/11 22:27:17 阅读更多 →
森林害虫目标检测数据集实战:YOLOv8训练与避坑指南

森林害虫目标检测数据集实战:YOLOv8训练与避坑指南

简介:这份森林害虫目标检测数据集面向林业智能监测、农业AI应用开发及生态科研人员,聚焦松毛虫、松墨天牛、卷叶蛾三类常见且危害严重的森林害虫识别难题。数据集共1715张实际场景采集的JPEG图片,按训练集1199张、验证集257张、测试集259张划…

2026/10/11 22:27:17 阅读更多 →

最新新闻

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 0:53:26 阅读更多 →
不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的"非模拟器魔法":relinker重链接PRX库RDNA到SPIR-V 【免费下载链接】AnyPS5 Tool for automatic PS5 executables porting to Linux and Windows 项目地址: https://gitcode.com/GitHub_Trending/an/Any…

2026/10/12 0:53:26 阅读更多 →
基于A星算法的无人机三维路径规划Matlab实现与优化

基于A星算法的无人机三维路径规划Matlab实现与优化

做无人机的人基本都绕不开路径规划这道坎。“基于A星算法的无人机三维路径规划算法研究(Matlab代码实现)” 这个题目看着规整,但真正落地的时候,坑比想象的多:地图怎么建、邻居节点怎么扩展、启发函数怎么写才能既快又…

2026/10/12 0:51:25 阅读更多 →
VS Code 中直接使用 Codex 教程及连接失败解决方案:TaoToken 统一 Key 接入与排错实录

VS Code 中直接使用 Codex 教程及连接失败解决方案: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/12 0:50:24 阅读更多 →
企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

在企业将多智能体(Multi-Agent)系统接入客服咨询、内部知识检索或自动化办公流后,安全攻防的对抗维度发生了一场根本性范式转移:传统的 SQL 注入或跨站脚本攻击(XSS)正在退居二线,而以自然语言为…

2026/10/12 0:47:23 阅读更多 →
Cursor怎么使用:3分钟上手Cursor键盘快捷键速查,用TaoToken统一Key接入GPT4与Claude 3.5辅助编程

Cursor怎么使用:3分钟上手Cursor键盘快捷键速查,用TaoToken统一Key接入GPT4与Claude 3.5辅助编程

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

2026/10/12 0:46:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →