基于改进YOLOv5 的口罩佩戴检测算法研究
2024-01-19布安旭陈月乃
布安旭,马 驰,胡 辉,陈月乃,杨 乐
(1.辽宁科技大学 计算机与软件工程学院,辽宁 鞍山 114051;2.惠州学院 计算机科学与工程学院,广东 惠州 516007)
自疫情暴发以来,我国受到了一轮又一轮的疫情冲击,为了抑制疫情的蔓延,降低疫情对经济发展的影响,各地政府颁布了相应的疫情防范政策,要求大家在人多的地方做好防范措施戴好口罩,这些政策能有效抑制疫情的蔓延。在此环境下如果总是让防控人员去提醒大家的话,这不仅会加大各方面的开支,且近距离接触待检测人员也存在一定的传播风险。因此,构建口罩佩戴检测系统对日常防护具有重要的现实意义。
口罩佩戴检测实际上也是目标检测[1],属于计算机视觉领域中的一个分支,主要分为2类,分别是基于传统的方法和基于深度学习的方法。深度学习在计算机视觉领域表现出了良好的性能,当前主流的目标检测算法进行特征提取[2]主要是通过卷积神经网络来实现,例如VGGNet[3]、ResNet[4]、DenseNet[5]等。这些目标检测算法主要分为单级式和两级式;单级式(onestage)包括SSD[6]、YOLO[7-8]等,它们的优势是检测速度快,缺点是精度略差。两级式(two-stage)包括RCNN[9]等算法,这种算法的优点是精度较高,缺点是可能出现延迟的情况。而随着YOLOv5 的出现,由于其良好的性能,很快成为了研究热点。谈世磊等[10]在YOLOv5的基础上,对原始数据集进行拓展,通过图像预处理得到3 万张图像用来进行训练,从而提升了检测的准确率。彭成等[11]在YOLOv5 的基础上进行改进,提出了轻量化算法,降低了网络结构中的参数,进而减少了计算量,并且和原网络模型相比精度基本没有损失。胡均平等[12]通过对YOLOv5骨干网络最后一层的空间金字塔池化结构进行改进来提高模型对目标的特征提取能力,同时提出了自适应特征融合方法来提高网络对不同层级特征的融合能力。
在相关研究的基础上,以当前流行的目标检测模型YOLOv5 作为基础,选择CIoU[16]作为损失函数,然后进行改进。本文改进的方法会随机抽取人脸数据,然后对人脸数据进行校对、标注,模型在训练之后,不仅具有更高的准确率,还有较好地实时性。
1 YOLOv5算法简介
图1 展示了YOLOv5 的整体网络结构。一般目标检测算法分为:输入端、基准网络、Neck 网络、Head 输出端4 个部分。YOLOv5 分为4 种类型,分别是:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,这里主要研究YOLOv5s。
图1 YOLOv5整体网络结构
YOLOv5 属于单阶段目标检测算法,它在YOLOv4的基础上进行了优化,优化后算法的性能得到了较大提高。主要的优化部分如下:
(1)输入端:在对模型进行训练的时候,先对数据处理做了优化,比如进行Mosaic 数据增强以增强识别能力;
(2)基准网络:结合了别的检测模型中的思想,例如Focus 网络中的下采样与CSP 网络中降低大量的推理计算;
(3)Neck 网络:目标检测网络在BackBone 与最后的Head 输出层一般会添加一些层,Yolov5 中添加了FPN+PAN结构;
在把输入图像输送到模型中的时候,一般会对输入图像进行图像预处理操作,预处理的目的是将输入的图像大小变换成模型的输入大小,同时对输入的图像做归一化处理。在训练模型的时候应用Mosaic数据增强来加快网络收敛以及提高算法的精度。另外CSP结构可以在一定程度上决定网络的深度,在YOLOv5网络中有2 个CSP 结构,分别记为CSP_1 和CSP_2,其中CSP_1 应用了2 个残差网络结构,所以被标记为CSP_1_2ReNet;另外的CSP_2则采用了2个卷积,所以标记为CSP_2_2Conv,此时模型的深度会逐渐增加,而模型的特征提取和特征融合性能也会逐渐得到加强。
2 基于YOLOv5的改进算法
对YOLOv5的改进主要包括3个方面,分别是对数据处理、特征增强网络和损失函数的改进。
2.1 数据增强
本算法在输入的时候采用Mosaic 数据增强、自适应锚框计算、自适应图片缩放等数据处理操作。一般在对模型进行训练之前会提前设置好基础锚框,在此锚框基础上,模型在经过训练后会得到一个预测框,然后将其和真实框对比,之后通过计算两者的差值对网络中的参数进行迭代,并进行反向更新。Mosaic 数据增强是一种比较经典的数据增强方法,包括了随机排布、随机缩放、随机裁减等常见的通用数据处理方式,图2 展示了处理过程。本模型在训练时,采用将自适应图片缩放与Mosaic 数据增强进行融合的方法,通过融合处理不仅可以给图片增添一些灰边,还可以对初始图片进行拼接操作,之后把经过处理后的图片送进网络中开始训练。
图2 Mosaic处理流程
2.2 特征增强网络改进
原始的YOLOv5 模型采用了3 种大小的Feature Diagram 对大小各异的目标进行检测,如图3。在把图像输送到网络的时候,会对其进行8、16、32倍下采样,然后得到3种尺寸各异的Feature Diagram,接着把它传入到特征融合网络中。根据FPN[13]的网络特点,特征图在通过多次卷积操作以后会包含更多的语义信息,但是经过了多次卷积之后可能会导致目标中关键信息的缺失,从而影响目标检测的准确率;而通过多次浅层卷积后得到的特征图尽管具有较少的语义信息,不过获取到的目标位置信息会更加准确。
图3 YOLOv5特征提取模型
本算法在YOLOv5的基础上,额外添加了一个4倍下采样,图4 为改进后的特征提取模型。输入图像通过4倍下采样处理后,会融合到特征融合网络中,从而更新特征图的大小,而该感受野较小的特征图则包含了较为丰富的信息,能够提升目标检测的准确率。
图4 改进的特征提取模型
2.3 损失函数改进
IoU[14]主要用来评价目标检测的性能,它通过计算真实框和预测框之间的交集和并集的值来对目标检测模型的检测效果进行评估。GIoU[15]在IoU 的基础上添加了惩罚项,然后可以精确地衡量两者之间的相交情况。它们的计算如式(1)、(2):
公式中A代表检测框,B代表真实框,C代表最小的外接矩形框。GIoU 和最初的IoU 有所差异,它不仅注重两者之间的重叠部分,还注重其他非重叠部分,所以GIoU相较于IoU可以真实反映出预测框和真实框之间的重合度,然而GIoU的缺点是它仅仅考虑了二者之间的重叠区域,而没有考虑别的因素,因此对于目标框的回归问题则无法较好地描述。
本算法在通过实验测试后,最后采用效果较好的CIOU Loss[16],把CIOU Loss 用作回归的损失函数,这样预测框将更符合真实框,CIOU Loss计算公式如下:
上式在计算梯度的时候α并不参与,只作为平衡参数。在图5中,c代表最小外接矩形的对角线距离,d=ρ(b,bgt)代表了真实框中心点和预测框中心点之间的距离,其中b代表了真实框的中心点,bgt代表了预测框的中心点。CIoU[16]从整体上考虑了二者之间的重叠区域等因素,从而使模型的训练过程更加稳定。
图5 预测框与真实框
3 实验结果及分析
3.1 实验环境
本实验的环境配置如下:Intel i5-10400F 处理器,GeForce RTX2080 GPU,cuda10.1,cudnn7.6.3,16G 内存,CentOS 7.0操作系统,pytorch1.8,python3.7。
3.2 数据集
本文所用的数据集为MAFA 和WIDER Face 以及网络上搜集的图片在经过筛选后组成的数据集,其中MAFA 是一个面部遮挡数据集,WIDER Face 是一个人脸检测数据集;然后从数据集中筛选出没佩戴口罩和已佩戴口罩的图片,为了更好地模拟实际生活场景。最后筛选出的这些图片包括了许多实际生活中的口罩佩戴情况;然后将筛选出来的图片分为face-mask 和face 2类,前者代表戴了口罩,后者代表没戴口罩;筛选得到的图片共有7 640 张,其中80%作为训练集,20%作为测试集。
本实验采用的数据集需要预处理,经过预处理后的数据集需要用标注工具对其进行类别标注,包括face-mask和face 2种类别,标注示例如图6。
图6 LabelImg标注图片示例
3.3 结果分析
在模型训练的过程中,评估口罩佩戴检测算法的好坏通常要用到相应的评价指标。其中许多评价指标都由混淆矩阵(confusion matrix)计算得到。本实验对模型评估所用的评价指标包括:准确率(precision)、召回率(recall)、平均精度均值(mAP)以及帧率(每秒检测图片帧数)。
准确率指的是预测为正的样本所占的比例,它主要用来判断预测结果的准确性,公式(6)为准确率的具体计算方式:
召回率指的是所有样本中正例被准确预测的比例,公式(7)为具体的计算方式:
mAP 由AP 求均值得到,用来衡量检测精度,mAP值越大准确率越高,公式(8)、(9)分别为AP和mAP的具体计算方式:
帧率:表示模型每秒检测的图片数量,主要用来衡量模型的检测速率,用FPS表示。
经过实验后,本文基于YOLOv5 改进的口罩佩戴实时检测结果的P-R 曲线图如图7,其中纵轴代表准确率,横轴代表召回率。
图7 改进后算法的P-R曲线图
训练过程中各项指标的变化如图8。
图8 模型评价指标变化曲线图
从图8 的(c)、(d)中可以看出precision 可达到0.986,recall 可达到0.989。图9 展示了检测效果,可以看到本算法对人员口罩佩戴情况能做出准确的检测。
图9 改进后的算法检测效果
接着再次验证基于YOLOv5 改进算法的有效性,将改进的算法与其他算法进行比较,结果如表1。
表1 本文改进算法与其他算法性能比较
从表1可以看出,基于YOLOv5改进的口罩佩戴检测算法,相较于通用检测算法SSD,face_mask 提高了25.43%;对于专门用来进行人脸定位的单阶段检测算法RetinaFace,face_mask 提高了18.62%;在YOLOv5 的基础上,本算法face_mask 提高了9.79%,face 提高了9.22%,mAP提高了8.33%,本算法的FPS和YOLOv5差不多,但仍能满足实时检测速率的要求。
4 结语
本文在YOLOv5 的基础上进行改进,完成了对口罩佩戴实时检测的任务,本文从第二章节中的3 个方面进行了改进,改进后的算法在经过预处理的数据集上进行验证,实验表明,相比其他算法本文的改进算法有着明显优势,充分验证了本算法的有效性,同时也可应用在实际的生活场景中。