1. 项目背景与核心价值
作为一名计算机视觉方向的毕业生,我在去年完成了一项基于YOLO算法的抽烟行为检测系统。这个选题源于公共场所禁烟管理的实际需求——虽然监控摄像头已经普及,但人工实时监测海量视频流几乎不可能。通过开源这个毕设项目,希望能为智慧城市建设和公共场所安全管理提供一种轻量级的技术方案。
这个系统的核心价值在于:
- 实时性:基于YOLOv5s模型,在普通GPU上能达到45FPS的处理速度
- 轻量化:模型体积仅14.7MB,适合边缘设备部署
- 高精度:在自建数据集上mAP@0.5达到89.2%
- 场景适应:针对监控视角优化了数据增强策略
提示:选择YOLOv5而非更新的v7/v8版本,主要考虑社区生态和部署便利性。许多工业场景仍在使用v5系列,相关优化工具链更成熟。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据集构建与标注技巧
2.1 数据采集方案
我通过三种渠道构建了吸烟行为数据集:
- 公开数据集整合:合并了Surveillance Smoking Dataset和部分UA-DETRAC中的吸烟片段
- 网络爬虫:用Scrapy抓取Flickr、百度图片中"smoking person"关键词下的图片
- 实地拍摄:在校内多个监控点位采集不同光照条件下的吸烟行为视频
最终得到的数据集包含:
- 训练集:8,742张图片(含数据增强后)
- 验证集:1,215张
- 测试集:658张
2.2 标注规范设计
使用LabelImg进行标注时,制定了严格的规范:
- 主体标注:吸烟者整体bounding box(class: person)
- 关键部位标注:香烟/电子烟的精确位置(class: cigarette)
- 特殊情形处理:
- 遮挡超过50%的实例不标注
- 多人传递香烟时标注所有接触者
- 手持但未吸食的也需标注
注意:标注香烟位置是关键创新点。传统方法只检测人,误报率高。我们通过联合检测"人+烟"的交互状态,显著提升准确率。
3. 模型架构与训练优化
3.1 YOLOv5s改进方案
在原始YOLOv5s基础上做了三点改进:
- 注意力机制增强:
python复制class C3_ECA(nn.Module):
def __init__(self, c1, c2, n
