构建YOLOv5吸烟行为识别数据集:从原理到实战的完整指南

构建YOLOv5吸烟行为识别数据集:从原理到实战的完整指南 简介本资源是专为YOLOv5目标检测模型定制的吸烟行为识别数据集面向计算机视觉初学者与智能安防系统开发者解决公共场所吸烟行为自动检测与精确定位的实际问题适用于禁烟监管、智慧园区监控等落地场景。压缩包共2000个文件含1995个YOLO格式标注txt文件每张图像对应一个边界框坐标及类别标签、3个配置yaml文件定义类别数、路径及训练参数、1个权重下载脚本download_weights.sh和1份README.md说明文档整体大小39.88MB结构规范、开箱即用。已有71人学习下载资源已通过清洗与标准化处理确保标注一致性与图像质量稳定性配套脚本可一键获取预训练权重README明确标注规范与目录逻辑大幅降低YOLOv5训练入门门槛助力快速开展模型微调与效果验证。1. 项目缘起为什么需要一个专门的吸烟行为识别数据集在计算机视觉的落地应用里安防监控下的行为识别一直是个热门且充满挑战的领域。其中吸烟行为的自动识别对于工厂、仓库、加油站、写字楼、学校宿舍等禁烟区域的智能化管理有着非常直接和迫切的需求。我接触过不少项目客户的需求很明确在监控画面里一旦有人点烟或手持香烟系统要能立刻报警通知管理人员。听起来简单但真做起来你会发现市面上通用的目标检测数据集比如大名鼎鼎的COCO或者人脸、车辆数据集在这里几乎派不上用场。为什么因为“吸烟”这个行为不是一个静态的物体而是一个由“人”、“香烟”或烟头以及特定的姿态如手持香烟靠近嘴边共同构成的动态复合事件。COCO数据集里有“人”但没有“香烟”这个类别你或许能找到一些包含烟头的通用物体数据集但识别出一个孤立的烟头和判断一个人正在吸烟完全是两码事。后者需要模型理解人手的姿态、香烟与人脸特别是嘴部的相对位置关系甚至烟雾的细微特征。这就是为什么如果你想用YOLOv5这类高效的目标检测框架来做一个真正可用的吸烟行为识别系统第一步也是最关键的一步就是构建一个“对症下药”的专属数据集。最近在相关社区和论坛里关于“yolov5训练自己的数据集”、“yolov8训练自己的数据集”的讨论非常火热这反映了大家从“跑通Demo”到“解决实际问题”的普遍诉求。而“吸烟行为识别”正是一个典型的需要“自己的数据集”的场景。没有高质量、场景匹配的数据再先进的模型也是巧妇难为无米之炊。所以今天我想结合我的经验详细拆解一下构建一个用于YOLOv5的吸烟行为识别数据集需要关注哪些核心环节以及如何避开那些新手最容易踩的坑。2. 数据集构建的核心挑战与设计原则构建一个行为识别数据集远比标注一堆猫猫狗狗要复杂。它涉及到对“行为”本身的定义、场景的多样性以及标注的粒度。对于吸烟行为识别我们主要面临以下几个挑战2.1 行为定义的模糊性什么才算“吸烟行为”是手指夹着烟是烟正在嘴边还是必须有明显的烟雾吐出在项目初期必须和业务方或自己明确一个可操作的定义。根据我的经验最稳妥且可检测的定义是“人手持点燃的香烟或类似物且香烟末端烟头位于人脸嘴部附近区域”。这个定义包含了三个关键元素人主体、香烟道具、特定的空间关系靠近嘴部。它避免了去判断“吸”这个动作太难而是抓住了吸烟前、吸烟中、吸烟后几个阶段最共有的、最视觉化的特征。2.2 场景与视角的多样性监控摄像头可不是都装在同一个高度和角度。你的数据集必须覆盖视角平视、俯视、仰视。工厂天花板下的摄像头往往是俯视而走廊摄像头可能是平视。距离远景全身、中景半身、近景特写。不同距离下香烟在图像中的像素大小可能只有几个到几十个像素对检测器是巨大考验。光照白天、夜晚、室内灯光、逆光、阴影。夜晚或光线不足时烟头的亮光是关键特征但也可能和手机屏幕、其他光源混淆。背景办公室、车间、仓库、楼道、室外。背景越复杂干扰越多。2.3 负样本的精心设计一个健壮的模型不仅要认识“吸烟”还要能坚决地排除“非吸烟”。负样本的质量直接决定了模型的误报率。你需要刻意收集并标注大量容易混淆的场景手持类似物手持笔、手机、零食、工具等靠近嘴边。手部其他姿态托腮、捂嘴、打电话等。其他光源夜晚的手机屏幕、手电筒、电焊光斑等可能与烟头高光混淆。2.4 标注规范的制定这是数据集质量的基石必须在标注前以文档形式固定下来并让所有标注人员统一理解。标注类别至少需要两个类别person人和cigarette香烟。有些人会考虑增加smoke烟雾类别但我个人不推荐初期这样做。烟雾半透明、形态多变极难标注一致且对于“是否在吸烟”的核心判断香烟本身的位置信息已经足够引入烟雾反而可能引入噪声和标注歧义。标注框Bounding Boxperson框尽可能紧密地框住整个人体即使部分被遮挡。cigarette框这是关键框的目标不是整支烟而是燃烧的烟头部分加上部分烟体。因为未点燃的香烟很难与白色小棍区分而燃烧的烟头有红色亮点和灰色烟灰是更稳定、更显著的特征。框应尽可能小且精确地覆盖这个区域。遮挡与截断处理明确约定香烟被手部分遮挡时如何标只露出烟头时如何标人在图像边缘被截断时如何标这些都要有示例说明。3. 数据收集与预处理实战流程有了设计原则接下来就是动手干活。数据收集是体力活也是技术活。3.1 数据来源渠道完全依赖网络爬虫抓取的图片往往场景单一、质量参差不齐且涉及版权风险。一个更可靠的方案是混合数据源公开数据集挖掘虽然很少有现成的“吸烟行为”数据集但可以从一些相关数据集中提取素材。例如一些细粒度动作识别数据集或监控场景数据集中可能包含吸烟的片段。需要仔细筛选。模拟拍摄这是获取高质量、针对性数据的最有效方式。在确保安全和合规的前提下可以在多种模拟场景办公室、楼梯间、仓库角落下请志愿者模拟吸烟动作可使用电子烟或类似道具替代避免真实健康危害从不同角度、距离进行拍摄。使用手机或相机录制视频再抽帧成图像。合作获取与相关安防企业或园区合作在脱敏打码人脸和隐私信息后使用其真实的、非隐私区域的监控历史数据片段。这是最贴近实际应用的数据价值最高。3.2 视频抽帧与图像清洗如果你获得的是视频素材抽帧是关键步骤。切忌每秒都抽那样会产生大量高度相似的冗余数据浪费标注资源和训练时间。抽帧策略采用自适应抽帧。在动作变化平缓期如人静止站立降低抽帧频率如每秒1帧或每2秒1帧在动作变化剧烈期如抬手点烟、吸烟动作提高抽帧频率如每秒10-15帧。可以使用OpenCV计算连续帧之间的差异度如MSE、结构相似性SSIM来实现自动化的自适应抽帧。图像清洗抽帧后手动或利用简单脚本快速浏览删除完全模糊、过度曝光或欠曝、主体不完整的废片。3.3 数据预处理与增强Pre-processing Augmentation这里的数据增强指的是在标注前或训练时自动进行的图像变换以扩充数据多样性。对于吸烟识别有些增强要慎用推荐使用色彩抖动调整亮度、对比度、饱和度、色调。模拟不同光照和摄像头色彩偏差。随机缩放和平移小幅度的缩放和裁剪让模型不依赖于目标在图像中的固定位置和大小。添加噪声高斯噪声、椒盐噪声模拟摄像头质量差或传输干扰。模糊高斯模糊、运动模糊模拟目标运动或对焦不准。谨慎使用或避免大角度旋转香烟通常是水平或斜向的90度旋转后可能变得不真实竖着的长条香烟。镜像翻转水平翻转是安全的可以增加。但需注意如果数据集中存在文字等非对称信息翻转可能导致上下文错误不过吸烟场景一般不影响。Mosaic增强YOLOv5训练时默认使用的Mosaic增强将四张图拼成一张非常强大能极大地提升模型对小目标和背景的鲁棒性。对于吸烟识别这种小目标烟头检测任务强烈建议开启。它能帮助模型在复杂拼接背景下依然定位到微小的烟头。4. 标注工具选择与YOLO格式详解工欲善其事必先利其器。标注工具的选择直接影响效率。4.1 标注工具对比LabelImg老牌经典本地软件支持Pascal VOC和YOLO格式。适合小规模、入门级项目。缺点是效率较低无团队协作功能。CVAT (Computer Vision Annotation Tool)英特尔开源的基于Web的标注系统功能强大。支持图像、视频标注多人协作自动化标注交互式分割、跟踪。对于吸烟行为这种需要标注多帧视频序列的项目CVAT的插值跟踪功能可以极大提升效率——你只需要标注关键帧上的香烟位置它能在中间帧自动插值生成标注框。Roboflow在线平台提供从数据预处理、标注、增强到版本管理的一站式服务。非常适合团队协作和项目管理但高级功能需要付费。Make Sense AI免费的在线标注工具界面友好支持YOLO格式适合个人或小项目快速上手。对于吸烟行为识别项目如果数据量较大数千张以上或涉及视频序列我推荐使用CVAT。它的跟踪功能在标注连续动作时能节省至少70%的时间。4.2 YOLO格式标注文件解读YOLOv5要求特定的标签格式。每张图片对应一个同名的.txt文件。# class_id center_x center_y width height 0 0.512 0.634 0.120 0.250 1 0.345 0.712 0.015 0.008每一行代表一个标注对象。class_id类别索引从0开始。例如0代表person1代表cigarette。这个对应关系需要在一个data.yaml配置文件中明确定义。center_x, center_y标注框中心点的归一化坐标除以图片宽度和高度范围0~1。width, height标注框的归一化宽度和高度范围0~1。这里有一个至关重要的细节cigarette框的width和height会非常小比如0.01-0.05因为烟头在整张图中占比极小。这正是小目标检测的难点所在。在标注时务必确保框得足够精确哪怕只差几个像素在归一化后也可能产生较大误差。4.3 标注质量控制流程标注不是一蹴而就的必须建立质检环节。标注指南编写详细的标注说明书包含大量正例、反例、边界案例的截图说明。试标与校准让所有标注员先标注同一批如50张图片对比结果统一标准解决歧义。中期抽检在标注过程中随机抽取5%-10%的已标数据进行核查计算标注一致性和准确率。交叉验证将数据分给不同标注员进行二次独立标注通过计算框的IoU交并比来评估标注一致性。对于cigarette这类小目标可以适当放宽IoU阈值如从0.5降至0.3因为几个像素的偏差对IoU影响很大。5. 数据集组织与YOLOv5项目集成标注好的数据需要按照YOLOv5要求的目录结构进行组织并编写配置文件。5.1 标准目录结构smoking_detection_dataset/ ├── images/ │ ├── train/ │ │ ├── image001.jpg │ │ └── ... │ └── val/ │ ├── image101.jpg │ └── ... └── labels/ ├── train/ │ ├── image001.txt │ └── ... └── val/ ├── image101.txt └── ...images/train和images/val分别存放训练集和验证集的图片。labels/train和labels/val分别存放对应的YOLO格式标签文件。重要务必确保train和val两个集合是完全独立的即同一场景、同一人的不同帧不能同时出现在训练集和验证集否则会严重高估模型性能造成“数据泄露”。应该按视频片段或场景来划分。5.2 创建data.yaml配置文件这个文件是YOLOv5训练时读取数据集信息的入口放在项目根目录下。# smoking_detection_dataset/data.yaml path: ../smoking_detection_dataset # 数据集根目录的相对路径或绝对路径 train: images/train # 训练集图片路径相对于 path val: images/val # 验证集图片路径相对于 path test: # 测试集路径可选 # 类别数量 nc: 2 # 类别名称列表顺序必须与标注文件中的 class_id 对应 names: [person, cigarette] # 可选下载命令/URL本例中不需要 # download: ...这个简单的配置文件告诉YOLOv5数据在哪、怎么划分、有几个类别、分别叫什么。5.3 数据集划分策略通常按70%训练: 20%验证: 10%测试的比例划分。划分时一定要以“场景”或“视频ID”为单位随机划分而不是打乱所有图片随机分这样才能保证验证集和测试集能真实反映模型在未见过的场景下的泛化能力。6. 数据增强策略的针对性调整YOLOv5在训练时内置了丰富的数据增强但我们需要根据吸烟行为识别的特点对其超参数进行微调。这些调整通常在hyp.scratch.yaml或自定义的超参数文件中进行。6.1 针对小目标烟头的增强mosaic: 1.0 保持开启。Mosaic增强对于让小目标烟头出现在各种复杂上下文环境中训练至关重要。copy_paste: 0.0 建议关闭。复制粘贴增强可能将烟头不合逻辑地粘贴到非手部区域制造出错误的训练样本。scale: 0.5 缩放增强系数。可以保持默认或略微调高增加尺度多样性。flipud: 0.0和fliplr: 0.5 上下翻转建议关闭人倒立吸烟不真实水平翻转可以开启。6.2 针对光照变化的增强hsv_h: 0.015 色调Hue增强强度。可以稍微增加如到0.02模拟不同色温的光照。hsv_s: 0.7 饱和度Saturation增强强度。保持较高值以应对监控画面色彩失真的情况。hsv_v: 0.4 明度Value增强强度。保持适中模拟亮度变化。6.3 一个参考的增强超参数片段# hyp.smoking.yaml (自定义) lr0: 0.01 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 warmup_momentum: 0.8 warmup_bias_lr: 0.1 box: 0.05 cls: 0.5 cls_pw: 1.0 obj: 1.0 obj_pw: 1.0 iou_t: 0.20 anchor_t: 4.0 fl_gamma: 0.0 hsv_h: 0.015 hsv_s: 0.7 hsv_v: 0.4 degrees: 0.0 translate: 0.1 scale: 0.5 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.5 mosaic: 1.0 mixup: 0.0 copy_paste: 0.0注意这里我将degrees旋转和flipud上下翻转设为0copy_paste也设为0以更贴合实际场景。7. 模型训练与数据集性能验证数据集准备好后就可以用它来训练和验证YOLOv5模型了。这个过程也是检验数据集质量的试金石。7.1 使用自定义数据集启动训练假设你的YOLOv5代码目录为yolov5/数据集和配置文件按上述准备好后一个典型的训练命令如下cd yolov5 python train.py --img 640 --batch 16 --epochs 100 --data ../smoking_detection_dataset/data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --name smoking_detection_v1 --hyp hyp.smoking.yaml--img 640: 输入图像尺寸。对于监控场景640是一个兼顾速度和精度的常用尺寸。如果烟头目标特别小可以尝试增大到960或1280但会显著增加显存消耗和训练时间。--batch 16: 批次大小根据你的GPU显存调整。--epochs 100: 训练轮数。对于中等规模数据集100-150轮通常足够。--data: 指向你的data.yaml配置文件。--cfg: 选择模型结构。yolov5s.yaml是最小的模型速度快适合部署。如果精度不够可以换用yolov5m.yaml或yolov5l.yaml。--weights: 加载预训练权重。从yolov5s.pt开始进行迁移学习这是收敛速度和效果的最佳起点。--name: 本次训练运行的名称用于在runs/train/下创建结果目录。--hyp: 使用我们自定义的超参数文件。7.2 通过训练过程监控数据集问题训练开始后密切关注TensorBoard或日志输出的指标它们能暴露出数据集的潜在问题Box Loss 和 Objectness Loss 居高不下可能标注框质量差不准确、不一致或者cigarette这类小目标太难学。回顾标注样本检查小目标的框是否标得足够好。验证集精度mAP0.5远低于训练集这是典型的过拟合说明验证集和训练集分布差异大或者验证集本身标注有问题。检查数据集划分是否做到了“场景独立”并抽查验证集的标注质量。某个类别如cigarette的AP值特别低说明该类别数据量可能不足或者多样性不够例如全是白天数据没有夜晚数据。你需要针对性补充这类数据。7.3 模型评估与错误分析训练完成后在验证集上运行评估并仔细分析模型预测错误的样本python val.py --data ../smoking_detection_dataset/data.yaml --weights runs/train/smoking_detection_v1/weights/best.pt --img 640YOLOv5会生成详细的评估报告和混淆矩阵。更重要的是它会保存预测结果的可视化图片。你需要一张张查看这些图片特别是那些漏检False Negative和误检False Positive的案例漏检香烟是香烟太小光照太暗被严重遮挡还是姿态过于罕见如手背完全遮住烟头这些案例指明了数据集的“盲区”需要补充类似场景的数据。误检把什么当成了香烟是手指、笔尖、灯光反光还是其他这些案例是你的负样本需要加强的方向在数据集中增加更多此类“易混淆”负样本。8. 数据集的迭代与维护没有一个数据集是生来完美的。模型评估的错误分析是驱动数据集迭代升级的最重要反馈。8.1 建立数据闭环构建一个“训练-评估-分析-补充-再训练”的闭环用初始数据集V1训练模型。在独立的测试集或真实场景数据上评估模型。分析错误案例归纳出数据缺陷类型如“夜晚背光烟头漏检”、“手持白色细棍误报”。根据缺陷类型定向采集和标注新的数据。将新数据加入原有数据集形成V2版本。用V2数据集重新训练或微调模型。8.2 版本化管理使用类似Git的思维或工具如DVC、Roboflow的版本功能来管理数据集的不同版本。每次迭代都要记录增加了什么数据、解决了什么问题、模型性能提升了多少。这能让你清晰地看到数据工作的投入产出比。8.3 关于数据量的经验之谈经常有人问“到底需要多少张图” 这没有固定答案取决于场景复杂度。对于一个室内办公场景的吸烟识别一个可用的起点可能是训练集3000-5000张包含吸烟行为的图像对应约10-20万个人和香烟的标注实例。验证集500-1000张。测试集300-500张。如果场景扩展到室内外多种环境、光照变化极大数据量可能需要翻倍甚至更多。记住数据的多样性和质量远比单纯的数量更重要。1000张覆盖了各种挑战场景的精心标注的图片可能比5000张单一场景的图片更有价值。构建一个高质量的YOLOv5吸烟行为识别数据集是一个需要耐心、细心和科学方法的过程。它远不止是“打框”那么简单从行为定义、场景规划、负样本设计到标注规范、质量检查、增强策略每一步都影响着最终模型的成败。希望这份详细的拆解能帮你避开我当年踩过的那些坑更高效地打造出属于你自己的、能真正解决实际问题的“弹药库”。毕竟在AI落地的战场上高质量的数据永远是第一生产力。本文还有配套的精品资源点击获取