基于YOLOv4-tiny改进的轻量级口罩检测算法

2021-11-12 00:47王建立
液晶与显示 2021年11期
关键词:口罩卷积精度

朱 杰,王建立,王 斌

(1. 中国科学院 长春光学精密机械与物理研究所,吉林 长春 130033;2. 中国科学院大学,北京 100049)

1 引 言

新冠病毒席卷全球的当下,在机场、车站等公共场所佩戴口罩可以有效降低病毒的传播概率,防止疫情的扩散。目前国内外的公共场所对人流的口罩佩戴情况的监测手段主要以人工监督为主,广播呼吁为辅,这种手段效率低下的同时也浪费了大量公共资源。而近几年人工智能技术日新月异,尤其是目标检测领域大量优秀算法的涌现,例如YOLO[1-5]系列为代表的单阶段算法以及RCNN[6-8]系列为代表的两阶段算法,让我们可以通过计算机搭配监控摄像头就能实现人流口罩佩戴情况的自动化监测。

目前,专门应用于口罩检测的数据集和算法都相对较少。Cabani等人[9]提出了一个包含13万张图像的大规模口罩检测数据集,但是该数据集的图像目标和人物背景都相对单一,对现实场景的覆盖面严重不足。Wang等人[10]提出了一个口罩人脸数据集 (Real-World Masked Face Dataset,RMFD),不过该数据集的场景覆盖面依旧不充分,更重要的是公开的数据标注并不完善,难以直接应用于口罩检测任务。牛作东等人[11]在人脸检测算法RetinaFace中引入注意力进行机制优化,然后应用于口罩检测任务,取得了不错的平均精度均值 (mean Average Precision,mAP),但是算法的每秒传输帧数 (Frames Per Second,FPS)相对较低,很难满足口罩检测任务的实时性要求。王艺皓等人[12]在YOLOv3[3]算法中引入空间金字塔结构改进后用于口罩检测任务,实现了mAP和FPS指标的小幅提升,不过算法数据集的背景相对单一,难以扩展到复杂的多场景口罩检测任务中去,而且实时检测速度依旧不理想。

YOLOv4-tiny由Wang等人于2020年6月发布,在COCO[13]数据集上以443 FPS(on GeForce RTX 2080Ti)的实时检测速度实现了42.0%的检测精度[5]。本文对YOLOv4-tiny进行改进和优化,以应用于复杂场景下的口罩检测任务。保持YOLOv4-tiny的骨干网络不变,在其后引入空间金字塔池化[14](Spatial Pyramid Pooling,SPP)模块,对输入特征层进行多尺度池化并融合,同时大幅增强网络的感受野。利用路径聚合网络[15](Path Aggregation Network,PAN)取代YOLOv4-tiny的特征金字塔网络[16](Feature Pyramid Networks,FPN),分两条路径将输入特征层上采样和下采样而来的信息相互融合,以增强特征层对目标的表达能力。使用标签平滑[17](Label smoothing)策略优化了网络损失函数,结合Mosaic数据增强[4]和学习率余弦衰退思路,提高了模型的训练效率。实验结果表明,本文算法在普通性能的硬件(GeForce GTX 1050Ti)上达到了76.8 FPS的实时检测速度,在口罩目标和人脸目标上的检测精度分别达到了94.7%和85.7%,相比YOLOv4-tiny分别提高了4.3%和7.1%,满足了多种复杂场景下口罩检测任务的检测精度与实时性要求。

2 YOLOv4-tiny算法原理

YOLOv4-tiny[5]由YOLOv4[4]进行尺度缩放而来。相比于YOLOv4,YOLOv4-tiny牺牲了一定的检测精度,但是它的参数量不到前者的10%,推理速度则是前者的6~8倍。

2.1 YOLOv4-tiny的骨干网络

图1 YOLOv4-tiny网络结构Fig.1 YOLOv4-tiny network structure

图2 Resblock_body结构Fig.2 Resblock_body structure

如图1所示,骨干网络CSPDarknet53-tiny主要由DarknetConv2D_BN_Leaky模块和Resblock_body模块堆叠而成。DarknetConv2D_BN_Leaky模块结合了二维卷积层、归一化处理层和激活函数Leaky ReLU。Resblock_body模块引入了如图2所示的CSPNet结构[18]:模块主干部分依旧是残差块的常规堆叠,但在分支部分引入了一条大跨度的残差边,该残差边经少量卷积处理之后直接连接到模块的最后,与主干部分的输出在通道维度进行堆叠,最后经2×2的最大池化层处理得到模块的输出。CSPNet结构在减少10%~30%的网络参数量的同时,能够保证模型准确率基本不变或者稍有提高。图2中的Feat1和Feat2为Resblock_body模块输出的初始特征层。骨干网络CSPDarknet53-tiny中的前两个Resblock_body模块输出的初始特征层Feat1会被直接丢弃,Feat2则作为后一个Resblock_body模块的输入。对于第三个Resblock_body模块的输出Feat1和Feat2:Feat1直接作为特征增强网络FPN的第一个输入,Feat2经DarknetConv2D_BN_Leaky模块处理后作为FPN的第二个输入。第三个Resblock_body模块的输出Feat1和Feat2的尺寸分别是(256,38,38)和(512,19,19),其中,第一维的256或512代表的是特征层的通道数,后面两个维度38×38或19×19代表的是特征层的高和宽。

2.2 YOLOv4-tiny的特征增强网络

如图1所示,YOLOv4-tiny使用FPN作为特征增强网络。FPN的两个输入Feat1和Feat2的尺寸分别为(256,38,38)和(512,19,19)。FPN分两个步骤构建特征金字塔:

1. Feat2经1×1卷积(Conv)处理之后得到FPN的第一个输出P1(256,19,19);

2. P1再经1×1的卷积处理和上采样处理之后与Feat1在通道维度进行堆叠,得到FPN的第二个输出P2(384,38,38)。

最后,FPN模块的两个输出P1和P2再经少量卷积处理即可得到用于边界框预测的两个预测特征层Yolo Head1(21,38,38)和Yolo Head2(21,19,19)。YOLOv4-tiny的FPN模块构造非常简单,甚至过于简单,特征层的融合仅仅体现在单一的上采样之后的特征层堆叠,这为YOLOv4-tiny带来了非常优秀的实时检测速度(COCO:443 FPS on RTX 2080Ti),但也为YOLOv4-tiny带来了网络整体感受野过弱、特征融合不充分以及对骨干网络提取到的特征信息利用率过低等缺点,使其难以适应复杂场景下包含小目标或者遮挡目标的检测任务。

3 改进的YOLOv4-tiny算法

本文对YOLOv4-tiny进行了一系列改进:在骨干网络之后引入了SPP模块,利用PAN结构代替FPN作为特征增强网络,使用标签平滑策略对网络损失函数进行了优化,并结合Mosaic数据增强和学习率余弦衰退策略进行模型训练。

3.1 空间金字塔池化

一般来说,可以使用剪裁或扭曲等方法改变输入图像的尺寸以满足卷积神经网络中分类器层(全连接层)的固定尺寸输入要求,但是这也会带来剪裁区域未覆盖完整目标或者图像畸变等问题。为了应对上述问题,He等人[14]提出了空间金字塔池化(SPP)网络,可以对多尺度提取的特征层进行池化和融合,并得到固定尺寸的输出。本文在YOLOv4-tiny的骨干网络之后引入SPP模块以实现从细粒度到粗粒度的多尺度特征融合,增强特征层对目标的表达能力。本文改进后的算法网络结构如图3所示,可以看到,骨干网络CSPDarknet53-tiny的第二个输出特征层会先经SPP模块处理后再输入改进的特征增强网络PAN。

如图3所示,SPP模块处理步骤为:首先,输入特征层经过3次卷积处理(卷积核大小分别为1×1、3×3和1×1)后通道数由512降至256;然后,使用3个池化层(核大小分别为3×3、7×7和11×11)进行最大池化处理,每个池化层的输出通道数均为256;再将上一步的输入与3个池化层处理后的输出在通道维度进行堆叠,通道数变为1 024;最后,经过又一次3次卷积处理,SPP模块输出的通道数由1 024恢复至256。SPP模块在对输入特征层进行多尺度池化并融合的同时,也大幅增强了网络的感受野,对输入特征层的信息提取更为充分。

图3 改进的YOLOv4-tiny网络结构Fig.3 Improved YOLOv4-tiny network structure

3.2 特征增强网络PAN

如图1所示,CSPDarknet53-tiny的两个输出特征层在转化为预测特征层YOLO Head之前,会先经过FPN结构进行特征信息的融合。FPN结构对语义信息更丰富的高层次特征层进行上采样之后,与细节信息更为丰富的低层次特征层在通道维度进行堆叠,以达成特征融合的目的。但是YOLOv4-tiny的FPN结构过于“简陋”,导致网络整体感受野过弱,对细节信息的利用率过低,在面对复杂场景下的小目标或遮挡目标时的表现并不理想。

为了应对上述问题,本文算法使用路径聚合网络(PAN)作为特征增强网络。如图3所示,相比FPN,PAN的特征反复提取、相互融合的策略更加复杂,包含了自下而上和自上而下两条特征融合的路径。可以看到,PAN一样有两个输入特征层,F1来自骨干网络CSPDarknet53-tiny的第三个Resblock_body模块,F2则来自SPP模块。在自下而上的融合路径里,输入F2经1*1的卷积处理和上采样处理之后,与同样经过卷积处理的输入F1在通道维度进行堆叠,特征层的通道数由128上升至256;该特征层经过3次卷积处理(卷积核大小分别为1×1、3×3和1×1)之后,得到PAN的第一个输出。类似地,在自上而下的路径里,第一条路径的输出在经过下采样完成高和宽的压缩之后与输入F2在通道维度进行堆叠,再经过3次卷积处理之后得到PAN的第二个输出。预测特征层YOLO Head由一个卷积核大小为3×3的DarknetConv2D_BN_Leaky模块和一个卷积核大小为1×1的普通二维卷积层相连而成,其输出数据主要用于先验框的参数调整。PAN的特征融合策略里,来自不同尺度的特征相互融合、反复增强,充分利用骨干网络提取到的细节信息,大幅提升了预测特征层对目标的表达能力。

3.3 算法的损失函数

目标检测的损失函数一般包括3个部分,边界框定位损失Lloc、预测类别损失Lcls和置信度损失Lconf。整体的网络损失L的计算公式如下:

L=Lloc+Lcls+Lconf,

(1)

边界框定位损失Lloc用于衡量预测框与真实框的位置(包括高、宽和中心坐标等)误差,交并比(Intersection over Union,IoU)是目前最常用的评估指标,计算公式如下:

(2)

其中,B=(x,y,w,h)表示预测框的位置,Bgt=(xgt,ygt,wgt,hgt)表示真实框的位置。但是IoU损失仅在两边界框之间有重叠部分时生效,而对于非重叠的情形,IoU损失不会提供任何可供传递的梯度。Zheng等人[19]提出了Complete IoU(CIoU)损失函数,综合考虑边界框之间的重叠面积、中心点距离以及长宽比等几何因素,使边界框的回归相比IoU更加稳定。本文算法将CIoU引入边框回归的损失函数Lloc,计算公式如下:

(3)

其中,ρ2(B,Bgt)表示预测框和真实框的中心点之间的欧氏距离,d表示包含预测框和真实框的最小闭包区域的对角线距离,α是权重参数,v是衡量长宽比一致性的参数,α和v的计算公式如下:

(4)

(5)

则边界框定位损失函数Lloc为:

(6)

预测类别损失Lcls用于衡量预测框与真实框的类别误差,采用交叉熵损失函数进行衡量:

(7)

(8)

其中,δ为标签平滑超参数,取0.05。

置信度损失Lconf同样采用交叉熵损失函数进行衡量,计算公式如下:

(9)

4 实验结果与分析

4.1 数据集

目前专门应用于口罩检测的公开数据集相对较少。本文从CMFD[9]和RMFD[10]中分别选取了3 800和4 200张图像,并结合互联网图像爬取,建立了包含13 324张多场景图像及标注的口罩检测数据集。考虑到口罩目标的特殊性,数据集中还特意加入了约250张佩戴面巾、头巾等遮挡物或者手部捂脸的图像,以增强模型的泛化能力与实用性。模型训练之前,随机选取20%的数据(2 665张图像)作为测试集;训练过程中,以9∶1的比例划分训练集与验证集,并采用随机的剪裁、图像翻转、色域变换和Mosaic等数据增强方式增加训练样本的多样性,提高模型的鲁棒性。如图4(d)所示,Mosaic拼接方式随机选取4张图片进行拼接,然后输入网络进行训练,可以有效丰富检测目标的背景。

4.2 评价指标

本文采用平均精度均值(mAP)和每秒传输帧数(FPS)分别作为算法检测精度和检测速度的评价指标。

在口罩检测任务中,mAP即为口罩目标和人脸目标的平均精度(AP)的均值,如式(10)所示:

(10)

其中,N为类别数,i表示某一类别。某一类别i的AP计算公式如下:

(11)

其中,P(R)是精确率(Precision,P)与召回率(Recall,R)之间的映射关系,常用P-R曲线表示,曲线下方的区域面积即为该类别AP值。精确率和召回率的计算方式如下:

(12)

(13)

其中,TP表示检测类别与真实标签均为i的样本数量,FP表示检测类别为i与真实标签不为i的样本数量,FN表示检测类别不为i但真实标签为i的样本数量。

图4 数据增强示例Fig.4 Examples of data augmentation

FPS指的是网络模型每秒能够检测的图像帧数,常用于衡量模型的推理速度。FPS的计算过程主要考虑了模型前向计算、阈值筛选和非极大值抑制几个步骤。

4.3 实验设置

本文算法在基于Python 3.7的Ubuntu 18.04环境下使用PyTorch1.7.0框架实现,在桌面工作站(AMD Ryzen 3600x CPU @ 3.60 GHz,GeForce RTX 2080Ti)上进行训练,并在个人电脑(Intel Core i5-8300H CPU @ 2.30 GHz,GeForce GTX 1050Ti)上进行测试。训练时,使用COCO数据集上预训练的YOLOv4-tiny模型对骨干网络的参数进行初始化,以获得更好的模型初始性能。网络输入尺寸为608×608,优化器选择Adam,训练过程分两个阶段:第一阶段冻结骨干网络,训练剩余网络参数,初始学习率为1e-3,批量大小为128,学习率调整策略为余弦衰退策略CosineAnnealingLR(T_max=5, eta_min=1e-5),其中T_max表示余弦函数的周期,eta_min表示学习率的最小值,训练50轮次;第二阶段解冻骨干网络,训练所有网络参数,初始学习率为1e-4,批量大小为32,学习率调整策略与第一阶段一致,训练100轮次。

4.4 结果分析

本文算法和YOLOv4-tiny(在相同环境下以相同方式训练)对口罩目标和人脸目标检测结果的P-R曲线如图5所示。可以看到,不管是对口罩目标还是人脸目标,本文算法的检测性能均优于YOLOv4-tiny(P-R曲线越靠右,代表检测效果越好)。

图6则列出了YOLOv4-tiny和本文算法的检测结果对比,可以看到,YOLOv4-tiny对于小目标或者遮挡目标存在一定的漏检或错检情况,尤其是对遮挡目标,YOLOv4-tiny的适应性明显较弱,而本文算法不管是检测准确率还是检测结果的置信度都明显高于YOLOv4-tiny。

(a) 口罩检测P-R曲线(a) P-R curves of mask detection

(b) 人脸检测P-R曲线(b) P-R curves of face detection图5 YOLOv4-tiny和本文算法的P-R曲线对比Fig.5 Comparison of P-R curves between YOLOv4-tiny and the proposed algorithm

(a) YOLOv4-tiny 算法1(a) YOLOv4-tiny algorithm 1

(b) 本文算法1(b) Proposed algorithm in this paper 1

(c) YOLOv4-tiny算法2(c) YOLOv4-tiny algorithm 2

(d) 本文算法2(d) Proposed algorithm in this paper 2

(e) 本文算法3(e) YOLOv4-tiny algorithm 3

(f) 本文算法3(f) Proposed algorithm in this paper 3

表1列出了本文算法和包括YOLOv4-tiny在内的其他几种主流目标检测算法的mAP和FPS指标对比。对于口罩目标和人脸目标,本文算法的检测AP值分别达到了94.7%和85.7%,相比YOLOv4-tiny分别提高了4.3%和7.1%,具备更高的检测精度。在检测速度上,由于本文算法引入了SPP模块并且使用了更复杂的特征融合策略PAN,增加了网络的参数量,所以检测速度略低于YOLOv4-tiny,不过仍然取得了76.8 FPS的实时检测速度(on GeForce GTX 1050Ti)。相比YOLOv3-tiny,本文算法的mAP则有着11.5%的大幅提升,不管是口罩目标还是人脸目标,本文算法的检测性能都明显更优。至于其他非轻量级的单阶段目标检测算法,例如YOLOv3、YOLOv4和SSD[20],YOLOv3和YOLOv4的检测精度与本文算法相当或稍有提升,SSD(输入尺寸为512×512)的检测精度低于本文算法,不过三者的检测速度均低于18 FPS,不到本文算法的25%,难以满足口罩检测任务的实时性要求。而两阶段目标检测算法的检测速度则更低:FasterR-CNN[8](以VGG16[21]为骨干网络)的检测速度不到5 FPS,检测精度也低于本文算法4.7%。综上所述,本文算法以76.8 FPS的实时检测速度取得了90.2%的平均检测精度,很好地满足了口罩检测任务的精度与实时性要求。

表1 不同检测算法性能比较Tab.1 Performance comparison of different detection algorithms

4.5 消融实验

为了研究各个模块或者训练策略对模型带来的影响,设计了如下几组消融实验,实验设置如表2所示。实验中骨干网络均为CSPDartnet53-tiny,表中的“√”代表包含该结构或者使用该策略,“×”代表未包含该结构或未使用该策略。可以看到,第1组实验设置代表了YOLOv4-tiny,mAP值为84.5%;第2组实验在第1组实验的基础上引入了SPP模块,增强了网络的感受野,提取多尺度特征并进行融合,对输入特征层的信息利用更充分,mAP相比第1组实验提高了2.2%;第3组实验使用PAN模块代替第1组(YOLOv4-tiny)中的FPN模块作为特征增强网络,分两条路径将不同尺度的特征层相互融合、反复增强,mAP相比第1组实验提高了2.6%;第4组实验在第3组实验的基础上结合了SPP模块和PAN模块,mAP相比第3组实验提高了2.4%,相比第1组实验提高了5.0%;第5组实验在第4组实验的基础上使用了标签平滑策略对网络损失函数进行优化,该策略同样提高了模型的检测精度,mAP相比第4组实验提高了0.7%,相比第1组实验提高了5.7%。综上所述,本文算法对YOLOv4-tiny的改进和优化具备合理性和有效性,在口罩检测任务中提升了原算法的检测性能。

表2 消融实验结果比较Tab.2 Comparison of ablation experiment results

5 结 论

为了在公共场所高效监测人流的口罩佩戴情况,本文提出了一种基于YOLOv4-tiny改进的轻量级口罩检测算法。通过SPP模块和PAN模块的引入,以及标签平滑和Mosaic数据增强等策略的应用,提高了算法在复杂场景下对小目标和遮挡目标的适应能力,在口罩目标和人脸目标上的检测精度分别达到了94.7%和85.7%,相比YOLOv4-tiny分别提高了4.3%和7.1%,实时检测速度达到了76.8 FPS(on GeForce GTX 1050Ti),满足了多种复杂场景下口罩检测任务的检测精度与实时性要求。本文算法对人脸目标的检测精度(85.7%)低于口罩目标的检测精度(94.7%),主要原因是人脸目标检测面临的场景更为复杂多变,需要提取更多的细节信息,而YOLOv4-tiny作为通用目标检测算法,它的骨干网络对复杂场景下的人脸目标的适应能力略显不足,在未来的研究中可以引入注意力机制或者结合专门的人脸检测算法进行针对性优化。

猜你喜欢
口罩卷积精度
基于3D-Winograd的快速卷积算法设计及FPGA实现
戴口罩的苦与乐
因为一个口罩,我决定离婚了
从滤波器理解卷积
雾霾口罩
基于DSPIC33F微处理器的采集精度的提高
基于傅里叶域卷积表示的目标跟踪算法
GPS/GLONASS/BDS组合PPP精度分析
改进的Goldschmidt双精度浮点除法器
一种基于卷积神经网络的性别识别方法