张路达,邓 超
河南理工大学 物理与电子信息学院,河南 焦作454003
在疫情常态化的形势下,佩戴口罩是切断病毒传播途径最简便有效的方式,可以有效降低人与人相互交叉感染的风险。疫情期间,商场、车站等公共场所禁止未佩戴口罩人员进入。公共场所多为人群密集区域,通过人工方式大面积检查口罩佩戴情况会耗费大量的人力与时间,并且容易造成漏检,因此实现一种具有实时性的高精度的口罩佩戴检测算法是十分必要的。
近年来,随着卷积神经网络的兴起,传统的利用手工设计图像特征的目标检测方法已经发展为基于深度学习的目标检测方法[1-2]。相比于传统的检测方法,基于深度学习的目标检测算法其优势在于无需进行人工的特征设计,具有优秀的特征表达能力以及优良的检测精度。目前基于深度学习的主流目标检测算法依据其设计思想,主要分为两类:第一类是基于区域建议的二阶段目标检测算法。此类算法将目标检测分为两个阶段,第一个阶段生成可能包含目标的候选区域(Region Proposal),第二个阶段利用卷积神经网络完成对候选区域的目标位置与类别的预测及识别,得到最终的检测结果,其代表有R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]等。第二类是基于回归的一阶段目标检测算法。该类算法将目标检测看成一个回归问题,不再生成候选区域,直接完成从原始图像的输入到物体位置和类别的输出,是一种端到端的目标检测算法,此类算法拥有更快的检测速度,其代表作有SSD[6]、YOLO[7]、YOLOv2[8]、YOLOv3[9]等。YOLOv3算法是YOLO算法系列的第三代改进版本,与众多算法相比,具有检测速度快、精度高、综合性强等优势,在目标检测领域有着广泛的应用。但由于在一些特定场景下环境变得复杂,YOLOv3不能满足检测要求,学者们为此提出了一系列改进方法,如岳晓新等人[10]提出的道路小目标检测算法,康庄等人[11]提出的行人检测算法,杨静等人[12]提出的安全帽佩戴检测算法,这些在特定场景下改进后的YOLOv3算法都有不错的检测效果。
本文针对人群环境下口罩佩戴检测中存在的密集、遮挡、小尺寸目标等问题,通过在YOLOv3算法模型基础上进行改进与优化,实现人群口罩佩戴检测任务。
2018年,Redmon等 人在YOLOv2的 基础 上融 合ResNet、FPN等方法提出了YOLOv3一阶目标检测算法,其整体网络结构如图1(a)所示。
YOLOv3采用去除了全连接层的Darknet-53作为特征提取网络。Darknet-53主要由5个分别含有1、2、8、8、4个残差单元的残差块构成。残差单元结构如图1(c)所示,残差块结构如图1(d)所示,其融合残差网络思想,在网络中使用大量的跳跃连接结构,这种设计可以有效保证网络训练时收敛,改善随着网络层数不断加深带来的梯度弥散问题[13]。YOLOv3采用特殊的卷积结构DarknetConv2D,如图1(b)所示,卷积时加入一个L2批正则化层(Batch Normalization),对输入数据进行标准化处理,然后采用Leaky Relu激活函数。图1中Convolutional Set表示5个1×1、3×3、1×1、3×3、1×1的卷积层。在图像输入特征提取网络后,选取对输入图像8倍、16倍、32倍下采样后的特征图,经过一系列的上采样与特征融合,然后通过5次卷积处理,再通过1次DarknetConv2D(3×3)卷积和一次普通Conv(3×3)卷积进行通道调整后送入相应检测层,通过13×13、26×26、52×52三个不同尺度的特征层实现对大、中、小尺度目标的检测。
图1 YOLOv3网络结构Fig.1 YOLOv3 network structure
但是直接将YOLOv3算法应用于人群环境下口罩佩戴检测任务中仍有不足:一是在Darknet-53特征提取网络中,随着网络结构的加深,浅层特征信息没有得到充分利用,会导致丢失很多小目标的位置信息;二是YOLOv3算法对目标预测的准确性依赖于IoU,随着IoU的增大,对目标位置的预测精度会下降;三是针对人群场景中的密集、遮挡目标与尺度变化等问题,YOLOv3算法有较大提升空间。针对上述问题,本文在YOLOv3算法的基础上进行改进与优化。
原始YOLOv3网络以Darknet-53网络结构为骨干,使用3个预测层以3种不同的尺度检测对象。该网络将输入的原图像经过8倍下采样、16倍下采样、32倍下采样后的特征图作为特征融合网络的输入。在一般场景下,由于目标大小与距离的不确定性,该方法对正常大小的物体有不错的检测效果,但是在人群环境下,大部分人脸目标在图像中所占比例较小,对目标的检测效果会大大降低,并且由于下采样操作会丢失目标很多的有用信息,会造成一些目标漏检。
在检测小目标时,原YOLOv3网络主要通过利用8倍下采样层的信息来检测目标,因此当图像中目标的大小低于8×8时,网络几乎无法预测,即使目标大小刚好大于8×8,由于缺少目标的特征信息,网络检测该目标的能力也会大大降低。4倍下采样的特征图感受野较小,利用该尺寸特征图的信息去检测目标,可以提升对小尺寸口罩佩戴目标的检测效果。本文将第2个残差块输出的4倍下采样后的104×104特征图作为新的特征层与其他3个特征层作为特征融合网络的输入,得到尺寸大小为104×104的新尺度特征检测层,如图2所示,最后形成4尺度检测结构。这样即使图像中目标的尺度有较大变化,也可以在多个尺度上准确检测,提升网络对口罩佩戴检测的准确率。
图2 改进的多尺度检测结构Fig.2 Improved multi-scale detection structure
卷积神经网络中,不同层次的特征图含有目标不同的特征信息。浅层特征分辨率更高,含有目标更丰富的位置信息,深层特征含有较强的语义信息,但位置信息相对粗糙。利用浅层特征可以将简单的目标区分开来,利用深层的特征可以区分开一些复杂的目标,因此构建特征金字塔,将高层网络与低层网络的特征信息融合更有利于对目标特征的描述。
原始YOLOv3算法采用的特征融合网络为特征金字塔网络(Feature Pyramid Network,FPN),如图3所示,将52×52、26×26、13×13三个不同尺度的特征信息通过特征金字塔结构进行融合,实现多尺度检测。FPN采用的是自顶向下的融合方式,将深层的强语义特征信息传递下来,对整个金字塔进行增强,但是只对语义信息进行了增强,没有传递定位信息。PANet[14]针对这一点进行了补充,其采用自上而下与自上而下的路径增强,在FPN的后面添加了自底向上的金字塔,利用浅层特征包含的丰富的定位信息,实现特征增强。
图3 特征金字塔网络Fig.3 Feature pyramid network
在人群口罩佩戴检测中存在目标密集、尺寸小、容易相互遮挡等问题,网络模型需要利用更多的目标特征信息。本文对原始YOLOv3算法的FPN进行改进,使用特征提取网络的4个降采样特征图作为特征融合网络的输入,并将FPN与路径增强策略结合,通过自上而下和自下而上的融合方式可以进一步利用特征信息,让模型更好地学习目标特征,更有利于模型对小目标和被遮挡目标的检测。改进的特征融合网络结构如图4所示。
图4 改进的特征融合网络Fig.4 Improved feature fusion network
本文将YOLOv3通过对多尺度检测网络、特征融合网络、损失函数进行改进,其改进后的YOLOv3整体结构如图5所示。输入图像经过Darknet-53特征提取网络多次下采样后输出4层不同尺度的特征图,残差块5输出的32倍下采样特征图在经过Convolutional Set1的5次卷积处理后进行上采样与残差块4输出的16倍下采样特征图进行拼接融合,融合后的16倍下采样特征图用同样的方法与残差块3输出的8倍下采样特征图拼接融合;然后将融合后的8倍下采样特征图用相同的操作与残差块2输出的4倍下采样特征图进行融合,完成自上而下的特征融合;融合后的4倍下采样特征图通过Convolutional Set4的5次卷积处理后进行下采样操作,与Convolutional Set3输出的8倍下采样特征图进行第2次融合,融合后的8倍下采样特征图通过5次卷积处理后进行下采样与Convolutional Set2输出的16倍下采样特征图第2次融合,同样的方式得到2次融合后的32倍下采样特征图,完成自下而上的特征融合;最后将4种不同尺度的特征图都通过1次DarknetConv2D(3×3)卷积和1次普通Conv(3×3)卷积进行通道调整后输入YOLO Head进行预测,形成具有104×104、52×52、26×26、13×13检测层的4尺度检测网络。
图5 改进的YOLOv3网络结构Fig.5 Improved YOLOv3 network structure
YOLOv3损失函数公式如式(1)所示,其由类别损失、置信度损失、位置损失三部分组成;其中在边框回归过程中采用的是均方差(MSE)损失函数,如式(2)所示;在置信度和分类损失上采用的是二元交叉熵损失函数,如式(3)和式(4)所示:
式中,λcoord表示坐标损失权重系数,λnoobj表示不包含目标的置信度损失权重系数,分别表示预测框的坐标信息、置信度和类别概率分别表示目标真实框的坐标信息、置信度和类别概率表示第i个网格的第j个先验框是否负责该object(如果负责则为1,否则为0)表示第i个网格的第j个先验框是否不负责该object(如果不负责则为1,否则为0)。IoU[15]是目标检测中常用的评价指标,计算方式如图6所示。其中A表示预测框的面积,B表示真实框的面积,IoU是通过计算预测框与真实框的交集与并集的比值来反映预测的边框与真实的边框的重叠程度。
图6 IoU计算Fig.6 IoU calculation
YOLOv3进行边框回归时依赖于IoU,虽然IoU考虑了重叠面积,但是仅依靠IoU进行边框回归会存在一些问题。一是从图6中可以看出,IoU只有在两个边框有重叠区域时才能发挥作用,当预测框与真实框不相交时,IoU始终为0,无法反映两个边框距离远近,进而无法优化;二是在使用IoU计算损失时,其结果仅仅与两个框的交并比即重叠面积有关,如图7所示,这三种情况下两个框的相交面积一样,但重合度却相差很多,使用IoU不能将此类情况区分开。由此可见,在一些情况下IoU不能作为重叠程度的衡量指标。
图7 IoU相同的三种情况Fig,7 Three cases of same IoU
为了解决这些问题,本文引入CIoU[16]代替IoU作为边框回归损失函数。CIoU将边框回归损失应该注意的三个重要的几何因素“重叠面积、中心点距离、长宽比”都考虑了进来,使得边框回归更加稳定,收敛的精度更高,其损失函数公式如式(5)所示:
其中,b和bgt分别表示预测边框与真实边框的中心点,ρ()⋅表示欧式距离,c表示预测框与真实框的最小外接矩形的对角线距离。αν为惩罚因子,这个因子把预测框长宽比拟合目标框的长宽比考虑进去,其中α是用来作trade-off的参数,ν是用来衡量长宽比一致性的参数。α与ν的计算公式分别如式(6)和式(7)所示:
YOLOv3算法使用先验框的思想是基于Fast R-CNN的设计,其通过固定数量的固定大小的初始先验框来检测对象。先验框尺寸的选择会直接影响网络检测目标的速度与精度,合适的先验框的尺寸能够加快模型训练时的收敛速度,而且能够使定位更加精准。YOLOv3使用K-means方法对数据集中的对象进行聚类分析得到9个先验框的尺寸大小,分给3个不同尺度的检测层,每个预测框生成3个不同比例的先验框,选取与真实目标框交并比最大的先验框去进行损失计算。聚类中Kmeans算法通过IoU来计算标注框与聚类中心的距离,计算公式如式(8)所示:
本文改进的网络采用4尺度检测结构,相比于原YOLOv3网络多了1个尺度,因此原有的3×3先验框已不再适用,需要重新聚类。在本文的人脸口罩佩戴数据集上进行聚类分析,经过多次实验,权衡平均交并比(Avg IoU)与聚类中心数K,实验过程图8所示,随着K的增加,平均交并比变的逐渐平稳。
图8 K-means聚类分析结果图Fig.8 K-means cluster analysis result
本文的聚类中心数K设为12个,通过聚类分析得到12组不同尺寸大小的先验框。因为大尺度特征图用来检测小目标,小尺度特征层用来检测大目标,所以小尺寸的先验框要分配给大尺度的特征图,大尺寸的先验框要分配给小尺度的特征图来进行边框的回归。4个尺度的先验框尺寸分配如表1所示。
表1 先验框尺寸分配Table 1 Prior box size assignment
本文从WIDER Face、MAFA(Masked Faces)、RMFD(Real-World Masked Face Dataset)三个公开数据集和网络搜集中筛选出含有多人场景的佩戴口罩人脸与未佩戴口罩人脸图片,共5 000张。将数据集制作成VOC格式,并用标记软件LabelImg对图像中的人脸进行标注,标注信息有两个类别have_mask(佩戴口罩人脸)和no_mask(未佩戴口罩人脸),将标注好的信息保存为VOC格式需要的xml文件。数据集标注示例如图9所示,其中图9(a)为标注图片示例,图9(b)为标注好的xml文件信息,
图9 数据集标注示例Fig.9 Example of data set annotation
本实验采用Window平台通过python编程语言实现,硬件环境为Intel®CoreTMi5-10400F CPU@2.90 GHz、16 GB RAM、NVIDIA GeForce RTX 2070S,使用Tensorflow/Keras深度学习框架。训练模型时,将数据集按照9∶1比例划分为训练集与测试集。训练过程中对学习率(Learn Rate)采用动态调整策略,初始学习率设为0.001,当模型连续3个Epoch的损失不再下降时,将学习率减少为原来的1/2。训练批次大小为4,进行150个Epoch的训练,模型训练的损失值收敛曲线见图10。从中可以看出,模型训练在前60个Epoch时损失下降迅速,训练80个Epoch后损失逐渐平稳,迭代150个Epoch后损失几乎不再变化,模型达到收敛。
图10 训练损失下降曲线Fig.10 Training loss decline curve
本文采取平均精度(Average Precision,AP)、平均精度均值(mean Average Precision,mAP)以及每秒检测图片的帧数(Frames Per Second,FPS)三种目标检测算法中公用的性能指标来评估本文算法的性能。计算平均精度还需引入查准率(Precision)和召回率(Recall),计算公式如下:
式中,TP代表预测是正样本且确实是正样本的数量,FP代表预测是正样本但实际上不是正样本的数量,FN代表预测是负样本但实际上不是负样本的数量。通过计算不同召回率下最高的查准率绘制P-R曲线,然后计算P-R曲线围成的面积即可得到某一类别的AP值。mAP值是对所有类别的AP求均值得到,mAP越大则算法性能越好,识别精度越高。
在数据集中随机划分的500张测试集图片上进行测试。本文改进的YOLOv3算法检测结果的P-R曲线如图11所示,have_mask与no_mask两种目标类别的AP值分别达到了95.19%、92.13%。
图11 改进的YOLOV3算法各类目标P-R曲线Fig.11 P-R curves of various targets of improved YOLOv3 algorithm
为了进一步验证本文算法的有效性,将本文算法与原始YOLOv3、Faster R-CNN、SSD、YOLOv4[17]、Efficient-Det[18]等主流的目标检测算法性能指标进行比较,对比结果如表2所示。
表2 算法结果性能对比Table 2 Performance comparison of algorithm results
从表2可以看出,相比于其他主流目标检测算法,本文算法在人群口罩佩戴检测上有更高的检测精度,mAP值达到了93.66%,与原始YOLOv3算法相比,两种类别AP值分别提高了5.92个百分点和5.30个百分点,mAP值提高了5.61个百分点。在检测速率上,本文算法FPS为28.5,速度不及SSD与YOLOv4算法,与原YOLOv3相比,检测单张图片时间增加了7 ms,帧率降低了7.2,但仍大于25,可以达到实时性要求。本文算法与原始YOLOv3、SSD、Faster R-CNN、YOLOv4、Efficient-Det目标检测算法检测效果对比如图12所示。
从图12(a)(b)(c)检测结果中可以看出,SSD算法在小目标检测上效果较差,且预测置信度普遍较低;Faster R-CNN算法在检测结果上表现优于SSD算法,并且预测置信度明显提升,但整体表现依然不是很好,如图12(d)(e)(f)所示;相比于前两种算法,EfficientDet、原始YOLOv3、YOLOv4算法在检测中表现相对较好,但是在小目标和被遮挡目标上会存在漏检的情况,如图12(i)(l)(o)所示;与其他算法相比,本文算法在人群口罩佩戴检测中效果有较大提升,在目标密集环境下漏检率明显降低。图12(j)中,原始YOLOv3算法漏检了2个未佩戴口罩人脸目标,图12(p)为本文算法检测结果,成功将其检测出来且置信度几乎为1;图12(k)中,原模型共检测出15个目标,本文改进后的模型检测结果如图12(q)所示,共检测出了20个目标;图12(l)中,YOLOv3原模型共检测出了13个佩戴口罩的人脸,本文改进算法模型共检测出了18个目标,如图12(r)所示,比原模型多检测出5个目标,成功检测出了原模型漏检的一些小目标与被遮挡目标。从图12(p)(q)(r)中可以看出,本文模型在检测目标的置信度上有了显著提升,有着更高的预测准确率。综上所述,与其他算法相比,本文算法更适用于人群口罩佩戴检测,在密集小目标与被遮挡目标的检测效果上有着显著提升。
图12 不同算法的检测效果对比Fig.12 Comparison of detection results of different algorithms
针对人群环境下存在的口罩佩戴检测中密集、遮挡目标与小目标检测效果差等问题,本文以YOLOv3网络为基础提出一种改进的YOLOv3算法。首先,改进YOLOv3的多尺度检测网络,在原网络中增加新的浅层检测尺度构成4尺度检测结构,并在数据集上重新聚类生成新的先验框尺寸分配给各个检测层;然后,引入自上而下和自下而上的特征融合策略将低层特征图细节信息与高层特征图语义信息融合,进一步利用特征信息;接着,采用CIoU损失函数进行边框回归,增加模型定位的准确性;最后,在本文建立的数据集上进行训练与测试。实验结果表明,本文算法在人群口罩佩戴检测中平均精度均值达到了93.66%,比原YOLOv3算法提高了5.61个百分点,与其他主流目标检测算法相比有较大优势,同时检测速率上满足实时性要求,有一定的实用性与有效性。由于改进算法使网络结构复杂化,增加了模型参数,检测速率有所下降,后续将考虑轻量化网络结构,提升检测速率。