摘 要:人脸口罩佩戴检测是公共场所疫情防控极为重要的措施,如何智能、高效地检测口罩佩戴情况具有重要意义。为实现多尺度条件下,模型压缩和加速检测,提出一种基于改进 YOLOv5 的轻量化算法,设计更为经济的 GhostBottleneckCSP 和 ShuffleConv 模块替换 YOLOv5 原网络中的 C3 及部分 Conv 模块,缓解特征通道融合过程的计算量占用问题并增强了特征的表达能力。实验结果表明,改进后模型识别精度最低达 95%,较 YOLOv5 原网络精度近乎无损失的前提下,模型参数量和计算量分别仅为原来的 34.24%和 33.54%,且在 GPU 或 CPU 上运行的速度分别提升了 13.64%和 28.25%,降低了平台体积功耗存储及计算能力的要求,与现有模型相比优势明显,更利于模型在资源有限的移动端部署,使人脸口罩佩戴监督功能更易获取。
彭成; 张乔虹; 唐朝晖; 桂卫华, 计算机工程 发表时间:2021-07-29
关键词:深度学习;口罩佩戴检测;YOLOv5;GhostBottleneckCSP;ShuffleConv
疫情尚未过去,防护仍需重视,亚洲多国新增确诊人数仍然持续上升,且病株的变异等情况也为疫情的防控增添更多的不确定风险,在疫情防控常态化的情况下,佩戴口罩便是极为有效且经济的防控手段,因此,公共场合的口罩佩戴检测成为一项核心工作。日常生活中,面对经呼吸道传播的传染性疾病或工厂生产过程中产生的有害颗粒物,人们佩戴口罩进行防护也可保护生命安全,减少危害源的接触,提高安全卫生等级。以人工的方式对活动人员进行监督检测耗时耗力,且近距离接触待检测人员存在一定安全风险,因此构建监控系统检测活动人员的口罩佩戴情况,实现疫情防控的自动化、数字化将长期具有实际现实需求,对社会具有重要意义,在多种行业均存在使用场景。
人脸口罩佩戴检测属于计算机视觉中物体检测的解决问题范畴,物体检测在过去的二十年中可大致分为两个时期,以 2014 年为分水岭,2014 年前的传统目标检测期,及之后的基于深度学习的目标检测期[1]。随着 GPU 和大数据的发展,深度学习逐渐展露其优势,传统机器学习多阶段才能实现的功能可由深度学习串联完成,输入大量图像、语音和文本信息即可直接进行端到端的训练[2,3],在物体检测、图像分割等领域展现出远超传统算法的实力。
为了使人脸口罩佩戴监督功能更加易于获取,口罩检测网络模型的轻量化也是一个必须要考虑的问题。当前经典的物体检测算法大多依赖卷积网络[4,5,6]进行特征提取,一系列优秀的基础网络 VGGNet[7]、ResNet [8]和 DenseNet[9]等被提出,但是这些网络计算量往往较大,很难达到实时运行的工业应用要求,于是轻量化网络应运而生。SqueezeNet[10]网络从网络结构优化出发,先压缩再扩展,使用了常见的模型压缩技术,在性能与 AlexNet[11]相近的基础上,参数模型仅有 AlexNet 的 1/50。但该网络仍然采用标准的卷积计算方式,之后的 MobileNet[12]采用更加有效地深度可分离卷积,提高网络速度进一步促进了卷积神经网络在移动端的应用,通过较少的计算量获得了较高的精度。但是理论上,计算量仍然可以降低,ShuffleNet[13]利用组卷积和通道混洗的操作有效降低了点卷积的计算量,实现了更为优越的性能。随着移动设备的进步和应用场景多样化地发展,轻量化网络展现出了更高的工程价值。
针对人脸口罩佩戴检测的精度和速度问题,多位学者进行了各种尝试,比如文献[14]基于改进 SSD 算法,并在分类器末端增添改进的非极大值抑制处理层,测试 mAP 最高达到 88%。文献[15]提出一种基于 RetinaNet 的人脸口罩佩戴检测的方法,通过迁移学习利用预训练的 ResNet 模型帮助新模型训练,最后在验证集上的 AP 值为 86.45%。文献[16]基于 YOLOv3 网络模型,引入改进的空间金字塔池化结构并优化多尺度预测网络,替换损失函数,准确度提升 14.9%。文献[17]基于 YOLOv5 网络模型,在原数据集的基础上进行扩充,采用翻转和旋转两种方式,得到 30000 张图片进行训练,最终准确率为 92.4%,还有其他学者进行了各种优化,在精度和速度上有了各自的提升。综上所述,人脸口罩佩戴检测方法仍有很大的改进空间,相较于已有研究,本文主要创新如下:
1)针对在口罩检测的实际应用场景中,由于距离摄像头的远近关系,一张图片中存在物体尺度面积不平衡的问题,使用 YOLOv5 进行 20×20、40×40、 80×80 的大中小多尺度检测,提升对于小物体的检测性能;
2)在模型精度和速度间取得平衡,合理优化模型,设计更为轻量化的改进 YOLOv5 模型,在几乎不降低模型精度的情况下,实现模型压缩以及加快推理速度,得到一个优化后的轻量化神经网络,极大减轻对硬件环境的依赖;
3)实现有效识别过滤常见干扰,如用衣物或手捂嘴等操作,增强模型实用性。
1 基础理论
1.1 YOLOv5 算法原理
YOLO(You Only Look Once)是一个高性能的通用目标检测模型,YOLOv1[18]创新性地使用一阶结构完成了分 类 与 目 标 定 位 两 个 任 务 , 随 后 的 YOLOv2[19] 与 YOLOv3[20]在速度和精度上的提升进一步加速了物体检测在工业界的落地,YOLOv4[21]更是可以实现在一块普通的 GPU(1080Ti)上完成训练。从 YOLOv1 至今,YOLO 系列已经发展至 YOLOv5,相较于 YOLOv4,YOLOv5 更加灵活,在某种程度上 YOLOv5 模型是所有已知 YOLO 实现中的 SOTA(state-of-the-art),它提供了 4 个大小版本,分别为 YOLOv5s、YOLOv5m、YOLOv5l、 YOLOv5x,4 个版本模型大小与精度依次递增,由 Bottleneck 数目区分,采用了类似 EfficienctNet [22]的 channel 和 layer 控制因子来实现版本的变化,能够根据应用场景选取合适大小的模型。本文主要实现模型压缩及加速,使其更易应用于资源有限的嵌入式设备,故将基准模型选择范围定在 YOLOv5s 系列中。
YOLOv5 也有着版本迭代更新,现已至 v5.0,其中 v3.0、v4.0、v5.0 各有千秋,v4.0 与 v5.0 中 YOLOv5-P5 模型结构相同,v5.0 新提出 YOLOv5-P6 模型,较前面版本,添加了 1 个输出层,共计 4 个输出层 P3、P4、P5 和 P6,对应下采样幅度分别为 8、16、32 和 64,新增加的检验层有利于检测较大的物体,可以通过更高分辨率的训练获得更高的精度。此外,YOLOv5-P5 模型使用 PyTorch1.7 中新支持的 SiLU()激活函数替换了先前版本中使用的 LeakyReLU()和 Hardswish()激活函数,使得网络中任何一个地方都只使用 SiLU 激活函数,并删减了先前版本中 BottleneckCSP 的部分 Conv 模块。先前版本的 BottleneckCSP 以及 YOLOv5-P5 中的改进 BottleneckCSP 变化如下图 1 所示,改进 BottleneckCSP 称为 C3 模块。
可以看到,C3 模块由于消除了每个瓶颈结构中的一个卷积,导致新版的 YOLOv5-P5 的尺寸都稍小一些,能够得到更小的模型,且推理速度也有少许的提升,作者得出结论,尤其是较大的 YOLOv5x,推理时间由 6.9ms 提升至 6ms,可以说最大的模型从这个变化中受益最大。下表 1 是对 YOLOv5s 各版本性能进行比较,出于更加轻量化更易部署于移动设备的目的,可以看到虽然 YOLOv5s-P5 精度虽然较 YOLOv5s-3.0 有了 0.8%的下降,但是速度和参数量都更为优秀,P6 虽然精度最高,但是无论是输入 size 的高分辨率还是增加的检测头,都为设备资源分配增加了更大的负担,综合考量,最终选择 YOLOv5s-P5 作为基准实验模型,以其为 baseline 进行模型优化,本文中后续出现的 YOLOv5 一词,若没有特别说明,均指 YOLOv5s-P5。
YOLOv5由Backbone与Head两部分组成,Backbone 主要有 Focus、C3 以及 SPP 模块,Head 包括 PANet 以及 Detect 模块。
在 Backbone 部分,通过 1 个 Focus 模块及 4 个 Conv 模块实现 32 倍下采样,其中 Focus 模块将输入数据切分为 4 份,每份数据都是相当于 2 倍下采样得到的,然后在 channel 维度进行拼接,最后再进行卷积操作,Focus 模块减少了卷积的成本,以 reshape tensor 的巧妙方法实现下采样并增加 channel 维度,减少了 FLOPs 并提升了速度。
C3 模块参照 CSPNet 结构[23]将一个阶段中基础层的特征图分成两部分,拆分和合并策略被跨阶段使用,较好地减少了信息集成过程中重复的概率,由于重复梯度信息的减少,YOLOv5 网络能够有更好的学习能力,推理计算也有一定的减少。YOLOv4 中也使用了 CSP 模块,但 YOLOv5 中做出创新,以有无残差边为区分标准设计了两种 CSP 模块,分别为 CSP-False 和 CSP-True,以 shortcut 的取值 False 或 True 来控制改变。
加入 SPP 模块[24]至 CSP 模块之后,使用组合的 3 个多尺度最大池化层,几乎可以没有速度损失地大幅度提升了感受野,提取出最重要的特征,同时也有效降低了直接将图片进行伸缩可以会出现的图片信息丢失的可能性,进一步提升模型精度。
Head 部分里,通过将高层的特征信息通过上采样的方式与低层特征信息进行传递融合,实现自顶向下的信息流动,再通过步长为 2 的卷积进行处理,将底层特征与高层特征进行 Concat 操作,使底层分辨率高的特征容易传到上层去,从而实现了 PANet [25]操作,更好地将底层与高层特征优势互补,有效解决多尺度问题。
YOLOv5 网络结构图如图 2 所示。
1.2 改进的 GhostBottleneckCSP
GhostNet 提出了一个创新性的 Ghost 模块,通过廉价操作生成更多的特征图,这一全新的神经网络基本单元成功得实现以更少的参数量和计算量得到更多的特征图[26]。该模块的实现分为两个部分,一个是普通卷积,一个是更为廉价的线性操作,先通过有限的普通卷积得到一部分特征图,再将这里得到的特征图通过线性操作生成更多特征图,最后将两组特征图在指定维度拼接起来。其操作原理如下图 3 所示。
普通卷积层的运算可以表示为: Y X* = + ω b (1) 其 中 c h w X R 代 表 卷 积 输 入 , c 指输入 channel 数量, h 及 w 分别指输入特征图高度和宽度。而 h w n Y R 表示输出为 n 个高度和宽度分别为 h和 w 的特征图, c k k n ωR 代表进行卷积运算的是 c n 个大小为 k k 的卷积核, b 是偏差项,逐点加至输出特征图每个小单元。分析可得出公式(1)运算的 FLOPs 多达 h w n c k k 。而 Ghost 结构进行少量的普通卷积运算,采用线性运算高效实现减少特征冗余,更少计算量地得到同样多的特征图。
由上图 3(b)可以看出 Ghost 结构运算可以表示为 Y X = *ω (2) = Φi j , ( ), 1, , 1, i m j s ' Y Y ij i (3) 其中 h w m Y R 代表对输入 X 进行卷积操作得到 m 个特征图,这里 m n ,省略了偏置项,按照公式(2)运算,FLOPs 为 h w m c k k 。该 Ghost 模块最后要得到 n 个特征图,故公式(3)要通过线性操作生成 n m− 个特征图,设 Y中的每一个特征图都需要生成 s 个特征图。 ' Yi 表示在 Y中的第 i 个特征图, Φi j , 是每一个 ' Yi 用于生成第 j 个 Ghost 特征映射 Yij 的第 j 个线性操作, Φis, 实现内在特征映射的 identity 映射,即图 3(b)中的直接拼接操作,公式 (2)、(3)依次运行就能实现 Ghost 模块。
出于提高处理速度的目的,考虑到设备部署时的实用性,比起使用具有不同的形状和参数的线性运算,作者建议全部使用 3 3 或 5 5 的相同线性运算,设线性运算内核大小为 d d ,则可以将 Ghost 模块与普通卷积的计算量进行比较,得出提升程度,如下公式(4)所示。 ( ) s h w n c k k compare h w c k k m d d h w n m = + − ( 1) h w n c k k n n h w c k k d d h w s s s = + − 1 1 c k k s c k k d d s s = − + 1 c s c s + − s (4) 这里 k k 与 d d 大小相同,且 s c ,故最终化简可以得到普通卷积的计算量近似为 Ghost module 的 s 倍,参数量计算类似,最终也可以近似化简为 s 。从理论上可以定量地证明 Ghost 模块的优越性,故以 Ghost 模块为基础,进而设计 GhostBottleneck 及 GhostBottleneckCSP 模块,具体结构如图 4 所示。
图 4 中的 1 c 与 2 c 分别指输入和输出特征图通道数, h 和 w 代表意义与前文相同。在本文中,先使用如图 4(a) 1 1的普通卷积将通道数降至输出通道数的 1⁄2,再根据得到的特征图进行大小为 5 5 的深度卷积,最后将两组特征拼接。图 4(b)第一个 Ghost module 先将输出通道降为目标输出通道的一半,再由第二个 Ghost module 将通道数恢复至目标输出通道数,并与残差边传来的输入特征图逐点相加进行特征融合。如图 4(c)所示。使 用 GhostBottleneck 替 换 掉 YOLOv5 中所有的 Bottleneck 模 块 , 与 C3 模 块 形 成 新 的 GhostBottleneckCSP。原 Bottleneck 由 1 1和 3 3 标准卷积组成,新结构通过替换掉原来 Bottleneck 中较多的 3 3 标准卷积,实现计算量的减少与模型大小的压缩,理论上这种方法是完全可行的。
1.3 ShuffleConv
当前优秀的轻量级网络绝大部分都使用组卷积或深度可分离卷积来降低卷积操作所产生的计算量,但是为了实现通道间特征融合,这些过程中使用的 1 1卷积在整个卷积过程中占有较多的计算量,为了缓解这一问题, ShuffleNet[10]提出了通道混洗的概念。在进行组卷积后,使用通道混洗就可以实现组间信息的流通,以更加经济的方式增强了特征的表达能力。通道混洗并不复杂,可以通过张量的常规操作得以实现,具体如图 5 所示。
图 5 中的数字是对输入通道进行的编号,从 1~6,使 用 Reshape 操作将通 道扩展为两 维,并对通 过 Transpose 实现扩展出的两个维度置换,这个操作就能够实现在不增加计算量的情况下,使组卷积通道之间信息融合,最后 Flatten 操作,将两个维度复原为原来的初始维度,完成通道混洗。基于如上原理,我们可以认为一个逐点卷积可以使用一个 1 1组卷积和一个通道混洗操作组合代替,组卷积与标准卷积相比,参数量与计算量有较大减少,且从某个角度来说组卷积有类似正则的作用,可以降低过拟合发生的概率。
出于这些优点,本文以此原理为基础对 YOLOv5 中 6个大小为 3 3 和2个大小为 1 1的Conv模块中的普通卷积操作做出改进,将原来的普通卷积更换为组卷积和通道混洗模块,理论上可以实现模型的进一步压缩。
2 YOLOv5 增强网络模型
2.1 YOLOv5 增强网络结构
YOLOv5 算法本身非常优秀,随着其版本的迭代更新,网络各个模块对物体检测中的常见问题都做了一定的优化改进,本身就具有较好的工程实用性,选择其作为口罩检测模型的基准网络是可行的。但是从目前研究和应用情况来看,YOLOv5 仍可以进行进一步的改进,结合 2.2 及 2.3 节的介绍,可以得到本文改进后的 YOLOv5 网络整体结构如表 2 所示。
表 2 中 From 列的-1 是指输入来自上一层输出,Arguments 列的值分别代表该模块的输入通道数、输出通道数、卷积核大小和步长信息,Module 列中的 GhostBottleneckCSPn 模 块 中 的 n 代表该模块内 GhostBottleneck 的数量,经过计算,改进后的 YOLOv5 模型总计 367 层,2419191 个 parameters,计算量为 5.5 GFLOPs 。 初 始 的 YOLOv5 模 型 共 计 7066239 个 parameters,计算量为 16.4 GFLOPs,两者比较,优化后的模型参数量减少为原来的 34.24%,计算量减少为原来的 33.54%,实现了对原模型进行较大程度的压缩。
2.2 损失函数
模型损失函数由分类损失(classification loss)、定位损失(localization loss)和目标置信度损失(confidence loss) 组成。YOLOv5 使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,通过实验,本文在 GIOU Loss[27]和 CIOU Loss [28]之间,最终选定效果略好的 CIOU Loss 作为 bounding box 回归的损失函数,CIOU Loss 公式如下所示。 2 1 2 2 1 d CIOU Loss IoU d = − − − (5) 其中 (1 IoU ) = − + , 1 1 2 2 4 (tan tan ) π gt gt W W h h − − = − , 1 d 代表预测框与目标框两个中心点的欧式距离, 2 d 代表最小外接矩形的对角线距离。 gt gt W h 和 W h 分别代表目标框和预测框各自的的宽高比。CIOU Loss 较 GIOU Loss 考虑了边界框宽高比的尺度信息,从重叠面积、中心点距离和长宽比三个角度进行衡量,使得预测框回归的效果更佳。
2.3 本文整体实现
2.3.1 模型训练算法
算法:模型训练算法
输入:人脸口罩数据集图片及标记文件初始化参数:训练时代数、学习率、批次大小、输入图片大小、网络模型配置 yaml 文件、标签与 anchor 的 IoU 阈值、损失的系数、数据增强的系数、标签与 anchor 的长、宽比阈值图片预处理:调整图片亮度、对比度、饱和度和 Mosaic 处理 1. 准备数据,制作数据集并划分训练集、验证集; 2. 加载数据配置信息及初始化参数,输入数据并对其进行预处理;3. 加载网络模型,并对输入图片进行特征提取及物体定位分类; 4. 随着迭代次数的增加,使用 SGD 对网络中各组参数进行更新优化; 5. 若当前 epoch 不是最后一轮,则在验证集上计算当前模型的 mAP,若计算得到的模型性能更佳,便更新存储的最佳的模型; 6. 训练完设置的时代数后,获得训练好的最优性能模型和最近一次训练模型。输出:本次训练中性能最佳的检测模型。
2.3.2 整体实现流程
本文整体处理流程如下图 6 所示,首先是准备数据,进行人脸口罩佩戴图片筛选及标记,制作数据集并随机划分训练集、验证集、测试集。接着按照 2.3.1 中描述的算法进行模型训练,得到性能最佳的人脸口罩佩戴检测模型,之后对测试集数据进行测试,并在测试图片上画出最终识别结果具体,即人脸位置和佩戴口罩状态。
3 实验及结果分析
3.1 实验环境及数据集介绍
本文实验机器操作系统版本为 Ubuntu 9.3.0-10ubuntu2,CPU 型号为 Intel(R) Core(TM) i3-9100F CPU @ 3.60GHz,GPU 型号为 GeForce RTX 2080 Ti, 显存大小 11GB,内存大小 31GB。所有模型基于 Pytorch 1.8,并使用 cuda 10.1 和 cudnn 7.6.5 对 GPU 进行加速。
本文中使用的数据集来自 AIZOO 团队整理的开源数据集,该数据集主要从WIDER Face及MAFA 公开数据集中筛选得到,分别选择了 3894 张及 4064 张图片。在此基础上对其进行了二次筛选及扩充,删除错误标签,加入部分 ROBOFLOW 开放的口罩数据集,最终得到训练集 6110 张,验证集 1832 张,共计 7942 张。预定义为两类,佩戴口罩和未佩戴口罩,佩戴口罩标签为 face-mask,未佩戴口罩为 face。
为了避免出现用手或衣物捂嘴此类动作被预测为佩戴口罩,数据集中特地加入了嘴巴被手或衣物等其他物品捂住的数据,有效过滤避免了此类干扰。数据集部分图片如下图 7 所示。
通过对数据集进行分析,得到可视化结果,如下图 8 所示。图 8(b)中 x、y 是指中心点的位置,颜色越深代表该点位置目标框的中心点越集中,图 8(c) 中 width、height 分别代表图片中物体的宽高。
从图 8(b)和图 8(c)可以看出数据集物体分布比较均匀,且中小物体占比更大,存在物体间遮挡的情况,符合日常实际应用场景,但其存在轻微的类别间样本不平衡的问题,该问题将在数据预处理中得到缓解。
3.2 数据预处理
3.2.1 数据集标记
数据集格式为 PASCAL VOC 格式,但 YOLOv5 所需为 YOLO 格式的 txt 标记文件,具体格式为 (class_id,x,y,w,h),且都是归一化后的值,所以需要做相应的转换。具体运算规则如下所示。 / center x x width = (6) / center y y height = (7) ( ) / w x x width = − max min (8) ( ) / max min h y y height = − (9) 其 中 id class 为类别的 id 编号, max max min min x y x y , , ,分别指 VOC 格式的 xml 标记文件中,相对于图片左上角,标记物体所在位置的左上角坐标及右下角坐标的值。
3.2.2 自适应图片采样
本文所用数据集存在轻微类间不平衡,这也是物体检测的一个常见问题,模型训练时样本过少的类别的参考性较小,可能会使模型主要关注样本较多的类别,模型参数也主要根据样本多的类别的损失进行调整,最终导致少样本类别精度有所下降。
为了解决这个问题,本文采用自适应图片采样策略,根据物体类别的数量占比及每张图片中各类物体出现频数,综合考虑生成每张图片的采样权重,再根据图片的采样权重生成采样索引序列,类别数量和频数与类别权重成反比,若某张图片频数最高的类别的数量占比也较其他类别更高,这张图片被采样的概率就会较小,通过这种采样方式可以有效缓解类间不平衡问题。
3.2.3 anchor 的设置
对于目标检测,设置合适的 anchor 直接影响到最终模型的表现。合适的 anchor 是根据数据集物体大小而确定的,利用预设值 anchor 基于 shape 阈值对 bbox 计算最好可能的召回率。如果召回率大于 0.98,则不用优化,直接返回,如果小于 0.98,则利用遗传算法与 k-means 重新设置 anchor。本文在人脸口罩数据集上最好可能召回率为 0.9978,故使用 YOLOv5 初始 anchor 值10,13,16 30,? , 33,23 、30,61,62,45,59,119和116,90,156,198,373,326。
3.2.4 Mosaic 数据增强
Mosaic 数据增强参考 CutMix[29],提出了这样创新的数据处理方式:随机选取四张图片,并对其进行随机裁剪、随机排布和随机缩放的方式进行拼接。得到效果图如下图 9 所示。这种方式随机扩充了数据集,特别是随机缩放增加了小目标,使得网络的鲁棒性得到一定提升。另一方面经过 Mosaic 数据增强后相当于一次性处理了四张图片,batch-size 隐性增加,初始设置的 batch-size 值可以无需很大也可以得到一个不错的模型,对 GPU 性能要求相对降低。
除此之外,还进行了改变亮度、对比度、饱和度等常规数据增强方法,与 Mosaic 组合,在一定程度上有效防止了过拟合,能够实现更长时间的训练获得更优的模型性能。
3.3 实验及结果分析
本文所有实验学习率均使用 Warmup[30]训练预热,避免模型训练时初始学习率过高引起模型振荡,以便维持模型深层的稳定性。在 Warmpup 阶段,采用一维线性插值对每次迭代的学习率进行更新,bias 层的学习率从 0.1 下降到基准学习率 0.01,其他的参数学习率从 0 增加到 0.01。在 Warmpup 阶段之后,采用余弦退火算法[31]来对学习率进行更新。实验中 BN 层、权重 weight 层和 bais 层的学习率分别为 lr0、 lr1、lr2,所有实验均训练 300 个 epoch,batch-size 设为 32,学习率的变化如图 10 所示,其中 lr0 及 lr1 曲线变化相同。
所有实验结果从 mAP@0.5、mAP@0.5:0.95、召回率 recall、准确率 Precision、平均检测处理时间、参数量、计算量和模型大小 8 个角度综合进行衡量,上述衡量标准具体计算公式如下。
其中公式(10)、(11)中的 TP、FP 和 FN 分别指正确检验框、误检框和漏检框数量。AP 值为 P-R 曲线面积,本文采用的是 101 个插值点的计算方法,考虑得更为精细。公式(13)中的 N 指检测类别总数,本文为 2。mAP@0.5 是指 IoU 设为 0.5 时所有类别的平均 AP,mAP@0.5:0.95 是指在不同 IoU 阈值上的平均 mAP,IoU 取值从 0.5 到 0.95,步长为 0.05。平均检测处理时间包括网络推理时间及 NMS 处理所花费的时间,模型大小是指最终训练结束得到保存的模型大小。
3.3.1 在人脸口罩数据集上的实验结果
通过消融实验来逐步验证网络结构改变所引起的性能变化,三个实验分别训练了 YOLOv5、 Ghost-YOLOv5和Ghost-YOLOv5-Shuffle三个网络,通过名称可以与前文中所说的结构变化一一对应。实验过程和实验测试结果分别如下图 11、12 和表 3 所示,其中曲线亮度依次递增分别代表 YOLOv5、 Ghost-YOLOv5 和 Ghost-YOLOv5-Shuffle。
表 3 可以看出使用 GhostBottleneck 进行替换后,模型计算量和参数量分别压缩为原来的 63.41% 和 68.98%,在使用 GPU 或 CPU 的情况下分别有 13.64%和 16.37%的速度提升,并且模型大小变为原来的 69.34%,但同时,在图 11(c)中也可以看出模型精确度有了明显损失,且波动更为剧烈,这在验证集的类别损失曲线中也有所体现,所幸在训练后期,模型与 YOLOv5 之间精确度的差值较初期有所下降,除此之外,由图 12 可知,Ghost-YOLOv5 最终所有类别的平均 AP 较 YOLOv5 仅下降 0.3%。
在继续将标准卷积替换为 ShuffleConv 后,模型计算量和参数量进一步分别压缩为原来的33.54%和 34.24%,在使用 GPU 情况下速度仍然保持 1.9ms 不变,但 CPU 速度较 YOLOv5 提升了 28.25%,模型大小压缩至原来的 35.77%。对于 GPU 情况下速度没有提升的结果也是在预料之中,在算力足够的 GPU 平台上,组卷积虽然降低了运算量和参数量,但是由于内存交换速度的限制,ShuffleConv 的瓶颈并非是计算强度,故此模块对 GPU 环境下的影响微乎其微,但当在计算能力有限的 CPU 平台上,计算速度便会有相当的提升,更为适合部署在资源有限的嵌入式设备之上。再者,Ghost-YOLOv5-Shuffle 在 Ghost-YOLOv5 的基础上精度有所提升,从各个衡量标准来看都与 YOLOv5 的检测能力更加贴近,且从分类损失曲线来看,在一定程度上证实了组卷积的正则化效果,由图 12 可知最终 mAP@0.5 为 0.95,较 YOLOv5 的 0.951,几乎没有精度下降,且各类间差值都在 0.003 的范围之内。
YOLOv5s 与 Ghost-YOLOv5-Shuffle 实际运行效果图如下图 13 所示,左边图片为 YOLOv5,右边图片为 Ghost-YOLOv5-Shuffle。
通过图 13 中不同场景的实际检测效果对比可以看出改进后的模型在进行非极小物体的识别时与基准模型几乎没有区别,面对分布极为密集的模糊小物体时,基准模型要比改进后的模型略微精确,但绝大部分小物体还是能够正确识别。
3.3.2 不同网络的对比实验
为了进一步验证本文提出模块及网络的高效性,将其与同类轻量级网络 YOLOv3-tiny 、 YOLOv4-tiny 等重要经典网络进行对比,得到结果如下表 4 所示,表中对 7 个不同模型进行了多角度对比分析,根据序号分组进行对比,从多维度证明了本文观点。其中实验(5)、(6)Model 项中的括号里的数字代表模型中前三个 GhostBottleneckCSP 中 GhostBottleneck 的个数。
首先由实验(0)、(2)、(4)、(6)对比可以看出本文提出模型相较 YOLOv3-tiny、YOLOv4-tiny、 YOLOv5-P6 具有绝对的优势。其模型大小分别仅为上述模型的 30.12%、40.65%和 20.9%,但 mAP 明显大于 YOLOv3-tiny 、 YOLOv4-tiny ,且与 YOLOv5-P6 的 mAP@0.5 大小相同,结合表格,可得出选择本文提出网络结构进行人脸口罩佩戴检测是合理且经济的。
其次通过实验(0)、(1)和实验(2)、(3)两组对比实验可以证明GhostBottleneckCSP和ShuffleConv模块在 其 他 网 络 上 的 优 化 通 用 性 , 加 入 GhostBottleneckCSP 和 ShuffleConv 模 块 的 YOLOv3-tiny 模型大小仅为原模型的 8.43%,大量的 3 3 和 1 1标准卷积被替换实现了模型的极限压缩,且由于加入了更加高效的 CSP 模块,实验(1) 的 精 度 较 原 模 型 也 有 了 明 显 的 提 升 。 同 理 , YOLOv4-tiny 之上做类似替换也能实现模型压缩及精度提升,且在 CPU 上的推理速度也增加了 27.13%,具体性能增强数据见表格实验(2)、(3)对比。最 后 , 通 过 实 验 (5) 、 (6) 说 明 适当调整 GhostBottleneckCSP 中的 GhostBottleneck 数量能够在一定程度上增加模型对小物体的检测能力,在本文 提 出 模 型 的 基 础 上 , 将 第 二 个 和 第 三 个 GhostBottleneckCSP 中的 GhostBottleneck 数量分别设为 1 和 3,对应实验(2)、(3),更大数量的模型精度有轻微地提升,且对小物体的检测能力更强。在实 际 应 用 场 景 中 可 根 据 任 务 需 要 适 当 调 整 GhostBottleneck 模块数量,达到模型大小与精度之间的巧妙平衡,实现更好的检测性能。
4 结束语
本文设计并实现了轻量化的 YOLOv5 增强网络模型,该模型可以压缩并加快推理速度,模型精度得到最大限度的优化,同时极大减轻了对硬件环境的依赖,能满足实际应用需求。后续工作将解决如何高效进行移动端的模型部署,在实际应用中验证并完善所提模型;同时将口罩佩戴与其他关联特征相结合,实现实用性更强的安全卫生监督系统,以更好满足社会实际需求。
论文指导 >
SCI期刊推荐 >
论文常见问题 >
SCI常见问题 >