程泽华,韩俊英
(甘肃农业大学 信息科学技术学院,甘肃 兰州 730070)
自新型冠状病毒(COVID-19)肺炎爆发以来,人们的生产和生活方式都受到不同程度的影响,严重影响我国经济发展的同时也对人们的生命健康产生了极大威胁。为了防止病毒的肆意传播,合理佩戴口罩已经成为一种重要的保护手段。随着病毒的不断变异,其传播能力也变得更强。在一些人口密集区域(例如超市、医院和车站等)仅靠人工检测是否合理佩戴口罩,在消耗大量人力的同时还存在漏检情况,因此利用计算机视觉代替人工,完成对是否正确佩戴口罩的检测具有重要意义。
近几年,随着科技的不断发展,深度学习也得以快速发展。目前,基于深度学习的目标检测算法主要分为One-Stage[1]和Two-Stage[2]两类。One-Stage 算法有检测速度快、网络模型小、非常适合移动设备等优点,但它检测精度相对较低,主要代表算法有SSD、YOLO[3]系列。随着YOLO 系列不断发展,到YOLOv5 网络,已经解决了检测精度低的问题。Two-Stage 算法具有检测精度高的特点,但其检测速度较慢、训练时间长,主要的代表算法有Fast-CNN[4]、Faster R-CNN[5]等。目前,已产生了大量的口罩识别检测算法,如文献[6]设计一种高激活性鬼影模块,以轻量的计算代价减少特征图中的冗余;文献[7]通过增加Max Module 结构以获得更多目标的主要特征,提高检测准确率;文献[8]提出一种多尺度特征融合的轻量化口罩佩戴检测算法,通过多层级交叉融合结构最大程度地提取有用信息以提高特征利用率。虽然,他们对网络模型做了一定改进,但忽略了在人群密集、光线昏暗、检测目标存在部分遮挡等复杂环境中,轻量化的网络可能会导致特征提取能力不足的问题。针对上述问题,本文通过加入数据增强方法和设计轻量化的特征提取模块,解决了光线昏暗、人群密集复杂环境下特征提取能力不足的问题,同时也实现了对YOLOv5算法的轻量化改进。
可分离卷积包括空间可分离卷积和深度可分离卷积[9]。空间可分离卷积通常将卷积核拆分为两个较小的卷积核进行计算,在较小的损失情况下降低计算成本。本文将一个3×3 的卷积核拆分成一个3×1 的卷积核和一个1×3 的卷积核,先使用3×1 的卷积核对特征图进行卷积操作,将卷积的结果再使用1×3 的卷积核进行卷积操作,得到输出的特征图。深度可分离卷积采用对每个通道分别进行卷积计算的方式,减少卷积计算的参数个数。其卷积计算要分两步完成,首先对每个通道(深度)分别进行空间卷积,并对卷积结果进行拼接,然后使用单位卷积核进行通道卷积得到输出的特征图。
在图像处理的特征融合过程中,常用的融合方式有通道维度上的拼接和相加两种方式,特征表达能力并不强。本文提出了自适应权重特征融合方式(Adaptive Feature Fusion,AFF),首先通过神经网络学习得到不同特征之间的权重,然后使用通道维度上拼接或相加的方式进行特征融合,计算方法如式(1)所示,通道维度拼接的自适应特征融合方式如图1 所示,通道维度相加的自适应特征融合与之类似。
Fig.1 Adaptive feature fusion图1 自适应特征融合
本文是对YOLOv5 算法的改进,在网络的整体结构上与YOLOv5 网络保持一致,有4 个部分组成:输入网络、骨干网络、颈部网络、头部网络。输入网络主要是对图片进行数据增强处理;骨干网络主要是对输入的图片进行特征提取;颈部网络主要由PAN 结构和FPN 结构组成,PAN 结构是将输出特征进行下采样与骨干网络中的特征进行信息融合,FPN 结构是将输出的特征进行上采样与PAN 结构中的特征进行信息融合;头部网络的主要作用是根据得到的特征层预测目标的类别信息。
改进后的网络与原始YOLOv5网络的区别主要体现在以下方面:在输入网络原有的数据增强基础上添加了随机遮挡和自适应对比度的方法,将骨干网络中第一个C3 模块删除,其余的C3 模块和颈部网络中的C3 模块全部使用SDC 模块(Spatial Deep Convolution)进行替换,不但使网络的参数量减小,同时也使网络具有更好的性能。在细节方面,使用SIoU 作为边框回归损失函数,重新定义了惩罚指标,提高了模型精度。改进后的YOLOv5 网络结构如图2所示。
Fig.2 YOLOv5 network structure图2 YOLOv5网络结构
为了让网络参数量减少的同时,网络的特征提取能力还可以得到提升,本文设计了一种融合注意力的特征提取模块SDC,其主要由瓶颈网络(BottleNeck)、深度可分离卷积网络、注意力网络3部分组成。
瓶颈网络中使用一个3×1 的卷积核和一个1×3 的卷积核对输入的特征进行卷积,其作用效果与直接使用3×3 的卷积核相似,但使用空间可分离卷积使得网络的参数量减少。同时,瓶颈网络有BottleNeck1 和BottleNeck2 两种结构,在骨干网络中的SDC 模块,使用BottleNeck1 结构,在颈部网络中的SDC 模块,使用BottleNeck2 结构。为了提取到小目标更深层次的信息,使用卷积核为7×7 的深度可分离卷积进行特征提取,既增强了网络的特征提取能力又避免了计算量增加的问题,将深度可分离卷积网络的输出和瓶颈网络的输出通过通道维度拼接的自适应特征融合方式进行特征融合。为了降低一些不太显著的特征权重,将基于归一化的注意力模块(Normalization-based Attention Module)[10]融入到SDC 模块中,首先对输入特征进行批归一化得到每个通道的缩放因子,然后根据缩放因子计算出每个通道的权重,最后通过Sigmoid 激活函数将每个通道的缩放因子和权重的乘积进行归一化操作,得到每个通道的注意力,将注意力分别加权到输入特征的每个通道上,得到注意力网络的输出。将注意力网络的输出和前面融合的特征再使用通道维度相加的自适应特征融合方式进行特征融合得到SDC 模块,其结构如3所示。
目标检测的有效性很大程度取决于损失函数的定义,边框损失函数也是目标检测任务中重要的损失函数,传统的边框损失函数(CIoU、GIoU、DIoU 等[11-12])并没有考虑到所需真实框与预测框之间不匹配的问题,这样会出现收敛速度慢的问题。本文使用SIoU[13]为边框损失函数,其考虑到所需回归之间的向量角度,提高了训练速度和推理准确性,如式(2)所示。在YOLOv5 网络的训练过程中,边框损失函数分别使用CIoU Loss 和SIoU Loss 进行训练,得到如图4 的实验结果。可以看出,相较于CIoU 损失函数,SIoU 损失函数的损失值下降更快,模型也可以在训练过程中更快速地收敛,提高了模型推理速度。
Fig.4 Box loss function图4 边框损失函数
本文对YOLOv5算法添加了随机遮挡和自适应对比度的数据增强方法,随机遮挡数据增强方法是将输入的图片,随机遮挡若干个矩形区域。使用随机遮挡数据增强的方法以防止过拟合现象出现,同时也可以模拟真实场景下部分目标出现遮挡的现象,从而提高模型泛化能力。
在实际生活中存在光线昏暗、对比度低等复杂场景,可采用自适应对比度的方法对数据进行增强。自适应对比度图像增强算法来自于Gamma 变换[14],对输入图像灰度值进行非线性操作,可以模拟出一幅图片在不同光线下的场景,从而达到数据增强的目的,经过自适应对比度数据增强后的图片如图5所示。
Fig.5 Gamma transform图5 Gamma变换
本文实验使用的操作系统为Ubuntu20.04,显卡为Nvidia GeForce RTX 2080Ti,11GB 显存,处理器为Intel(R)Xeon(R)Platinum 8,CUDNN 版本为11.3,在PyTorch1.8 框架上完成训练和测试,使用Python 版本为Python3.8。
目前,对于是否正确佩戴口罩的数据集较少,在口罩识别的公开数据集中只有佩戴口罩和没有佩戴口罩两种类别,并没有不规范佩戴口罩的类别,因此需要重新搜集和标注数据集。根据实际需求,使用爬虫技术在互联网上共采集了5 000 张图片,将这些图片进行数据清洗后剩余3 100 张图片。选取不同场景、不同时间段的100 张图片作为测试集,将剩余3 000 张图片使用LabelImg 工具进行样本标注。一共标注了4 935 个目标,其中不佩戴口罩(Nmask)目标有1 930 个,不规范佩戴口罩(Fmask)目标有1 380 个,正确佩戴口罩(Tmask)目标有1 625 个,将标注的3 类图片分别按照8∶2 的比例划分训练集和验证集。将数据集进行数据增强处理后部分图片如图6 所示,其中图6(a)表示训练集图片,图6(b)表示测试集图片。
Fig.6 Partial pictures of data set图6 数据集部分图片
在检测速度方面,本文使用检测的帧率(FPS)作为评估指标,即每秒内可以处理图片的数量或者处理一张图片所需要的时间。在检测准确性方面,本文选用平均精度均值(mAP)、精确率(Precision)、召回率(Recall)作为评价指标,其计算公式如下:
其中,c代表类别数目,APi表示第i类的平均精度(Average Precision),即精确率—召回率曲线下的面积,TP 表示样本被分为正样本且分配正确,TN 表示样本被分为负样本且分配正确,FP 表示样本被分为正样本但分配错误,FN 表示样本被分为负样本但分配错误。
为验证本文对YOLO 算法改进的性能,将改进的YOLOv5 算法与目前主流的轻量化目标检测算法,在相同的数据集上进行实验结果对比,得到如表1 所示实验结果。其中模型的评价指标有平均精度均值、精确率、召回率、帧率。在平均精度均值评价指标上,改进后的YOLOv5 算法相较于Faster R-CNN 和YOLOX[15]算法分别降低0.2%和0.1%,但比SSD[16]、YOLOv3-tiny[17]、YOLOv4[18]、YOLOv5算法分别提升7.1%、5.8%、5%、1.3%。在精确率和召回率的评价指标上,改进后的YOLOv5 算法只比Faster R-CNN和YOLOX 算法略低,说明改进后的YOLOv5 算法在检测精度上达到了现有算法的先进水平。同时,模型检测速度也是非常重要的评价指标,它决定了模型是否可以更好地应用于实际场景中。在检测速度评价指标上,改进后的YOLOv5 算法达到42frame/s,分别比SSD300、YOLOv3-tiny、YOLOv4、YOLOX、YOLOv5 提升210%、168%、150%、175%、140%。改进后YOLOv5 网络的检测速度更加满足实际场景的需求。
Table1 Comparative experimental results表1 对比实验结果
为了评估几种改进方法对模型的影响,设置了5 组不同的实验进行验证。实验1:使用原始的YOLOv5 算法模型;实验2:使用SIoU Loss 作为YOLOv5 的边框损失函数;实验3:在实验2 的基础上使用SDC 模块替换YOLOv5 骨干网络和颈部网络中的C3 模块;实验4:在实验3 的基础上,加入了随机遮挡的数据增强方法;实验5:在实验4 的基础上,增加了自适应对比度的数据增强方法。消融实验结果如表2所示。
Table 2 Ablation experimental results表2 消融实验结果
将数据集中的图片分别输入到这5 组实验中进行训练和测试,得到如表2 所示的实验结果。通过对比实验1和实验2 可知,使用SIoU 边框损失函数在预测框的回归过程中,考虑到所需真实框与预测框之间不匹配的方向,使预测框可以更准确地进行回归,从而提高了模型精度和检测速度。
从实验2 和实验3 可以看出,使用SDC 模块使模型精确率提升了0.5 个百分点,因为在SDC 模块中使用了基于归一化的注意力,可以帮助神经网络抑制通道中不太显著的特征,从而提升模型精确率;模型召回率提升了1.9 个百分点,因为在SDC 模块中使用了7×7 的大卷积核进行特征提取,通过自适应权重的方法进行信息融合,可以使输出特征融合更丰富的语义特征和位置信息,故召回率提升幅度相对较大;模型大小减小了4.1M,检测速度提升了1.4倍,因为在SDC 模块中主要使用深度可分离卷积和空间可分卷积,相对于普通卷积它的计算量和参数量大幅度减少,通过减小计算量使模型检测速度得到提升,通过减少参数量使模型大小减小;相较于C3 模块,SDC 模块具有更好的特征提取能力。
由实验3、实验4 和实验5 可知,使用随机遮挡和自适应对比度数据增强方法,可以模拟人群密集和光线昏暗等复杂场景,从而提高了模型泛化能力,使模型在平均精度均值、精确率、召回率上都有所提升,说明本文使用的两种数据增强方式非常有效。
将测试集中的图片分别输入到训练好的YOLOv5网络模型和改进后的YOLOv5 网络模型进行测试,选取部分测试结果如图7 所示。从测试结果可以看出,YOLOv5 网络在光线昏暗人群密集的场景下,存在部分目标无法识别,个别目标即会被识别为不规范佩戴口罩,又会被识别为正确佩戴口罩的问题,而改进后的YOLOv5 算法特征提取能力更强,可以正确识别出每个目标。在光线充足人群密集的情况下,YOLOv5 算法会出现个别目标漏检的问题,使用改进后的YOLOv5 算法在复杂环境下也不存在漏检情况。在检测速度上,改进后的YOLOv5 算法检测效率有了显著提升,同时改进后的YOLOv5 算法模型的参数量也只有原始YOLOv5 算法的72%,实现了对YOLOv5 算法的轻量化改进。
Fig.7 Partial test results图7 部分测试结果
本文通过设计一种轻量化的特征提取模块,解决了YOLOv5 网络对是否正确戴口罩识别能力不足的问题,同时也在很大程度上减小了网络的参数量。在原有的数据增强基础上新添加随机遮挡的方法,解决了过拟合现象和人群密集场景下存在的遮挡现象,添加自适应对比度的方法解决在光线昏暗场景下检测能力低的问题。使用SIoU边框损失函数加快了模型推理速度。本文实现了YOLOv5算法的轻量化改进,但还存在网络参数量不够少、训练所得模型不够小的不足,后续将在这两方面对模型继续加以改进,提升算法在复杂场景下口罩识别的性能。