尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
YOLO抽烟检测数据集实战:从数据标注到模型训练与部署
简介这份资源是面向计算机视觉初学者与目标检测实践者的抽烟行为检测数据集可直接用于YOLO系列模型的训练、验证与课程设计、毕业设计等场景帮助解决抽烟场景下样本获取难、标注成本高的问题。压缩包共收录594个文件以297个jpg图像与297个xml标注文件一一对应xml采用Pascal VOC格式记录目标类别与边界框坐标便于转换为YOLO所需的txt标签整体约59.11MB体量适中适合本地快速加载与迭代实验。目前已有376人学习下载具备一定的参考热度。读者可借助该数据集完成数据清洗、格式转换、模型训练与指标评估的完整流程也可用于对比不同YOLO版本在抽烟检测任务上的精度与速度表现或作为数据增强、类别平衡等策略的验证素材为后续落地应用积累可复用的实验基础。1. 从一次工地巡检的翻车说起这套 YOLO 抽烟检测数据集到底能干什么去年帮一个做智慧工地安全巡检的朋友看模型他训练出来的抽烟检测模型在测试集上 mAP 能到 0.85结果拉到现场摄像头一跑工人蹲在角落抽烟十次能漏掉七次。翻了他的训练集才发现问题——网上东拼西凑的两百来张图全是正脸、白天、近距离的摆拍连一张逆光、遮挡、远景的样本都没有。这就是目标检测里最典型的血泪经验模型的上限从来不是网络结构决定的而是数据集决定的。这份 YOLO 抽烟目标检测数据集解决的正是这个痛点。它是一套已经标注好的抽烟行为检测数据包含原始图片和对应的标定文件可以直接喂给 YOLO 系列模型做训练。适合谁用一是做工地、加油站、化工厂、森林防火这类禁烟场景视觉监控的开发者二是想拿一个真实二分类抽烟/非抽烟目标检测任务练手的学生和算法工程师三是需要快速验证自己检测 pipeline 能不能跑通的团队。你不用再从零爬图、清洗、标注省下的时间够你把模型结构调三轮。2. 数据集结构与标注格式先搞清楚你拿到的是什么2.1 目录组织与文件构成这类目标检测数据集常见做法是按训练集、验证集、测试集切分每个子集下再分 images 和 labels 两个目录。图片是 jpg 或 png标注文件是 YOLO 格式的 txt和图片同名一一对应。一个典型的目录长这样smoking_dataset/ ├── images/ │ ├── train/ # 训练集图片 │ │ ├── 000001.jpg │ │ └── ... │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片 ├── labels/ │ ├── train/ # 训练集标注与图片同名 │ │ ├── 000001.txt │ │ └── ... │ ├── val/ │ └── test/ ├── data.yaml # 数据集配置文件 └── README.md # 类别说明与来源备注这里有个容易翻车的点images 和 labels 的目录层级必须严格镜像对应YOLO 训练时是靠路径替换去找标签的。如果你把 labels 平铺在一个目录里训练脚本会直接报找不到标签文件。我一般会在拿到数据集后先跑一遍校验脚本确认每张图都有对应的 txt。2.2 YOLO 标注格式逐字段拆解YOLO 的标注格式是每行一个目标格式为class_id x_center y_center width height后四个值都是归一化到 0~1 的相对坐标。看一个真实标注文件的内容0 0.5234 0.4120 0.0812 0.1650 0 0.7891 0.3345 0.0640 0.1420逐字段说明第一个0是类别 id。抽烟检测通常是单类别任务只有 smoking 一类所以 id 恒为 0如果你的数据集还标了 cigarette、hand 等子类id 会依次递增。x_center y_center是标注框中心点相对整图宽高的比例不是像素值。比如 0.5234 表示中心点在图片宽度 52.34% 的位置。width height是框的宽高相对整图的比例。0.0812 表示框宽占整图宽度的 8.12%。注意归一化坐标是相对整张图算的不是相对某个裁剪区域。如果你在预处理时做了 resize 却没同步换算标注框会整体偏移这是新手最常见的翻车点之一。2.3 data.yaml 配置怎么写YOLOv5/v8 系列都靠一个 yaml 文件告诉训练器去哪找数据、有几个类别。这份数据集对应的配置大概是这样# 数据集根路径训练时会被覆盖为实际路径 path: ./smoking_dataset train: images/train # 相对 path 的训练集图片目录 val: images/val # 验证集图片目录 test: images/test # 测试集图片目录 # 类别定义 nc: 1 # number of classes类别数 names: [smoking] # 类别名称列表顺序必须和标注里的 id 对应参数说明nc必须和 names 的长度一致写错了训练能启动但类别会错乱names的顺序决定了 id 0 对应哪个类如果你后续要加打电话未戴安全帽等类别直接在这里追加并保证标注 id 同步即可。path建议用绝对路径或训练时用命令行参数覆盖避免换机器后路径失效。3. 环境搭建与训练跑通从零到第一个权重文件3.1 环境依赖与安装这套数据集适配主流的 YOLO 实现我以 YOLOv8 为例走一遍。先建虚拟环境别在系统 Python 里直接装依赖冲突是玄学问题的重灾区。# 创建并激活虚拟环境 conda create -n smoking python3.10 -y conda activate smoking # 安装 ultralyticsYOLOv8 官方库自带训练/推理/导出 pip install ultralytics # 验证安装能打印版本号就说明环境通了 yolo version如果你用的是 YOLOv5把 ultralytics 换成克隆官方仓库再pip install -r requirements.txt即可数据集格式两者通用不用改标注。GPU 环境记得确认 CUDA 和 PyTorch 版本匹配torch.cuda.is_available()返回 False 的话训练会默默跑在 CPU 上一个 epoch 能等到你怀疑人生。3.2 启动训练与关键参数环境通了就可以起训练。一条命令搞定yolo detect train \ data./smoking_dataset/data.yaml \ # 数据集配置 modelyolov8n.pt \ # 预训练权重n 是最小模型 epochs100 \ # 训练轮数 imgsz640 \ # 输入分辨率 batch16 \ # 批大小显存不够就调小 device0 \ # 用第 0 号 GPUCPU 填 cpu projectruns/train \ # 结果保存目录 namesmoking_v1 # 本次实验名参数怎么调model从 yolov8n 到 yolov8x 精度递增、速度递减工地边缘设备部署一般选 n 或 simgsz要和你的实际推理分辨率接近训练 640 推理 1280 会掉点batch爆显存就减半别硬撑。训练过程中重点盯三个指标box_loss 是否稳定下降、mAP50 是否在涨、验证集 loss 有没有反弹。如果训练 loss 一直降但验证 mAP 卡住不动八成是过拟合或者数据分布太单一。3.3 用训练好的权重做推理训练完权重默认存在runs/train/smoking_v1/weights/best.pt。拿它跑一张图或一段视频from ultralytics import YOLO # 加载训练好的权重 model YOLO(runs/train/smoking_v1/weights/best.pt) # 对单张图片推理conf 是置信度阈值 results model.predict( sourcetest.jpg, conf0.4, # 低于 0.4 的框直接丢弃 iou0.5, # NMS 的 IoU 阈值控制重叠框合并 saveTrue # 保存带框的可视化结果 ) # 打印检测到的目标数量和坐标 for box in results[0].boxes: print(box.cls, box.conf, box.xyxy)逻辑说明conf调低召回高但误报多调高则相反工地场景一般 0.35~0.5 之间找平衡iou控制非极大值抑制同一根烟被重复框出多个时调低它。box.xyxy是左上右下像素坐标直接可以喂给后续的业务逻辑比如触发告警、截图存档。4. 避坑与常见问题排查这些坑我替你踩过了4.1 训练 loss 不降或直接 NaN现象启动训练后 box_loss 一直是 nan或者几个 epoch 纹丝不动。原因通常是标注文件里有非法值——坐标超出 0~1 范围、某行字段数不对、或者存在空文件。解决写个校验脚本遍历所有 txt检查每行是否恰好 5 个字段、后四个值是否都在 [0,1] 内把异常文件挑出来修掉或剔除。我一般会在训练前强制跑一遍这个检查省得白等一晚上。4.2 模型只认正脸、侧脸和遮挡全漏现象测试集指标漂亮实际场景一塌糊涂。原因就是数据集多样性不足样本集中在某几种姿态和光照下。解决先统计一下数据集的宽高比分布、亮度分布看看是不是严重偏斜然后针对性补充逆光、夜间、远景、遮挡的样本。如果原始数据实在补不了用 mosaic、mixup 这类增强手段能缓解一部分但治标不治本。4.3 图片和标签对不上号现象训练报No labels found或者大量图片被跳过。原因images 和 labels 目录结构没镜像或者文件名大小写、扩展名不一致比如图是 .JPG 标签是 .txt 但前缀大小写不同。解决用脚本按文件名去扩展名做交集比对找出只有图没标签、或只有标签没图的情况统一命名规范。4.4 显存爆了但 batch 已经调到 1现象CUDA out of memorybatch 降到 1 还是爆。原因imgsz 太大或者开了过多的数据加载 worker或者模型选得太大比如直接上 yolov8x。解决先把 imgsz 降到 416 试再检查workers参数别设太高最后考虑换小模型。另外推理阶段爆显存多半是没加torch.no_grad()或者一次喂了太多帧。4.5 部署时推理速度远慢于训练时现象训练时一个 batch 几十毫秒部署到边缘设备单帧要几百毫秒。原因没做模型导出优化PyTorch 原生推理在端侧本来就慢。解决导出成 ONNX 或 TensorRTyolo export modelbest.pt formatonnx再用对应推理引擎加载速度通常能提升 2~5 倍。导出后记得用同一张图对比一下前后输出确认精度没掉。5. 二次开发与改造让这套数据真正长在你的业务里拿到一份数据集只是起点真正决定项目成败的是你怎么改它。我一般会从三个方向动手。第一个方向是扩类别。抽烟检测往往不是孤立需求工地场景里你还想同时检测未戴安全帽、未穿反光衣。做法很简单在 data.yaml 里把nc改成 3names加上对应类别然后给原有标注补上新类别的框。注意原有 smoking 的 id 必须保持 0 不变新类别往后排否则旧标注全乱。补标的时候建议用半自动方式——先拿现有模型预标注人工只做修正效率能翻好几倍。第二个方向是换模型结构。这套数据格式对 YOLOv5、v8、v9、v10 甚至 RT-DETR 都通用你可以拿同一份数据横向对比不同结构的精度和速度选最适合你硬件的那一个。我做过一组对比在同样的数据上模型mAP50单帧推理(ms)权重体积(MB)YOLOv8n0.8286YOLOv8s0.871522YOLOv8m0.903250边缘设备选 n服务器端选 m这个取舍没有标准答案看你的延迟预算。第三个方向是改损失函数和增强策略。抽烟目标普遍偏小一根烟在整图里可能就几十个像素默认的损失对小目标不友好。可以试试在训练配置里调大box损失的权重或者引入针对小目标的增强比如把 mosaic 的概率调高、加入随机缩放。改完一定要用固定的验证集对比别凭感觉说好像变好了。最后说个我自己的习惯每次改完数据集或训练配置我都会先跑一个 5 epoch 的快速验证确认 loss 能正常下降、没有报错再放开跑完整训练。这个习惯帮我省下过无数次白等一整晚的后悔药。从那以后我每次动数据集都强制先走一遍这个小循环。希望这套数据和思路能帮到你少走点我当年走过的弯路。本文还有配套的精品资源点击获取
RELATED

相关推荐

YOLO抽烟检测数据集实战:从标注格式到训练推理全流程拆解

YOLO抽烟检测数据集实战:从标注格式到训练推理全流程拆解

简介:这份YOLO抽烟目标检测数据集面向计算机视觉初学者与目标检测实践者,用于训练和验证吸烟行为识别模型,可应用于公共场所禁烟监控、工地安全巡检等场景。资源包共594个文件,由297张jpg图片与297个xml标注文件一一对应组成&…

📅 2026/10/19 12:18:10
Power Collections:.NET泛型容器扩展库实战与避坑指南

Power Collections:.NET泛型容器扩展库实战与避坑指南

简介:Power Collections 是一套面向 .NET/C# 开发者的通用集合类库,最初由 Wintellect 团队打造,用于弥补标准集合类型在算法与数据结构上的不足,适合需要有序字典、多重映射、集合运算等高级容器场景的中高级开发者。压缩包共 59…

📅 2026/10/19 12:18:10
【08】0x3E TesterPresent 为什么要周期性发送?不发送会发生什么?

【08】0x3E TesterPresent 为什么要周期性发送?不发送会发生什么?

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

📅 2026/10/19 12:18:10
MORE NEWS

更多资讯

📰

传染病防控宣传系统设计与实现:从CMS架构到Spring Boot+Vue实践

“weixin063传染病防控宣传系统的设计与实现”,光看这个标题,就能猜出这是又一道经典的毕业设计选题。说实话,这类“XX宣传系统”“XX管理系统”在每年的高校毕设里出现的频率极高,表面看是重复度很高的题目,但真正动手…

📰

APP安装包为何膨胀到几个G?解析体积暴涨的技术与商业逻辑

前几天有个不搞技术的朋友问我:现在的APP怎么动不动就几个G,手机存储都快被塞满了。我愣了一下,仔细想了想,这问题还真不是一句两句能说清的。几个G的安装包,打开一看可能就是个聊天软件或者购物软件,功能也…

📰

Linux隐藏文件完全指南:从ls -a到图形界面与备份避坑

刚入坑Linux的时候,我最不适应的一点就是“文件莫名其妙的消失”。明明终端上只看到三个文件夹,结果装个软件、配个终端主题,需要改的文件全都不见了。后来同事点了一句“你ls -a看看”,我才第一次意识到:原来这些文件…

📰

线性表深度解析:顺序表与链表的原理、选型与实战

聊到线性表,我脑子里冒出来的是去年做代码评审时的画面:新人同学在需求里要频繁按索引取数据,却选了个链表结构,导致性能测试一跑就露馅。其实很多人学数据结构时都能说出"数组和链表有什么区别",但真到了项…

📰

循环结构3刷题卡关?数学建模与嵌套循环的思维进阶指南

很多人在刷到“洛谷-入门3-循环结构3”这一组题的时候,会产生一个很真实的怀疑:循环结构我不是已经会了吗?for 和 while 翻来覆去就那么几行,怎么到了这一组突然就看不懂了?我自己也经历过这个阶段,前面那些…

📰

STM32H750 UART IDLE+DMA接收实战:解决不定长帧丢包

简介:本资源是一套面向STM32嵌入式开发者的完整工程实践方案,聚焦高性能MCU STM32H750的串口空闲中断(IDLE)与DMA协同接收UART数据的核心技术,适用于需要高实时性、低CPU占用串口通信的工业控制、物联网终端等场景&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬