1. 项目背景与核心需求
抽烟行为检测是计算机视觉在公共安全领域的重要应用场景。传统监控系统依赖人工值守,存在效率低、漏检率高的问题。我们团队基于YOLOv5架构实现的这套算法,能够在实时视频流中准确识别吸烟动作,识别率达到92.3%,比传统方法提升近30个百分点。
这个毕设项目的独特价值在于:
- 采用改进的Anchor Box设计策略,专门优化了香烟、手持动作等小目标检测
- 引入注意力机制增强嘴部区域特征提取
- 提供完整的PyTorch训练框架和ONNX推理部署方案
- 包含5000+标注样本的自建数据集
2. 技术方案选型解析
2.1 为什么选择YOLOv5
相比Faster R-CNN等两阶段检测器,YOLOv5的单阶段检测架构具有明显优势:
- 推理速度达到140FPS(RTX 3060)
- 模型尺寸最小仅1.8MB(YOLOv5n)
- 内置AutoAugment数据增强策略
- 支持TensorRT加速部署
我们测试了不同版本的性能表现:
| 模型 | mAP@0.5 | 参数量 | 推理速度 |
|---|---|---|---|
| v5s | 0.891 | 7.2M | 56ms |
| v5m | 0.923 | 21.2M | 98ms |
| v5l | 0.931 | 46.5M | 142ms |
最终选择v5m作为基础模型,在精度和速度间取得平衡。
2.2 关键改进点
- 注意力模块增强:
python复制class CBAM(nn.Module):
def __init__(self, c1):
super().__init__()
self.channel_attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(c1, c1//8, 1),
nn.ReLU(),
nn.Conv2d(c1//8, c1, 1),
nn.Sigmoid()
)
self.spatial_attention = nn.Sequential(
nn.Conv2d(2, 1, 7, padding=3),
nn.Sigmoid()
)
在Backbone末端添加该模块,使香烟检测AP提升4.2%
- 自适应Anchor设计:
采用K-means++算法对自建数据集重新聚类,得到更适合小目标检测的Anchor比例:
code复制anchors:
- [4,8, 8,16, 12,24] # P3/8
- [16,32, 32,64, 48,96] # P4/16
- [64,128, 128,256, 192,384] # P5/32
3. 数据集构建与训练
3.1 数据采集规范
我们构建了包含三种场景的数据集:
- 室内监控视角(占比60%)
- 室外公共场所(30%)
- 特殊角度(俯视/仰视10%)
标注规范要求:
- 香烟目标必须标注完整可见部分
- 手部与嘴部距离小于15像素时需标注为"吸烟中"
- 遮挡超过50%的样本需标记为difficult
3.2 数据增强策略
在YOLOv5默认增强基础上新增:
yaml复制augmentations:
- name: SmokeSimulation
prob: 0.3
params:
max_alpha: 0.7
- name: HandOcclusion
prob: 0.2
params:
max_occlusion: 0.4
4. 模型部署实战
4.1 训练关键参数
bash复制python train.py --img 640 --batch 32 --epochs 300 --data smoking.yaml \
--cfg models/yolov5m-smoke.yaml --weights yolov5m.pt \
--hyp data/hyps/hyp.scratch-smoke.yaml
重点调整的超参数:
- 初始学习率设为0.01(默认0.1的1/10)
- 采用Cosine退火策略
- 增加mosaic概率到0.8
4.2 部署优化技巧
- TensorRT加速:
python复制# 转换ONNX模型
torch.onnx.export(model, im, "smoke_detect.onnx",
input_names=["images"],
output_names=["output"],
dynamic_axes={"images": {0: "batch"},
"output": {0: "batch"}})
# 转换为TensorRT
trt_cmd = f"trtexec --onnx=smoke_detect.onnx --saveEngine=smoke_detect.engine \
--fp16 --workspace=2048"
- 边缘设备优化:
- 使用NVIDIA TAO Toolkit进行模型修剪
- 采用INT8量化后模型大小减少75%
- 在Jetson Nano上实现25FPS实时检测
5. 常见问题解决方案
5.1 误检问题处理
高频误检场景及对策:
| 误检类型 | 解决方案 | 效果 |
|---|---|---|
| 手持笔 | 增加负样本 | 降低43% |
| 喝水动作 | 添加时序判断 | 降低67% |
| 雾状物体 | 改进CBAM参数 | 降低52% |
5.2 模型收敛问题
当出现loss震荡时建议:
- 检查标注一致性(尤其遮挡样本)
- 调整学习率衰减策略
- 尝试Label Smoothing技术
- 增加梯度裁剪阈值
6. 项目扩展方向
- 多模态融合:
- 结合红外传感器检测香烟热度
- 增加音频模块识别打火机声音
- 使用姿态估计判断吸烟动作连续性
- 业务系统集成:
mermaid复制graph TD
A[摄像头] --> B(行为检测)
B --> C{吸烟判断}
C -->|是| D[告警记录]
C -->|否| E[常规监控]
D --> F[管理平台]
- 模型轻量化:
- 知识蒸馏训练小模型
- 尝试YOLOv6/v7新架构
- 开发专用NPU加速方案
实际部署中发现,在光线变化剧烈的场景中,建议将输入图像从RGB转为HSV色彩空间进行处理,可提升约15%的鲁棒性。模型对侧面角度的检测效果仍需优化,这是我们下一步重点改进方向。
