APP下载

基于改进的YOLOV3口罩佩戴检测算法

2022-05-23李伟奇

计算机工程与设计 2022年5期
关键词:网络结构人脸口罩

张 鑫,李 瑞,李伟奇

(1.大连交通大学 软件学院,辽宁 大连 116028; 2.大连交通大学 机械工程学院,辽宁 大连 116028)

0 引 言

2020年,新冠肺炎肆虐全球,正确佩戴口罩是阻止病毒在人与人之间相互传播的重要举措。通用算法几乎都能运用于口罩佩戴检测[1],但像人员遮挡、目标对象较小、密集人群等问题,通用算法检测出来的效果并不是十分理想。为了解决这些问题,研究者们进行了大量的研究工作并取得了显著进展:Pang等[2]设计了基于掩码的空间注意力机制模块,让模型更加关注于行人未被遮挡部分的特征;Liu等[3]将全卷积网络与可变性卷积思想相结合,为了增加模型特征编码的灵活性,采用了位置敏感的DCN[4]池化,让模型尽可能多地从行人可见的部分中学习相应特征,来预防其它物体的遮挡干扰。

随着计算机视觉技术不断的发展,目标检测技术也在不断优化,大致分为两类:双步(Two-Stage)法和单步(One-Stage)法。相比而言,这两类算法也是相互对立的,双步法检测精度高,而单步法检测速度快。最经典的单步法有SSD[5](single shot multibox detector)、YOLO[6-9](you only look once)系列算法;双步法有R-CNN(region conventional neural network)系列算法。考虑到在实际监控下的人员检测任务中需要达到一种能实时检测的状态,而YOLO系列网络在检测速度方面可以保证实时性,其中第3代版本YOLOV3同时兼顾了检测的时间和精度,相比其它更高的版本,YOLOV3有着更成熟、更稳定的技术,所以本文在通用的目标检测算法YOLOV3的基础上,对该算法进行改进,希望得到更好的检测效果。

1 YOLOV3算法原理

YOLOV3是Redmon等提出的,主要由骨干网络Darknet-53和YOLO检测层组成,Darknet-53结构主要作用是提取图像的特征信息,YOLO层是用来预测其类别和位置信息。该算法的骨干网络结构如图1所示。YOLOV3算法有明显的两大优势:第一大优势是采用了以Darknet-53[10]网络作为主干特征提取网络,并结合了ResNet残差网络结构的思想[11]。卷积层主要包括两类滤波器,分别是1×1和3×3,前一种滤波器是用于压缩特征,后一种滤波器的作用主要是通过减少宽度和高度,来扩展通道的数量。这种结构的最大特点之一就是能通过增加相应的深度来提高准确率,但是也会在训练模型中发生梯度爆炸以及梯度消失的问题,YOLOV3算法内部的残差块使用了跳跃连接,促进了多个不同特征的融合学习。

图1 YOLOV3主要网络结构

针对尺寸不同的检测图像,YOLOV3算法运用了13×13,26×26,52×52尺度的特征图实行检测[12],由于每个尺度的感受野都各不相同,检测图像的大小也有所区分,尺度越小的反而检测大的图像,即13×13检测大尺寸图像,而52×52检测小尺寸图像,26×26检测中等图像。对于每个尺度分支来说,在每个网格中会检测出3个结果,这是因为每个尺度下会有3个先验框(anchor box),是根据K-Means聚类生成的。最后将3次检测的结果整合使用非极大值抑制(non-maximum suppression,NMS),获得结果。举例来说,输入一张需要检测的图像,刚开始将其划分为S×S的网格,需要预测C个类别,则最终3个规模获得的张量是S×S×[3×(5+C)], 其中包含了目标边框的4个偏移坐标和置信度得分,因而增强了对小尺度对象的检测能力。这也是YOLOV3算法与其它算法相比的另一大优势。但是直接应用于自然场合下的口罩佩戴检测任务还是有一些不足。其一,YOLOV3虽然在小目标的检测精度上有一定的提升,但同时也出现了浅层特征提取不充分的问题;其二,YOLOV3预测的准确性是使用IoU(intersection over union)损失函数来判定预测框的好坏,但当IoU的值增大时,检测的精确率会有所下降;其三,对于自然场景下被遮住、密集人群以及小尺度的目标检测等问题,YOLOV3仍有不足的地方。针对以上问题,本文为了提升口罩在自然环境下的目标检测算法的准确率,以YOLOV3算法为基础进行了改进和优化。

2 基于YOLOV3改进的算法

本文对YOLOV3的改进主要包括3个方面,分别是对主网络结构、特征增强网络和IoU损失函数的改进。

2.1 主网络结构的改进

YOLOV3中的主网络结构Darknet-53是由23(1+2+8+8+4)个循环模块组成的,每个循环模块中都含有一个(1×1)的卷积核、一个(3×3)的卷积核和一个残差网络层。网络中在改变特征图像尺度方面并未运用池化层,而是采用卷积核是(3×3),步长为2的方式对图像进行下采样。而由此搭配的网络结构,在网络深度方面无疑得到了很好的加深,但却忽略了网络的宽度,只能提取简单的特征信息。另外,网络结构的加深也会导致网络变得复杂,当训练时会出现收敛困难或产生梯度消失的情形,这样不能保证检测的实时性,基础网络结构对比情况见表1。

表1 基础网络结构对比

由表1可知,Darknet-19到Darknet-53,随着网络层数的不断加深可以得到更详尽的特征信息,但是检测的速率也会随之降低。所以,本文引入了Inception-v4网络的构建思想,Inception-v4网络[13]是由Google团队提出的一种网络,该网络的特点是计算量较低且具有良好的特性。为了增加多尺度特征提取且减少网络的循环次数,本文将该网络的思想与YOLOV3进行融合,来保证网络的实时性。改进后的卷积单元层如图2所示。

图2 改进的YOLOV3卷积层

首先,在改进的YOLOV3卷积层中,参考inception网络结构的思想,引入(1×1)、(5×5)的卷积核。为了调整输出的通道数,增加了(1×1)的卷积核,后又添加了尺度为(5×5)的卷积核是为了扩大感知范围,在卷积过程中来获取更多的特征信息,接下来是将所有分路中提取到的特征将其融合作为下一层的输入。为了减少计算量并使卷积具有相同的效果,采用(3×1)和(1×3)两个尺度的卷积核来替换一个(5×5)的卷积核。然后开始计算参数的数目,(3×1)和(1×3)卷积核的计算参数的数目是18个,一个尺度为(5×5)卷积核的计算参数的数目为25个,对于单层的计算参数的数目少了许多。同时,随着网络宽度的增加,也导致计算量参数的数目增加,为此将减少YOLOV3网络结构的循环次数以确保网络的实时性。最后,开始进行多尺度上采样操作,这样对不同感受野的特征图的提取、不同尺度的目标对象进行识别有利。

本文在对Darknet-53网络进行优化之后,为了进一步增强检测层特征的表达,又引进了特征增强网络结构模块。

2.2 特征增强网络的改进

SPP结构是由He Kaiming等[14]提出的,它的提出丰富了CNN目标检测的方法。CNN结构中包括的几个层次中,卷积池化层并不关心输入图像的尺寸大小,依然可以实现特征提取,但是全连接层需要相同维度的图像。全连接层的主要功能是矩阵向量乘积,如式(1)所示

y=w*x+b

(1)

式中:x为输入图像的像素矩阵;w为权重,是一个固定大小的矩阵;b是偏置矩阵;y为输出图像的像素矩阵。从这里可以看出,如果输入图像的x维数不同,则参数w的权重也会随之不一样。所以,许多的CNN网络中都需要尺寸不变的图像。为了捕获多尺度局部特征信息,本文引入SPP结构。它在卷积池化层与全连接层之间建立一个连接,使得输入图像在本文网络框架可以生成固定大小的图像,所以在图像形变方面有较好的鲁棒性。引入的SPP结构总共设置为3层,池化核要尽量接近需要池化的特征图的大小,即13×13,因此将池化核设置为13,其余两个池化核减4,设置为9和5,并选择最大池化(max pooling),更进一步为多尺度目标检测做铺垫,实现局部特征和全局特征的特征图级别的融合,不仅增加了网络结构的鲁棒性,而且减少了过拟合,从而提高模型的性能,因此加入SPP结构是值得的。具体原理如图3所示。

图3 SPP目标检测原理

为了进一步提高模型的性能,本文在YOLOV3基础上,引进了SPP的思想将两者优势相结合。SPP具体步骤可以参考文献[14]。这个结构的使用极大地增加了最后一个特征层的感受野,从而加强检测的准确度,且未增添多少参数量与计算量,并将最显而易见的上下文特征分离开,来进一步获得较为丰富的局部特征信息。然后进入全连接层。但是引入SPP之后也会拦截神经网络梯度下降的反向传播。综合以上这些因素,改进后的YOLOV3整体网络结构如图4所示。另外,每个卷积层后都有1个BN(batch normalization)层和1个LeakyReLU,这是为了防止训练过程中得到的预测模型过拟合。这也是YOLOV3的优势所在。

图4 改进的YOLOV3算法整体网络结构

2.3 损失函数的改进

在目标检测算法领域中,IoU[15]损失函数是最常用的距离测量标准。其值的计算如式(2)所示

(2)

式中:A表示预测框(Predict box);B表示真实框(Ground-truth box)。根据IoU损失函数计算公式,当两个框毫无交集时,即A∩B=0, 那么IoU=0, 这意味着IoU损失函数不能成功计算出预测框和真实框的距离大小。也就是说其仅能在边界框重叠时能够发挥作用,而对于非重叠的部分不会出现任何梯度的调整。针对这个问题,本文引入GIoU损失函数,该损失函数是Seyed Hamid Rezatofighi等提出的[16],其取值范围为[-1,1],而IoU损失函数的取值范围为[0,1]。GIoU在两个框重叠时取值为1,在两个框离得无限远时,取值为-1,因此GIoU损失函数被认为是很好的距离度量指标。计算公式如下所示

(3)

式中:A是预测框;B是验证框;C代表两个框的最小闭合区域面积。IoU与GIoU的两者区别在于:IoU是只对重叠部分感兴趣,其它部分并不感兴趣;而GIoU对这两个部分都同样关注,因此GIoU更能反映两者的距离大小。以GIoU作为衡量边界框距离的指标,其损失函数如式(4)所示

GIoULoss=1-GIoU

(4)

从公式可以看出,GIoU越大,那么GIoULoss越小,因此网络就会朝着预测框与真实框重叠度较高的方向去优化。根据GIoULoss对YOLOV3模型边界框损失函数进行改进,改进后的边界框损失函数如式(5)所示

(5)

3 实验结果及分析

3.1 实验平台

本文算法在pycharm中编程实现,编程语言为python 3.7.4,使用TensorFlow-GPU 1.14.0和keras 2.2.4框架,并安装了英伟达CUDA 10.0和cuDN v7.4.2硬件加速工具包,实验平台为Intel(R) Core(TM)i5-9300H CPU @2.40 GH处理器和GeForce GTX 1660ti GPU,16 GB的运行内存。

3.2 数据集的准备

图5 数据集标注示例

3.3 损失函数收敛对比

以改进的YOLOV3算法为实验训练模型,对损失函数收敛性进行验证。两种Loss函数随着迭代次数(batch)的变化曲线如图6所示。图中的两条曲线分别表示边框损失使用IoU的损失收敛函数和使用GIoU的损失收敛函数。虽然两者在迭代一定次数后都会达到收敛状态,但是使用GIoU损失函数之后,模型平均损失收敛速度更快,曲线整体值低于IoU的值,而且batch之间的纵坐标数值波动大幅度降低,稳定性也提高不少。由此看出,使用GIoU作为边框损失函数,对模型性能的提升有更大的意义,同时具有较高的鲁棒性。

图6 损失收敛对比

3.4 评价测试

混淆矩阵是对深度学习模型预测结果的总结和分析,以矩阵的形式表示出测试集图片的真实类别与模型预测的类别数量。本文对测试集内的图片进行预测,对比预测出来的结果与实际标签,其中实际标签已知,进而衡量该模型的泛化能力。测试集是在已训练好的改进的YOLOV3模型上的混淆矩阵,如图7所示。

图7 混淆矩阵

图7中,最左上角方框代表实际是戴口罩的且经过训练模型检验后符合实际情况的数量,称作真阳性(true position,TP),即TP=1431;最右上角方框代表实际为戴口罩的但通过训练模型误判为不佩戴口罩的人的数量,称作假阳性(false position,FP),即FP=101;最左下角表示实际上是不戴口罩的但通过训练模型误判是戴口罩的人的数量,称作假阴性(false negative,FN),即FN=185;最右下角方框代表实际上是不戴口罩的且经过训练模型验证符合实际情况的数量,称作真阴性(true negative,TN),即TN=1219。为了更好衡量训练出来的模型的优劣,混淆矩阵所描述的数量,在混淆矩阵的统计结果之上将给出更进一步的评价指标,如下所示。

(6)

(7)

(2)平均精度(average precision,AP),平均精度均值(mean average precision,mAP)

(8)

(9)

式中:p代表查准率;r代表召回率;n代表所有目标对象类别的个数。AP说明了单一类别的检测成效,mAP说明了多分类检测模型中全部类别的AP均值,mAP值越大准确率越高。

(3)帧率(frames per second,FPS)

在目标检测中,帧率代表每秒钟检测的图像的数量,被用来评价网络的检测速率。

3.5 YOLOV3算法与改进的算法实验结果比较

经过实验,改进的算法与原始的YOLOV3算法对于佩戴口罩检测与未佩戴口罩检测得出的P-R曲线,横坐标为召回率,纵坐标为查准率,P-R曲线下方的面积就是某类别的AP值。如图8所示。

图8 改进的算法与YOLOV3算法的P-R曲线对比

由图8可知,改进的YOLOV3算法在人脸目标检测与人脸佩戴口罩检测中均取得了不错的性能。在人脸口罩佩戴检测中,改进的算法取得了93.4%的AP值,比YOLOV3算法提高了6%;而对于未佩戴口罩的人脸检测来说,改进的算法与YOLOV3算法的AP值分别为86.8%、81.9%,虽然改进的YOLOV3算法比原始算法有所提升,但其AP值仍比佩戴口罩的低,可能是因为YOLOV3算法并不是专门适用于人脸目标检测的算法,而人脸的重要特征信息较多,但佩戴上口罩的话人脸就会被遮挡一部分,关键点信息减少,因此检测精度比未佩戴口罩检测要高。总之,改进的YOLOV3算法与原始的YOLOV3算法比较,其mAP值增加了5.4%。

在实际的自然场景检测中,经常会出现一些人脸轮廓不是特别完整、人脸较小以及面部被遮挡的情形。因此设计了人们在不同条件下是否佩戴口罩的结果进行分析对比。显示结果如图9所示。

图9 正常人脸检测结果

从图9可以看出,两者的检测结果都正确。但是就识别的准确率来说,图9(a)中,YOLOV3的准确率分别为70.59%,97.78%,99.25%;而图9(b)中,改进后的YOLOV3的算法准确率分别为76.01%,98.45%,99.33%,相比于YOLOV3算法,本文改进的YOLOV3算法的检测准确率效果更高一些。

如图10(a)所示,可以看出YOLOV3有明显的误检情况,将离得较远的戴口罩的人员误判成未戴口罩的,且最高检测精确率仅为95.03%;查看图10(b),改进后的YOLOV3算法可以成功检测出其类别,且最高检测精确率为97.09%,相比于YOLOV3算法能更准确检测出其目标对象的类别。

图10 侧脸人脸检测结果

图11 被遮挡和密集人脸检测结果

由图11(a)可以看出,使用YOLOV3算法模型有3人未成功检测出其类别,一共检测出10个佩戴口罩人脸目标,而由图11(b)可以看出,改进的YOLOV3模型全部检测出其类别,共检测出了15个佩戴口罩的人脸目标,比YOLOV3多检测出了5个,其中有一半被遮挡的人脸目标也成功检测出,而且整体检测框的预测准确率都比原始的YOLOV3算法高。

综上所述,改进后的YOLOV3算法在自然场景下人脸口罩佩戴检测效果有着显著的提升。

3.6 改进的YOLOV3算法与其它算法比较

本文将改进的算法与其它算法进行比较实验,来验证改进的算法的有效性,其结果如下所示。

由表2可知,对于人脸佩戴口罩目标检测来讲,本文改进的YOLOV3算法得到了不错的检测效果。与通用算法SSD和Faster R-CNN相比,其mAP值分别增加了19.8%和15.7%,而且无论在人脸检测方面,还是在人脸佩戴口罩目标检测方面,改进的YOLOV3算法的AP值都远远高于这两种算法。与RetinaFace算法和Attention-RetainFace算法相比,在人脸佩戴口罩检测方面,其AP值分别为76.5%、84.7%,YOLOV3改进的算法AP值为93.4%,效果还是很明显的。但对于检测人脸这方面,RetinaFace和Attention-RetainFace算法比改进的YOLOV3算法保持较高的AP值,这是因为这两种算法都是主要用在单级目标检测的人脸定位的算法,以达到多尺度的面部检测任务,用人脸对齐、像素级人脸分析和人脸密集等关键点三维分析,因此在人脸检测方面具有较高的检测精度。YOLOV3作为一种单阶段检测算法,对于一般目标来讲,确实有着不错的检测精度和效率,但像人面部这种具有庞大且繁琐的特征信息来说,其检测效果仍然不如主要被用于识别人脸的算法。本文算法是在YOLOV3的基础上改进的,虽然在面部目标检测中AP值略低于RetinaFace和Attention-RetinaFace算法,但仍比未改进的YOLOV3算法提高了4.9%,且其检测速率比RetinaFace算法和Attention-RetinaFace算法分别提升了20.9和18.7。总的来说,本文提出的改进的YOLOV3算法针对人脸佩戴口罩目标检测效果还是可以的。

表2 改进的YOLOV3算法与其它算法比较

4 结束语

本文以YOLOV3为基础,提出了一种基于YOLOV3改进的算法,实现了对口罩佩戴检测的任务。本文主要是将主骨干网络Darknet-53结构与Inception-v4的构建思想相结合,实现了特征增强;并引入了空间金字塔池化结构,增加了网络结构的鲁棒性;然后对IoU损失函数进行了改进和优化,引用了GIoU损失函数以提高模型的定位能力;最后在本文收集和增强的数据集上开始训练和测试。根据实验结果,改进后的YOLOV3算法在口罩佩戴检测方面比原始的YOLOV3算法模型的mAP提高了5.4%,且FPS也有所提升,充分验证了算法的有效性与科学性。

猜你喜欢

网络结构人脸口罩
有特点的人脸
一起学画人脸
快递网络结构研究进展
戴口罩的苦与乐
因为一个口罩,我决定离婚了
基于AutoML的保护区物种识别①
雾霾口罩
三国漫——人脸解锁
基于时效网络的空间信息网络结构脆弱性分析方法研究
基于互信息的贝叶斯网络结构学习