YOLO抽烟检测数据集实战:从数据标注到模型训练与部署

发布时间:2026/10/19 12:18:10

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 能正常下降、没有报错再放开跑完整训练。这个习惯帮我省下过无数次白等一整晚的后悔药。从那以后我每次动数据集都强制先走一遍这个小循环。希望这套数据和思路能帮到你少走点我当年走过的弯路。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/19 12:18:10

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

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

2026/10/19 12:18:10

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

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

2026/10/19 13:19:12

网站防复制与源码保护实战:从右键封锁到反调试的完整方案

被客户要求"把网站源码藏起来,别让人复制"这类需求,我接过不止一次。刚入行时我也觉得这很简单——禁右键、禁选中、禁复制三步走就完事。真在多个项目里完整跑过一遍才发现,这事远没有想象中那么简单,它涉及事件处理、…

2026/10/19 13:19:12

Python requests 文件下载实战:流式处理、断点续传与并发模板

简介:这是一份围绕Python requests模块整理的源码与文档资料包,面向希望告别urllib2繁琐调用的Python开发者。requests凭借简洁API成为主流的HTTP客户端库,资源通过实际源码展示请求发送、响应处理、会话维持等核心用法,便于快速上…

2026/10/19 13:19:12

Spring Boot 整合支付宝沙箱支付:从环境配置到异步回调的完整实战

说实话,支付宝沙箱支付可以说是新手入门支付环节必走的一条路。我当年第一次跑通沙箱支付回调时,踩了整整一个下午的坑,基本都是配置项和异步通知签名验签的问题。现在把整套流程梳理成这篇Spring Boot整合支付宝沙箱测试的文章,从…

2026/10/19 13:19:12

深度学习模型集成全攻略:从偏差方差到快照、SWA与蒸馏

1. 为什么单个模型很难赢:先说清楚集成的统计学根源做深度学习这几年,我越来越觉得有个现象很值得琢磨:明明花了大量时间调参、换结构、加数据,把单个模型的性能磨到了瓶颈,结果随便把几个模型的预测结果平均一下&…

2026/10/19 13:14:10

Hadoop生产级调试:从Educoder实训看分布式系统排错逻辑

1. 这不是“又一个Hadoop实验”,而是真实生产环境的微缩沙盘“educoder-HDFS和MapReduce综合实训”——看到这个标题,很多刚接触大数据的同学第一反应是:“哦,又是平台上的几道填空题和代码补全。”我带过三届某高校数据科学方向的…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑