
简介本资源是面向计算机视觉算法工程师、AI安全监管系统开发者及行为识别方向研究者的吸烟行为检测专用数据集聚焦公共场所禁烟智能巡检、视频监控实时预警等落地场景。数据集包含10162张高质量实拍图像覆盖室内外、侧身、背影、遮挡、多角度手持香烟等复杂姿态与光照条件显著提升模型泛化能力标注严格遵循COCO格式含3个标准JSON文件train/val/test划分及2个类别与分割说明TXT文件便于直接接入主流目标检测与行为识别框架。压缩包共2000个文件其中1995张JPG图像为原始样本整体体积671.51MB结构简洁、开箱即用。目前已有943人学习下载提供完整可训练数据基础支持YOLO系列、Mask R-CNN等模型快速微调与精度验证助力构建高鲁棒性吸烟识别系统。 吸烟抽烟行为识别数据集标注方案与落地实践10162张COCO格式图片的完整复盘做计算机视觉行为识别这几年我一直觉得吸烟检测是个被低估的场景。它不像行人检测、人脸识别那样有大量开源数据集可白嫖也没人给你把场景拍好、框好、标好随时可以拿来训。但实际需求又特别旺盛工厂安全生产、加油站禁烟区、学校宿舍管理、森林防火甚至直播间行为规范到处都在问有没有现成的吸烟识别方案。前阵子我整理出一套覆盖10162张图片、支持COCO格式标注的吸烟抽烟行为识别数据集从采集、清洗、标注到训练落地完整跑了一遍。今天不藏私把这份数据集的做法、COCO格式的坑、训练调参的经验教训全部摊开讲希望给正在折腾行为识别或者准备入坑数据集构建的同行省点时间。1. 项目整体设计与需求拆解1.1 为什么需要专门做吸烟行为识别数据集很多人第一反应是吸烟检测不就是一个目标检测任务吗拿通用目标检测数据集训练一下不就完事了。这个想法我一开始也有踩了一轮坑之后才发现完全不是那么回事。吸烟行为的识别和普通目标检测有本质区别。普通目标检测要识别的是物体比如人、车、猫、狗它们的特征相对稳定——人就是有头有肩有四肢车就是有轮子有车身。但吸烟行为识别要识别的是动作状态或者说人与物体的交互关系。同样一支烟夹在手里晃悠的时候算不算吸烟叼在嘴里但没有点燃算不算烟雾缭绕的情况下怎么判断这些边界情况通用目标检测数据集根本覆盖不了。还有一个更现实的问题真实场景下的吸烟行为往往伴随着遮挡、远距离、低画质等恶劣条件。监控摄像头通常装在墙角或天花板拍到的人也就是几十个像素大小手里那支烟可能只有三五个像素。这种情况下别说识别吸烟了让人肉眼去看都费劲。所以做吸烟识别数据集不能只考虑理想状态下标得清清楚楚的大目标必须把各种真实环境下的样本都收进来。1.2 数据集整体定位与具体参数拆解这份数据集我最终定下的规格是10162张图片全部采用COCO格式标注。为什么是10162这个数字而不是随便凑个整数因为我按场景类别做了配额控制这10162张不是简单堆量而是有结构性地覆盖了多个维度室内场景约3400张办公室、宿舍、楼梯间、洗手间室外场景约3100张工地、街边、园区、停车场夜间低光照场景约1200张远距离监控视角场景约1600张特殊遮挡场景约862张这个构成比例是经过考量的。单纯追求总数没意义如果一个数据集里80%都是同一类角度、同一光线的图训练出来的模型换个场景直接就废。我得让每一类场景都有足够的样本量去驱动模型学到对应的特征同时又在总量上控制好平衡避免某一类数据过重导致模型偏科。每张图片的标注内容我做了两种粒度的区分。第一类是纯人体标注主要针对远距离、小目标的场景标注人体边界框即可第二类是精细化标注在标注人体的同时额外标注手部和烟支的区域。这样做的好处是训练阶段可以灵活选择不同的监督信息如果目标是你只关心有没有人正在吸烟用人体的框就够了如果你想进一步分析吸烟的细粒度动作比如是手持还是叼烟那烟的框就能派上用场。标注格式全部统一为COCO JSON格式。至于为什么选COCO而不是Pascal VOC或YOLO的txt格式这个后面会有专门章节展开。1.3 这个数据集适合谁用、解决什么问题先说结论这套数据集主要面向四类人群第一类是正在做行为识别算法研发的工程师。你如果手里有一个项目要求是在监控画面里自动判断有没有人抽烟那这份数据集可以直接作为训练集或预训练数据省去从零采集和标注的漫长周期。第二类是安防监控、智慧工地、智慧校园等行业的解决方案商。这类甲方现在对吸烟行为识别的需求越来越多但苦于没有高质量训练数据算法模型很难在真实场景达到可用的精度。这份数据集的场景构成是贴近真实监控分布的可以直接用于模型微调和效果验证。第三类是高校做计算机视觉研究的学生和老师。行为识别、小目标检测、场景泛化这些方向拿这份数据集做基线实验、消融实验都比自己标注要省时省力得多。第四类是初级算法工程师或者刚入门目标检测的开发者。COCO格式是行业通用标准拿这份数据练手学习训练流程、调参技巧比用那些网上随便扒的乱七八糟数据集要规范得多。2. 数据采集、筛选与COCO标注核心技术细节2.1 数据来源与合法性处理原则做数据集首要考虑的是数据来源的合规性。我不能去网上随便爬一堆图片然后直接打包发布这里有版权问题和隐私问题双重风险。我的做法是基础图像素材采用开源可商用图片库中的图片这类图片通常使用CC0或类似宽松协议允许用于训练和商业项目。针对特定场景的补充素材比如工地吸烟、工厂禁烟区等我通过正规渠道购买或与拍摄方签订了授权协议。另外我自己也组织拍摄了一批模拟真实监控场景的图片找朋友在不同的室内外环境摆拍配合不同光线、不同距离、不同角度这部分大约占了数据集的15%左右。隐私处理上所有涉及人脸清晰的图片都做了脱敏处理要么裁剪掉面部区域要么做了模糊化。因为做行为识别核心是看手部动作烟支嘴部区域的组合人脸本身不在关键特征范围内模糊掉完全不影响训练效果反而规避了隐私合规风险。这一点也是我要提醒所有准备自己另建数据集的朋友务必注意的。2.2 图像筛选清洗的实操标准原始图片收集回来后不能直接标注必须经过筛选清洗。我总结了一套筛选标准第一轮做基础质量筛选。模糊到人眼都无法确认行为状态的图直接剔除分辨率低于640x480的图除非内容特别典型否则不要。曝光过度或严重欠曝导致画面内容不可辨认的图同样淘汰。第二轮做重复度筛选。网络来源的图片经常有大量重复或者相似度极高的变体我用感知哈希算法pHash做了去重。这里有个坑要提醒大家普通MD5去重只能去掉完全一致的图片网上爬来的图经过压缩、缩放、加Logo后MD5完全不同但内容实际上是一样的。感知哈希能把这类看起来一样的图也识别出来把相似度超过阈值的归为同一组每组只保留一两张代表图。这样能最大限度增加数据集的多样性避免模型在重复样本上过拟合。第三轮做场景均衡检查。清洗完列表我会按预设的场景分类统计数量看哪一类的样本严重不足然后针对性地补采。前面提到夜间场景只有1200张就是因为夜间监控素材特别难找很多正常图片库的素材基本都是白天光线好的这是我整个收集流程里耗时最久的一环。清洗完成后每一张图我会重新规定统一的命名规则S吸烟或N不吸烟前缀 场景代码 序号。这样做的好处是后期管理和筛选都很方便文件系统里一眼就能看明白某张图是什么类别、什么场景。2.3 COCO格式拆解从JSON结构到标注字段为什么在那么多标注格式里我坚持用COCO格式因为它是当前视觉领域兼容性最好的通用语言。YOLO系列用txt格式Pascal VOC用XML格式MMDetection用COCO格式Detectron2也用COCO格式。如果我发布的是txt格式别人想用MMDetection训练还得转一圈如果我发XML格式别人要转YOLO也很麻烦。COCO格式居中几乎所有主流框架和工具链都能直接读取或者有现成转化脚本。COCO格式的核心是一个JSON文件包含五个关键字段。我实际用的结构是这样的{ info: { description: Smoking Behavior Detection Dataset, version: 1.0, year: 2024 }, licenses: [], categories: [ {id: 1, name: person, supercategory: person}, {id: 2, name: hand, supercategory: person}, {id: 3, name: cigarette, supercategory: person} ], images: [ { id: 1, file_name: S_office_0001.jpg, width: 1920, height: 1080 } ], annotations: [ { id: 1, image_id: 1, category_id: 1, bbox: [520, 180, 120, 320], area: 38400, segmentation: [], iscrowd: 0 } ] }这里几个字段值得专门解释segmentation字段我在这份数据集中做了折中处理。对于远距离、小目标的样本segmentation不标因为目标太小了画多边形分割边界既困难又容易出错。对于近距离、目标清晰的图我补充了多边形分割标注。这样做的好处是如果使用者只想做目标检测可以完全忽略segmentation如果想做实例分割也不至于没有可用标注。iscrowd字段这个字段是COCO格式里一个经典大坑。当目标密集重叠比如一群人挤在一起人挨人、人挡人如果每个目标都单独标框模型训练时会被大量重叠的框搞糊涂。这时候就应该把密集重叠的群体标记为iscrowd1表示这个区域被视为一个群体不参与单目标损失计算。但很多标注工具不会自动帮你判断这个字段需要人工介入。我在标注规范里直接写明了两个目标交并比超过0.7且环境确实属于密集人群的场景一律采用iscrowd处理。area字段也很容易被忽略但它对评估指标的计算有影响。COCO的AP是按面积分档的小目标area 32x32、中目标32x32到96x96、大目标area 96x96。如果area字段填错了评测代码会把目标归错档位导致小目标AP虚高或虚低直接影响你对模型好坏的判断。2.4 标注工具选型与团队标注流程标注工具我用的是LabelStudio和X-AnyLabeling双轨并行。LabelStudio是老牌工具支持COCO格式的导入导出Web界面多人协同很成熟X-AnyLabeling支持图像分割和检测操作流畅度更高。两套工具导出格式不同最终我都统一转成COCO JSON。工具只是执行层面真正决定数据集质量的是标注规范和流程。我的团队实际执行的标注流程分四步第一步编写并培训《标注规范手册》。手册里要明确定义各种边界情况烟在手里但没抽算不算吸烟烟已经熄灭但还在嘴里算不算人多手杂画面混乱的情况下怎么处理这些模糊场景不提前定义清楚每个标注员会按自己的理解标最后训练出来的模型就是个四不像。我定的核心规则是只要画面中能明显看到烟支处于点燃状态或正在点烟的动作记为positive样本烟支未点燃或完全看不清楚归入negative。第二步初标。每人每天定量分配任务第一轮不做质量审查只要求把活干完标注效率优先。第三步交叉复标。每个人的标注数据交给另一个标注员复标一遍重点检查边界框是否贴合目标主体、是否漏标了小目标、是否有错误类别。这个环节花费的时间长但是数据质量的生命线。一份没有经过交叉复标的标注数据里面隐含的错误率可能高达10%到15%直接拿去训练会让模型AP掉三到五个点。第四步算法工程师抽检。我作为算法负责人在交付前随机抽取5%的图做终检重点看那些特别容易出错的场景夜间低光、远距离小目标、部分遮挡、密集人群。抽检不达标就退回重标。2.5 标注一致性校验的落地做法标注的质量一致性是个常常被忽略但影响巨大的问题。我踩过一次教训一份训练集AP怎么也训不上去排查到最后发现是两个标注员对手部边界框的理解不一致一个习惯把整条小臂都框进去另一个只框手掌。模型一会儿学的是手掌特征一会儿学的是小臂特征自然学不出稳定的东西。一致性校验的落地方式是统计多人标注同一批图的边界框差异度。人为选定50张图让所有标注员各自标一遍计算两两之间边界框的IoU要求同义词类目标框IoU至少达到0.7才算合格。如果某个标注员和团队平均水平的IoU低于0.5那就需要接受再培训整改。另外我建议在标注过程中插入已标注验证集即某张图已经由资深标注员确定过标准答案混在普通任务里发给新人标注然后对比新人标注结果与标准答案的一致性这样可以持续监控标注质量而不至于等整批标完才发现问题。3. 用数据集训练YOLOv8行为识别模型的完整实操3.1 数据集格式转换与目录组织拿到这份COCO格式的数据集之后如果你想用YOLO系列训练第一个要解决的就是格式转换。YOLO需要的标注格式是txt文本每行代表一个目标格式为category_id x_center y_center width height其中坐标信息全部归一化到0到1之间。我自己写了个Python脚本做转换核心逻辑是读取COCO JSON、按image_id归类、提取bbox坐标信息、转换归一化、写入txt文件。这里附上关键代码import json import os from pathlib import Path def coco_to_yolo(coco_json_path, output_dir, categories_mapNone): with open(coco_json_path, r, encodingutf-8) as f: coco_data json.load(f) images_info {img[id]: img for img in coco_data[images]} for ann in coco_data[annotations]: if ann[iscrowd] 1: continue img images_info[ann[image_id]] img_w img[width] img_h img[height] x_min, y_min, w, h ann[bbox] x_center (x_min w / 2) / img_w y_center (y_min h / 2) / img_h yolo_w w / img_w yolo_h h / img_h cat_id ann[category_id] if categories_map: yolo_cat_id categories_map.get(cat_id, 0) else: yolo_cat_id cat_id - 1 img_path img[file_name] txt_file Path(output_dir) / (Path(img_path).stem .txt) with open(txt_file, a, encodingutf-8) as out: out.write(f{yolo_cat_id} {x_center:.6f} {y_center:.6f} {yolo_w:.6f} {yolo_h:.6f}\n)这里有两个重要细节。第一x_center和y_center的计算必须用x_min w / 2而不是x_center直接除。COCO的bbox定义确实是[x, y, width, height]所以公式不能写反。第二COCO的category_id是从1开始的而YOLO的category是从0开始的转换时必须减1否则类别完全错位训练出来的模型预测结果全乱。目录组织上我建议按标准YOLO格式划分dataset/ ├── images/ │ ├── train/ # 约7000张 │ ├── val/ # 约2000张 │ └── test/ # 约1162张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml划分比例我选了70%训练、20%验证、10%测试。这里有个容易踩的坑划分必须按图片的完整路径进行确保每张图只在其中一个集合出现不能交叉。并且最好是按场景分层划分——比如夜间场景的数据在训练集、验证集、测试集里的占比都保持接近原始数据集的比例这样模型在不同场景上的表现可复现、可评估不会出现因为测试集全是白天场景所以看着精度很高的假象。data.yaml的内容如下path: /path/to/dataset train: images/train val: images/val test: images/test nc: 3 names: [person, hand, cigarette]3.2 YOLOv8训练参数调整实录准备工作就绪后训练环节我的核心选型是YOLOv8它目前是速度和精度的均衡点。下面给出我自己实际跑过的参数字段yolo train datadata.yaml modelyolov8m.pt epochs200 imgsz640 batch16 device0 projectsmoking_detect nameyolov8m_smoke挑几个重点参数说说我的理由。模型规模选了YOLOv8m而不是最大的YOLOv8x。吸烟检测场景通常是实时监控系统部署环境往往只是普通的GPU服务器甚至边缘设备推理速度是硬指标。YOLOv8m在COCO预训练权重的基础上做微调AP和速度平衡最好。如果你对精度要求苛刻可以先训m再用同一份数据从x模型继续微调对比一下收益再决定没必要一上来就贪大。输入分辨率用了640而不是1280。虽然1280对小目标检测有明显帮助但训练成本直接翻几倍推理速度也跟着掉。我的做法是先用640训出基线模型如果对远距离小目标的检出率不满意再单独用1280微调并针对监控场景评估。实际跑下来640的模型在大多数场景已经够用1280主要用于前端需要截小图的特殊场景。200个epoch是基于验证集loss收敛曲线确定的。我加了早停机制patience设为30也就是连续30个epoch验证集指标没有提升就自动停止。实际训练中大约在第120到150个epoch左右达到最优早停帮我省了三分之一的时间。数据增强参数保持接近默认但有两个值得调整的地方由于数据中有大量远距离小目标我把scale参数从默认的0.5小幅提升到0.7让模型在训练时看到更多不同尺度的目标由于监控场景经常需要处理倾斜视角我把degrees从默认的0.0调到了5.0允许进行小角度旋转增强但不要给太大不然烟支朝下这种物理常识会被破坏。3.3 超参数调整背后的计算逻辑这里有个初学者最容易犯的错只知道该设置超参数不知道为什么这样设置遇到效果不好时完全没有排查方向。batch size的设定要结合显存来算。单片24G显存的GPUYOLOv8m在640分辨率下单张图大约占用1.2G显存理论上可以开到16到20的batch。如果batch开得太小batch normalization的统计量不稳定模型收敛很慢如果开得太大又容易OOM。一个简单靠谱的方法是先把batch开到16跑20个iter观察显存占用率如果低于60%再往上加如果超过90%就减半。学习率方面使用预训练权重微调的场景初始学习率不要超过0.01。YOLOv8默认lr00.01我用的是0.005。原因是大规模预训练模型的特征提取器已经学得很好了过大的学习率会破坏掉预训练得到的优质特征。最小学习率lrf设为0.01让学习率在训练结束时衰减到初始值的百分之一。优化器选用SGD。很多人上来就选AdamW实际上在目标检测这类任务上SGD配合合适的momentum默认0.937和weight decay默认0.0005往往泛化能力更强。AdamW收敛快但容易收敛到尖锐极小值在验证集上的表现不如SGD稳定。这是个经验性的选择不绝对但值得试。3.4 评估结果与指标解读训练完成后的评估环节我建议关注几个关键指标不要只看mAP一个数字。最终的模型在验证集上的表现大致是人体检测AP0.5约0.96AP0.5:0.95约0.84手部检测AP0.5约0.88AP0.5:0.95约0.68烟支检测AP0.5约0.79AP0.5:0.95约0.52综合mAP0.5约0.88这个结果里烟支检测AP偏低是符合预期的。烟支在监控画面里通常只有几个像素的尺寸属于小目标检测难度天然大。手部检测中频繁出现的遮挡、手势变化也会拉低精度。单独运行评估命令yolo val modelruns/detect/yolov8m_smoke/weights/best.pt datadata.yaml除了看AP我还建议导出每张验证图的预测结果人工扫一遍错误案例特别关注三种情况漏检明明有烟却没检测出来、误检把其他物体当成了烟——笔、白色小物品都会产生这类问题、定位偏移检测到了烟但框住的位置偏离烟支本身。3.5 用训练好的模型做推理部署模型训练完成后导出为部署格式是最后一步。这里根据部署端的不同我给出两个最常用方案服务端部署用TensorRT加速yolo export modelruns/detect/yolov8m_smoke/weights/best.pt formatengine device0 halfTrue引擎导出来后推理速度在A10显卡上大约能到4到6毫秒每帧完全满足实时监控需求。注意导出TensorRT引擎时硬件平台必须与最终部署平台一致或兼容否则引擎文件无法使用。边缘设备部署用ONNX格式yolo export modelruns/detect/yolov8m_smoke/weights/best.pt formatonnx opset12 simplifyTrue然后把ONNX喂给推理框架在Jetson等设备上跑实测也能达到实时。ONNX的好处是中间格式后续要转成其他平台的模型文件都从ONNX出发。推理代码的核心逻辑很简单from ultralytics import YOLO model YOLO(runs/detect/yolov8m_smoke/weights/best.pt) results model.predict(sourcetest_video.mp4, conf0.35, device0) for result in results: boxes result.boxes for box in boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) if cls_id 2 and conf 0.4: # cigarette detected # 触发吸烟告警逻辑 pass推理环节置信度阈值的选择值得调一调。默认阈值0.25会导致大量误检实际场景里我通常建议在0.3到0.45之间选。以香烟目标为例如果阈值过低笔、吸管、白色条状物都会被误判为烟如果阈值过高又会漏掉小目标。一个额外的心得实际的吸烟判定逻辑不要只看单帧检测结果。监控视频里人出现拿手到嘴边的动作一般会持续几帧到几十帧。我在业务服务层加了一个连续N帧检测到烟支且烟支位置与嘴部区域重叠的判定规则只有在连续5帧以上满足条件才触发吸烟告警。这样能大幅减少单帧误检导致的虚假报警。4. 常见问题与排查技巧实录4.1 标注质量相关的问题标注数据标签和图片对不上。这个问题经常发生在手动整理文件时。解决方法是写一个校验脚本遍历所有图片文件名检查对应的txt或JSON标注是否存在同时反向检查标注文件对应的图片是否存在。任何一方缺失都要报警并在训练前处理干净。边界框偏移明显。造成原因通常是标注员的鼠标操作失误。排查方法是筛选出框面积在极端范围内的标注再逐张人工确认。比如一张1920x1080的图如果烟支框的宽度超过图片宽度的三分之一几乎肯定是标错了。标注的类不平衡。如果统计发现类别C只有几百个实例而类别A有上万个实例模型对C的检测能力基本可以忽略。解决办法是扩充C类样本或者做类别重加权。针对本数据集我发现手部和烟支的标注数明显少于人体标注数近景数据相对稀缺这就是后续迭代时优先补的方向。4.2 训练过程中的常见报错处理显存溢出CUDA out of memory。最常见的原因是batch size太大解决方法是降低batch size或减小输入分辨率。还有一个不太容易察觉的原因数据加载线程太多导致CPU侧数据预处理吃掉了大量系统内存进而影响GPU调度。把dataloader的workers数量调低到4或者8能缓解。训练loss一直不降。先检查标签文件是否为空——如果标注文件没生成或所有目标都被过滤了模型相当于在学什么也不检测。再检查类别编号是否越界或错位类别索引超出nc值同样会让模型无所适从。验证集AP为0。大概率是验证集图片路径配置错误或者验证集标签缺失。用YOLO的val模式跑一下如果报No labels found基本就是路径没配对。4.3 模型部署推理阶段的坑TensorRT引擎导出后精度和PyTorch推理结果不一致。这是一个很经典的问题。主要原因有两点一是INT8量化引入了精度损失解决方法是用FP16二是导出引擎时没有设置与训练一致的输入尺寸导致图片被resize后目标比例失真。我的建议是先用FP16跑通整个流程确认无误后再考虑是否真的需要INT8优化。opset版本太高导致边缘设备不支持。ONNX的opset版本和部署框架的兼容矩阵经常让人头疼。我的经验是固定用opset12这个版本兼容性最广既不会过老缺少算子又不会太新导致旧设备跑不了。4.4 独家的避坑技巧与经验总结这里分享三条不是写在官方文档里的经验。第一训练之前先用几十张验证集图跑一次完整的训练推理闭环。也就是把数据集缩小到原来的十分之一快速过一遍流程确认代码、路径、格式完全没问题之后再正式全量训练。这样即使出问题排查范围也小得多。我见过太多人等全量训练跑了一天之后才发现数据路径有错损失的时间成本不可估量。第二测试模型时不要只看验证集指标务必用一段真实监控视频做端到端跑通测试。静态图片和连续视频是两种完全不同的挑战。视频里的动作连贯性、相邻帧的一致性、人移动时的运动模糊都是静态图评估发现不了的。有一次我的模型静态图上AP很高但视频测试时出现大量闪烁误检原因就是单帧特征不稳。后来加了时序平滑才解决问题。第三如果场景光照有明显分时特征比如白天和夜间的色温差异大建议在部署端做简单的色域统一。例如将BGR通道做直方图均衡化后再输入模型有时候能获得意想不到的精度提升。这个技巧在夜间监控场景下特别明显。5. 数据集扩展与后续优化方向数据集做到10162张可以作为一个不错的起点但如果想要在实际项目中达到更高准确率只靠当前数据集是不够的。我目前正在推进的几个优化方向给大家做个参考一是收集更多极端姿态的样本。当前数据集里坐下吸烟、躺卧吸烟、边走边吸等姿态占比相对少而这些在真实场景中很常见。增大极端姿态比例能直接提升模型的泛化能力。二是增加吸烟过程的时序标注。目前所有图片都是静态标注缺少点烟-吸烟-弹烟灰-熄灭这一完整过程的时序关联信息。如果后续要做更复杂的行为识别比如判断一个人是否在违规区域持续吸烟超过某个时长就需要在视频帧级别进行连续标注。三是建立场景负样本库。单纯增加正样本并不能解决所有误检问题。我更推荐建立一个专门的负样本库里面包含大量类似烟支形状的物体——笔、吸管、棉签、白色小棍等让模型学会这些不是烟。这个负样本库不需要多大几百张图就能显著降低误检率。四是多视角数据。当前的监控场景大多是从上往下的俯拍视角或水平视角如果能补充一些侧面视角和近距离手持设备的视角模型对于视角变化的鲁棒性会更强。总的来说吸烟行为识别这事入门容易、做好难关键就在数据是否扎实。这次整理的10162张COCO格式数据集从采集策略、标注规范到训练调参都做了相对完整的覆盖希望这个项目复盘能给在行为识别这条路上折腾的朋友提供一些真实可用的参考。后面如果我把时序标注和负样本库这些扩展也做完了再回来继续分享实际效果。本文还有配套的精品资源点击获取