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

2022-03-01 01:21叶增炉
池州学院学报 2022年6期
关键词:口罩损失卷积

叶增炉

(铜陵学院 a.数学与计算机学院;b.信息技术与工程管理研究所,安徽 铜陵 244000)

当前疫情防控形势严峻复杂,而防控新冠病毒的最有效手段之一就是戴口罩,口罩不仅可以防止病人喷射飞沫,降低飞沫量和喷射速度,还可以阻挡含病毒的飞沫核,防止佩戴者吸入。为了在公共场所(如商城、机场、车站、医院等)实现安全防疫和高效监管的目标,有必要采取智能化的目标检测技术对公共场所口罩佩戴进行检测。因此研发一种口罩佩戴检测算法具有极为重要的现实意义。

目前检测算法大多基于卷积神经网络,主要分为两大类,一类是以R-CNN[1]系列,包括fast RCNN[2]、faster R-CNN[3]、Mask R-CNN[4]等为代表的two-stage检测算法,该类算法在特征提取的基础上,由独立的网络分支先生成大量的候选区,再对其进行分类和回归。另一类是以YOLO系列、SSD[5]系列算法为代表的one-stage检测算法,该类算法在生成候选框的同时进行分类和回归。其中onestage算法检测速度最快,但精确度较低;two-stage检测算法是以牺牲检测速度为代价,实现较高的检测精度。目标检测任务会根据应用场景的不同而选择合适的检测算法,口罩佩戴检测是一个目标检测任务,需要确定每个目标在图像中的位置和类别,对检测的实时性要求较高,改进型的YOLOv5算法以目前最优的one-stage目标检测算法YOLOv5为基础进行研究。

针对口罩佩戴检测这一特定问题,目前国内外有许多学者进行了研究。金鑫等[6]将YOLOv4主干网络中的CSPDarknet53替换成Mobilenet提高识别速度,减少模型参数。郭磊等[7]将注意力机制引入YOLOv5网络进行口罩佩戴检测,对口罩佩戴的检测准确率能达到92%。魏明军等[8]将SENet引入特征融合过程,并引入CIoU损失作为边框回归损失函数,增加了复杂环境下的口罩佩戴检测效果和鲁棒性。可以看出,口罩佩戴检测问题得到了持续广泛的研究,然而现有算法在提高口罩小目标检测精度的同时都一定程度上牺牲了检测速度,其在光线昏暗、人群密集等复杂条件下,其检测精度仍有待提高。

为此,本文提出了一种基于改进YOLOv5的口罩佩戴检测算法。首先利用图像增强算法对图片进行预处理,将YOLOv5网络中的SPP模块替换成SPPF结构,同时减少网络中C3模块的重复次数,从而提高识别速度,减少模型参数;其次,使用K-means++聚类算法对Anchor box进行优化,使其更适合对自定义数据集上小目标的框定,能够提升网络的检测精度;最后,对YOLOv5网络的损失函数进行相应的改进,采用交叉熵损失函数能使得网络中的参数更新加快,让模型更快地达到收敛状态。

1 相关工作

1.1 YOLOv5网络

YOLO系列是一个基于端到端的目标识别定位的一系列算法,通过一个CNN网络就可以输出物体的类别以及物体的位置。其特点是运行速度快,且检测精度好,适用于实时检测系统。YOLOv1[9]网络借鉴了GoogLeNet分类网络结构,将目标检测问题看作空间上的多个边界框和与边界框对应类别概率的回归问题。随后,YOLOv2[10]引入了faster R-CNN中anchor box的思想,采样k-means在训练集标注的bbox上进行聚类产生合适的先验框,使得模型的表示能力更强,任务更容易学习。并对网络结构的设计进行了改进,提出了一种新的高分辨率图像微调分类模型Darknet-19,在识别种类、精度、速度和定位准确性等方面都有很大提升。YOLOv3[11]使用Darknet53网络作为骨干网络完成对图像的特征提取,并借鉴了特征金字塔的思想,利用不同尺度的特征图来进行对象检测,加速了目标检测在工业界的落地。YOLOv4[12]结合了近几年最新研究技术设计了一种强大而高效的目标检测模型,实现了速度和精度的完美平衡,提出了backbone、neck、head的目标检测通用框架套路。YOLOv5与YOLOv4相比,结构更加小巧,配置更加灵活,图像推理速度更快,能够更好地满足视频图像实时性检测的需求。

YOLOv5算法是目前one-stage检测YOLO算法中最先进的检测算法,是在YOLOv3和YOLOv4算法的基础上进行算法集成创新,提高了检测速度。

首先采用Mosaic数据增强的方式将输入图片随机缩放、裁剪、排布后进行拼接,再将拼接后图像送入Backbone网络的Focus模块进行特征提取。Mosaic数据增强对小目标检测效果较好,适用于本文的检测模型。

Focus模块将原始图像数据切分为4份数据,接着在通道维度上进行拼接,最后进行卷积操作。以yolov5s为例,原始的640×640×3的图像输入Focus结构,采用切片操作,先变成320×320×12的特征图,再经过一次卷积操作,最终变成320×320×32的特征图。这一过程将图片长、宽维度上的信息集中到了通道维度,没有造成信息的丢失,但Focus模块减少了卷积的成本。YOLOv5中使用了SPP(spatial pyramid pooling)模块、FPN(feature pyramid network)模块、PAN(path aggregation network)模块完成信息的传递融合。Head输出层主要利用之前提取的特征做出预测。图1为YOLOv5算法的网络结构图。

图1 YOLOv5的网络结构

1.2 C3模块

Backbone的C3对网络进行局部跨层融合,SPP模块极大地增加了感受野,head部分同样采用多尺度输出。因为这些特点,在小目标检测任务上,YOLOv5在检测速度和精度上都能取得很不错的效果。

在新版yolov5中,作者将BottleneckCSP(瓶颈层)模块转变为了C3模块,其结构作用基本相同,均为CSP架构,只是在修正单元的选择上有所不同,其包含了3个标准卷积层以及多个Bottleneck模块(数量由配置文件.yaml的n和depth_multiple参数乘积决定)。

C3相对于BottleneckCSP模块不同的是,经历残差输出后去掉了Conv模块,concat后的标准卷积模块中的激活函数也由LeakyRelu变为了SiLU。

该模块是对残差特征进行学习的主要模块,其结构分为两支,一支使用了上述指定多个Bottleneck堆叠和3个标准卷积层,另一支仅经过一个基本卷积模块,最后将两支进行concat操作。图1的YOLOv5的网络结构C3模块如图2所示。

图2 C3模块构成

1.3 SPP模块

SPP结构又被称为空间金字塔池化,能将任意大小的特征图转换成固定大小的特征向量。SPP先通过一个标准卷积模块将输入通道减半,再分别采用13x13,9x9,5x5的卷积核进行最大池化操作(对于不同的核大小,padding是自适应的),接着再将SPP的输入经过1x1的卷积核后的输出与经过三次不同大小卷积核最大池化之后的输出进行concat,实现信息融合,得到了极大增加感受野的效果。

而在YOLOv5中SPP的结构如图3所示:

2 改进后的网络模型

对YOLOv5的网络结构进行改进,将Focus模块用一个conv卷积替代主要是为了方便模型导出使用SPPF代替SPP层,减少了C3模块的重复次数,并对部分模块重新排列。改进的YOLOv5网络结构如图4所示。

图4 改进的YLOv5网络结构

2.1 SPPF结构

SPPF(Spatial Pyramid Pooling–Fast缩写),使用3个相同的5×5卷积核进行最大池化操作,第二个最大池化操作是在第一个池化操作基础之上,代替SPP结构中的卷积核为9×9最大池化操作,第三个在第二个基础之上,替代SPP结构中的卷积核为13×13最大池化操作。这种结构保证了准确度相似的情况下,减少计算量,并提高检测速度。SPPF结构如图5所示。

图5 SPPF结构

2.2 Anchor box优化

YOLOv5网络模型在识别过程中引入候选区域框(Anchor box),候选区域框为具有固定大小和高宽比的初始区域。在模型训练过程中,若候选区域框大小靠近事实边缘界,则模型会更方便训练,预测的边框界会更接近事实边缘界。在初始状态下,候选区域框大小的设置将会决定目标识别的速度和准度。本文采用K-means++算法对口罩数据集目标的Anchor box进行聚类分析得到9个新的Anchor box。与原有的YOLO_anchor相结合,以mAP作为聚类的评价标准,得出适合本数据的Anchor box,其宽和高分别是(401,459)、(192,243)、(135,172)、(72,146)、(55,76)、(36,75)、(40,28)、(19,36)、(12,16)。使用此Anchor box最终得mAP结果比使用原有的YOLO_anchor高出0.7%。

2.3 损失函数

在目标检测中,损失函数通常由矩形框损失(lossrect)、置信度损失(lossobj)、分类损失(lossclc)三个部分组成。常见的计算矩形框损失函数有 GIOU Loss[13]、DIOULoss[14]和 CIOU Loss[15],经过对比实验,本文使用CIOU Loss来计算目标框的定位损失,如式(1)所示。

上式中,预测的矩形框为(xp,yp,wp,hp),对应的目标矩形框为(xl,yl,wl,hl),IOU是预测框与目标矩形框的重叠面积。ρ为预测框和目标框的中心点距离,c为预测框和目标框的最小包围矩形的对角线长度,v为预测框与目标框的宽高比相似度,α为v的影响因子。可以看出CIOU Loss不仅考虑了预测框与目标框的重叠面积,还兼顾了两者中心点之间的距离和两者的长宽比,因此在口罩佩戴检测实例中,比其他两种定位损失更好。

针对置信度损失和分类损失,实验中采用交叉熵损失(BCE loss)函数进行计算。

改进的yolov5算法用Kmeans++聚类算法获取九个anchor框,将输入图像划分成N×N(通常为80×80、40×40、20×20)的网格,yolov5对每个格子预测3个不同位置和大小的矩形框。根据标签信息和一定规则判断每个预测框内是否存在目标,如果存在则将mask矩阵中对应位置的值设置为true,否则设置为false。实验中对mask为true的位置不直接赋1,而是计算对应预测框与目标框的CIOU,使用CIOU作为该预测框的置信度标签。

假设置信度标签为矩阵LCIOU,预测置信度为矩阵P,那么矩阵中每个数值的BCE loss的计算公式如下:

则置信度损失定义如下:

在计算分类损失中,为了减少过拟合,且增加训练的稳定性,通常对独热码标签做一个平滑操作。如下式,label为独热码中的所有数值,β为平滑系数,取值范围0~1,通常取0.1。

假设置标签概率为矩阵Lsmooth,预测概率为矩阵P,那么矩阵中每个数值的BCE loss的计算公式如下:

则分类损失函数值的计算公式:

总体损失为三个损失的加权和,如式(9)所示。

通常置信度损失取最大权重,矩形框损失和分类损失的权重次之,比如:a=0.4;b=0.3;c=0.3。

3 实验与结果分析

3.1 数据集及实验环境介绍

目前开源的口罩佩戴检测数据集较少,实验数据集一部分来源Mask Wearing Dataset及RMFD数据集,另一部分来源于摄像头拍摄和网络爬取搜集,并进行标注。实验自制数据集共包含4200张含遮挡、密集及昏暗场所等场景的图片。

使用图像增强技术,弥补数据量的不足。对原始图片进行图像平移、翻转、旋转、缩放,分离3个颜色通道并添加随机噪声,并引入了Mosaic,and Self-Adversarial Training(SAT)图像增强方法。

实验采用深度学习框架PyTorch训练模型,操作系统Windows 10专业版,编程工具:pycharm。硬件环境如下:Intel Xeon E5-2630处理器、Nvidia GeForce RTX 1080Ti、32GB RAM。

3.2 模型评估指标

在目标检测算法测试中,常用的性能指标有平均精度均值(mAP)、召回率(recall)、精度(precision),如式(10)。mAP即所有类别的平均精度求和除以数据集中所有类的平均精度,是目标检测中衡量检测精度的重要指标,召回率表示预测样本中实际正样本数与预测的样本数的比值,精确率表示预测结果中预测为正的样本中有多少是真正的正样本的比率。在本次实验中,TP、FP和FN分别表示正确检测框、误检框和漏检框的数量,其中APi反映了单一类别的检测效果。

对所有的训练集和测试集都进行相同的预处理,对所有的图片进行放缩,并重新打了标签。

网络模型训练阶段,初始学习率设置为0.001,权重衰减设置为0.005,迭代批量大小设置为16,迭代次数设置为300次,并使用Adam优化器计算每个参数的自适应学习率。模型训练过程如图6所示,从图中可以看出大约在200次迭代后,模型开始逐渐收敛。

图6 模型训练过程

3.3 实验结果对比

实验采用SDD、Faster R-CNN、YOLOv5和改进型YOLOv5这四种模型对有无佩戴口罩的检测精度、召回率、推理时间三个指标进行比较。其中Faster R-CNN为二阶目标检测算法,Faster RCNN、YOLOv5和改进型YOLOv5为一阶目标检测算法。对比结果见表1。

表1 不同模型检测结果比较

从表1可以看出,YOLOv5目标检测网络在检测时间上都要优于其余两种网络。二阶目标检测算法Faster R-CNN召回率优于一阶目标检测网络,但推理时间过长,不适用于实时检测。改进型YOLOv5的其它各项数值指标都要优于另三种目标检测网络,提高了对头部区域和口罩的检测精度。图7为遮挡、密集和小尺度等复杂场景的检测结果,可以看出,本文方法不仅成功地检测出口罩佩戴的状态,并且对应的置信度挺高,具有较强的鲁棒性和扩展性,基本能够达到视频图像实时性的要求。

图7 遮挡、密集和小尺度等复杂场景的检测结果

4 结语

为了提升目标检测的可靠性和检测速度,将SPPF结构引入YOLOv5模型,使用自定义的数据集,采用K-means++聚类对目标样本进行锚定框大小的优化,并对损失函数做了优化,提出了一种改进YOLOv5的口罩佩戴检测技术。实验结果表明,本文算法在保证检测速度的同时,能够得到更高的检测精度,且可有效降低口罩目标误检率。

猜你喜欢
口罩损失卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
胖胖损失了多少元
戴口罩的苦与乐
因为一个口罩,我决定离婚了
卷积神经网络的分析与设计
从滤波器理解卷积
雾霾口罩
玉米抽穗前倒伏怎么办?怎么减少损失?
基于傅里叶域卷积表示的目标跟踪算法
菜烧好了应该尽量马上吃