1. 项目背景与核心价值这个基于YOLO算法的抽烟行为检测系统最初是我为电子信息工程专业毕业设计开发的实战项目。现在把完整代码和训练模型开源出来特别适合计算机视觉入门者、需要快速完成毕设的同学以及社区安防领域的开发者。为什么选择抽烟检测这个方向在商场、学校、工厂等公共场所实时监测违规抽烟行为一直是安防管理的痛点。传统人工巡检效率低下而基于深度学习的视觉检测方案能实现7×24小时自动化监控。经过对比测试YOLO系列算法在检测速度和精度上达到了最佳平衡特别适合部署在边缘计算设备。2. 技术方案选型解析2.1 为什么选择YOLO算法在目标检测领域我们对比了Faster R-CNN、SSD和YOLO三大主流架构算法类型检测速度(FPS)mAP精度硬件需求适用场景Faster R-CNN5-778.8%高高精度静态图像SSD22-2876.8%中平衡型应用YOLOv5s45-5076.5%低实时视频流实测数据显示YOLOv5s在GTX 1060显卡上能达到48FPS的检测速度完全满足实时监控需求。其单阶段检测架构避免了R-CNN系列的区域提议步骤特别适合处理视频流数据。2.2 模型轻量化改造为适配边缘设备部署我们对原生YOLOv5s做了三项优化通道剪枝移除20%低贡献度的卷积通道量化训练采用QAT量化感知训练将模型从FP32压缩到INT8注意力机制在Backbone末端添加SE模块优化前后对比模型体积从27MB减小到9.8MB推理速度从48FPS提升到63FPSmAP精度仅下降2.3个百分点3. 数据集构建与标注3.1 数据采集方案我们采用多源数据融合策略公开数据集整合Smoke100K和Tobacco800自采视频在10个不同场景拍摄200段监控视角视频数据增强使用imgaug库实现seq iaa.Sequential([ iaa.Fliplr(0.5), # 水平翻转 iaa.GaussianBlur(sigma(0, 1.0)), iaa.AdditiveGaussianNoise(scale0.05*255) ])最终构建的数据集包含训练集12,458张图像含8,724张增强图像验证集1,856张图像测试集2,103张图像3.2 标注规范设计采用专业标注工具LabelImg制定严格标注规则吸烟动作判定标准手持香烟且靠近口部可见烟雾呼出香烟长度≥15像素遮挡处理可见部分≥30%时标注多人重叠时标注最完整个体4. 模型训练细节4.1 超参数配置关键训练参数经过网格搜索确定lr0: 0.01 # 初始学习率 lrf: 0.1 # 最终学习率倍数 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 batch_size: 32使用余弦退火学习率策略def cosine_lr(epoch): return lr_min 0.5*(lr_max-lr_min)*(1math.cos(epoch/total_epoch*math.pi))4.2 训练过程监控采用WandB进行可视化监控重点关注三个指标Precision-Recall曲线Grad-CAM热力图损失函数收敛情况典型训练曲线显示box_loss在50epoch后稳定在0.08obj_loss收敛到0.012cls_loss保持在0.005以下5. 部署实施方案5.1 边缘设备适配测试过的硬件平台包括Jetson Nano18FPSRK358832FPS树莓派4BIntel神经棒9FPS部署时关键优化点// OpenVINO优化示例 auto network ie.ReadNetwork(yolo.xml); network.setBatchSize(1); ExecutableNetwork executable_network ie.LoadNetwork(network, GPU);5.2 系统集成方案提供三种接入方式RTSP视频流处理USB摄像头直连图片批量检测API典型报警逻辑实现if smoke_detected: timestamp datetime.now().strftime(%Y%m%d_%H%M%S) cv2.imwrite(falert_{timestamp}.jpg, frame) GPIO.output(buzzer_pin, GPIO.HIGH)6. 实测性能分析在测试集上获得的结果指标白天场景夜间场景遮挡场景精确率89.2%83.7%76.5%召回率85.1%79.3%68.9%误报率/小时1.22.84.1典型误报情况分析手持细长物体如笔、吸管蒸汽/雾气干扰特殊角度的遮挡7. 工程优化建议7.1 模型微调技巧当部署到新场景时建议使用迁移学习微调最后10层添加场景特定的负样本调整NMS阈值torch.hub.load(ultralytics/yolov5, custom, pathbest.pt, nms_conf0.4, # 默认0.25 nms_iou0.6) # 默认0.457.2 部署避坑指南常见问题解决方案内存泄漏检查OpenCV的版本兼容性帧率下降禁用Ubuntu桌面动画效果误报过高增加温度传感器辅助判断8. 扩展应用方向本项目的技术框架可迁移到安全帽佩戴检测危险区域入侵检测工业操作规范检查只需修改数据标注和输出层# 修改类别定义 nc 2 # 新类别数 model.model[-1] Detect(nc, anchors, [ch])这个项目从构思到实现共耗时3个月期间最大的收获是认识到工业场景的数据分布与公开数据集的显著差异。建议在实际部署前务必采集目标场景的负样本进行针对性优化。