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

2022-08-12 02:29李雨阳沈记全翟海霞冯伟华
计算机工程 2022年8期
关键词:网络结构口罩样本

李雨阳,沈记全,翟海霞,冯伟华

(1.河南理工大学 计算机科学与技术学院,河南 焦作 454000;2.中国烟草总公司郑州烟草研究院,郑州 450000)

0 概述

新冠疫情爆发对全球产生了重大影响。文献[1]的研究结果表明,医用口罩能够有效遏制新冠病毒的传播。佩戴口罩大幅降低了新冠病毒传播到戴口罩人群的概率,可以有效阻止病毒在人群中的扩散,保障人们的生命安全。目前,新冠疫苗已经开始大面积接种,但是在公共场合佩戴口罩仍必不可少。因此,在公共场合检测人们是否佩戴口罩已经成为一项至关重要的计算机视觉任务。

当前,研究人员对口罩佩戴检测算法做了研究。文献[2]利用HSV+HOG 等传统的目标检测算法对口罩佩戴行为进行检测,虽然达到了较高的检测精度,但传统的检测方法时间复杂度较高,鲁棒性差。文献[3]结合深度学习方法设计了一种口罩检测算法;文献[4]对YOLO 算法进行改进,设计了新的口罩检测算法,虽然这两种算法均取得了较好的检测效果,但只对口罩是否佩戴的情况进行了检测,没有充分考虑口罩佩戴错误的情况,无法充分满足现实情况下对口罩检测的需求。口罩检测需要准确识别出人脸,并且要判断其是否佩戴口罩、佩戴是否正确。在佩戴口罩的情况下,人脸的大部分特征被遮盖,这为佩戴口罩检测带来了一定的干扰,因此口罩检测对算法的细节特征学习及处理能力有更高的要求。此外,有关口罩佩戴的公开数据集较少且数据不够完善,需要重新建立新数据集。

目标检测技术是实现口罩佩戴检测任务的关键技术,也是计算机视觉方向的研究热点,被广泛应用于各个领域[5-7]。近年来,研究人员先后提出了Fast R-CNN[8]、Faster R-CNN[9]、YOLO[10-12]、SSD[13]等 优秀的深度学习目标检测算法。其中SSD 算法因其在检测速度与精度上都表现优秀,被众多学者加以研究和应用。文献[14]基于该算法对城市户外广告面板进行检测,文献[15]基于该算法对煤矿井下带式输送机表面异物进行检测,文献[16]基于该算法对野生大熊猫视频进行检测,文献[17]基于该算法对地铁安检图像中的物品进行检测。这些工作针对特定场景对SSD 算法做了相应的改进,都取得了不错的检测效果。

在疫情防控条件下,口罩检测任务涉及到的场景复杂多样,如人脸特征被遮挡难以检测、目标尺度不一、小目标检测效果差等,并且正确与错误佩戴口罩特征差异小,对算法的细节特征学习和处理能力要求更高,SSD 算法对小目标的检测效果也不理想。针对上述问题,本文对SSD 算法进行改进,利用特征金字塔网络(Feature Pyramid Network,FPN)[18]与协调注意力机制[19]增强算法的特征提取和对小目标的检测能力。同时,针对算法正负样本不平衡的问题,对算法的分类分数和IoU 分数进行合并表示,将QFL 作为新的损失函数,提出一种新的口罩佩戴检测算法。

1 SSD 算法

SSD 是目标检测领域的经典算法之一,目前仍是主流的目标检测算法。SSD 的网络结构如图1 所示。SSD 网络是基于全卷积网络结构,它将基础网络VGG16[20]的全连接层替换为卷积层,并在VGG16网络末端添加了几个使特征图尺寸逐渐减小的辅助性卷积层,用于提取不同尺度的特征图。SSD 以Conv4_3、FC7、Conv8_2、Conv9_2、Conv10_2 和Conv11_2 层的输出作为不同尺度的特征图进行检测,其相对应特征图的尺寸分别为38×38、19×19、10×10、5×5、3×3 和1×1,分别来处理不同大小的对象,提高了预测速度和精度。

图1 SSD 网络结构Fig.1 SSD network structure

SSD 借鉴了Faster R-CNN 算法的Anchor 机制,对提取特征图的每个位置上都预设了固定数量的不同长宽比的先验框,网络可以直接在特征图上采样,提取候选框进行预测,在保持实时检测速度的同时,提高了模型的定位准确度。

SSD 算法使用损失函数对模型参数进行优化和更新。SSD 的损失函数为位置误差(locatization loss)与置信度误差(confidence loss)的加权和,其公式如式(1)所示:

其中:x表示预测为某一类别的概率;c为置信度;l为预测框;g为真实框;Lconf(x,c)和Lloc(x,l,g)分别为置信度损失和定位损失;α为拉格朗日乘子。

2 SSD 改进算法

2.1 SSD 网络结构改进

SSD 网络结合来自不同分辨率的多个特征映射的预测,然而,浅层特征图缺乏较强的语义信息,在一定程度上会影响检测性能。深层提取的特征较为抽象,包含的小目标信息有限。因此,在较为复杂的场景中,人脸尺寸大小各异,SSD 算法对口罩佩戴的检测效果不理想,特别是小目标人脸。

特征金字塔网络(FPN)是一个自顶向下的网络,通过上采样将包含更多抽象和语义信息的高级特征层引入到低级特征层中,一定程度上弥补了不同特征图之间的语义差异,在基本不增加原有模型计算量的情况下大幅提升了物体检测的性能,其结构如图2 所示。

图2 特征金字塔网络结构Fig.2 Structure of feature pyramid network

为了增强算法对小目标的检测性能,提高算法对细节特征的学习和处理能力,使算法可以更有效地利用细节特征信息,尤其是提高对口罩佩戴错误情况的检测能力,受到FPN 网络结构的启发,本文引入CA(Coordinate Attention)模块改进了算法的网络结构。改进后的SSD 网络结构如图3所示。

图3 改进的SSD 网络结构Fig.3 Improved SSD network structure

首先利用FPN 网络增强算法的特征提取能力,提高算法对小目标的检测性能。本文在Conv4_3、FC7、Conv8_2、Conv9_2 层构建出自顶向下的反路径,使用1×1 卷积核对特征进行降维,以256 个固定通道获得不同尺度的特征映射。之后,通过反卷积操作对高层特征图进行上采样,并通过元素添加的方式,将处理后的特征图与SSD 中相应的特征图合并。为了消除上采样的混叠效应,之后并不直接使用合并后的特征图进行检测,而是对合并后的特征图做3×3 的卷积运算。由此,构建一个自顶向下的特征金字塔网络,通过上采样将包含更多抽象和语义信息的高级特征层引入到低级特征层中,弥补了不同特征图之间的语义差异,可以提升对小尺度目标的检测的能力。

此外,在佩戴口罩时人脸的部分特征被遮盖,因此口罩检测对算法细节学习和处理的能力要求较高,特别是在口罩佩戴错误与口罩佩戴正确的特征差异较小。为了进一步提高算法对细节的学习和处理能力,在网络中添加了协调注意力CA 模块,其模块结构如图4 所示。CA 模块通过坐标信息嵌入和坐标注意力生成两个步骤,对通道关系和远程依赖关系进行编码。利用CA 模块可以提高模型的感受野,加强对人脸口罩佩戴信息的表达,进一步提高对口罩佩戴检测尤其是口罩佩戴错误检测的准确性。

图4 CA 模块结构Fig.4 CA module structure

通过这种设计可以使得浅层特征图具有较强的语义信息,增强了算法的特征提取能力,使算法可以充分利用不同尺度特征图的信息,提高SSD 算法在复杂场景下对佩戴口罩目标的检测能力,改善了算法对不同尺度目标的检测能力,提升算法的整体检测精度。

2.2 改进的损失函数

SSD 预设大量先验框,在训练时会产生更多负样本,正负样本难以平衡。在SSD 算法中采用了难例挖掘的策略来保持正负样本比例为1∶3,但这种方式忽视了大量简单负样本对模型训练的影响,无法使模型得到充分的训练。对于SSD 算法存在这些的问题,需要有针对性地对其进行改进。

在2017 年,LIN 等[21]提出了Focal Loss 函数,其表达式如式(2)所示:

其中:pt是不同类别的分类概率;(1-pt)γ称为调制系数,使用γ来调整调制系数。

Focal Loss 可以通过调制系数控制简单样本的权重,减少了易分类样本在训练中所占的权重,使得模型在训练时更专注于难分类的样本。

虽然Focal Loss 可以解决训练过程中正负样本不平衡的问题,但是算法在训练过程中,一部分分类分数低的真正的负样本,由于预测了一个分数极高但不可信的IoU,导致其在极大值抑制时,排到了一个分类分数较低IoU 分数高的真正的正样本前面,这样对结果会产生一定的影响。

为解决上述问题,Quality Focal Loss(QFL)[22]函数对FL 进行了扩展改进。本文借助QFL 的思想,将SSD 网络分类预测的分数和IoU 分数进行合并表示,即将分类向量在真实框类别处的值表示为其相对应的IoU 得分。通过这种方式,便将分类和IoU 分数合并为一个变量,如图5 所示。这种方式可以解决算法训练和测试阶段中的不一致性,并以端到端方式进行训练,避免了出现上述影响算法性能的情况。

图5 输出表示Fig.5 Output representation

在改动的同时,借助QFL 损失函数对正负样本进行平衡,QFL 公式如式(3)所示。这样便可以同时兼顾到对正负样本权重的平衡,使网络得到充分的训练,进一步提升算法对口罩佩戴检测的准确性。

QFL 扩展了Focal Loss 的2 个部分:1)将交叉熵部分-loga(pt)扩展到了完整的-((1-y)loga(1-σ) +yloga(σ))版本;2)调制系数(1-pt)β推广为|y-σ|β(β≥0),即σ与连续的质量标签y∊[0,1]之间的绝对距离,σ为sigmoid 函数的输出,式(3)中使用绝对值|·|来保证非负。这里QFL 的全局最小解即是y=σ,这样交叉熵部分变为完整的交叉熵,同时调节因子变为距离绝对值的幂次函数。QFL 可以通过调整参数β来调整正负样本的权重。通过多次实验,本文采用β=2 效果最优。

3 实验与结果分析

本文的实验基于Pytorch 框架,编程语言为python3.7,操作系统为Ubuntu16.04,GPU 为NVIDIA Tesla P40,集成开发环境为PyCharm,网络的输入大小为300×300,初始学习率设置为0.000 1,采用StepLR调整策略调整学习率,调整倍数gamma=0.92,调整间隔为step_size=1。

3.1 实验数据集

目前有关人脸佩戴口罩的数据集较少,且场景较为单一,普遍缺少口罩佩戴错误的样本,因此本文使用自制数据集,通过网络搜索和个人采集,自制共计2 050张图片的口罩佩戴检测数据集。其中1 600张作为训练集,450 张作为测试集,在训练时,随机将训练集中10%的数据作为验证集。

数据集中共包含佩戴口罩、未佩戴口罩以及口罩佩戴错误3 种情况,涉及高铁、商场、防疫检查点等不同场景。数据集依照PASCAL VOC 数据集格式,使用LabelImg 工具进行手工标注。数据集中各个类别的标签数量如表1 所示。

表1 各类别标签数量Table1 Number of labels by category

数据集及标注示例如图6 所示。针对数据集数据量不够高,并且口罩佩戴错误的样本数量相对较少的问题,实验采用裁剪、旋转、色彩变换等随机数据增强方法用来对训练数据进行扩充,数据增强示例如图7 所示。在增加了数据量以及错误佩戴口罩样本的数量的同时,还可以缓解在训练过程中的过拟合现象,提升算法性能以及鲁棒性。数据增强后口罩佩戴数据集的信息如表2 所示。

表2 口罩佩戴数据集Table 2 Mask wearing datasets

图6 数据集及标注示例Fig.6 Dataset and annotation examples

图7 原图与变换后图像对比Fig.7 Comparison between original image and transformed images

3.2 结果分析

本文使用平均精度(Average Precision,AP)和平均精度均值(mean Average Precision,mAP)作为口罩检测模型的性能评价指标。AP 值从准确率P和召回率R两个指标来衡量模型检测的准确性。准确率表示实际是正类并且被预测为正类的样本占所有预测正样本的比例,如式(4)所示;召回率则表示实际是正类并且被预测为正类的样本占所有实际为正类样本的比例,如式(5)所示:

其中:TTP表示被检测正确的正样本;FFP表示被检测错误的正样本;FFN表示被检测错误的负样本。

AP 由准确率-召回率曲线积分计算。AP 的值越高,模型表现越好,其计算公式如式(6)所示。mAP则是各个类别AP 的平均值,用来衡量多个目标的平均检测精度,mAP 的高低可以体现模型对所有类别检测综合性能的高低。

对于实时监测数据显示,每次AJAX请求为盾构机标识ID和当前时间戳TIMESTAMP,服务器端接收参数之后,从Redis数缓存中查询出数据,并以AJAX请求中常用的JSON数据传输格式返回数据,对实时监测页面进行局部的数据更新,从而达到盾构运行数据实时变化的目的。AJAX数据请求流程如图7。

训练过程中训练损失随迭代次数的变化如图8所示。通过对比可以看出,改进后SSD 算法在引入QFL 损失之后,使口罩佩戴检测模型得到了充分的训练,在训练时的损失变化与原SSD 相比,损失的变化下降更快一些,并且更加稳定。

图8 训练损失变化对比Fig.8 Comparison of training loss changes

改进SSD 算法检测P-R 曲线如图9 所示。从P-R 曲线图中可以计算出,佩戴口罩、未佩戴口罩、口罩佩戴错误3 种类别的AP 值分别达到了96.55%、96.89%、95.39%,最终算法的mAP 达到了96.28%。与原SSD 算法相比,mAP 提升了5.62%。为综合评估本算法的性能,使用本实验中的数据集与其他主流的目标检测算法进行了对比实验,具体实验结果如表3 所示。

图9 各类目标P-R 曲线Fig.9 P-R curve of various targets

表3 不同检测算法性能对比Table 3 Performance comparison of different detection algorithms %

可以看出,对于口罩检测中的3 种类别的AP 值以及mAP,改进后的算法均高于RetinaNet 和Faster-RCNN。相比YOLOv3,改进后的SSD 算法佩戴口罩的AP 值低于YOLOv3,但是未佩戴口罩和口罩佩戴错误的AP 值都高于YOLOv3,mAP 值也较优。本文设计增强了算法的特征提取能力,对细节特征处理的更好,对于口罩佩戴的各类情况,尤其是针对口罩佩戴错误的情况,检测效果更好。通过对比进一步证明了算法的有效性。

为验证算法的实时性,运用各算法对测试集的图片进行检测,样本数设置为1,对各算法的检测速率进行对比,实验结果如表4 所示。

表4 不同算法检测速率对比Table 4 Comparison of detection rates of different algorithms

本文所设计的算法在提升了检测精度的情况下与原始SSD 算法相比,检测速度降低了2.4 frame/s,平均检测速率达到了28.9 frame/s,仍具有良好的实时性。

3.3 检测效果对比

实际检测效果对比如图10 所示,其中,图10(a)为原版SSD 的检测效果,图10(b)为改进后SSD 在相同场景中的检测效果。

图10 改进算法的检测效果对比Fig.10 Comparison of detection effect of improved algorithm

3.4 消融实验

为验证改进算法的有效性,对改进了网络结构的算法进行了消融实验。实验分别设置两组对照模型,一组为原始的SSD 网络模型,另一组则是引入FPN 和CA 模块改进后的SSD 模型,其余实验设置均相同,实验结果如表5 所示。通过对比可以看出,改进SSD 算法3 种类别的AP 值分别达到了96.25%、94.43%和93.49%,mAP 达到了94.72%,相较于原始SSD 提升了4.06%。

表5 消融实验结果对比Table 5 Comparison of ablation experimental results %

此外,本文采用的损失函数,可以通过调节β的取值控制正负样本的权重。表6 所示为在对改进算法针对不同的β值进行对照实验。

表6 β 取值对比结果Table 6 β value comparison results %

从表6 可以看出,当β取值为0 时,mAP 的值降低明显,这是因为此时损失函数不再起到调节正负样本权重的效果。当其取值为2 时,实验效果最佳。当β的值降低为1 或提高到3 时,mAP 均有一定程度的降低。如果持续增加β的取值到4 时,与取2.5 时相比,mAP 的值降低到了94.77%。所以,通过对比实验可以得出,对正负样本权重的调节应合理控制,过分增大或减小调制参数均会对算法的性能造成影响。因此,本文实验的最终取值为β=2。

4 结束语

为配合疫情防控,本文提出一种基于改进SSD的口罩佩戴检测算法。通过重构特征提取网络,加强了浅层特征图的语义,提升了算法在复杂场景下对不同尺度目标的检测能力,同时将分类预测分数和IoU 分数进行合并,在损失函数中引入QFL 损失,解决了算法中正负样本不平衡的问题,使模型更容易收敛。实验结果表明,与原始算法相比该算法具有良好准确性,能够满足疫情防控下的实际需求,实现在现实场景下全面准确地对佩戴口罩行为进行检测。下一步将对网络结构进行改进,优化网络参数,提高网络的检测速度,在保持较高检测精度的同时,提升口罩佩戴检测的实时性。

猜你喜欢
网络结构口罩样本
用样本估计总体复习点拨
快递网络结构研究进展
戴口罩的苦与乐
因为一个口罩,我决定离婚了
基于AutoML的保护区物种识别①
雾霾口罩
规划·样本
随机微分方程的样本Lyapunov二次型估计
基于时效网络的空间信息网络结构脆弱性分析方法研究
基于互信息的贝叶斯网络结构学习