王莉茹
(西藏大学信息科学技术学院,西藏 拉萨 850000)
截止到2022 年2 月底,全球累计确诊新冠的人数已经超过了4.3 亿,累计死亡人数超过了590 万。[1]新冠病毒主要存在于病人的呼吸道,并且它的传染性很强,所以人们在公共场所或人员聚集的地方容易感染,口罩可以在病原体通过口鼻时通过过滤材料形成一个物理阻隔,这样可以一定程度的减少疾病的传播,确诊人员佩戴好口罩可以很好的不让包含病原体的飞沫飞出,健康人员佩戴好口罩可以有效地隔断包含病原体的飞沫进入自己的呼吸道。[2]根据国家卫生健康委在2020 年1 月30 日发布的《关于印发新型冠状病毒感染不同风险人群防护指南和预防新型冠状病毒感染的肺炎口罩使用指南的通知》,佩戴好口罩可以起到更好的防护作用。[3]在疫情期间,及时佩戴好口罩可以有效地防控疫情,被感染的比例可以下降,但是如果疫情防护措施不能很好的落实,这样疫情战的战线就会被拉长。[4]在公共场所人流量大的情况下,单纯靠人来检查口罩的佩戴情况不太现实,这时候机器快速检测变得很重要。
目标检测大致可以分成两大部分,第一部分是“传统的目标检测”,第二部分是“基于深度学习的目标检测”。比如我们所熟知的V−J 检测、HOG 检测、DPM 算法,这些都是属于传统方法的,深度学习方法是包括单阶段检测算法与两阶段检测算法。两阶段检测算法按分类来对待,首先生成区域,然后进行分类和校准,最后才得到结果。单阶段检测算法则是直接得到最终的结果。[5]YOLO 系列的算法是现阶段目标检测较流行的算法,对于检测和跟踪来说,它是一种先进的技术。它可以实时运行,以深度学习为基础,可以解决各种检测以及跟踪问题。它在经历了几代的改进之后,不仅可以对视频进行实时的检测,并且对于小目标来说精确度也有所提升,所以现阶段检测口罩的佩戴情况,此算法非常适合。因此本文使用了YOLOv5算法来进行在人流量大的情况下的实时口罩佩戴检测。YOLOv5的网络结构图,如图1所示。
YOLO算法是把目标检测问题看成了一个回归问题,它是直接通过单个的神经网络来得到和分类概率,也就是说YOLO 可以同时预测一个图像在所有类中的所有边界框。它的工作流程是缩放图像、让图像可以通过全卷积神经网络,然后利用极大值抑制去进行筛选。[6]YOLO 算法也在后续的系列中逐步进行不断地改进,对于本次实验来说,YOLO 算法很适合。
YOLOv3 算法是一种单阶段目标检测算法,相对比二阶段来说,单阶段的检测速度要快一些。首先是多尺度预测(类FPN),这种使得其算法在精度上有所提升。其次是在网络结构上的改变,Backbone 改成了Darknet−53,Darknet−53 与ResNet−101 或ResNet−152准确率接近,但速度更快。最后是分类器−类别预测。
YOLOv4算法的话,相当于一个“大杂烩”,它是把许多前人的研究成果加以结合并且做了适当创新的算法,实现了速度和精度的完美平衡。可以说是利用组合技巧来提升了卷积神经网络(CNN)的准确性,但是这些技巧具有局限性,只能在某些模型、某些问题或小型数据集上运行。总的来说,YOLOv4 架构包括CSPDarknet53 主干,SPP 添加模块,path−aggregation neck和YOLOv3(anchor based)头。
YOLOv5 算法可以分为4 种网络,分别是YO⁃LOv5s、YOLOv5m、YOLOv5l 和YOLov5x。YOLOv5 用的是Mosaic 数据增强,对多个图像进行拼接是用的随机缩放、裁剪和排布的方式,这种数据增强的方法对检测小目标的效果相对还是不错的,因为对于自己定义的数据集来说,其目标识别框架通常都是要缩放原图的尺寸,所以采用的锚框和图片的缩放都是自适应的。其backbone 部分用的是Focus 结构和CSP 结构,从输入中提取特征信息,CSP 结构可以有效地解决其他大型卷积神经网络框架Backbone 中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS 数值,既保证了推理速度和准确率,又减小了模型尺寸。Nect部分用的和YOLOv4的一样,都是用PANET 来聚合特征的,它是基于Mask R−CNN 和FPN 框架,也加强了信息的传播。其采用了一种新的增强自下向上路径的FPN结构,很好的改善了特征。Prediction部分用的是GIOU_Loss,其可以带来了更快的收敛、更好的性能。
其中,YOLOv5s 的网络最小,虽然精度与其他3个相比略差,但是其检测速度是最高的,其他三种都是在YOLOv5s的基础上不断的加深和加宽网络的,他们的精度也是依次提升的,但检测的速度相对是慢的。因此用YOLOv5s是符合本文的设计理念。
本实验所使用的口罩数据集是从网络上爬取得到的,数据集中包括各种没有佩戴口罩以及佩戴口罩的人脸图片,此数据集里面一共有1600 张图片,本实验按照7:1 的比例来随机划分成训练集和测试集,所以训练集里包括1200 张图片,测试集里包括400 张图片。训练集和测试集中均包含复杂情况的样本,所以是比较符合真实的情况,是可以准确反映现实环境的准确性。考虑到需要速度快的检测算法,本实验选择用YOLOv5 算法中的YOLOv5s 来作为口罩佩戴检测的算法,并且在实验训练过程中,对模型进行不断地适当微调来改善训练速度。
本实验用YOLOv5s进行训练时,将图片尺寸缩放为640×640,设置初始学习率为0.01,设置batch的大小为16,设置epoch 为200来进行训练,采用“慢−快−慢”来调整学习率。
本实验使用平均精度均值(Mean Average Preci⁃sion,mAP)、召回率(Recall)和精确率(Precision)来作为此次任务的衡量指标。下面对这三个指标进行简单的解释,其中平均精度均值表示在不同阈值(阈值在0.5 和0.5~0.95)上的平均mAP 值。召回率是正确判定为戴口罩的图片占全样本中总戴口罩的图片的比例。精确率表示在所有识别的图片(识别正确佩戴口罩和识别错误佩戴口罩的图片)中,识别正确佩戴口罩占所有识别出来的图片的比例。
本实验将YOLOv5s、YOLOv3 和YOLOv4 算法在检测人脸是否佩戴好口罩这个任务上的性能进行了对比,可以从下表中看到这3 个算法在同一个数据集上的检测性能对比情况。
从表1中可以看出训练和测试都在同一个数据集上,本实验使用的算法(YOLOv5s 算法)的precision、recall、mAP 分别为85.3%、82.8%、83.7%,均高于YO⁃LOv3和YOLOv4检测所得出的结果。
表1 不同算法在同一数据集上的测试结果
训练集在进行200个epochs结束之后会生成两个weight 文件,一个是best.pt,一个是last.pt,本实验把best.pt 文件作为测试集的权重文件来进行测试,下图分别是用YOLOv5s 算法的测试集结果的其中几张图片,在单人有佩戴口罩、多人有佩戴口罩、多人没有佩戴口罩这三种情况下都有很好的检测结果。
本文还可以使用电脑的摄像头来进行实时检测口罩的佩戴情况,这时候只需要把datasets.py 中if′youtube.com/′ in s or ′youtu.be/′ in s:# if source is YouTube video 改成if ′youtube.com/′ in str(s) or ′youtu.be/′in str(s):#if source is YouTube video,再把detect.py中的source的参数改成0就可以了。
本文对检测口罩的佩戴情况进行了研究,提出基于YOLOv5s算法的检测是否佩戴口罩,它可以反映在真实情况下口罩佩戴的情况,其最后得到的精确率、召回率、平均精度均值分别是85.3%、82.8%、83.7%,均高于YOLOv3 和YOLOv4 这两个算法的检测结果,所以达到了本文此次任务的目标。
本文提出的算法可以用在真实环境下进行口罩佩戴的检测,可以很好的降低人工成本,还可以提醒大家佩戴好口罩,保护好大家的出行安全。但需要承认的是检测过程中还会出现一些漏检的现象,这方面还有待提升,笔者在后续的研究中将会在这方面继续对本文算法进行改进之后再进行检测,做好进一步的改进和提升。