新闻详情

新闻详情

首页 / 资讯中心 / 详情

香烟破损检测数据集:YOLOV5目录格式与6类标注实战

发布时间:2026/10/1 10:51:27来源:尧图网络
香烟破损检测数据集:YOLOV5目录格式与6类标注实战
简介这份资源面向从事目标检测算法学习与工业质检应用的技术人员提供香烟破损缺陷检测的YOLOv5格式数据集可直接用于模型训练与验证省去繁琐的数据整理环节。数据采集自3024×4032高分辨率RGB图像覆盖头部破损、滤嘴破损等6个类别贴合真实产线质检场景。压缩包共803个文件以401个txt标注文件、401张jpeg图像和1个可视化py脚本为主整体约388MB其中训练集含320张图片及对应标签验证集含80张图片及对应标签并附6类别文本说明。配套脚本随机传入一张图片即可绘制边界框并保存至当前目录无需修改即可运行便于快速核验标注质量。目前已有139人学习下载适合需要快速搭建缺陷检测基线、验证YOLOv5训练流程或开展小样本工业质检实验的读者参考使用。1. 香烟破损检测数据集6 类标注、YOLOV5 目录格式到底解决了什么问题流水线上一条烟包从相机下掠过留给算法的判断窗口通常不到 200 毫秒。你要判断的不是「这是不是香烟」而是「这条烟有没有破损、破在哪、属于哪一类」。这类需求在烟草质检、物流分拣、零售盘点里非常常见而真正卡住落地的往往不是模型结构是数据。香烟破损检测数据集YOLOV5 目录格式6 类别含训练集与验证集这个标题说的就是一件很具体的事把香烟外观缺陷拆成 6 个可区分的类别按 YOLOV5 要求的目录结构组织好图像与标签直接喂给 YOLOV5 训练自己的数据集流程。它适合三类人一是做工业质检、想快速验证缺陷检测可行性的工程师二是手里有香烟图像但不知道怎么标注、怎么划分训练集验证集的人三是已经跑通 YOLOV5 环境配置想找一个结构规整、类别定义清晰的数据集练手或做基线对比的人。核心价值不在「数据量大」而在「目录规范 类别定义明确 训练集验证集已切分」省掉最耗时的数据整理环节。下面从目录结构、类别设计、训练配置到踩坑一层层拆开讲。2. YOLOV5 目录格式拆解6 类标签怎么组织才不返工2.1 标准目录树与文件对应关系YOLOV5 对数据集的目录要求其实很朴素图像一个文件夹标签一个文件夹标签文件名和图像文件名一一对应扩展名换成.txt。但「朴素」不等于「随便放」一旦路径写错训练启动时不会报错而是直接告诉你「找到 0 张图片」这是新手最常见的翻车点。一个能直接跑通的目录结构长这样smoke_damage_dataset/ ├── images/ │ ├── train/ # 训练集图像jpg/png │ │ ├── 000001.jpg │ │ └── ... │ └── val/ # 验证集图像 │ ├── 000201.jpg │ └── ... ├── labels/ │ ├── train/ # 训练集标签与图像同名 │ │ ├── 000001.txt │ │ └── ... │ └── val/ │ ├── 000201.txt │ └── ... └── data.yaml # 数据集描述文件关键约束有三条第一images/train下的000001.jpg必须对应labels/train/000001.txt文件名不含扩展名严格一致第二标签文件里每一行是一个目标格式为类别索引 中心x 中心y 宽 高后四个值都是相对图像宽高的归一化值范围 0~1第三data.yaml里的路径建议写绝对路径或相对于训练启动目录的路径别写相对data.yaml自身的路径否则换台机器就找不到。2.2 6 个类别的定义与标签行写法6 类别是这类数据集的核心设计。香烟破损通常可以拆成包装破损、烟支折断、烟丝外露、表面污渍、变形压扁、正常无破损。类别顺序一旦定下就不能改因为标签里存的是索引不是名字。data.yaml里这样写# data.yaml path: /home/user/smoke_damage_dataset # 数据集根目录 train: images/train # 相对 path 的训练图像目录 val: images/val # 相对 path 的验证图像目录 nc: 6 # 类别数量必须和 names 长度一致 names: 0: package_damage # 包装破损 1: cigarette_broken # 烟支折断 2: tobacco_exposed # 烟丝外露 3: surface_stain # 表面污渍 4: deformation # 变形压扁 5: normal # 正常无破损这里有个容易忽略的点nc和names的键必须从 0 连续编号。如果你把normal放在索引 5那标签里正常样本就写5不能写6或跳过某个数字。标签文件示例一张图里有一个包装破损、一个正常0 0.412 0.533 0.220 0.310 5 0.780 0.502 0.180 0.260每行 5 个字段空格分隔行尾不要有多余空格。中心坐标和宽高都归一化比如图像宽 1920、目标中心在 x791那0.412 ≈ 791/1920。手工算容易错实际都用标注工具导出但你要能看懂这个格式才能在标签异常时定位问题。2.3 训练集与验证集的切分比例和防泄漏标题里明确写了「包含训练集、验证集」说明已经切分好。但切分不是随便按 8:2 分文件就完事。香烟破损检测有个隐蔽的坑同一包烟可能被连拍多张如果这些连拍图被分到训练集和验证集两边验证指标会虚高模型实际泛化能力被高估这就是数据泄漏。常见做法是按「样本对象」切分而不是按「图像文件」切分。同一包烟的所有角度图要么全进训练集要么全进验证集。比例上6 类别且每类样本不极端失衡时训练集:验证集用 8:2 或 7:3 都行如果某类比如烟丝外露样本特别少验证集里至少要保证每类有几十个实例否则验证阶段的 mAP 波动会大到没法看。切分完做一次自检确认没有同名文件跨集、没有空标签文件混入import os from pathlib import Path root Path(smoke_damage_dataset) train_imgs {p.stem for p in (root / images/train).glob(*.jpg)} val_imgs {p.stem for p in (root / images/val).glob(*.jpg)} # 1. 检查训练集和验证集是否有同名图像潜在泄漏 overlap train_imgs val_imgs print(跨集同名图像:, overlap if overlap else 无) # 2. 检查每个图像是否有对应标签且标签非空 for split, stems in [(train, train_imgs), (val, val_imgs)]: missing, empty [], [] for s in stems: lbl root / flabels/{split}/{s}.txt if not lbl.exists(): missing.append(s) elif lbl.stat().st_size 0: empty.append(s) print(f{split} 缺失标签: {len(missing)}, 空标签: {len(empty)})这段脚本做两件事用集合交集查跨集同名用文件大小查空标签。空标签在 YOLOV5 里会被当成「背景图」处理少量可以大量混入会让模型学到「什么都别检测」的倾向。参数上glob(*.jpg)要按你实际图像格式改png 就换*.png如果图像和标签扩展名不一致这里会误报缺失先统一格式再跑。3. 用 YOLOV5 训练自己的数据集从环境到首轮收敛3.1 环境配置与依赖版本选择YOLOV5 环境配置的坑集中在 PyTorch 和 CUDA 的匹配上。截至我写这篇时的稳定组合是 Python 3.8~3.10、PyTorch 1.13~2.x、CUDA 11.7/11.8具体以你显卡驱动能支持的 CUDA 上限为准。用 conda 建独立环境别在 base 里装conda create -n yolov5_smoke python3.9 -y conda activate yolov5_smoke # 按官方 requirements 安装torch 单独按 CUDA 版本装 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt装完先验证 GPU 是否可用这一步别省import torch print(torch:, torch.__version__) print(cuda available:, torch.cuda.is_available()) print(device:, torch.cuda.get_device_name(0) if torch.cuda.is_available() else CPU)如果cuda available是 False后面训练会默默跑在 CPU 上速度差几十倍很多人以为「模型不收敛」其实是根本没用到 GPU。参数说明cu118对应 CUDA 11.8你的驱动支持 12.x 就换cu121requirements.txt里如果锁了旧版 torch先装 torch 再装其余依赖避免被覆盖。3.2 训练命令与关键超参数数据目录和data.yaml准备好后训练命令本身很短但参数决定成败python train.py \ --data smoke_damage_dataset/data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --hyp data/hyps/hyp.scratch-low.yaml \ --project runs/train \ --name smoke_damage_v1逐项说--weights yolov5s.pt用预训练权重做迁移学习6 类别数据量不大时比从头训收敛快得多--img 640是输入尺寸香烟破损这种细粒度缺陷如果原图分辨率高可以试 960 或 1280但显存占用按平方增长--batch 16在 8G 显存上跑 640 尺寸通常安全爆显存就降到 8--epochs 100是起点看验证 mAP 曲线是否还在涨再决定加不加--hyp用低增强配置因为缺陷检测对几何形变敏感过度 mosaic、mixup 可能把破损特征搅乱。训练过程中重点看三个输出box_loss、obj_loss、cls_loss。正常情况三者都下降cls_loss下降慢说明类别区分度不够可能是 6 类里有几类视觉上太像比如表面污渍和烟丝外露需要回头检查标注一致性。验证阶段看mAP0.5和mAP0.5:0.95前者到 0.8 以上、后者 0.5 以上对这类工业缺陷算可用基线。3.3 推理验证与结果落盘训练完别只看日志拿验证集图像实际跑一遍推理确认框的位置和类别都对python detect.py \ --weights runs/train/smoke_damage_v1/weights/best.pt \ --source smoke_damage_dataset/images/val \ --img 640 \ --conf-thres 0.25 \ --iou-thres 0.45 \ --save-txt \ --project runs/detect \ --name val_check--conf-thres 0.25是置信度阈值漏检多就降到 0.15误检多就升到 0.4--iou-thres 0.45控制 NMS 合并重叠框的力度同一目标出多个框时调低它。--save-txt会把预测结果按 YOLO 格式存下来方便和真值标签做逐图对比。这一步是「后悔药」与其等部署后现场翻车不如现在把每一类都肉眼过一遍记录哪类容易漏、哪类容易混。4. 香烟破损检测的避坑与排查5 个真实踩坑记录4.1 训练启动报「No labels found」现象命令跑起来日志里train: WARNING: No labels found然后训练直接结束或 mAP 恒为 0。 原因data.yaml里的train/val路径写错或者标签目录名不是labels或者图像和标签文件名对不上。 解决先确认path是绝对路径train是相对path的子路径再用 2.3 的自检脚本查缺失标签最后确认标签文件不是.txt.txt这种双扩展名。4.2 验证 mAP 高得离谱部署却全错现象验证集 mAP0.5 到 0.95换一批现场图几乎全漏。 原因训练集和验证集存在数据泄漏同一包烟的连拍图被分到两边模型记住了背景而不是缺陷。 解决按样本对象重新切分确保同一包烟只出现在一个集合切分后重训mAP 通常会掉一截但那个数字才是真实泛化能力。4.3 某一类始终学不出来现象6 类里tobacco_exposed的 AP 一直接近 0其他类正常。 原因该类样本太少或者标注时和其他类边界模糊标注员把烟丝外露标成了表面污渍。 解决先统计每类实例数少于总实例 5% 的类考虑补充数据或合并到相近类再抽查该类标签统一标注口径必要时重新标注。4.4 显存爆掉CUDA out of memory现象训练几个 batch 后报 OOM。 原因--img或--batch太大或--workers开太多导致内存/显存峰值叠加。 解决优先降--batch到 8 或 4再考虑降--img--workers设成 CPU 核数的一半左右别拉满。YOLOV5 支持梯度累积小 batch 也能等效大 batch但配置更复杂先降 batch 最直接。4.5 推理框位置偏移或类别串号现象检测框能出但位置偏、或者把正常标成破损。 原因标签归一化算错用了像素值没除宽高或data.yaml里names顺序和标注时的类别顺序不一致。 解决抽查几个标签文件确认后四个值都在 0~1核对标注工具导出时的类别映射表和data.yaml是否逐项对应。类别串号是「黑匣子」式错误日志不会报只能靠逐类核对。5. 把 6 类数据集用出上限类别合并策略与验证集复核技巧数据集本身是死的怎么用出上限是活的。6 类别听起来清晰但实际训练里经常遇到「类间相似度高」的问题表面污渍和烟丝外露在低分辨率下几乎一样变形压扁和包装破损也容易混。我一般的做法是先跑一版 6 类基线看混淆矩阵如果某两类互相误判超过 20%就考虑合并成一个「外观缺陷」大类类别数降到 4~5mAP 通常能明显回升。这不是偷懒是让类别定义匹配当前分辨率和数据量。另一个技巧是验证集复核。验证集不只是算指标用的它是你唯一能提前发现标注问题的窗口。我会在训练前把验证集每张图连同标签画出来肉眼过一遍重点看三件事框是否贴紧目标、类别是否标对、有没有漏标。这一步花一两个小时能省掉后面几轮无效训练。画框脚本很短import cv2 from pathlib import Path root Path(smoke_damage_dataset) names [package_damage, cigarette_broken, tobacco_exposed, surface_stain, deformation, normal] colors [(0,0,255),(0,255,0),(255,0,0),(0,255,255),(255,0,255),(255,255,0)] for img_path in (root / images/val).glob(*.jpg): img cv2.imread(str(img_path)) h, w img.shape[:2] lbl root / flabels/val/{img_path.stem}.txt if not lbl.exists(): continue for line in lbl.read_text().strip().splitlines(): c, cx, cy, bw, bh line.split() c int(c) x1 int((float(cx) - float(bw)/2) * w) y1 int((float(cy) - float(bh)/2) * h) x2 int((float(cx) float(bw)/2) * w) y2 int((float(cy) float(bh)/2) * h) cv2.rectangle(img, (x1,y1), (x2,y2), colors[c], 2) cv2.putText(img, names[c], (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, colors[c], 1) cv2.imwrite(fruns/val_vis/{img_path.name}, img)这段脚本把归一化坐标还原成像素坐标画框colors按类别索引取色names顺序必须和data.yaml完全一致否则画出来的类别名会错位。跑完去runs/val_vis逐张看发现标注问题就回标注工具改改完重新导出、重新切分、重新训练。这个循环跑两三遍数据质量会有质的变化。最后说个习惯每次改完数据集我都会在data.yaml旁边留一个CHANGELOG.md记下这次改了什么、为什么改、对应哪次训练。香烟破损检测这种细粒度任务数据版本比模型版本影响大得多没有变更记录两周后你自己都说不清哪版数据对应哪个权重。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python单目双目三维重建实战:从标定到点云 2026/10/1 13:45:00

Python单目双目三维重建实战:从标定到点云

简介:这是一套基于Python实现的单目与双目视觉三维重建项目源码,面向计算机、通信、人工智能、自动化等专业的学生、教师及从业者,可用于课程设计、大作业、毕业设计或自学进阶。项目为个人毕设成果,答辩评审得分98分,…

阅读更多 →
从零开始学AI工程:数据管道、模型部署与MLOps实战全攻略 2026/10/1 13:44:59

从零开始学AI工程:数据管道、模型部署与MLOps实战全攻略

标题里的ai-engineering-from-scratch,翻译过来就是“从零开始学AI工程”。做了这么多年AI engineering相关的工作,我最大的感受是:能把一份数据变成一份报告的人很多,能把一个模型变成一项稳定服务的人很少。很多朋友私信问我&am…

阅读更多 →
哑巴模型Jev:从API密钥申请到接入Codex的实操指南 2026/10/1 13:44:59

哑巴模型Jev:从API密钥申请到接入Codex的实操指南

Jev这词儿最近在技术社区刷屏的密度,高到我想无视都不行,每次刷到后面都跟着同一个标签:哑巴模型。一开始我以为是在吐槽哪个模型没有语音功能,多看几条讨论才反应过来,这里的"哑"根本不是缺陷,而…

阅读更多 →
从零自研放置卡牌服务端:数据模型、通信协议与反作弊实战 2026/10/1 13:44:52

从零自研放置卡牌服务端:数据模型、通信协议与反作弊实战

前阵子有个做后端的朋友半夜给我发消息,说他刷到一条帖子,标题写着"咸鱼之王私服搭建 附源码下载链接",底下还挂着网盘链接,问我有没有兴趣一起搞一个,说流量肯定好。我回了他四个字:别碰这个。…

阅读更多 →
IDM 6.41.2 俄大神版实用解析:多线程下载、浏览器集成与故障排查 2026/10/1 13:44:46

IDM 6.41.2 俄大神版实用解析:多线程下载、浏览器集成与故障排查

1. 这个版本为什么值得聊 先扔一个结论:如果你平时下载东西比较多,经常跟网盘限速、浏览器自带下载龟速、视频网站缓存这些事打交道,那 Internet Download Manager(IDM)这个名字你应该不陌生。这次要聊的版本是 6.41.2…

阅读更多 →
3DGS自制数据集全流程:拍摄、COLMAP与渲染表达器实践 2026/10/1 13:44:46

3DGS自制数据集全流程:拍摄、COLMAP与渲染表达器实践

做3DGS的第七篇,想聊聊一个绕不开的话题:数据从哪来。前六篇把3D Gaussian Splatting的原理拆得差不多了,从高斯的参数化到优化策略都过了一遍,但这套东西真正落地的时候,卡住最多人的往往不是理论,而是喂给…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉