«上一篇 下一篇»
  计算机工程  2022, Vol. 48 Issue (4): 39-49  DOI: 10.19678/j.issn.1000-3428.0061502
0

引用本文  

彭成, 张乔虹, 唐朝晖, 等. 基于YOLOv5增强模型的口罩佩戴检测方法研究[J]. 计算机工程, 2022, 48(4), 39-49. DOI: 10.19678/j.issn.1000-3428.0061502.
PENG Cheng, ZHANG Qiaohong, TANG Zhaohui, et al. Research on Mask Wearing Detection Method Based on YOLOv5 Enhancement Model[J]. Computer Engineering, 2022, 48(4), 39-49. DOI: 10.19678/j.issn.1000-3428.0061502.

基金项目

国家自然科学基金面上项目(61871432,61771492);湖南省自然科学基金(2020JJ4275,2019JJ6008,2019JJ60054);湖南省大学生研究性学习和创新性实验计划项目(S201911535027)

通信作者

张乔虹(通信作者),学士

作者简介

彭成(1982—),男,副教授、博士、博士后,主研方向为工业大数据分析;
唐朝晖,教授、博士生导师;
桂卫华,教授、博士生导师、中国工程院院士

文章历史

收稿日期:2021-04-28
修回日期:2021-06-18
基于YOLOv5增强模型的口罩佩戴检测方法研究
彭成1,2 , 张乔虹1 , 唐朝晖2 , 桂卫华2     
1. 湖南工业大学 计算机学院, 湖南 株洲 412007;
2. 中南大学 自动化学院, 长沙 410083
摘要:人脸口罩佩戴检测是公共场所疫情防控中极为重要的措施,智能、高效地检测口罩佩戴情况对实现疫情防控的自动化和数字化具有重要意义。使用卷积类深度神经网络实现端到端的人脸口罩佩戴检测具有可行性,但卷积类神经网络具有结构复杂、参数量和浮点计算量庞大的特点,从而产生较高的计算开销和内存需求,极大地限制了其在资源有限的终端设备上的应用。为了使人脸口罩佩戴监督功能更易获取,并实现多尺度条件下的模型压缩和加速检测,提出一种基于改进YOLOv5的轻量化增强网络模型。设计参数量和计算量更小的GhostBottleneckCSP和ShuffleConv模块并替换原YOLOv5网络中的C3及部分Conv模块,以降低特征通道融合过程中的计算量并增强特征表达能力。实验结果表明,该模型的识别精度达95%以上,模型在精度近乎无损失的前提下,参数量和计算量分别仅为原YOLOv5网络的34.24%和33.54%,且在GPU和CPU上的运行速度分别提升13.64%和28.25%,降低了模型对内存存储及计算能力的要求,更适用于在资源有限的移动端部署。
关键词深度学习    口罩佩戴检测    YOLOv5网络    GhostBottleneckCSP模块    ShuffleConv模块    
Research on Mask Wearing Detection Method Based on YOLOv5 Enhancement Model
PENG Cheng1,2 , ZHANG Qiaohong1 , TANG Zhaohui2 , GUI Weihua2     
1. School of Computer Science, Hunan University of Technology, Zhuzhou, Hunan 412007, China;
2. School of Automation, Central South University, Changsha 410083, China
Abstract: Face mask wearing detection is a very important measure in epidemic prevention and control in public places.Intelligent and efficient detection of mask wearing is of great significance in realizing the automation and digitization of epidemic prevention and control.Convolution deep neural networks are feasible for end-to-end face mask wearing detection, but convolution deep neural networks have a complex structure, large number of parameters, and floating-point calculation, resulting in high computation overhead and memory requirements, which greatly limit their application in terminal devices with limited resources.To facilitate the face mask wearing supervision function and realize model compression for accelerated detection under multi-scale conditions, a lightweight enhanced network model based on improved YOLOv5 is proposed.Design GhostBottleneckCSP and ShuffleConv modules with fewer parameters and less computation replace C3 and some Conv modules in the original YOLOv5 network, to reduce the computation overload in the process of feature channel fusion and enhance the ability of feature expression.The experimental results show that the recognition accuracy of the model is more than 95%.On the premise of almost no loss of accuracy, the number of parameters and calculation load of the model are only 34.24% and 33.54% of the original YOLOv5 network, respectively, while the running speed on GPU and CPU is increased by 13.64% and 28.25% respectively, thereby reducing the requirements of the model for memory storage and computing power, making it more suitable for deployment on mobile terminals with limited resources.
Key words: deep learning    mask wearing detection    YOLOv5 network    GhostBottleneckCSP module    ShuffleConv module    

开放科学(资源服务)标志码(OSID):

0 概述

近日,全球多国面临新一轮疫情冲击,且病株变异等情况也为疫情防控增添了更多的不确定风险,在疫情防控常态化的情况下,佩戴口罩是极为有效且经济的防控手段,因此,公共场合的口罩佩戴检测成为一项重要工作。在日常生活中,面对经呼吸道传播的传染性疾病或工厂生产过程中产生的有害颗粒物,佩戴口罩也可保护生命安全,减少危害源的接触,提高安全卫生等级。以人工的方式对活动人员进行监督检测耗时耗力,且近距离接触待检测人员存在一定的安全风险,因此,构建自动监控系统检测活动人员的口罩佩戴情况,对日常防护工作具有重要意义。

人脸口罩佩戴检测属于计算机视觉中的物体检测范畴,在过去的二十年中,物体检测的发展大致可分为2个阶段,即2014年以前的传统目标检测以及2014年以后的基于深度学习的目标检测[1]。随着GPU和大数据的发展,传统机器学习多阶段才能实现的功能可由深度学习串联完成,输入大量图像、语音和文本信息即可直接进行端到端的训练[2-3],因此,深度学习在物体检测、图像分割等领域展现出远超传统算法的能力。

为了使人脸口罩佩戴监督功能更易获取,口罩检测网络模型的轻量化也是一个必须要考虑的问题。当前经典的物体检测算法大多依赖卷积网络[4-6]进行特征提取,一系列优秀的基础网络(如VGGNet[7]、ResNet[8]、DenseNet[9]等)被提出,但是这些网络计算量往往较大,很难达到实时运行的工业应用要求,于是轻量化网络应运而生。SqueezeNet[10]从网络结构优化出发,先压缩再扩展,使用常见的模型压缩技术,在性能与AlexNet[11]相近的基础上,模型参数仅为AlexNet的1/50。但该网络仍然采用标准的卷积计算方式,之后的MobileNet[12]采用更加有效的深度可分离卷积,提高了网络速度并进一步促进了卷积神经网络在移动端的应用,同时通过较少的计算量获得了较高的精度。但是在理论上,MobileNet的计算量仍然可以继续降低。ShuffleNet[13]利用组卷积和通道混洗的操作有效降低了点卷积的计算量,实现了更为优越的性能。随着移动设备的进步和应用场景多样化的发展,轻量化网络展现出了更高的工程价值[14]

针对人脸口罩佩戴检测的精度和速度问题,多位学者进行了各种尝试。文献[15]提出一种基于RetinaNet的人脸口罩佩戴检测方法,其通过迁移学习并利用预训练的ResNet模型帮助新模型训练,在验证集上的AP值达到86.45%。文献[16]基于YOLOv3网络模型,引入改进的空间金字塔池化结构并优化多尺度预测网络,同时替换损失函数,相较YOLOv3,其准确率提升14.9%。文献[17]基于YOLOv5网络模型,在原数据集的基础上进行扩充,采用翻转和旋转2种方式得到30 000张图片用于训练,最终准确率达到92.4%。

本文提出一种改进的口罩佩戴检测方法。为在模型精度和速度间取得平衡,设计更为轻量化的改进YOLOv5模型,在几乎不降低模型精度的情况下实现模型压缩并加快推理速度,同时降低对硬件环境的依赖性。针对实际应用场景中由距离摄像头远近不同而导致的一张图片中存在物体尺度面积不平衡的问题,使用YOLOv5分别进行20×20、40×40、80×80的多尺度检测,从而提升模型对于小物体的检测性能。

1 基础理论 1.1 YOLOv5算法原理

YOLO(You Only Look Once)是一个高性能的通用目标检测模型,YOLOv1[18]使用一阶结构完成了分类与目标定位2个任务,随后的YOLOv2[19]与YOLOv3[20]在速度和精度上取得提升,进一步促进了物体检测在工业界的应用,YOLOv4[21]则实现了在一块普通的GPU(1080Ti)上完成模型训练。从YOLOv1至今,YOLO系列已经发展至YOLOv5,相较YOLOv4,YOLOv5更加灵活,它提供了4个大小的版本,分别为YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,4个版本模型大小与精度依次递增,根据Bottleneck数目区分,采用了类似EfficienctNet[22]的channel和layer控制因子来实现版本的变化,在实际应用中,可以根据具体场景的不同来选取合适大小的模型。本文主要实现模型压缩及加速,使其更易应用于资源有限的嵌入式设备,因此,选择YOLOv5s系列作为基准模型。

YOLOv5也有着版本迭代更新,目前已更新至v5.0,其中,v3.0、v4.0、v5.0各有优势,v4.0与v5.0中的YOLOv5-P5模型结构相同,v5.0新提出YOLOv5-P6模型,较已有版本,其添加了1个输出层,共计P3、P4、P5和P6这4个输出层,对应下采样幅度分别为8、16、32和64,新增加的检验层有利于检测较大的物体,可以通过更高分辨率的训练获得更高的精度。此外,YOLOv5-P5模型使用PyTorch1.7中新支持的SiLU()激活函数替换了先前版本中使用的LeakyReLU()和HardSwish()激活函数,使得网络中任何一个模块都只使用SiLU激活函数,并删减了先前版本中BottleneckCSP的部分Conv模块。先前版本的BottleneckCSP以及YOLOv5-P5中的改进BottleneckCSP对比如图 1所示,改进BottleneckCSP也称为C3模块。

Download:
图 1 BottleneckCSP和C3模块 Fig. 1 BottleneckCSP and C3 module

可以看到,C3模块由于消除了每个瓶颈结构中的一个卷积,导致新版YOLOv5-P5的尺寸都稍小,能够得到更小的模型,且推理速度也有少量提升,对于较大的YOLOv5x,推理时间由6.9 ms降低至6 ms,即模型越大,从这个变化中受益越大。表 1所示为YOLOv5s各版本的性能比较,可以看到,虽然YOLOv5s-P5精度较YOLOv5s-3.0有0.8%的下降,但是速度和参数量都更为优秀,YOLOv5s-P6虽然精度最高,但是无论是高分辨率的输入还是增加的检测头,都为设备资源分配增加了更大的负担。综合考量,本文最终选择YOLOv5s-P5作为基准实验模型,以其为baseline进行模型优化。本文中后续出现的YOLOv5一词,若没有特别说明,均指YOLOv5s-P5。

下载CSV 表 1 YOLOv5s各版本性能分析 Table 1 Performance analysis of various versions of YOLOv5s

YOLOv5由Backbone与Head 2个部分组成,Backbone主要有Focus、C3以及SPP模块,Head包括PANet以及Detect模块。

在Backbone部分,通过1个Focus模块、4个Conv模块实现32倍下采样,其中,Focus模块将输入数据切分为4份,每份数据都是相当于2倍下采样得到的,然后在channel维度进行拼接,最后再进行卷积操作,Focus模块减少了卷积的成本,以reshape tensor实现下采样并增加channel维度,可以减少FLOPs并提升速度。

C3模块参照CSPNet结构[23],将一个阶段中基础层的特征图分成2个部分,拆分和合并策略被跨阶段使用,较好地降低了信息集成过程中重复的概率,重复梯度信息的减少,使得YOLOv5网络能够有更好的学习能力,推理计算也有一定的减少。YOLOv4中也使用了CSP模块,但YOLOv5中做出创新,以有无残差边为区分标准设计2种CSP模块,分别为CSP-False和CSP-True,以shortcut的取值False或True来控制改变。

加入SPP模块[24]至CSP模块之后,使用组合的3个多尺度最大池化层,在几乎没有速度损失的情况下大幅提升了感受野,提取出了最重要的特征,同时也有效降低了直接将图片进行伸缩而导致的图片信息丢失的可能性,进一步提升了模型精度。

在Head部分,通过将高层特征信息上采样的方式与低层特征信息进行传递融合,实现了自顶向下的信息流动,再通过步长为2的卷积进行处理,将低层特征与高层特征作Concat操作,使低层分辨率高的特征容易传到上层,从而实现了PANet[25]操作,更好地将低层特征与高层特征进行优势互补,有效解决了多尺度问题。

YOLOv5网络结构如图 2所示。

Download:
图 2 YOLOv5网络结构 Fig. 2 Network structure of YOLOv5
1.2 改进的GhostBottleneckCSP

GhostNet提出了一个创新性的模块Ghost,其通过更少的参数量和计算量生成了更多的特征图[26]。Ghost的实现分为2个部分,一个是普通卷积,另一个是具有更少参数量和计算量的线性操作。先通过有限的普通卷积得到一部分特征图,再将所得的特征图通过线性操作生成更多的特征图,最后将2组特征图在指定维度进行拼接。Ghost的操作原理如图 3所示。

Download:
图 3 普通卷积与Ghost模块的对比 Fig. 3 Comparison between ordinary convolution and Ghost module

普通卷积层的运算可以表示为:

$ \boldsymbol{Y}=\boldsymbol{X}{*}\boldsymbol{\omega }+b $ (1)

其中:$ \boldsymbol{X}\in {\mathbb{R}}^{c\times h\times w} $代表卷积输入,$ c $指输入channel数量,$ h $$ w $分别指输入特征图的高度和宽度;$ \boldsymbol{Y}\in {\mathbb{R}}^{{h}^{'}\times {w}^{'}\times n} $表示输出$ n $个高度和宽度分别为$ {h}^{'} $$ {w}^{'} $的特征图;$ \boldsymbol{\omega }\in {\mathbb{R}}^{c\times k\times k\times n} $代表进行卷积运算的是$ c\times n $个大小为$ k\times k $的卷积核;$ b $是偏差项,逐点加至输出特征图的每个小单元。分析可得式(1)运算的FLOPs多达$ {h}^{'}\times {w}^{'}\times n\times c\times k\times k $。而Ghost结构进行少量的普通卷积运算,采用线性运算高效减少特征冗余,以更少的计算量得到同样多的特征图。由图 3(b)可以看出,Ghost模块的运算可以表示为:

$ {\boldsymbol{Y}}^{'}=\boldsymbol{X}\mathrm{*}{\boldsymbol{\omega }}^{'} $ (2)
$ {\boldsymbol{Y}}_{ij}={{\mathit{\Phi}} }_{i, j}\left({\boldsymbol{Y}}_{\boldsymbol{i}}^{\boldsymbol{'}}\right), i\in \left[1, m\right], j\in \left[1, s\right] $ (3)

其中:$ {\boldsymbol{Y}}^{'}\in {\mathbb{R}}^{{h}^{'}\times {w}^{'}\times m} $代表对输入$ \boldsymbol{X} $进行卷积操作得到$ m $个特征图,这里$ m\le n $,省略了偏置项。分析式(2)的运算,其FLOPs为$ {h}^{'}\times {w}^{'}\times m\times c\times k\times k $。Ghost模块最后要得到$ n $个特征图,因此,式(3)要通过线性操作生成$ n-m $个特征图,设$ {\boldsymbol{Y}}^{'} $中的每一个特征图都需要生成$ s $个特征图,$ {\boldsymbol{Y}}_{\boldsymbol{i}}^{'} $表示在$ {\boldsymbol{Y}}^{'} $中的第i个特征图,$ {{\mathit{\Phi}} }_{i, j} $是每一个$ {\boldsymbol{Y}}_{\boldsymbol{i}}^{'} $用于生成第j个Ghost特征映射$ {\boldsymbol{Y}}_{ij} $的第$ j $个线性操作,$ {{\mathit{\Phi}} }_{i, s} $为实现内在特征映射的identity映射,即图 3(b)中的直接拼接操作。式(2)、式(3)依次运行就能实现Ghost模块。

出于提高处理速度的目的,考虑到设备部署时的实用性,相较使用具有不同形状和参数的线性运算,本文全部使用$ 3\times 3 $$ 5\times 5 $的相同线性运算。设线性运算内核大小为$ d\times d $,则可以将Ghost模块与普通卷积的计算量进行比较,得出Ghost模块相对普通卷积的提升程度,如下所示:

$\begin{array}{l} {c}_{\mathrm{c}\mathrm{o}\mathrm{m}\mathrm{p}\mathrm{a}\mathrm{r}{\mathrm{e}}_{s}}=\\ \frac{{h}^{'}\times {w}^{'}\times n\times c\times k\times k}{{h}^{'}\times {w}^{'}\times c\times k\times k\times m+d\times d\times {h}^{'}\times {w}^{'}\times \left(n-m\right)}=\\ \frac{{h}^{'}\times {w}^{'}\times n\times c\times k\times k}{{h}^{'}\times {w}^{'}\times c\times k\times k\times \frac{n}{s}+d\times d\times {h}^{'}\times {w}^{'}\times \frac{n}{s}\times \left(s-1\right)}=\\ \frac{c\times k\times k}{c\times k\times k\times \frac{1}{s}+d\times d\times \frac{s-1}{s}}\approx\\ \frac{c\times s}{c+s-1}\approx s \end{array}$ (4)

这里的$ k\times k $$ d\times d $大小相同,且$ s\ll c $,因此,最终化简可以得到普通卷积的计算量近似为Ghost模块的$ s $倍,参数量计算类似,最终也可以近似化简为$ s $。从理论上可以定量地证明Ghost模块的优越性,因此,以Ghost模块为基础,进而设计GhostBottleneck及GhostBottleneckCSP模块,具体结构如图 4所示。

Download:
图 4 GhostBottleneck和GhostBottleneckCSP模块结构 Fig. 4 GhostBottleneck and GhostBottleneckCSP module structure

图 4中的$ {c}_{1} $$ {c}_{2} $分别指输入和输出特征图通道数。在本文中,先使用图 4(a)所示的$ 1\times 1 $普通卷积将通道数降至输出通道数的1/2,再根据得到的特征图进行大小为$ 5\times 5 $的深度卷积,最后将2组特征拼接。图 4(b)中第1个Ghost module先将输出通道数降为目标输出通道数的1/2,再由第2个Ghost module将通道数恢复至目标输出通道数,并与残差边传来的输入特征图逐点相加进行特征融合。如图 4(c)所示,使用GhostBottleneck替换掉YOLOv5中所有的Bottleneck模块,与C3模块形成新的GhostBottleneckCSP,原Bottleneck由$ 1\times 1 $$ 3\times 3 $标准卷积组成,新结构通过替换掉原来Bottleneck中较多的$ 3\times 3 $标准卷积,减少了计算量并压缩了模型。

1.3 ShuffleConv模块

当前优秀的轻量级网络绝大部分都使用组卷积或深度可分离卷积来降低卷积操作所产生的计算量,但是,为了实现通道间的特征融合,这些网络中使用的$ 1\times 1 $卷积在整个过程中占用较多的计算量,为了缓解这一问题,ShuffleNet[10]提出了通道混洗的概念。在进行组卷积后,使用通道混洗就可以实现组间信息的流通,以更加经济的方式增强特征的表达能力。通道混洗可以通过张量的常规操作来实现,具体过程如图 5所示。

Download:
图 5 通道混洗的实现过程 Fig. 5 Realization process of channel shuffle

图 5中的数字是输入通道的编号,使用Reshape操作将通道扩展为两维,并通过Transpose对扩展出的2个维度进行置换,通过这个操作能够在不增加计算量的情况下使组卷积通道之间的信息完成融合,最后Flatten操作将2个维度复原为原来的初始维度,完成通道混洗。基于以上原理,可以认为一个逐点卷积可以使用一个$ 1\times 1 $组卷积和1个通道混洗操作组合代替,组卷积与标准卷积相比参数量与计算量有较大减少,且组卷积有类似正则的作用,可以降低过拟合发生的概率。出于这些优点,本文对YOLOv5中6个大小为$ 3\times 3 $、2个大小为$ 1\times 1 $的Conv模块中的普通卷积操作进行改进,将原来的普通卷积更换为组卷积和通道混洗模块,理论上可以实现模型的进一步压缩。

2 YOLOv5增强网络模型 2.1 YOLOv5增强网络结构

YOLOv5具有较好的工程实用性,选择其作为口罩检测模型的基准网络具有可行性。但是,从目前的研究和应用情况来看,YOLOv5仍可以进行进一步改进。结合1.2节及1.3节的内容,得到本文改进后的YOLOv5网络,其整体结构如表 2所示。

下载CSV 表 2 改进的YOLOv5网络整体结构 Table 2 Overall structure of improved YOLOv5 network

表 2中:第2列的-1是指输入来自上一层输出;最后1列的值依次对应该模块的输入通道数、输出通道数、卷积核大小、步长信息;第4列GhostBottleneckCSPn模块中的n代表该模块内GhostBottleneck的数量。经过计算,改进YOLOv5模型总计367层,2 419 191个参数,计算量为5.5GFLOPs。初始YOLOv5模型共计7 066 239个参数,计算量为16.4GFLOPs。两者比较,优化后的模型参数量减少为原来模型的34.24%,计算量减少为原来模型的33.54%,实现了较大程度的模型压缩。

2.2 损失函数

模型损失函数由分类损失(classification loss)、定位损失(localization loss)、目标置信度损失(confidence loss)组成。YOLOv5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,通过实验,本文在GIOU Loss[27]和CIOU Loss[28]之间最终选定效果略好的CIOU Loss作为bounding box回归的损失函数。CIOU Loss计算公式如下:

$ {L}_{\mathrm{C}\mathrm{I}\mathrm{O}\mathrm{U}\;\mathrm{L}\mathrm{o}\mathrm{s}\mathrm{s}}=1-\left({I}_{\mathrm{I}\mathrm{o}\mathrm{U}}-\frac{{d}_{1}^{2}}{{d}_{2}^{2}}-\beta \alpha \right) $ (5)

其中:$ \beta =\frac{\alpha }{(1-{I}_{\mathrm{I}\mathrm{o}\mathrm{U}})+\alpha } $$ \alpha =\frac{4}{{\mathrm{\pi }}^{2}}{\left(\mathrm{t}\mathrm{a}{\mathrm{n}}^{-1}\frac{{W}^{gt}}{{h}^{gt}}-\mathrm{t}\mathrm{a}{\mathrm{n}}^{-1}\frac{W}{h}\right)}^{2} $$ {d}_{1} $代表预测框与目标框2个中心点的欧式距离;$ {d}_{2} $代表最小外接矩形的对角线距离;$ \frac{{W}^{gt}}{{h}^{gt}} $$ \frac{W}{h} $分别代表目标框和预测框各自的宽高比。相较GIOU Loss,CIOU Loss考虑了边界框宽高比的尺度信息,从重叠面积、中心点距离和长宽比3个角度进行衡量,使得预测框回归效果更佳。

2.3 本文方法实现 2.3.1 模型训练算法

本文模型训练算法实现过程描述如算法1所示。

算法1   模型训练算法

输入 人脸口罩数据集图片及标记文件

输出本次训练中性能最佳的检测模型

初始化参数 训练epoch数,学习率,批次大小,输入图片大小,网络模型配置yaml文件,标签与anchor的IoU阈值,损失系数,数据增强系数,标签与anchor的长宽比阈值

图片预处理 调整图片亮度、对比度、饱和度并进行Mosaic处理

步骤1 准备数据,制作数据集并划分训练集和验证集。

步骤2 加载数据配置信息及初始化参数,输入数据并对其进行预处理。

步骤3 加载网络模型,并对输入图片进行特征提取及物体定位分类。

步骤4 随着迭代次数的增加,使用SGD对网络中各组参数进行更新优化。

步骤5 若当前epoch不是最后一轮,则在验证集上计算当前模型的mAP,若计算得到的模型性能更佳,则更新存储的最佳模型。

步骤6 在训练完所设置的迭代数后,获得训练好的最佳性能模型和最近一次训练的模型。

步骤7 输出性能最佳的模型。

2.3.2 整体实现流程

本文方法整体实现流程如图 6所示:首先准备数据,进行人脸口罩佩戴图片筛选及标记,制作数据集并随机划分训练集、验证集、测试集;接着按照算法1进行模型训练,得到性能最佳的人脸口罩佩戴检测模型;之后对测试集数据进行测试,并在测试图片上呈现最终的识别结果,即人脸位置和口罩佩戴状态。

Download:
图 6 本文方法整体流程 Fig. 6 Overall process of this method
3 实验及结果分析 3.1 实验环境与数据集介绍

本文实验的机器操作系统版本为Ubuntu 9.3.0-10ubuntu2,CPU型号为Intel® CoreTM i3-9100F CPU@3.60 GHz,GPU型号为GeForce RTX 2080 Ti,显存大小为11 GB,内存大小为31 GB。所有模型基于PyTorch 1.8,并使用cuda 10.1和cudnn 7.6.5对GPU进行加速。

实验使用的数据集来自AIZOO团队整理的开源数据集,该数据集主要从WIDER Face及MAFA公开数据集中筛选得到,从中分别选择3 894张及4 064张图片,并对其进行二次筛选及扩充,删除错误标签,加入部分ROBOFLOW开放的口罩数据集,最终得到训练集6 110张,验证集1 832张,共计7 942张图片。将图片预定义为佩戴口罩和未佩戴口罩两类,佩戴口罩标签为face-mask,未佩戴口罩标签为face。

为了避免将捂嘴动作预测为佩戴口罩,实验数据集中加入了嘴巴被手或衣物等其他物品捂住的数据,从而有效过滤了此类干扰。数据集部分图片如图 7所示。

Download:
图 7 数据集部分图片 Fig. 7 Partial pictures of dataset

通过对数据集进行分析得到可视化结果如图 8所示:图 8(b)xy指中心点位置,颜色越深代表该点位置目标框的中心点越集中;图 8(c)中width、height分别代表图片中物体的宽、高。从图 8(b)图 8(c)可以看出,数据集物体分布比较均匀,且中小物体占比更大,存在物体间遮挡的情况,符合日常实际应用场景,但数据集存在轻微的类别间样本不平衡问题,该问题将在数据预处理中得到缓解。

Download:
图 8 数据集分析结果 Fig. 8 Dataset analysis results
3.2 数据预处理 3.2.1 数据集标记

实验数据集为PASCAL VOC格式,但YOLOv5所需为YOLO格式的txt标记文件,具体格式为(class_id,xywh),且都是归一化后的值,因此,需要做相应转换,具体运算规则如下所示:

$ x={x}_{\mathrm{c}\mathrm{e}\mathrm{n}\mathrm{t}\mathrm{e}\mathrm{r}}/\mathrm{w}\mathrm{i}\mathrm{d}\mathrm{t}\mathrm{h} $ (6)
$ y={y}_{\mathrm{c}\mathrm{e}\mathrm{n}\mathrm{t}\mathrm{e}\mathrm{r}}/\mathrm{h}\mathrm{e}\mathrm{i}\mathrm{g}\mathrm{h}\mathrm{t} $ (7)
$ w=({x}_{\mathrm{m}\mathrm{a}\mathrm{x}}-{x}_{\mathrm{m}\mathrm{i}\mathrm{n}})/\mathrm{w}\mathrm{i}\mathrm{d}\mathrm{t}\mathrm{h} $ (8)
$ h=({y}_{\mathrm{m}\mathrm{a}\mathrm{x}}-{y}_{\mathrm{m}\mathrm{i}\mathrm{n}})/\mathrm{h}\mathrm{e}\mathrm{i}\mathrm{g}\mathrm{h}\mathrm{t} $ (9)

其中:$ \mathrm{c}\mathrm{l}\mathrm{a}\mathrm{s}\mathrm{s}\_\mathrm{i}\mathrm{d} $为类别的id编号;$ {x}_{\mathrm{m}\mathrm{a}\mathrm{x}}\mathrm{、}{y}_{\mathrm{m}\mathrm{a}\mathrm{x}}\mathrm{、}{x}_{\mathrm{m}\mathrm{i}\mathrm{n}}\mathrm{、}{y}_{\mathrm{m}\mathrm{i}\mathrm{n}} $分别指VOC格式的xml标记文件中相对于图片左上角,标记物体所在位置的左上角坐标及右下角坐标的值。

3.2.2 自适应图片采样

本文所用数据集存在轻微的类间不平衡问题,这也是物体检测中的一个常见问题,模型训练时样本过少的类别的参考性较小,可能会使模型主要关注样本较多的类别,模型参数也主要根据样本多的类别的损失进行调整,最终导致针对少样本类别的检测精度有所下降。

为了解决上述问题,本文采用自适应图片采样策略,根据物体类别的数量占比及每张图片中各类物体的出现频数,生成每张图片的采样权重,再根据图片的采样权重生成采样的索引序列,类别数量和频数与类别权重成反比,若某张图片频数最高的类别的数量占比也较其他类别高,则这张图片被采样的概率就会降低,通过这种采样方式可以有效缓解类间不平衡问题。

3.2.3 anchor设置

对于目标检测任务,设置合适的anchor直接影响模型的最终表现。合适的anchor是根据数据集物体大小而确定的,利用预设值anchor,基于shape阈值对bbox计算可能的最优召回率。如果召回率大于0.98,则无需优化,直接返回;如果召回率小于0.98,则利用遗传算法与k-means重新设置anchor。本文模型在人脸口罩数据集上可能的最优召回率为0.997 8,因此,使用YOLOv5的初始anchor值$ \left[\mathrm{10, 13, 16},30, \mathrm{ }\mathrm{33, 23}\right] $$ \left[\mathrm{30, 61, 62, 45, 59, 119}\right] $$ \left[\mathrm{116, 90, 156}, \right. $$ \left.\mathrm{198, 373, 326}\right] $

3.2.4 Mosaic数据增强

本文实验的Mosaic数据增强参考CutMix[29]:随机选取4张图片并对其进行随机裁剪、排布和缩放,然后完成拼接,得到的效果如图 9所示。这种方式随机扩充了数据集,特别是随机缩放增加了小目标,使得网络的鲁棒性得到一定提升。经过Mosaic数据增强后相当于一次性处理了4张图片,batch size隐性增加,初始设置的batch size值无需很大也可以得到一个性能较好的模型,对GPU性能要求相对降低。

Download:
图 9 Mosaic数据增强效果 Fig. 9 Mosaic data enhancement effect

除此之外,本文还进行了改变亮度、对比度、饱和度等常规数据增强方法,与Mosaic相结合,在一定程度上有效防止了过拟合问题,能够实现更长时间的训练从而获得更优的模型性能。

3.3 结果分析

本文所有实验中学习率均使用Warmup[30]训练,避免模型训练时初始学习率过高引起模型振荡,以便维持模型的稳定性。在Warmup阶段,采用一维线性插值对每次迭代的学习率进行更新,bias层的学习率从0.1下降到基准学习率0.01,其他参数学习率从0增加到0.01。在Warmup阶段之后,采用余弦退火算法[31]对学习率进行更新。实验中BN层、权重weight层、bais层的学习率分别为lr0、lr1、lr2,所有实验均训练300个epoch,batch size设为32。学习率的变化曲线如图 10所示,其中,lr0和lr1曲线变化相同。

Download:
图 10 学习率变化曲线 Fig. 10 Curve of learning rate

从mAP(0.5)、mAP(0.5∶0.95)、召回率Recall、准确率Precision、平均检测处理时间、参数量、计算量、模型大小这8个角度对模型性能进行衡量。上述部分评价指标的具体计算公式如下:

$ {P}_{\mathrm{P}\mathrm{r}\mathrm{e}\mathrm{c}\mathrm{i}\mathrm{s}\mathrm{i}\mathrm{o}\mathrm{n}}=\frac{{T}_{\mathrm{P}}}{{T}_{\mathrm{P}}+{F}_{\mathrm{P}}}=\frac{{T}_{\mathrm{P}}}{\mathrm{a}\mathrm{l}\mathrm{l}\;\mathrm{d}\mathrm{e}\mathrm{t}\mathrm{e}\mathrm{c}\mathrm{t}\mathrm{i}\mathrm{o}\mathrm{n}\mathrm{s}} $ (10)
$ {R}_{\mathrm{R}\mathrm{e}\mathrm{c}\mathrm{a}\mathrm{l}\mathrm{l}}=\frac{{T}_{\mathrm{P}}}{{T}_{\mathrm{P}}+{F}_{\mathrm{N}}}=\frac{{T}_{\mathrm{P}}}{\mathrm{a}\mathrm{l}\mathrm{l}\;\mathrm{g}\mathrm{r}\mathrm{o}\mathrm{u}\mathrm{n}\mathrm{d}\;\mathrm{t}\mathrm{r}\mathrm{u}\mathrm{t}\mathrm{h}\mathrm{s}} $ (11)
$ {A}_{\mathrm{A}\mathrm{P}}={{\int }_{0}^{1}P}_{\mathrm{P}\mathrm{r}\mathrm{e}\mathrm{c}\mathrm{i}\mathrm{s}\mathrm{i}\mathrm{o}\mathrm{n}}\mathrm{d}{R}_{\mathrm{R}\mathrm{e}\mathrm{c}\mathrm{a}\mathrm{l}\mathrm{l}} $ (12)
$ {m}_{\mathrm{m}\mathrm{A}\mathrm{P}}=\frac{\sum \limits_{i=1}^{N}{A}_{\mathrm{A}{\mathrm{P}}_{i}}}{N} $ (13)

其中:$ {T}_{\mathrm{P}} $$ {F}_{\mathrm{P}} $$ {F}_{\mathrm{N}} $分别指正确检验框、误检框、漏检框数量;$ {A}_{\mathrm{A}\mathrm{P}} $值为P-R曲线面积,本文采用101个插值点的计算方法;N指检测类别总数,本文为2;mAP(0.5)指IoU设为0.5时所有类别的平均AP;mAP(0.5∶0.95)指在不同IoU阈值下的平均mAP,IoU取值从0.5增加到0.95,步长为0.05。平均检测处理时间包括网络推理时间及NMS处理所花费的时间,模型大小指最终训练结束得到并保存的模型大小。

3.3.1 在人脸口罩数据集上的实验结果

通过消融实验来逐步验证网络结构改变所引起的性能变化,本节3个实验分别训练YOLOv5、Ghost-YOLOv5、Ghost-YOLOv5-Shuffle这3个网络,实验测试结果分别如图 11图 12表 3所示,其中,曲线灰度依次递增分别代表YOLOv5、Ghost-YOLOv5-Shuffle和Ghost-YOLOv5。

Download:
图 11 各模型在人脸口罩数据集上的实验结果 Fig. 11 Experimental results of each model on face mask dataset
Download:
图 12 各模型的所有类别AP值对比 Fig. 12 Comparison of AP values of all categories of each model
下载CSV 表 3 各模型的性能对比结果 Table 3 Performance comparison results of each model

表 3可以看出,使用GhostBottleneck替换YOLOv5中所有的Bottleneck模块后,模型计算量和参数量分别压缩为原来的63.41%和68.98%,在使用GPU或CPU的情况下分别有13.64%和16.37%的速度提升,并且模型大小变为原来的69.34%,但同时,从图 11(c)中也可以看出,模型精确度有了明显损失,且波动更为剧烈,这在验证集的类别损失曲线中也有所体现,所幸在训练后期,Ghost-YOLOv5模型与YOLOv5之间精确度的差值较初期有所下降,除此之外,从图 12可知,Ghost-YOLOv5模型最终的所有类别平均AP较YOLOv5仅下降0.3%。

在继续将标准卷积替换为ShuffleConv后,模型计算量和参数量进一步压缩,分别为原来的33.54%和34.24%,在使用GPU情况下处理时间仍然保持1.9 ms不变,但CPU速度较YOLOv5提升了28.25%,模型大小压缩至原来的35.77%。GPU情况下速度没有提升,原因是在算力足够的GPU平台上,组卷积虽然降低了运算量和参数量,但是由于内存交换速度的限制,ShuffleConv的瓶颈并非是计算强度,因此,此模块对GPU环境下的影响微乎其微,但当在计算能力有限的CPU平台上,计算速度便会有相当的提升,更适合部署在资源有限的嵌入式设备上。此外,Ghost-YOLOv5-Shuffle在Ghost-YOLOv5的基础上精度有所提升,从各个衡量标准来看都与YOLOv5的检测能力更加贴近,且从分类损失曲线来看,在一定程度上证实了组卷积的正则化效果,由图 12可知,Ghost-YOLOv5-Shuffle的最终mAP(0.5)为0.950,较YOLOv5的0.951几乎没有精度下降,且各类间差值都在0.003范围之内。

YOLOv5与Ghost-YOLOv5-Shuffle实际运行效果如图 13所示,每个小图中的左边图片为YOLOv5,右边图片为Ghost-YOLOv5-Shuffle。通过图 13的实际检测效果对比可以看出,改进后的模型在进行非极小物体的识别时与基准模型几乎没有区别,面对分布极为密集的模糊小物体时,基准模型比改进模型略微精确,但改进模型对绝大部分小物体还是能够实现正确识别。

Download:
图 13 复杂场景下的实际检测效果 Fig. 13 Actual detection effect in complex scenes
3.3.2 不同网络的对比实验

为了进一步验证本文所提模块及网络的高效性,将其与同类轻量级网络YOLOv3-tiny、YOLOv4-tiny等进行对比,结果如表 4所示。其中,实验5、实验6第2列括号中的数字代表模型中前3个GhostBottleneckCSP中GhostBottleneck的个数。从表 4可以得出:

下载CSV 表 4 不同网络的性能对比 Table 4 Performance comparison of different networks

1)由实验0、实验2、实验4、实验6的对比可以看出,本文模型相较YOLOv3-tiny、YOLOv4-tiny、YOLOv5-P6具有绝对优势,其模型大小分别仅为上述模型的30.12%、40.65%、20.9%,但mAP明显大于YOLOv3-tiny、YOLOv4-tiny,且与YOLOv5-P6的mAP(0.5)大小相同,即选择本文所提网络结构进行人脸口罩佩戴检测是合理且经济的。

2)通过实验0和实验1、实验2和实验3这两组对比实验可以验证GhostBottleneckCSP和ShuffleConv模块在其他网络上的优化通用性,加入GhostBottleneckCSP和ShuffleConv模块的YOLOv3-tiny模型大小仅为原模型的8.43%,大量的$ 3\times 3 $$ 1\times 1 $标准卷积被替换,实现了模型的极限压缩,且由于加入了更加高效的CSP模块,实验1的精度较原模型也有了明显提升。同理,在YOLOv4-tiny上做类似替换也能实现模型压缩及精度提升,且在CPU上的推理速度也提高了27.13%。

3)通过实验5、实验6可以说明,适当调整GhostBottleneckCSP中的GhostBottleneck数量能够在一定程度上提升模型对小物体的检测能力,在本文所提模型的基础上,将第2个和第3个GhostBottleneckCSP中的GhostBottleneck数量分别设为1和3,对应实验2、实验3,更大数量的模型的精度有轻微提升,且对小物体的检测能力更强。在实际应用场景中,可根据任务需要适当调整GhostBottleneck模块的数量,以达到模型大小与精度之间的平衡,实现更好的检测性能。

4 结束语

本文设计并实现了一种轻量化的YOLOv5增强网络模型,该模型可以压缩大小并加快推理速度,模型精度得到一定程度的优化,同时极大降低了对硬件环境的依赖性,能够满足实际应用的需求。后续将在移动端进行模型部署,在实际应用场景中验证并完善所提模型,此外,将口罩佩戴特征与其他关联特征相结合,实现实用性更强的安全卫生监督系统,以更好地满足社会与日常生活的实际需求,也是下一步的研究方向。

参考文献
[1]
ZOU Z, SHI Z, GUO Y, et al. Object detection in 20 years: a survey[EB/OL]. [2021-03-05]. https://arxiv.org/pdf/1905.05055.pdf.
[2]
LECUN Y, BENGIO Y, HINTON G. Deep learning[J]. Nature, 2015, 521(7553): 436-444. DOI:10.1038/nature14539
[3]
SEJNOWSKI T J. The deep learning revolution[M]. Cambridge, USA: MIT Press, 2018.
[4]
JI Y Z, ZHANG H J, ZHANG Z, et al. CNN-based encoder-decoder networks for salient object detection: a comprehensive review and recent advances[J]. Information Sciences, 2021, 546: 835-857. DOI:10.1016/j.ins.2020.09.003
[5]
LIU L L, ZHANG H J, XU X F, et al. Collocating clothes with generative adversarial networks cosupervised by categories and attributes: a multidiscriminator framework[J]. IEEE Transactions on Neural Networks and Learning Systems, 2020, 31(9): 3540-3554. DOI:10.1109/TNNLS.2019.2944979
[6]
GAO X J, ZHANG Z, MU T T, et al. Self-attention driven adversarial similarity learning network[J]. Pattern Recognition, 2020, 105: 107331. DOI:10.1016/j.patcog.2020.107331
[7]
SIMONYAN K, ZISSERMAN A. Very deep convolutional networks for large-scale image recognition[EB/OL]. [2021-03-05]. https://arxiv.org/abs/1409.1556.
[8]
HE K M, ZHANG X Y, REN S Q, et al. Deep residual learning for image recognition[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2016: 770-778.
[9]
HUANG G, LIU Z, VAN DER MAATEN L, et al. Densely connected convolutional networks[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2017: 2261-2269.
[10]
IANDOLA F N, HAN S, MOSKEWICZ M W, et al. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and < 0.5 MB model size[EB/OL]. [2021-03-05]. https://arxiv.org/abs/1602.07360.
[11]
KRIZHEVSKY A, SUTSKEVER I, HINTON G E. ImageNet classification with deep convolutional neural networks[J]. Communications of the ACM, 2017, 60(6): 84-90. DOI:10.1145/3065386
[12]
HOWARD A G, ZHU M, CHEN B, et al. MobileNets: efficient convolutional neural networks for mobile vision applications[EB/OL]. [2021-03-05]. https://arxiv.org/pdf/1704.04861.pdf.
[13]
ZHANG X Y, ZHOU X Y, LIN M X, et al. ShuffleNet: an extremely efficient convolutional neural network for mobile devices[C]//Proceedings of 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2018: 6848-6856.
[14]
王军, 冯孙铖, 程勇. 深度学习的轻量化神经网络结构研究综述[J]. 计算机工程, 2021, 47(8): 1-13.
WANG J, FENG S C, CHENG Y. Survey of research on lightweight neural network structures for deep learning[J]. Computer Engineering, 2021, 47(8): 1-13. (in Chinese)
[15]
邓黄潇. 基于迁移学习与RetinaNet的口罩佩戴检测的方法[J]. 电子技术与软件工程, 2020(5): 209-211.
DENG H X. Method of mask wearing detection based on transfer learning and RetinaNet[J]. Electronic Technology & Software Engineering, 2020(5): 209-211. (in Chinese)
[16]
王艺皓, 丁洪伟, 李波, 等. 复杂场景下基于改进YOLOv3的口罩佩戴检测算法[J]. 计算机工程, 2020, 46(11): 12-22.
WANG Y H, DING H W, LI B, et al. Mask wearing detection algorithm based on improved YOLOv3 in complex scenes[J]. Computer Engineering, 2020, 46(11): 12-22. (in Chinese)
[17]
谈世磊, 别雄波, 卢功林, 等. 基于YOLOv5网络模型的人员口罩佩戴实时检测[J]. 激光杂志, 2021, 42(2): 147-150.
TAN S L, BIE X B, LU G L, et al. Real-time detection for mask-wearing of personnel based on YOLOv5 network model[J]. Laser Journal, 2021, 42(2): 147-150. (in Chinese)
[18]
REDMON J, DIVVALA S, GIRSHICK R, et al. You only look once: unified, real-time object detection[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2016: 779-788.
[19]
REDMON J, FARHADI A. YOLO9000: better, faster, stronger[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2017: 6517-6525.
[20]
REDMON J, FARHADI A. YOLOv3: an incremental improvement[EB/OL]. [2021-03-05]. https://arxiv.org/abs/1804.02767.
[21]
BOCHKOVSKIY A, WANG C Y, LIAO H Y M. YOLOv4: optimal speed and accuracy of object detection[EB/OL]. [2021-03-05]. https://arxiv.org/abs/2004.10934.
[22]
TAN M X, LE Q V. EfficientNet: rethinking model scaling for convolutional neural networks[EB/OL]. [2021-03-05]. https://arxiv.org/abs/1905.11946.
[23]
WANG C Y, MARK LIAO H Y, WU Y H, et al. CSPNet: a new backbone that can enhance learning capability of CNN[C]//Proceedings of IEEE/CVF Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2020: 1571-1580.
[24]
HE K M, ZHANG X Y, REN S Q, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1904-1916. DOI:10.1109/TPAMI.2015.2389824
[25]
LIU S, QI L, QIN H F, et al. Path aggregation network for instance segmentation[C]//Proceedings of IEEE/CVF Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2018: 8759-8768.
[26]
HAN K, WANG Y H, TIAN Q, et al. GhostNet: more features from cheap operations[C]//Proceedings of IEEE/CVF Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2020: 1577-1586.
[27]
REZATOFIGHI H, TSOI N, GWAK J, et al. Generalized intersection over union: a metric and a loss for bounding box regression[C]//Proceedings of IEEE/CVF Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2019: 658-666.
[28]
ZHENG Z H, WANG P, LIU W, et al. Distance-IoU loss: faster and better learning for bounding box regression[J]. Proceedings of the AAAI Conference on Artificial Intelligence, 2020, 34(7): 12993-13000.
[29]
YUN S, HAN D, CHUN S, et al. CutMix: regularization strategy to train strong classifiers with localizable features[C]//Proceedings of IEEE/CVF International Conference on Computer Vision. Washington D.C., USA: IEEE Press, 2019: 6022-6031.
[30]
XIONG R B, YANG Y C, HE D, et al. On layer normalization in the transformer architecture[EB/OL]. [2021-03-05]. https://arxiv.org/abs/2002.04745.
[31]
LOSHCHILOV I, HUTTER F. SGDR: stochastic gradient descent with warm restarts[EB/OL]. [2021-03-05]. https://arxiv.org/abs/1608.03983.