王卓群,易超
( 中山大学 电子与信息工程学院, 广东 广州 510006 )
COVID-19病毒给人类带来了严重影响。时至今日,人类仍然同疫情进行着艰苦的斗争。佩戴口罩则是能够防止病毒传播有效措施之一,检测体温也能有效预防新冠病毒,如果在进行身份认证的过程中能够避免口罩被摘下,无疑也能降低疫情传播的风险。当前多地对于民众是否佩戴口罩的监管与测温工作还停留在人工检测的阶段,在无接触且佩戴口罩的前提下也无法进行有效的身份认证。因此,在疫情背景下,开发一套实时的口罩佩戴检测与体温测量的免摘除口罩人脸识别门禁系统迫在眉睫。
相应的研究大多是在疫情爆发后才开展的。对于口罩佩戴检测这一问题,我们将其视为深度学习神经网络领域的目标检测问题,基于深度学习的目标检测算法十分丰富,有YOLO[1-2]系列算法,也有Fast R-CNN[3]等。这两大类算法分别侧重于速度和精度,因此在实际应用中应当综合考量。对于戴口罩的人脸识别,之前医学领域曾进行过相关研究[4],现阶段百度、商汤科技等AI智能研发公司相继推出相关的系统,其核心思想在于通过在传统的人脸识别网络中加重分析人眼眉部分的特征或者对口罩遮挡部分的人脸进行重构从而增加人脸在有口罩遮挡情况下识别的正确率。
本文中提出的门禁系统,通过OpenCV采集到的实时图像,输入进基于YOLOv3-tiny[5]的口罩佩戴检测网络和基于ResNeSt50[6]网络的戴口罩人脸识别网络,达到检测用户是否佩戴口罩以及身份识别的效果。为了验证系统的实际应用可能,本文将其以python语言实现并应用到边缘智能设备Jetson TX2上,搭配温度传感器,形成了一个功能完备可以实际使用的装置。
综上,对于疫情形势下的门禁系统的设计问题,本文方法的优势和创新在于:使用ResNeSt50神经网络通过预训练将特征点集中于眼眉部并修改神经网络中的分类器从而实现戴口罩的人脸识别;用高速的边缘智能设备搭载功能完整的系统,且多功能间相互配合。
本文采用基于YOLOV3-tiny算法进行人脸上的口罩检测。经过硬件设备上的摄像头采集到初始图像,这一图像经过预先训练的YOLOv3模型后能高效地检测出人脸并用检测框标出适用对象的面部区域在采集到的图像中的位置。并设置不同的检测框区别戴口罩和不戴口罩的人脸(如不同的颜色,方框上标注不同的信息)以达到口罩佩戴检测的效果。在本文中以YOLO网络的独特网络结构和YOLOv3-tiny的改进之处来介绍算法。
与前两代YOLO网络相比,YOLOv3主要在分类网络和多尺度预测两大方面进行了改进。首先是基础分类网络Darknet-53[7],比先版本[1-2]引入了新的残差模块,并通过将卷积层增加至53层来加深网络。在Residual结构[8]的作用下,梯度的传播得到控制,减小了训练53层卷积网络的难度。其次是多尺度预测的方法,根据图像卷积运算的特性,可以认为低层具有准确的目标位置信息,但是与特征相关的信息偏少;而高层的特征语义信息丰富,目标的位置信息却在不断地卷积中被混淆。因此YOLOv3网络综合了低层和高层信息的优点,分别提取了位于低层,中下层和中间层三个不同尺度的特征图。每当图像执行到采集尺度特征的位置时,都会将一部分信息进行处理后作为结果的一部分,另一部分信息进行升采样后与深层特征图融合继续更深层的运算,但在最后的中间层为例外,此时无须保留信息继续深层运算,只需将之前融合的特征图卷积输出即可。这两点改进使得yolov3网络在精度上有显著的提升,并且对于小目标检测的性能大大提升。
在本文中采用的YOLOv3-tiny则是在此网络上稍加修改,其结构图如图1所示。减少了一些特征层,只保留了26*26和52*52两个尺度,因此将网络的大小压缩了许多,有更快的预测速度,且便于部署。在本文想要解决的问题中,能够检测是否佩戴口罩的门禁系统需要有极快的反应速度且希望将其部署在嵌入式硬件系统上,因此YOLOv3-tiny很好的适用于门禁系统对于人是否佩戴口罩的快速响应。
图1 YOLOv3-tiny 网络构架
本文采用基于ResNeSt50网络的戴口罩人脸识别算法。在经过硬件设备上的摄像头采集到初始图像,并对这一图像在经过的YOLOV3-tiny模型判断用户是否佩戴口罩后。将这一步骤预测出的检测框范围内的图像截取作为鉴别身份模型的输入。通过将人脸识别主要特征采集点集中在人眼眉部的方法提取戴口罩情况下的人脸信息。将人脸的图像输入进预先训练好的模型后将输出的特征向量与数据库进行比对以实现人脸识别。在本文中,通过ResNeSt50以及具体的人脸识别流程来介绍模型。
ResNeSt(Split-Attention Networks)是当前深度学习领域内新型网络结构之一。其核心思想是对最经典的卷积神经网络ResNet的两种改良版网络ResNeXt[9]和SENet[10]中的重要优势进行融合,其主要优势在于相比其他的ResNet系列网络不需要增加额外的计算量而影响工作效率,且网络具有分组卷积以及注意力机制两大重要优势的同时,在图像分类的实际应用中也能取得很好的效果。应用在本文中的则可以让模型在训练的过程中自动将采集的特征点聚焦在眼眉部。而在本文对ResNeSt50的应用中,改进了原本ResNeSt结构,完成神经网络的训练并进入应用阶段时,将最后具体将特征向量处理成具体类别的全连接层去除,即神经网络中不再有分类器。神经网络在处理输入图像时只输出经过模型运算后的特征向量而不是具体的类别。这是因为在做戴口罩的人脸识别过程中,如果由神经网络来完成身份的判别,一旦人脸识别设备面向的用户范围发生变动,则需要将整个网络重新训练达到效果。经过本文中所讲述的修改,系统只需要将用户的实时图像与数据库中的图像经过模型生成的特征向量进行比对即可实现身份的认证,并且修改数据库的过程更加方便快捷且具有实用性。
图2 人脸识别模型框架
首先需要制作人脸信息数据库。经过对ResNeSt50的训练,得到将输入图像转化为特征向量的模型。作为门禁系统仅让系统能够识别给定范围的人脸识别即可,无须要正确识别出我们用于训练的数据集中全部的人脸。因此提取想要识别的人员戴口罩的图像每人各一张,经过模型的运算将每个人提供的样本图像作为模型的输入,得到每个人对应的特征向量。将每个人的身份信息和对应的特征向量文件用于读取。在人脸识别的过程中需将实时摄像头提取到的图像经过同样的模型得到特征向量,并与字典中的特征向量进行一一比对,当向量之间的相似度大于某一阈值,则判定为人脸识别成功。
YOLOv3-tiny检测口罩佩戴时,会产生一个预测框,该预测框会框住待检测者的人脸。在此预测框的基础上进一步裁剪,得到只包含人脸的截取图像。应用Retinaface算法[11]检测该图像中人脸的左眼坐标与右眼坐标,根据这两个坐标进行人脸对齐,输入到训练好的ResNest50网络进行特征提取。最后将提取出的特征向量与数据库中的各特征向量计算余弦相似度。若提取出的特征向量与数据库中的各特征向量的余弦相似度均小于某一阈值时,则判断当前来访者为陌生人;反之则取其中数据库中与当前来访者的特征向量的余弦相似度最大的特征向量所对应的人作为身份判别结果。
本文采用余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角对应余弦值是1,其他任何角度的余弦值都不大于1;并且其最小值是-1。、两个向量之间的角度的余弦值可以确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;相似度的运算结果与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。其表达式如下,其中的iA和iB表示向量A和B之间的各个分量。
对于人脸在不同环境和条件下展现出特征向量的数值大小可能会有所不同,但人脸在不同情况下的特征向量在超球面面所呈现的角度是大致不变的。因此本文选择余弦相似度来比对实时读取到的人脸图像的特征向量和数据库中的特征向量。
对于用于口罩检测模型的训练,口罩检测的网络需要大量佩戴口罩和未佩戴口罩的人脸图片。在本文选用了武汉大学国家多媒体软件工程技术研究中心所构建的RMFD数据集[12]。对800张戴口罩和未佩戴口罩的人脸图片进行了角度旋转,水平翻转,颜色抖动等数据增强操作后,得到了3200张的训练集。同时选用了1200张戴口罩和未佩戴口罩的人脸图片图片作为测试集。在训练集和测试集中均含有两种标签:masked和unmasked。
图3 数据集示例图
训练参数如下:
表1 YOLOv3-tiny 训练参数
在ResNest50的训练中使用了三个数据集,分别是RMFD数据集,FaceMask CelebA数据集和Umdfaces数据集。其中,RMFD数据集包括10000人的约50万张戴口罩和不戴口罩的人脸图,FaceMask CelebA含有10177人的约20万张戴口罩的人脸图片,Umdfaces有8277人的367888张人脸图片。
进行ResNest50模型的训练的过程中。口罩人脸数据集的数据相对较少,直接用口罩人脸数据集训练网络会导致模型训练速度较慢,且最终训练得到的模型性能较差,容易出现过拟合问题。因此,本文先使用普通的人脸数据集Umdfaces对ResNeSt50模型进行预训练,让模型更加适应人脸的特征提取方式之后再使用RFMD数据集进行正式训练。
训练参数如下:
表2 ResNeSt50 预训练参数
表3 ResNeSt50 训练参数
由于口罩检测的功能可以视为一个二分类问题,即识别到的人脸是戴口罩的还是未戴口罩两种中的哪一种,对于二分类问题,一共可出现四种预测情况:
表4 四种预测情况
其中TP,TN是预测正确的样本,FP,FN是预测错误的样本,本文通过对模型计算精确率和召回率来评估模型的分类性能。
精确率表示样本中被正确判定为正的正样本数占所有被判定为正的样本数的比例,这是从预测结果的角度评估模型性能,可用来衡量模型的分类能力,计算公式如下:
召回率表示样本中被正确判定为正的正样本数占原来样本中正样本数的比例,这是从原来样本的角度评估模型性能,可用来衡量模型的检测能力,计算公式如下:
由图4可知,模型的准确率,召回率随训练次数总体均呈上升趋势,并且最终收敛在0.9和0.95以上。由此可知,模型具有很好的检测能力,漏检情况极少,且对是否佩戴口罩的分类能力很强。
图4 准确率、召回率曲线
最终训练得到的ResNeSt50网络在测试集上有99.62%的准确率,在测试集上有81.48%的准确率,通过CAM热力图可以观察到经过训练的网络主要提取眼眉部的特征点。
图5 训练前后模型的特征提取点
考虑到实际进行1:N模式的人脸识别的时候,是通过计算人脸图片间的相似度来确认身份的,ResNest50网络只作为该过程的特征提取部分,故其用于身份识别的具体性能需要计算人脸识别算法的评价指标值来评估。本文选用人脸识别传统的TAR和FAR衡量模型的效果。
TAR(True Accept Rate)表示正确接受的比例,FAR(False Accept Rate)表示错误接受的比例。计算TAR和FAR需要将两张人脸图片组合在一起凑成一对。设一共有N对图片,这些图片中既有两张图片为同一个人的图片对,又有两张图片不为同一个人的图片对。称前者为正对,后者为负对。正对的总数为NT,负对的总数为NF,保证正对的数量和负对的数量近似相同。则用这N对图片对来对模型进行测试时,模型一共会做出N次判断。用T表示图片对为正对且系统判断确实为同一人的次数,用F表示图片对为负对但系统判断为同一人的次数。那么,TAR与FAR的计算公式如下:
通常希望TAR越大越好的同时FAR也也不能超过一定的数值,这代表漏检率很低同时错检率很低。设定一个阈值,当图片对的两张图片的相似度大于该阈值时,则判断为正对;当图片对的两张图片的相似度小于该阈值时,则判断为负对。
在确定阈值时, 我们首先去确定令FAR=0.1/0.01/0.001的阈值及所对应的TAR的值,测试结果如下:
表5 人脸识别网络在不同阈值下的性能
因此在实际部署系统的过程中,应当根据实际应有需要选择侧重漏检率还是错检率而相应的调整阈值,从而可以实现更加广泛地应用场景。
本项目根据边缘智能的核心思想设计了一个款以深度学习为基础能实现口罩佩戴监督和测温功能的口罩佩戴情况下的人脸身份识别门禁系统。该系统使用卷积神经网络ResNest50作为身份检测模型,YoloV3-tiny作为口罩检测模型,两个模型并行运行,同时进行口罩佩戴检查与身份检测。以NVIDIA Jetson TX2作为核心硬件平台,以TX2上自带的摄像头实时采集公共场合入口的视频作为数据输入,以MLX90614红外测温模块测量体温。
目标进入设定距离范围内后,同时检测目标是否佩戴口罩、鉴别目标的身份、测量目标的体温。只有在目标佩戴口罩,温度正常(体温<37.3℃)且与身份被正常识别且无风险记录时,该门禁系统才能得出允许目标进入的结论,上述三个条件不同时满足时禁止目标进入。
整个系统涉及到三大主要功能:一,运行YOLOv3-tiny网络检测用户是否佩戴口罩;二,TX2从红外线测温模块进行数据传输,获取温度数据;三,运行ResNeSt50网络进行人脸身份识别。三个功能的工作量大小不同,运行速度也不同,因此若在同一个进程中依次执行这三个功能,则每个功能的运行速度都会受限于其他功能的执行速度,从而导致整个系统卡顿,无法实现实时的检测,而且也无法发挥TX2的优秀算力。
基于边缘硬件智能平台强大的运算处理性能,能够满足多线程执行的硬件需求,使用python中的thread模块,创建三个线程并行执行。其中第一个进程进行串口通信,接收来自传感器得到的体温并保存。在第二个进程中运行YOLO神经网络,同时在打开视频流的时候,若检查到人脸,则将当前截取后且经过对齐的人脸图片保存到本地,同时保留存储地址。在第三个进程中运行ResNeSt50网络,将进程二中所存储的人脸图片输入到ResNeSt50网络,得到特征向量后进行身份判别,并将判别结果反馈给进程二,实时显示在进程二中所绘制的矩形框中。三个进程在时间上互不干扰,三个功能都得以流畅高效的运行。同时三个进程之间也存在必要的信息互通与协作,从而构成一个完整的系统。
将上述系统部署到边缘智能设备,可以得到集口罩检测,戴口罩的身份识别以及体温测量一体化的系统。实际应用效果如下图所示。
图6 系统的实际应用效果
在本系统中通过检测框的颜色和界面上的提示文字在提示用户是否佩戴口罩,并且在检测框上方标注出测量到的体温和身份信息。
为了解决疫情时期对于门禁系统独特的要求,既要要求用户要佩戴口罩体温正常,还要求用户在免拆除口罩的情况下进行认证。本文提出了基于YOLOV3-tiny的深度学习算法用于口罩检测,同时还使用基于ResNeSt50神经网络将特征采集点集中在人眼眉部附近,改进原本的网络分类器实现身份认证,最后将这二者功能和测温功能使用多进程技术同时部署在嵌入式硬件设备上。利用公开的数据集对模型进行训练和测试,最终实验结果显示口罩检测模型和戴口罩的人脸识别模型都有较高的精度且具有应用价值。
但本文设计的系统仍然有改进的空间,当前身份认证的过程需要的响应时间会随着数据库增大而增大,这一特点将会使得在数据库极其庞大时降低其使用效率。此外,该系统还可以通过上传异常用户信息实现多机互联,更进一步提高其在防疫工作中的使用价值,是未来进一步改良的方向。