1. 项目概述
这个毕业设计项目选择了一个非常实用的方向——基于机器视觉的行人口罩佩戴检测。在公共场所健康管理日益重要的今天,开发一个能够自动检测行人是否佩戴口罩的系统具有现实意义。我选择这个课题的初衷是想将课堂学到的机器视觉知识应用到实际问题解决中,同时为公共卫生安全贡献一点技术力量。
整个系统的核心功能是通过摄像头捕捉实时画面,利用深度学习算法识别画面中的人脸,并判断是否佩戴口罩。相比传统的人工检查方式,这种自动化方案可以7×24小时不间断工作,减少人力成本,同时避免因人为疏忽导致的漏检。系统设计需要考虑准确性、实时性和适应性三个关键指标,确保在不同光照条件、人群密度和口罩类型下都能稳定工作。
2. 技术选型与方案设计
2.1 整体架构设计
系统采用经典的机器视觉处理流程:图像采集→预处理→人脸检测→口罩识别→结果输出。硬件方面,我选择普通USB摄像头作为图像采集设备,搭配一台配备NVIDIA显卡的电脑进行算法运算。软件层面,系统基于Python开发,主要依赖OpenCV和深度学习框架。
经过对比TensorFlow、PyTorch和PaddlePaddle几个主流框架后,我最终选择了PaddlePaddle。这个决定主要基于三点考虑:首先,PaddlePaddle有专门针对视觉任务的优化;其次,PaddleHub提供了口罩检测的预训练模型,可以大大缩短开发周期;最后,PaddlePaddle的中文文档和社区支持对毕业设计项目非常友好。
2.2 核心算法选择
人脸检测环节采用了MTCNN算法,这是一个经典的多任务级联卷积神经网络,能够同时完成人脸检测和对齐。相比单阶段检测器,MTCNN在小脸检测和遮挡情况下表现更稳定——这对口罩佩戴检测尤为重要,因为口罩本身就是一种面部遮挡。
口罩识别部分基于MobileNetV3网络结构,这是一个轻量级的深度卷积网络,在保持较高准确率的同时大大减少了计算量。考虑到系统可能需要部署在边缘设备上,模型的计算效率是必须考虑的因素。我在PaddleHub提供的预训练模型基础上进行了微调(fine-tuning),使用自建的数据集让模型更好地适应实际场景。
3. 数据集准备与处理
3.1 数据收集策略
高质量的数据集是模型性能的基础。我通过三个渠道收集数据:公开数据集(如MAFA、FaceMaskDetection)、网络爬取合规图片、以及自己拍摄的实地照片。特别注意收集不同种族、年龄、性别、光照条件和口罩类型的样本,确保模型的泛化能力。
最终构建的数据集包含约15,000张图片,其中佩戴口罩和未佩戴口罩的比例控制在6:4。这种略微不平衡的分布更接近真实场景——在强制要求佩戴口罩的场所,大多数人都会遵守规定。
3.2 数据预处理流程
原始图片需要经过一系列预处理才能输入模型:
- 统一调整为512×512分辨率
- 直方图均衡化处理,减少光照影响
- 随机添加高斯噪声和模糊,增强模型鲁棒性
- 数据增强:随机旋转(-15°~+15°)、水平翻转、亮度调整
特别需要注意的是,在标注数据时要明确定义什么是"正确佩戴口罩"——必须完全遮盖口鼻,不能只挂在下巴上。这个标准要贯穿整个数据集,避免标注不一致影响模型判断。
4. 模型训练与优化
4.1 训练参数设置
使用PaddlePaddle的静态图模式进行训练,主要参数配置如下:
- 初始学习率:0.001
- 优化器:AdamW
- 批量大小(batch size):32
- 训练轮次(epochs):50
- 学习率调度:余弦退火(CosineAnnealing)
为防止过拟合,采用了早停机制(patience=5)和L2正则化(weight decay=0.0001)。训练过程在NVIDIA GTX 1660 Ti显卡上进行,每个epoch约需8分钟。
4.2 模型性能优化
初始模型的测试准确率约为92%,通过以下策略提升到97.3%:
- 难例挖掘:重点关注模型判断错误的样本,分析原因并补充类似数据
- 注意力机制:在MobileNetV3基础上添加SE模块,增强对口罩区域的关注
- 知识蒸馏:使用更大的ResNet50作为教师模型,指导MobileNetV3学习
- 混合精度训练:使用FP16加速训练过程,同时保持模型精度
最终模型在验证集上的性能指标如下:
- 准确率:97.3%
- 精确率:96.8%
- 召回率:97.5%
- F1分数:97.1%
- 推理速度:45ms/帧(1080p分辨率)
5. 系统实现与部署
5.1 软件架构实现
系统采用模块化设计,主要包含四个组件:
- 视频采集模块:基于OpenCV实现,支持USB摄像头和RTSP视频流
- 检测引擎:加载训练好的模型,处理图像并返回检测结果
- 告警模块:当检测到未佩戴口罩人员时,触发声音提示或发送通知
- 可视化界面:显示实时检测结果和统计信息
为提高处理效率,系统采用多线程架构:主线程负责图像采集和显示,工作线程处理检测任务,避免界面卡顿。对于多路视频输入的情况,可以考虑使用多进程架构充分利用多核CPU。
5.2 部署优化技巧
在实际部署中遇到几个关键问题及解决方案:
- 延迟问题:通过将模型转换为Paddle Inference格式,并使用TensorRT加速,推理速度提升3倍
- 内存占用:采用动态批处理(dynamic batching)技术,根据设备负载自动调整批处理大小
- 跨平台兼容性:使用Docker容器封装整个系统,确保在不同环境下的运行一致性
对于边缘设备部署,可以将模型量化为INT8格式,体积缩小75%,速度提升2倍,准确率仅下降1.2个百分点。这在计算资源有限的场景下是非常值得的权衡。
6. 实际测试与性能评估
6.1 测试方案设计
为全面评估系统性能,设计了四种测试场景:
- 实验室环境:控制光照和背景的简单场景
- 室内公共场所:如办公楼大堂,中等密度人群
- 室外环境:受天气和光照变化影响
- 极端情况:强逆光、部分遮挡、非常规口罩等
每种场景收集30分钟视频,共包含约5,400帧图像,由三位评估人员独立标注作为ground truth。测试指标包括:准确率、误报率、漏检率、处理延迟和系统稳定性。
6.2 测试结果分析
系统在不同场景下的表现如下表所示:
| 测试场景 | 准确率 | 误报率 | 漏检率 | 平均延迟(ms) |
|---|---|---|---|---|
| 实验室 | 98.7% | 0.8% | 0.5% | 42 |
| 室内公共 | 96.2% | 2.1% | 1.7% | 45 |
| 室外 | 94.5% | 3.3% | 2.2% | 48 |
| 极端情况 | 89.1% | 5.6% | 5.3% | 53 |
从结果可以看出,系统在受控环境下表现优异,在复杂场景中性能有所下降但仍在可接受范围内。误报主要来自面部遮挡物(如围巾、手部)与口罩的混淆,漏检则多发生在小脸(远距离)和侧脸情况。
7. 项目改进方向
7.1 短期优化建议
基于当前测试结果,可以立即实施的改进包括:
- 增加对小脸检测的专项优化,通过改进MTCNN的金字塔缩放策略
- 收集更多极端场景数据重新训练,特别是各种非常规口罩类型
- 开发基于跟踪算法的结果平滑机制,减少帧间抖动
- 优化告警逻辑,设置最小持续时长避免瞬时误报
7.2 长期扩展方向
从产品化角度考虑,系统还可以向以下方向发展:
- 多模态融合:结合红外测温模块,同时监测体温和口罩佩戴
- 云端管理:将多个检测终端数据汇总,提供区域合规率统计和热力图
- 移动端部署:开发手机APP版本,适用于临时检查点和小型场所
- 自适应学习:加入在线学习机制,让系统能自动适应新出现的口罩样式
在实际部署中发现,系统性能与摄像头安装高度和角度密切相关。最佳实践是将摄像头安装在2.5-3米高度,俯角约15-30度,这样能获得最佳的人脸检测效果。同时要避免强光直射镜头,必要时可增加遮光罩。