计算机系统应用  2021, Vol. 30 Issue (2): 231-236   PDF    
基于改进YOLOv3的自然场景人员口罩佩戴检测算法
程可欣, 王玉德     
曲阜师范大学 物理工程学院, 曲阜 273165
摘要:针对新冠肺炎防控期间肉眼识别判断行人是否佩戴口罩效率低且存在较大风险的问题, 提出一种改进检测目标边框损失的自然场景下行人是否佩戴口罩的检测算法. 该算法对YOLOv3损失函数进行改进, 应用GIoU计算目标边界框损失, 完成自然场景下行人是否佩戴口罩的检测. 算法在开源的WIDER FACE数据集和MAFA数据集上训练, 采集自然场景图片进行测试, 行人是否佩戴口罩的mAP (mean Average Precision)达到了88.4%, 取得了较高的检测准确率, 在自然场景视频检测中平均每秒传输帧数达到38.69, 满足实时检测的要求.
关键词: 口罩检测    YOLOv3    DarkNet-53    GIoU    损失函数    
Algorithm of Mask Wearing Detection in Natural Scenes Based on Improved YOLOv3
CHENG Ke-Xin, WANG Yu-De     
College of Physics and Engineering, Qufu Normal University, Qufu 273165, China
Abstract: It is inefficient and highly risky to identify whether pedestrians are wearing a mask or not through naked eyes during the prevention and control of the COrona VIrus Disease 2019 (COVID-19). To solve this, we devise an algorithm to detect whether the pedestrians are wearing masks in the natural scenes with the improvement in the loss function of bounding box regression. The algorithm improves the YOLOv3 loss function and uses GIoU to calculate the bounding box loss to detect whether pedestrians wear masks in natural scenes. The algorithm is trained on the open-source WIDER FACE dataset and MAFA dataset. When the natural scene pictures are collected for testing, the mAP (mean Average Precision) of whether pedestrians wear masks is as high as 88.4%. In the detection of natural scene videos, the average number of frames per second is 38.69, which meets the requirements of real-time detection.
Key words: mask wearing detection     YOLOv3     DarkNet-53     GIoU     loss function    

佩戴口罩是一种隔离和遏制新型冠状病毒、预防新冠肺炎的有效方法. 为保护人民的身体健康与生命安全, 最大限度地降低和消除因疫情对生产经营造成的影响, 需要对复产复工人员规范佩戴口罩进行的监督和提醒. 依靠肉眼观察是否佩戴口罩, 不仅耗费人力物力, 而且有极大的漏检风险和近距离接触的感染风险, 因此, 需要一种基于图像处理的高精度高速度的口罩佩戴检测算法.

牛作东等提出了一种改进RetinaFace的自然场景口罩佩戴检测算法, 该算法基于ResNet-152网络, FPS(每秒传输帧数, Frames Per Second)较低, 不适用于实际的检测环境[1]. YOLOv3算法利用回归思想, 通过CNN网络一次性生成目标位置边框和目标类别, 这种方式使得检测速度更快、模型泛化能力强, 同时可以减少背景错误产生, 因此本文选择该方法进行检测. 国内对该方法已有了成熟而广泛的应用, 如郑秋梅等在交通场景上使用该方法进行车辆检测[2], 王毅恒等使用该方法对农场环境下的奶牛进行检测[3], 孟本成等使用该方法对行人进行检测[4]等. YOLOv3算法虽然检测速度快, 但小目标漏检的风险相对更高, 鉴于上述问题, 本文提出改进目标边框损失的YOLOv3算法对自然场景下人员是否佩戴口罩进行检测, 更好地做好人员防护.

1 基本原理

YOLOv3算法是Redmon等在2018年提出的[5], 改进了网络结构、网络特征及损失计算3个部分, 在保持速度优势的前提下, 进一步提升了对小目标的检测能力和检测精度.

1.1 DarkNet-53网络

YOLOv3结构由骨架网络DarkNet-53和检测网络两部分组成, 用于特征提取和多尺度预测[6]. YOLOv3网络结构如图1.

DarkNet-53网络共有53层卷积层, 最后一层为1×1卷积实现全连接, 主体网络共有52个卷积. 52个卷积层中, 第一层由一个32个3×3卷积核组成的过滤器进行卷积, 后面的卷积层是由5组重复的残差单元(resblock body)构成的, 这5组残差单元每个单元由一个单独的卷积层与一组重复执行的卷积层构成, 重复执行的卷积层分别重复1、2、8、8、4次; 在每个重复执行的卷积层中, 先执行1×1的卷积操作, 再执行3×3的卷积操作, 过滤器数量先减半, 再恢复, 共1+(1+1×2)+ (1+2×2)+ (1+8×2)+ (1+8×2)+ (1+4×2)=52层.

YOLOv3模型的输出为3个不同尺度的特征层, 分别位于DarkNet-53网络的中间层、中下层和底层, 用于检测不同大小的物体. 如图1所示, 对3个特征层进行5组卷积处理, 可输出该特征层对应的预测结果.

1.2 网络性能分析

DarkNet-53特征提取网络通过大量的3×3和1×1卷积层构成, 该网络在ImageNet数据集下测试, 网络性能比ResNet网络更好[3], 结果如表1.

通过表1我们可以看到, 在图像分类的准确率以及检测速度等方面, DarkNet-53网络与其他3种网络模型相比, 表现更加优越. DarkNet-53网络在满足检测实时性的同时比DarkNet-19具有更高的精度, 并且在网络性能相差无几的情况下, 网络的速度约是ResNet-152网络的2倍.

2 损失函数改进 2.1 GIoU损失函数

在原始YOLOv3算法中, 使用均方误差作为目标定位损失函数来进行目标框的回归, 均方误差函数对尺度较为敏感, 并且无法反应不同质量的预测结果, 故大量使用YOLOv3算法的工作中, 常使用预测框和真实目标框的IoU值来衡量两个边界框之间的相似性, 虽然改善了这两个问题, 却也带来了新问题. 首先, 当预测框和真实框之间没有重合时, IoU的值为0, 导致优化损失函数时梯度也为0, 意味着无法优化. 其次, 即使预测框和真实框之间相重合且具有相同的IoU值时, 检测的效果也具有较大差异.

Rezatofighi等于CVPR2019上提出了GIoU (Generalized IoU, 广义IoU)目标边界框优化方法, GIoU针对IoU无法反应不重叠的两个框之间距离和重叠框对齐方式的问题进行了优化, 图2中3幅图的IoU均为0.33, GIoU的值分别是0.33, 0.24和−0.1, 这表明如果两个边界框重叠和对齐得越好, 那么得到的GIoU值就会越高[7].

图2中黑色框为真实框A, 灰色为预测框B, 虚线框为最小可包含A、B的框C. 假设有框A和B, 总可以找到一个最小的封闭矩形C, 将A和B包含在内, 然后计算C中除了A和B外的部分的面积占C总面积的比值, 再用A与B的IoU减去这个比值, IoU计算公式和GIoU计算公式如式(1)、式(2)所示.

$R_{\rm{IoU}} = \frac{{\left| {A \cap B} \right|}}{{\left| {A \cup B} \right|}}$ (1)
$R_{\rm GIoU} = R_{\rm IoU} - \frac{{\left| {C - \left( {A \cup B} \right)} \right|}}{{\left| C \right|}}$ (2)
${L_{\rm GIo{{U}}}} = 1 - R_{\rm{GIoU}}$ (3)

GIoU与IoU类似, 可以作为一种距离度量, 损失可以由式(3)计算. GIoU对物体的大小并不敏感, 其值总是小于等于IoU, 是IoU的下界. 在两个形状完全重合时, GIoU和IoU大小均为1. GIoU引入了包含框A和B两个形状的C, 解决了IoU不能反映重叠方式, 无法优化IoU为0的预测框的问题.

图 1 YOLOv3网络结构(含DarkNet-53)

表 1 4种网络框架性能对比

图 2 IoU均为0.33时3种不同的重叠情况

2.2 Loss损失计算

本文将 ${L_{\rm GIo{{U}}}}$ 损失函数应用于YOLOv3目标检测算法中, 以 ${L_{\rm GIo{{U}}}}$ 直接作为边界框回归损失函数代替原来的均方差和损失函数.

损失函数的公式包含目标定位损失、目标置信度损失和目标类别损失3个部分, 分别对应式(4)中的第一项、第二、三项和第四项.

$\begin{split} {{Loss}} = &{\lambda _{{\rm{coord}}}}\mathop \sum \limits_{i = 0}^{{S^2}} \mathop \sum \limits_{j = 0}^B I_{ij}^{{\rm{obj}}}{L_{\rm GIoU}} \\ &- \mathop \sum \limits_{i = 0}^{{S^2}} \mathop \sum \limits_{j = 0}^B I_{ij}^{\rm obj}\left[ {\hat C_i^j\log \left( {C_i^j} \right) + \left( {1 - \hat C_i^j} \right)\log \left( {1 - C_i^j} \right)} \right] \\ &-\! {\lambda _{{\rm{noobj}}}}\!\mathop \sum \limits_{i = 0}^{{S^2}} \!\mathop \sum \limits_{j = 0}^B I_{ij}^{\rm noobj}\!\left[ {\!\hat C_i^j{\rm{log}}\!\left( {C_i^j} \right)\! +\! \left(\! {1 - \hat C_i^j} \right)\!{\rm{log}}\!\left( \!{1 \!-\! C_i^j} \right)\!} \right] \\ &- \mathop \sum \limits_{i = 0}^{{S^2}} I_{ij}^{\rm obj}\!\!\mathop \sum \limits_{c \in {{classes}}} (\left[ {\hat P_i^j{\rm{log}}\left( {P_i^j} \right) + \left( {1 - \hat P_i^j} \right){\rm{log}}\left( {1 - P_i^j} \right)} \right] \end{split}$ (4)
3 算法流程

该算法流程主要分为特征提取和多尺度预测两部分, 图片经过DarkNet-53网络, 生成3种尺度的特征图, 每种尺度的特征图划分为大小不同的网格, 每个网格预测3个先验框, 经过非极大抑制等, 得到预测框, 在训练过程中, 还会进行损失函数计算, 更新权重.

4 实验与结果分析

实验用计算机配置为Intel Corei5-5200 2.20 GHz CPU、Tesla V100-SXM2 GPU, 显存16 GB. 软件环境为Linux操作系统、PyCharm2019.3.3、PyTorch框架.

文中使用了AIZOO团队公开的人脸口罩佩戴数据集, 该数据集中的图片来源于WIDER FACE数据集[8]和中科院信工所葛仕明老师开源的MAFA数据集[9], 图片示例如图3, 对应的标注数据如表2. 训练样本与测试样本按0.7: 0.3划分, 训练集共5566张图片, 来自MAFA的图片2873张(基本都是戴口罩的图片)、WIDER Face图片2693张(基本都是不戴口罩的图片). 验证集共2385张图片, 取自MAFA 1188张、WIDER Face 1197张.

图 3 数据集示例图片

表 2 示例图片标注数据

采用迁移学习的方式, 采用了ImageNet预训练好的模型参数, 通过初始化模型前47层卷积层参数、微调末端参数的方式对模型进行训练, 将检测类别按是否佩戴口罩调整为2种、初始学习率设置为0.01、batch-size为16.

图4图6可以看出, 使用GIoU作为目标边界框损失函数总是小于IoU, 该结果符合GIoU的特点, 平均检测精度(mAP)上升速度更快且有小幅度的提高. 在使用GIoU的条件下, 训练迭代次数到达50次后, mAP曲线渐趋平缓, 最后达到88.4%左右不再增加, 而GIoU一直平稳下降至0.93, 目标定位损失下降至0.315, 目标分类损失下降至0.0361. 验证集数量少后期易出现过拟合现象, 故迭代次数达到100次时停止训练.

GIoU作为目标边界框损失函数的训练模型, 多目标检测的平均精度达到88.4%, 佩戴口罩的类别达到96.5%, 检测结果如表3, 与IoU相比均有提高.

图 4 GIoU与IoU训练过程曲线

图 5 使用GIoU与IoU的YOLOv3总损失函数训练过程曲线

图 6 GIoU-YOLOv3与IoU-YOLOv3 mAP训练过程曲线

表 3 不同类别使用GIoU和IoU的mAP对比

图7(a)为GIoU-YOLOv3测试结果, 图7(b)组图片为IoU-YOLOv3测试结果. 从测试结果可见GIoU-YOLOv3算法针对小目标的漏检率有明显降低.

图 7 未戴口罩和佩戴口罩的检测图像

图8为从网络随机爬取的512×320大小416帧的视频的测试结果, 共用时10.751 s, 平均每帧用时0.026 s, FPS达到38.69, 满足实时检测的要求.

5 结论

论文提出改进检测目标边框损失的自然场景人员口罩佩戴检测算法, 在一定程度上减小了漏检率, mAP也有一定的提高. 该方法平均每秒检测约38张图片, 可以实现实时检测. 同时, 对佩戴口罩类别的检测准确率可达96.5%, 行人是否佩戴口罩的mAP达到了88.4%. 在多目标检测上有较好的表现, 检测速度更快、成本更低、准确率更高.

图 8 视频测试结果部分截取

参考文献
[1]
牛作东, 覃涛, 李捍东, 等. 改进RetinaFace的自然场景口罩佩戴检测算法. 计算机工程与应用, 2020, 56(12): 1-7. DOI:10.3778/j.issn.1002-8331.2002-0402
[2]
郑秋梅, 王璐璐, 王风华. 基于改进卷积神经网络的交通场景小目标检测. 计算机工程, 2020, 46(6): 26-33.
[3]
王毅恒, 许德章. 基于YOLOv3算法的农场环境下奶牛目标识别. 广东石油化工学院学报, 2019, 29(4): 31-35. DOI:10.3969/j.issn.2095-2562.2019.04.007
[4]
孟本成. 基于YOLOV3算法的行人检测方法. 电视技术, 2019, 43(9): 6-9, 46.
[5]
范丽, 苏兵, 王洪元. 基于YOLOv3模型的实时行人检测改进算法. 山西大学学报(自然科学版), 2019, 42(4): 709-717.
[6]
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv preprint arXiv: 1804.02767, 2018.
[7]
Rezatofighi H, Tsoi N, Gwak J, et al. Generalized intersection over union: A metric and a loss for bounding box regression. 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Long Beach, CA, USA. 2019. 1–9.
[8]
Yang S, Luo P, Loy CC, et al. WIDER FACE: A face detection benchmark. 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Las Vegas, NV, USA. 2016. 5525–5533.
[9]
Ge SM, Li J, Ye QT, et al. Detecting masked faces in the wild with LLE-CNNs. 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu, HI, USA. 2017. 426–434.