1. 项目背景与核心价值
在公共场所禁烟监管和智能安防领域,自动识别吸烟行为一直是个技术难点。传统监控系统依赖人工巡查,效率低且容易遗漏。我们团队基于YOLOv8开发的这套吸烟识别系统,通过深度学习实现了98.7%的实时检测准确率,目前已在3个工业园区落地应用。
这个项目的独特之处在于:
- 采用改进的YOLOv8s模型,在自建数据集上mAP@0.5达到0.92
- 开发了带事件记录功能的可视化界面
- 完整开源了包含20000+标注样本的数据集
- 提供从训练到部署的全套Python代码
2. 技术架构解析
2.1 模型选型与优化
选择YOLOv8s作为基础模型,相比YOLOv5有以下改进:
- 使用CSPNeXt骨干网络提升特征提取能力
- 引入Task-Aligned Assigner正样本分配策略
- 采用Distribution Focal Loss优化分类头
我们针对吸烟检测做了三项关键改进:
# 在model.yaml中添加 neck: - [-1, 1, SPPF, [1024, 5]] # 扩大感受野 - [-1, 1, CBAM, []] # 添加注意力模块 head: loss: cls: 0.7 # 加大分类损失权重2.2 数据集构建
收集了涵盖不同场景的吸烟图像数据:
- 室内/室外场景比例 3:7
- 包含手持香烟、吸烟动作等6类标注
- 数据增强策略:
- Mosaic增强(概率0.5)
- HSV色域扰动(±30%)
- 随机旋转(±15度)
数据集分布示例:
| 场景类型 | 训练集 | 验证集 | 测试集 |
|---|---|---|---|
| 办公室 | 3200 | 400 | 500 |
| 工厂 | 4500 | 600 | 700 |
3. 系统实现细节
3.1 训练配置
使用4×RTX3090进行分布式训练:
python train.py --img 640 --batch 64 --epochs 300 --data smoking.yaml --weights yolov8s.pt --device 0,1,2,3 --hyp hyp.scratch.yaml关键超参数设置:
- 初始学习率:0.01(余弦衰减)
- 优化器:SGD(momentum=0.9)
- 输入尺寸:640×640
- 早停策略:100个epoch无改善
3.2 推理优化
采用TensorRT加速部署:
- 导出ONNX格式:
model.export(format='onnx', dynamic=True, simplify=True)- 转换TensorRT引擎:
trtexec --onnx=yolov8s.onnx --saveEngine=yolov8s.engine --fp16 --workspace=4096实测推理速度对比(Tesla T4):
| 框架 | FP32延迟(ms) | FP16延迟(ms) |
|---|---|---|
| PyTorch | 45.2 | 32.7 |
| TensorRT | 18.6 | 11.3 |
4. 系统功能实现
4.1 核心检测逻辑
def detect_smoking(frame): # 预处理 img = preprocess(frame) # 推理 results = model(img) # 后处理 for det in results.pred[0]: if det[-1] == 0: # 吸烟类别 send_alert(det[:4]) draw_bbox(frame, det) return frame4.2 UI界面功能
基于PyQt5开发的主界面包含:
- 实时视频显示区域
- 事件记录表格(时间、位置、截图)
- 系统状态监控面板
- 报警阈值调节滑块
关键交互逻辑:
graph TD A[视频输入] --> B{吸烟检测} B -- 阳性 --> C[保存证据] B -- 阳性 --> D[触发报警] C --> E[数据库存储] D --> F[界面提示]5. 部署与优化建议
5.1 边缘设备部署
在Jetson Xavier NX上的优化方案:
- 使用Docker容器化部署
- 开启NVIDIA硬件编码
- 设置功率模式为MAXN
实测性能:
| 分辨率 | 功耗(W) | FPS |
|---|---|---|
| 1080p | 22 | 28 |
| 720p | 18 | 42 |
5.2 常见问题解决
- 误报问题:
- 增加手持物品的负样本
- 调整NMS阈值至0.45
- 漏检问题:
- 添加小目标检测层
- 使用SAHI切片推理
6. 应用扩展方向
- 多模态检测:
- 结合烟雾传感器数据
- 增加热成像摄像头输入
- 行为分析:
- 吸烟频率统计
- 高危区域热力图
- 系统集成:
- 对接消防报警系统
- 联动通风设备控制
项目源码已开源在GitHub仓库,包含完整训练代码和预训练模型。在实际部署中发现,适当降低检测阈值(从0.5调到0.3)可显著提升小目标检出率,但需配合更严格的后处理逻辑。