基于改进YOLOv4的密集人群口罩佩戴检测算法
2022-06-20曹小喜程凡永王飞州张明艳
曹小喜,程凡永*,王飞州,张明艳
(1.安徽工程大学 电气工程学院,安徽芜湖 241000;2. 安徽工程大学 高端装备先进感知与智能控制教育部重点实验室,安徽芜湖 241000)
自2019年12月至今,新冠肺炎疫情给人类社会的生产生活带来重大影响[1]。从世界范围来看,截至目前,新冠肺炎确诊病例仍在高速增长,因此我国的疫情防控工作仍然面临巨大挑战。新冠病毒主要通过飞沫传播,正确佩戴口罩能够有效降低感染新冠肺炎的风险[2],但在一些低风险地区,公众主动佩戴口罩的意识有所降低,这就需要采取有效的口罩佩戴检测措施来提醒人们疫情并没有结束,在公共场所仍需坚持佩戴口罩。在公共场所进行口罩佩戴检测需要克服小目标、遮挡目标给目标检测任务带来的困难,因此用于进行口罩佩戴检测的目标检测算法需要具备更强的提取和利用细节特征的能力。快速有效地进行口罩佩戴检测对于疫情防控具有重要意义。
目前比较流行的基于深度学习的目标检测算法分为两类,一类是以R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]为代表的基于区域选择的Two-stage目标检测算法,这种方法首先通过区域推荐网络(Resign Proposal Network,RPN)生成大量可能包含目标的候选框,然后再通过卷积神经网络进行分类和预测,该方法虽然取得了不错的检测精度,但是由于其存在大量的冗余计算导致检测速度较慢,难以满足实时性的要求。另一类是以YOLO(You Only Look Once)[6]、SSD(Single Shot MultiBox Detector)[7]、YOLOv2[8]、YOLOv3[9]、YOLOv4[10]为代表的基于逻辑回归的one-stage目标检测算法,此类方法实现了端到端检测,用一个全卷积神经网络直接计算目标物体的分类结果和位置坐标,极大地提高了检测速度,但是YOLO算法对小目标、遮挡目标容易产生漏检和误检测。YOLO算法经过数次版本迭代,算法性能大大提高,其中YOLOv4在检测速度和检测精度方面都达到了极高的水平,因此本文选择YOLOv4目标检测模型并对其进行改进和优化以使其更好地适应口罩佩戴检测任务。
目前专门用于口罩佩戴检测的算法还比较少。牛作东等[11]在RetinaFace人脸检测算法的基础上引入注意力机制等对原算法进行改进实现了口罩佩戴检测。曹诚硕等[12]在YOLOv3中通过引入注意力机制并改进特征金字塔结构实现了口罩佩戴。王艺皓等[13]通过在原始YOLOv3的基础上改进主干特征提取网络,同时优化损失函数提升了网络性能,提高了口罩佩戴检测的检测精度。但是上述算法仍然不够完美,在检测速度和检测精度方面仍然存在进一步提升的空间。
YOLOv4是YOLOv3的改进版,相较于YOLOv3而言,YOLOv4目标检测算法在MSCOCO数据集上的平均准确率均值(mean Average Precision,mAP)提高了10%,检测速度提升了约12%。但是在复杂的自然场景下,比如密集人群场景中进行口罩佩戴检测,待检测目标普遍偏小且经常存在相互遮挡以及阳光照射而产生的高曝光现象,容易出现漏检、错误检测以及置信度偏低等问题。本文通过在YOLOv4算法的基础上进行改进和优化,高质量完成密集人群场景下的口罩佩戴检测任务。
1 YOLOv4算法原理
YOLOv4是在YOLOv3的基础上融合了跨阶段局部网络(Cross Stage Partial Network,CSPNet)[14]、空间金字塔池化(Spatial Pyramid Pooling,SPP)[15]、路径聚合网络(Path Aggregation Network,PANet)[16]的目标检测算法,其网络结构如图1所示。YOLOv4采用CSPDarknet-53作为主干特征提取网络,CSPDarknet-53是由5个分别包含1、2、8、8、4个残差单元的残差结构构成,输入图片的尺寸选取为416×416,经过CSPDarknet-53的特征提取,得到F1、F2、F3 3个有效特征层;F3再经过加强特征提取网络SPP结构的处理,然后同F1、F2一起送入PANet进行特征融合,输出13×13、26×26、52×52 3个不同尺度的特征图,分别负责对大、中、小目标检测;最后经过YOLO Head的处理得到预测结果。预测结果包括欲检测目标的类别、置信度以及预测框的调整参数,然后利用置信度阈值和Soft-NMS对预测框进行筛选,得到最终的检测结果。
YOLOv4的损失函数是在YOLOv3的损失函数的基础上改进得到的。YOLOv3采用均方误差作为目标物体边界框的回归损失,直接对目标物体边界框的中心坐标、宽度以及高度进行回归,这种方法没有考虑对象的完整性,对位置的预测不够准确。为了解决这一问题,YOLOv4引入CIoU Loss[17]作为目标物体边界框回归的损失函数,CIoU同时关注预测框和真实框的重合率以及两者中心点之间的距离和宽高比。在目标边界框的回归方面,CIoU具有更好的收敛速度和精度。CIoU损失函数的定义如下:
(1)
式中,IoU表示预测框与真实框的交并比;预测框和真实框的中心点分别用b和bgt表示;ρ2(b,bgt)是指预测框和真实框中心点之间的欧氏距离;c是指可以把预测框与真实框都包括进去的最小闭包区域的对角线距离;α为权重函数;v用来度量长宽比的相似性。IoU以及α和v的计算公式如下:
(2)
(3)
(4)
式中,B表示预测边界框;Bgt表示真实边界框。对于目标所属类别的损失函数Lcla以及目标置信度的损失函数Lconf方面的YOLOv4基本沿用了YOLOv3的方法。Lconf和Lcla的表达式如下:
(5)
(6)
YOLOv4的损失函数为以上3部分损失函数之和,其表达式如下:
L=Lconf+Lcla+Lloc,
(7)
虽然YOLOv4在YOLOv3的基础上融合了很多改进策略,算法的整体性能取得了较大提升,但直接将其应用到密集人群场景下的口罩佩戴检测任务中表现不佳,会出现遗漏检测、错误检测现象。针对上述存在的问题,对YOLOv4算法进行改进。YOLOv4网络结构如图1所示。
图1 YOLOv4网络结构
2 改进的YOLOv4算法
2.1 改进主干特征提取网络
卷积操作往往希望提高感受野以融合更多空间特征,但是对于各通道维度的特征融合,通常都是默认对输入特征图的所有通道进行特征融合,这就不能够很好地学习到不同通道特征的重要程度。文献[18]中提出一种通道注意力机制SE(Squeeze-and-Excitation)模块,SE模块首先对卷积得到的特征图进行压缩操作,通过全局平均池化压缩特征图,将一个通道上的整个空间特征编码为一个全局特征,从而得到通道级的全局特征;然后对所得全局特征执行激励操作,通过一个全连接层FC(Fully Connected Layer)加ReLU层来学习各个通道间的相互关系,进而得到不同通道的权重;接下来再通过一个全连接层和Sigmoid激励函数将获得的权重归一化;最后将归一化后的权重与对应通道特征图上的每个元素相乘获得最终加权后的权重,这一步称为Scale操作。整个SE模块所做的工作笔者称之为特征重标定。数学解析描述为
Fout=σ(Fr(Pavg(Fin)))⊗Fin,
(8)
式中,Fin∈iC×H×W为SE模块的输入特征图;Pavg表示全局平均池化;Fr表示FC+ReLU层;σ表示Sigmoid;⊗表示Scale操作。
为了提升模型对关键特征的提取能力,将SE模块嵌入到CSPDarknet-53中构建融合了通道注意力机制的骨干网络SECSPDarknet-53,相关结构如图2所示,通过在CSPDarknet-53骨干网络的主支路的残差单元中引入SE模块使得模型能够通过学习不同通道权重的重要程度来对特征进行加权,从而充分学习对当前检测任务有益的特征,抑制无用特征对模型的干扰,从而达到改善网络性能的目的。图2中SE-Residual unit为嵌入SE模块的残差块,H、W、C分别代表特征图的高度、宽度以及通道数。实验证明降维系数r取16时,在残差网络中嵌入SE模块可以在只增加较小计算量的情况下使模型取得不错的效果。加入SE模块的残差单元能够在输出维度没有发生变化的条件下,使残差网络获得学习各通道间关系的能力,同时使网络具备更多的非线性特性,增强神经网络模型的泛化能力。
图2 SECSPDarknet-53基本组成单元
2.2 改进特征增强网络
原始YOLOv4将在主干特征提取网络最后一层输出特征层输入到SPP模块进行特征增强。该模块的网络结构如图3所示,其核心思想是对任意大小的输入特征图进行不同尺度的最大池化操作,然后再通过拼接操作得到一个固定长度的特征向量,即首先将输入特征图进行3次卷积(Conv2D_BN_LeakyReLU)操作;然后,利用3个步长为1,卷积核大小分别为5×5、9×9、13×13的池化层进行最大池化处理,得到3个不同尺度的局部特征;最后,将所得多尺度局部特征与输入的全局特征进行堆叠以实现特征增强,接着再利用3次卷积对融合特征图的通道数进行调整。空间金字塔池化的优点在于可以对任意尺寸或比例的输入图像进行处理而生成固定尺度的特征表示,对于输入图像的大小以及形状的变化具有很好的鲁棒性。本文在原始YOLOv4的基础上再引入两个空间金字塔池化模块来对主干特征提取网络倒数第二层、倒数第三层的输出特征图进行特征增强,在不同大小的感受野上获取多尺度空间特征,并进行上下文语义信息的融合以获得更加丰富的特征表示,从而进一步提升模型性能,改善网络的检测精度。
图3 空间金字塔池化模块
2.3 改进后的YOLOv4算法模型
通过改进主干特征提取网络和加强特征提取网络来对YOLOv4进行改进,改进后的YOLOv4整体网络结构如图4所示。输入图像经过SECSPDarknet-53特征提取网络的多次特征提取后输出3个不同尺度的特征图;然后分别输入加强特征提取网络SPPNet进行更深层次的加强特征提取,得到3个不同尺度的有效特征层L1、L2、L3;再将3个特征图输入到基于自下而上和自上而下路径聚合策略构建的特征融合网络PANet进行特征融合:首先将L3经过1次卷积加上采样与L2执行Concat操作,再经过5次卷积处理后的输出特征图记为Q2;Q2经过卷积加上采样与L1执行Concat操作,再经过5次卷积运算输出尺度为13×13的检测层,记为Q1;Q1经过下采样与Q2执行Concat操作,再经过5次卷积处理得到尺度为26×26的检测层,记为Q3;Q3与L3执行Concat操作,再经过5次卷积运算输出尺度为52×52的检测层;YOLO Head从这3个检测层进行预测。
图4 改进后的YOLOv4模型
3 实验与结果分析
3.1 实验平台
实验是在基于Windows 10操作系统搭建的Pytorch深度学习环境中进行的。实验平台的具体配置参数如表1所示。
表1 实验平台参数配置
配置参数参数CUDA版本11.1cuDNN版本8.0.5Pytorch版本1.8.0Python版本3.8.7
3.2 数据集
数据集是从开源数据集WIDER Face、MAFA(Masked face)、RMFD(Real-Word Masked Face Dataset)和利用网络爬虫从互联网下载一些图片中筛选的佩戴口罩的人脸图片和未佩戴口罩的人脸图片,共计8 700张。然后使用标注工具Labelimg将数据集中的图片标注成VOC的数据格式,其中未佩戴口罩的人脸标注为face,佩戴口罩的人脸标注为face_mask。
由于原始YOLOv4的9个先验框是在COCO数据集上利用K-means算法聚类得到的,直接应用到本文算法不是很适用,因此,需要利用K-means聚类算法对本文数据集进行聚类来获得合适的Anchor Box。聚类所得先验框的尺寸信息与分配结果如表2所示,其中大尺度的特征图用来预测小目标,分配3个小尺度的先验框,小尺度的特征图用来预测大目标,分配3个大尺度的先验框。
表2 先验框尺寸分配
运用Mosaic数据增强技术,将图片进行缩放拼接如图5所示。这样可以丰富训练图片的背景信息,有利于提高模型的泛化能力和鲁棒性。
图5 Mosaic数据增强
3.3 评价指标
在公共场所佩戴口罩对于防止疫情反弹具有重要作用,因此检测精度对于口罩佩戴检测模型来说尤为重要,另一方面检测速度也很重要。所以本文采用平均准确率(Average Precision,AP)和平均准确率均值(mAP)以及检测速度(Frames Per Second,FPS)作为目标检测模型的评价指标,AP和mAP这两个评价指标可以同时评估查准率(Precision,P)和召回率(Recall,R):
(9)
(10)
比如在本文中要检测戴口罩的目标face_mask,TP(True Positive)就代表口罩佩戴检测算法将戴口罩的人脸正确识别为face_mask的数量;FP(False Positive)就代表口罩佩戴检测算法将face错误识别为face_mask的数量;FN(False Negative)就代表口罩佩戴检测算法将face_mask识别为face的数量;以查准率P为纵坐标,以召回率R为横坐标绘制一条P-R曲线,则曲线与坐标轴所围区域的面积就是平均准确率AP,所有类别的平均准确率相加求和再求平均就是平均准确率均值mAP,计算公式如下:
(11)
(12)
3.4 模型训练与结果分析
从本文的口罩佩戴检测数据集中随机抽取700张图片作为测试集,剩下的8 000张图片作为训练和验证集,其中90%用于训练,10%用于验证。训练过程中采用Adam优化器对网络模型进行优化,每一次放入的图片数量设置为4,使用Mosaic数据增强技术,初始学习率设为0.001,每经过1个Epoch的训练将学习率调整为原来的0.9倍,学习率下限设置为0.000 01,总共训练100个Epoch。使用原始YOLOv4和改进过的YOLOv4对测试集进行测试,检测结果示例如图6所示,根据结果绘制P-R曲线如图7所示。
由图6可见,所选测试图片比较有代表性,同时包含密集人群检测、高曝光目标检测、小目标检测、遮挡目标检测和远距离侧脸检测。由图6a可见,第一张测试图片的左下角有一个高曝光的佩戴口罩的人脸目标,顶部左侧有一个距离较远的佩戴口罩的侧脸目标;由图6b可见,YOLOv4将这两个目标误检测为未佩戴口罩的人脸;由图6c可见,本文算法对这两个目标均做出了正确的预测且拥有较高的置信度,分别为82%和98%。对于第二张测试图片,由图6e可见,YOLOv4漏检了其左侧第三排第一个被遮挡的佩戴口罩的人脸目标以及右侧被第二排第一个男士所遮挡的那个距离较远较小且模糊的佩戴口罩的人脸目标;由图6f可见,本文算法将二者均正确地检测出来,置信度分别为85%和69%。对于两张测试图片中的其他目标,在YOLOv4和本文算法都能正确检测的情况下,本文算法能取得较YOLOv4更高的置信度。相比于原始YOLOv4算法,本文算法有效降低了误检、漏检,改善了小目标、高曝光目标、侧脸目标、被遮挡目标的检测效果。
图6 改进前后YOLOv4算法检测结果对比
由图7可见,召回率Recall为横坐标,查准率Precision为纵坐标。检测结果的AP值可通过计算P-R曲线与坐标轴所围区域的面积得到。本文算法检测face和face_mask的平均准确率AP分别为91.10%、98.51%,原YOLOv4检测face与face_mask这两种类别的目标所达到的AP值分别是83.90%和94.20%。
为了进一步验证本文算法的有效性,将本文算法与其他主流目标检测算法进行对比,不同算法检测效果对比如图8所示,具体性能指标对比如表3所示。
本文算法与其他先进目标检测算法检测结果对比如图8所示。由图8b可见,从各类算法的检测结果来看,SSD算法的检测效果并不理想,存在大量漏检现象;由图8c可见,Faster R-CNN的检测效果明显优于SSD,但是存在比较多的漏检现象,比如第一排左侧第一个戴口罩的女士以及第二排左侧第一个和第二个女士均未被检出;由图8d可见,YOLOv3的检出率高于Faster R-CNN,但是存在较多误检,左侧第一排第一个、第二排第一个以及第三排第一个均被误检;由图8e可见,YOLOv4的检测效果优于上述3种算法,对密集小目标、侧脸目标、被遮挡目标的检测效果有了一定提升,但仍然存误检现象,图中第一排左侧第一个戴口罩的女士和顶部中间左侧戴口罩的侧脸男士均被误检。由图8f可见,改进后的YOLOv4算法的检测性能明显优于其他算法,误检、漏检现象大大减少且具有高置信度,成功正确检测出了第一排左侧第一个戴口罩的女士以及顶部中间左侧戴口罩的侧脸男士,置信度分别为82%和98%。通过表3可以看出,本文算法与YOLOv3、YOLOv4、Faster R-CNN、SSD算法相比,取得了更高的检测精度。本文算法在检测人脸目标和佩戴口罩的人脸目标时所取得的平均准确率AP较原始YOLOv4分别提高7.20和4.31个百分点,mAP达到了94.81%,比原YOLOv4提高了5.76个百分点。本文算法的FPS为39,与原YOLOv4相比帧率降低了4 FPS,但仍高于30帧/s,能够满足实时性的要求。综上所述,本文所提算法能够成功检测出密集小目标、高曝光目标、侧脸目标、被遮挡目标且具有高置信度。实验证明了本文算法的有效性。
图7 改进前后YOLOv4算法各类目标P-R曲线对比
图8 本文算法与其他先进目标检测算法检测结果对比
表3 改进后的YOLOv4与其他先进目标检测算法对比
4 结论
本文主要提出了一种改进的YOLOv4算法来对密集人群场景下人们佩戴口罩的情况进行检测。首先,将SENet与YOLOv4的主干特征提取网络CSPDarknet-53相结合,SENet是一种通道注意力机制,使得模型能够自动学习不同通道特征的重要程度,关注对当前检测任务有益的特征,抑制对当前检测任务无用的特征。然后,将SPP模块复用到YOLOv4主干特征提取网络的倒数第二层和倒数第三层,进一步提高模型在不同感受野提取并融合空间特征的能力。实验结果表明,本文算法进行口罩佩戴检测的平均准确率均值mAP可达到94.81%。相较于原始YOLOv4以及其他主流目标检测算法,本文算法在密集小目标检测、高曝光目标检测以及遮挡目标检测上均取得了优异的检测效果,具有很好的实用性。