基于深度学习的佩戴口罩检测方法研究

2023-12-22 09:29林开司
集宁师范学院学报 2023年5期
关键词:掩膜示例人脸

田 勇 林开司

(铜陵职业技术学院 电气工程系,安徽 铜陵 244000)

佩戴口罩是在应对传染性公共卫生疾病时所采取的简单而重要的防护措施。在要求佩戴口罩的场合下,通常以远程视频监控和现场人工巡检等方式来完成对人群口罩佩戴的监测。但是,人工巡检会增大工作人员的感染风险,查看监控视频则需工作人员长时间、精神高度集中地观看屏幕,增加了工作人员的劳动负荷和精神压力,也增加了漏判的几率。使用经过训练的深度神经网络来辅助人工进行实时口罩佩戴检测,可以大大减小人员的工作强度,具有一定的实用价值。

在早期的目标检测技术实践中,通常需要进行手工特征设计和提取,这种方式过分地依赖操作人员的经验,存在检测精度低和泛化能力差的问题。而在深度学习中,得益于卷积神经网络的特性,提取图像特征时无需人工设计特征。因此,基于深度学习的目标检测算法成为了当前的主流算法。根据卷积神经网络的使用方式,目标检测可分为两大类:一类是基于回归的卷积神经网络目标检测,另一类是基于分类的卷积神经网络目标检测。

基于回归的卷积神经网络是将网络作为回归器,把整幅待检测图像看成一个候选区,在网络中直接输入回归目标在待检测图像中的位置信息。Yolo 算法和SSD 算法是代表性算法。Yolo 最早由Redmon 等于2015 年提出其v1 版本[1]。在2018 年,Redmon 等又将其发展到Yolo v3 版本,检测速率进一步提高,在视频检测上达到了45fps。目前,已有一些基于该算法的应用研究[2,3]。

基于分类的卷积神经网络利用网络本身具有特征提取、特征选择和特征分类的功能,用卷积神经网络对每个滑动窗口产生的候选区进行二分类,判断其是否为待检测目标。最早的代表性算法是由Girshick 等人于2014 年提出的R-CNN,这一算法在VOC2007 数据集上获得了远超之前所有算法的mAP 成绩,由此掀起了此类研究的热潮。由于此算法速度偏慢,在随后出现的Fast R-CNN 中,对待检测图像进行了一次特征提取,并引入RoI Pooling 层对特征尺度进行统一化,同时使用归一化指数函数代替了支持向量机,使得算法在速度和检测的准确率上有了进一步提升。Faster R-CNN[4]是对Fast R-CNN 的又一次改进,它引入了区域建议网络在特征图上生成不同尺寸的锚点框,再一次提升了算法的速度和精度。

这些算法能够较好地实现目标检测,却缺少对图片中所关心目标的语义分割功能。Mask R-CNN是何凯明等人在Faster R-CNN 基础上提出的带有实例分割功能的算法[5],这个算法在前面算法的基础上添加了一个分支,使用现有的检测对目标进行并行地分割掩膜预测。在结果展示时,除了产生目标候选框,还会对目标添加像素级的语义分割掩膜,所关心的目标结果显示更加直观,实现了目标检测与实例分割技术的结合应用。

用于检测人脸是否佩戴口罩的相关研究自2020 年开始逐渐兴起,邓黄潇通过使用迁移学习与RetinaNet 网络来实现对人类是否佩戴口罩的检测[6]。谢征宇等人介绍了基于视频的乘客口罩佩戴检测的相关技术及现状,特别提到了适用于轨道交通应用场景的可行方案[7]。牛作东等人对RetinaFace算法进行了改进,提出了一种自然场景下人脸口罩佩戴检测方法[8]。张修宝等人将基于特征融合和分割监督的人脸检测技术和口罩佩戴识别技术进行了组合,提出了一种结合注意力学习对人脸戴口罩区域进行判别的口罩佩戴识别技术方案[9]。

本文采用了基于Mask R-CNN 的目标检测算法,采用深度残差网络作为网络结构,使用公开的口罩遮挡人脸识别数据集,通过训练实现了对佩戴口罩的目标检测与实例分割。

1 目标检测算法

1.1 算法流程

本文算法的检测流程可以分为两个阶段,第一阶段扫描图像并生成目标区域建议,第二阶段对前一阶段生成的建议进行分类,并生成目标框和分割掩膜。最终结果由目标分类、目标检测框和分割掩膜三部分组成。

算法的流程如图1 所示。首先将输入的图像扩展到设定的尺寸,通过特征金字塔网络(FPN)为全图提取特征,得到图像的特征图(Feature maps),再将特征图输入到区域建议网络(RPN),生成一系列感兴趣的区域(RoI)。在这个过程中,RPN 用一个在特征图上滑移的窗口,为每个位置生成9种提前预设的不同长宽比的目标框(anchor),判断每个目标框是否覆盖检测目标,若目标框与训练集中给定的目标框面积的交并比(IoU)超过0.5 则判断为前景,否则判断为背景。随后对判断为前景的目标框进行一次坐标修正。再将生成的建议识别区域与源图像的特征图一起送入RoI Align 模块,将建议识别区域进一步对齐到原图。

图1 本文算法流程示意图

在RoI Align 操作之后,再把结果送入两个并行的网络进行最终结果预测,一个是全连接层,用于进行目标分类和目标框位置回归;另一个是全卷积层,用于生成目标的分割掩膜。最后将这些结果合并显示。

1.2 算法的多任务损失函数

由于最终结果由目标分类、目标检测框和分割掩膜三部分组成,在模型训练中,采用多任务损失函数,可以描述为:

公式(1)中,Lcls表示分类误差,Lbox表示检测误差,Lmask表示目标分割误差。在进行目标分割时,系统定义了一个k×m2维度的矩阵来表示K 个不同的分类所对应的m×m的区域,对每一个像素均使用sigmod 函数求相对熵,Lmask表示的是最终的平均二值交叉熵。使用每个像素所属类别的交叉熵作为误差值进行计算,可以将分割预测和分类预测很好的解耦。

其表达形式如公式1 所示,其中,yij为m×m区域像素点(i,j)的标签值,ŷijk表示像素点第k 类的预测值。

1.3 检测算法中的RoI Align 层

RoI(Region of Interest,RoI) Align 是Mask R-CNN 算法对Faster R-CNN 中RoI Pooling 方法的一个改进。RoI Align 层实现了对目标建议区域的池化,它将不同输入尺寸的特征图池化后输出为固定的尺寸大小。

在RoI Pooling 方法中,它会按照算法所设定的超参数为H、W 的值,将任意输入的尺寸为h×w的特征图分割为尺寸为H×W大小的子窗口,这样每个子窗口的大小约为(h/H)×(w/W),再对每个子窗口进行最大池化操作,得到固定输出大小的特征图。在这一过程中,子窗口的大小值可能不是整数,RoI Pooling 直接对数值进行了四舍五入的取整操作,这样做的误差值虽然看似不大,但是已经造成了特征图与原图不对准的情况。当从特征图重新映射到原图时,就会产生比较大的误差。这一误差对于分类和目标检测来说不会有太大影响,但是如果用于实例分割,就会造成较大的偏差,体现在输出结果上就是分割掩膜与实际目标之间存在较大移位。

为了减小RoI Pooling 方法在特征点定位时进行取整操作在进行实例分割时所带来的误差,Mask R-CNN 的RoI Align 层在操作上取消了量化过程,使用双线性插值算法获得了坐标为浮点数的像素点上的图像数值,避免了取整带来的误差,大大地减小了原图像素与特征图像素之间的误差。双线性插值算法的公式如下:

首先在x方向上进行线性插值运算,得到:

然后在y方向上进行线性插值运算,得到:

其中,f(P)为所求点的值,f(Q11)、f(Q12)、f(Q21)、f(Q22)为已知的4 个采样点的值。f(R1)、f(R2)表示x方向上进行插值运算所得到的值。

2 实验与结果分析

2.1 数据集使用与标注

本文使用COCO 数据集的预训练权重[10]进行训练参数的泛化,训练及验证数据集使用了最新公开的口罩遮挡人脸识别数据集(Real-World Masked Face Dataset)。本文选择了数据集中500 张图片用于训练,200 张用于验证。对于实际的人脸状态来说,可能存在头部倾斜、被遮挡等状态,因此在组合训练集的过程中,应充分考虑各类可能出现的情况,尽量多地挑选出各种不同的人物头部姿态的图片。于此同时,本文还额外挑选了部分图片进行了旋转操作来模拟人头部倾斜状态并作为新的样本加入到训练集。使用开源软件via 对训练集与测试集样本进行标注,最后生成json 格式的样本标注记录。在样本标注中需要注意的是:佩戴口罩的人群除了正常的佩戴口罩外,还可能存在一些特殊的动作或穿戴而影响面部情况,如:a)面部被其他人遮挡;b)用手、手机等遮挡了部分面部;c)帽子或围巾遮挡了头部或部分面部;d)佩戴非常规口罩、佩戴有色或无色眼镜等。如图2 所示为一些佩戴口罩的特殊情况示例。

图2 一些佩戴口罩的特殊情况示例

对于佩戴口罩的判断应基于口罩是否戴在面部。因此,在进行样本标注时,应将戴口罩的人的面部作为一个整体进行标注,要保留眼睛、额头的特征(如图3-a 所示),并且排除面部的阻挡物(如手、手机、帽子等,如图3-b 所示)。否则,在检测时就可能会出现将口罩和剩余的面部区分检测的情况,造成检测结果错误。单个样本的标注数据格式示例如图4 所示。

图3 数据集样本标注区域示例

图4 样本标注数据格式示例

2.2 实验结果

实验程序基于python3.6 编写,为加速训练和检测,把GPU 版本的Tensorflow-1.9.0 开源深度学习库作为构建基础,所用显卡为GTX1080,显存为8G,同时需要安装显卡运算平台CUDA 来完成运算。由检测结果示例图5 可知,本文所用算法所生成结果除了检测框之外,还为目标添加了分割掩膜。分割掩膜可以直观方便地展示人们关心的检测结果。本文中将已佩戴口罩的分割掩膜设置为蓝色,将未佩戴口罩的分割掩膜设置为红色。

图5 本文算法检测结果示例

2.3 评价指标

利用验证集,对佩戴口罩和未戴口罩两类均使用目标检测领域常用的精确率(Precision)、召回率(Recall)进行评价, 同时使用准确率(Accuracy)指标对两者综合性能进行评价。其中,精确率又被称为查准率,表示检测到的所有样本中该类正确样本数量的占比;召回率也被称为查全率,表示检测的所有样本中该类正确样本数量占集合中所有该类样本数量的比例;准确率表示检测的所有类别中各自正确样本数量之和占所有样本数量的比例。精确率、召回率和准确率的计算公式如下:

其中,TP表示佩戴口罩的样本被正确检测为戴口罩类别的数量;FP表示不佩戴口罩被错误地检测为戴口罩的类别的数量;FN表示佩戴口罩的样本被错误检测为不戴口罩的类别的数量;TN表示不佩戴口罩的样本被正确检测为不佩戴口罩的类别的数量。

2.4 结果分析

表1 所示为本文算法在验证集下的检测结果,可以看出,该算法有较好的检测效果,精确率较高,说明检出结果的可信度较高;召回率较高,说明对检测目标的漏检概率较小。

表1 验证集下的佩戴口罩检测结果

图6 所示为本文算法的部分误检和漏检示例。详细分析出现误检和漏检的图片,出现漏检的情况,大部分是由于人的脸部被他人、头发、饰物等遮挡面积较大,或人脸处在特别的角度下,造成无法判断是否为人脸;误检的情况中,有很多是由于周围环境物的干扰,比如广告牌上的假人、宣传画中出现的类似人脸的图片、所带的饰物与人脸佩戴口罩的特征类似等。因此,在后续的研究和使用中需要进一步地挑选和组合训练样本,增加样本的规模,尽量考虑到各种可能存在的情况,尤其是增加各类侧方位人脸、小角度和遮挡严重但仍可明确辨认是否佩戴口罩的样本,以及因照片焦距问题导致背景人物虚化但同样可以明确辨认是否佩戴口罩的样本数量。

图6 本文算法的部分误检和漏检示例

3 结束语

使用深度学习算法来辅助人工进行佩戴口罩识别,可以大大减少工作人员的工作强度和精神压力。本文所采用的基于Mask R-CNN 算法的佩戴口罩检测方法,检测结果具有较高准确性,在结果显示时除了检测目标框之外,还添加了目标分割掩膜,可分辨性高。在辅助人工进行口罩佩戴实时检测的场合下,可以起到一定的作用。

猜你喜欢
掩膜示例人脸
大还是小
利用掩膜和单应矩阵提高LK光流追踪效果
一种结合图像分割掩膜边缘优化的B-PointRend网络方法
有特点的人脸
2019年高考上海卷作文示例
常见单位符号大小写混淆示例
“全等三角形”错解示例
三国漫——人脸解锁
光纤激光掩膜微细电解复合加工装置研发
多层阴影掩膜结构及其制造和使用方法