0 引言
随着计算机图像处理技术的发展,基于计算机视觉的目标识别在特征分析和目标监控等领域具有广泛的应用价值。人脸识别是图像处理中的一个重要研究领域,作为一种身份识别手段,因其直接性和灵活性等优点,有着广阔的市场应用前景。人脸识别是通过人脸图像确定人脸身份的过程,其步骤包括人脸检测、人脸对齐、人脸特征提取和特征匹配4个过程。近年来,随着视频监控的大量普及,基于视频的人脸识别技术越来越受到各界的重视。传统人脸识别算法围绕主成分分析(Principal Component Analysis,PCA)、线性判别分析(Linear Discriminant Analysis,LDA)和局部特征分析(Local Feature Analysis,LFA)等展开,但这些算法利用到的特征为图像浅层的特征,其识别效果容易受到姿态转动、光照变化、遮挡等因素的影响,存在着较大的富的信息,但视频的识别难度大,实时性强,对算法和设备都有着更高的要求。
近年来,随着人工智能的快速发展,深度学习在图像识别领域取得了良好的效果。卷积神经网络(Convolutional Neural Networks,CNN)通过模拟人的大脑结构,构建多层非线性映射关系,拥有很强的非线性特征学习能力,能够从大量样本中学习到高维语义特征和深度特征。鉴于传统人脸识别算法发展遇到了瓶颈,2014年,Yaniv Taigman等人基于深度学习提出DeepFace,DeepFace使用CNN来提取人脸深层抽象语义特征,利用特征的余弦相似度来比较人脸相似性,最终LFW(Labeled Faces in Wildy)上的准确率达到了95%,取得了很好的识别效果。2015年,针对CNN网络在达到一定深度后,网络梯度消失的问题,Kaiming He等人提出了残差网络(Residual Neural Networks,ResNet)],ResNet与VGGNet(Visual Geometry Group Networksy)、GoogleNetf)等网络相比,拥有更深的网络结构,可达到150层,学习到的特征也更加深层抽象,分类能力也更强。2016年,Kaipeng Zhang 等人提出了MTCNN(Multi-Task CascadedConvolutional Neural Networksy)人脸检测算法,该算法使用三个级联CNN网络来检测人脸位置和关键点,检测人脸时由粗到细,不仅有很好的检测效果,而且速度很快,在NvidiaTitanX上的检测速度达到了99FPS。同时,MTCNN算法通过将人脸图像对齐,提供了标准统一的人脸图像,促进了后续人脸识别的研究。2017年,Weiyang Liu等人提出了SphereFace算法,该算法针对损失函数进行了改进,提出的新的算法能够让特征学习到更可分的角度特性,该算法使用64层的深度网络训练,最终在LFW上的测试精度达到了99.4%,MegaFacel1上的准确率达到了72.4%。而后,FengWang等人在继续针对损失函数进行改进,相继提出了NormFacel以及AMSoftmax(Additive Margin Softmax)算法。2018年,Jiankang Deng等人提出了ArcFace(AdditiveAngular Margin Loss)算法,ArcFace算法更加注重在角度空间里对类别进行区分,算法使用了50层的ResNet 进行训练,LFW上的准确率达到了99.8%,MegaFace的准确率达到了97.6%,是目前MageFace上排名第一的人脸识别算法。相比较于传统的人脸识别算法,基于深度学习的人脸识别算法在图像人脸识别任务中取得了很好的结果,其识别精度在百万级数据量的测试集上达到了97%,已经能够满足大多数场景下实际使用需求。但这些算法在实际部署的时候,需要使用支持大量计算的服务器,具有很高的成本。近年来,以手机为代表的嵌入式设备得到了飞速发展,其性能日新月异,嵌入式系统以其功能齐全、安全可靠、价格低廉、体积小、功耗低等优势,以贴近生活、以实际应用为核心的特点,越来越广泛地应用了到各个领域。Mali-GPUl2]是ARM公司推出的高性能移动图形处理器,主要应用于基于ARM体系结构的移动设备上。与桌面级GPU一样,Mali-GPU专为执行复杂的数字和几何计算而设计,迎合了深度学习对大量数字计算的需求。不同的是,Mali-GPU主要针对移动设备,能耗更低,虽然计算能力相对较弱,但其移动便携性却是桌面级GPU无法比拟的。
随着MobileNet,ShuffleNet等轻量化网络的提出,基于嵌入式系统的深度学习研究也逐渐成为热点。轻量化网络的提出旨在精简网络参数,减少网络计算的复杂度,但这样会在一定程度上损失网络的识别精度。2017年,陈天奇等人发布深度学习编译器TVM(End to End Deep Learning Compiler Stack),TVM是一个端到端优化堆栈,该端到端优化编译器堆栈可以降低和调整深度学习工作负载,能够适应多种硬件后端,针对不同的硬件设备生成底层优化代码。在ARM平台上,TVM能够同时实现CPU和GPU上的优化加速和负载均衡,这使得嵌入式设备也能在一定程度上执行复杂计算。本文从实际的部署成本的角度出发,针对ARM平台设计了可以实时识别人脸的算法,同时使用ResNet来提取人脸特征,其识别精度能够达到服务器级别的水平。首先,本文在MTCNN算法的基础上进行改进,设计了一种能够实时检测并追踪人脸的算法,通过对人脸进行追踪,可以减少提取人脸特征的频率,从而达到更快的运行速度。然后,在ARM平台上,本文使用了ResNet来提取人脸特征,并用Mali-GPU来对人脸特征的提取加速。实验表明,本文基于ARM平台设计的人脸识别模型能够满足实时识别需求,同时也能达到很高的识别精度。
1 基于深度学习的人脸识别框架
1.1 人脸检测
人脸检测是在图像中找到人脸并返回人脸框大小和位置坐标信息的过程。在本文中,使用MTCNN算法对人脸进行检测。MTCNN是一种将多任务级联卷积神经网络用于人脸检测和对齐的人脸检测算法。该算法总共分为三个阶段:第一阶段,对图像在不同尺度上生成若干候选框,通过一个简单的CNN网络PNet(Proposal Net)来预测所有候选框的概率,然后对所有候选框非极大值抑制(Non-Maximum Suppression,NMS),消除多余候选框;第二阶段,使用一个较为复杂的CNN网络RNet(Refine Net),对第一阶段生成的候选框位置和大小进行回归校正并预测其概率,然后对所有候选框NMS筛选:第三阶段,使用一个更为复杂的CNN网络ONet(Output Net)对第二阶段的预测框位置和大小进一步回归校正和NMS筛选,并为每个预测框生成5个人脸关键点,5个人脸关键点分别为两只眼睛、鼻尖和两边嘴角。MTCNN算法流程如图l所示。
人脸对齐是在图像中检测到人脸后,对人脸图像进行处理的过程,处理后的图像能够更好地被识别。本文中,根据MTCNN检测到的5个人脸关键点,对原始图像仿射变换处理,对人脸部分图像的大小和角度进行调整,调整后的图像像素大小为112×112。人脸对齐如图2所示。
人脸特征提取的目的是为了得到人脸中的深层抽象信息,这个抽象信息能够将不同的人区分开,进而实现对人脸的判别。本文运用深度学习方法来提取人脸特征,采用了ResNet作为人脸识别网络,并使用ArcFace人脸识别算法来训练识别网络。
ArcFace Loss是一种用于人脸识别的损失函数,基于该损失函数训练得到人脸识别算法ArcFace。ArcFace的思想和AMSoftmax有一定的共同点,不同点在于:ArcFace在角度空间中最大化分类界限,而AMSoftmax是在余弦空间中最大化分类界限。ArcFace Loss基于传统的Softmax Loss修改而得到,公式1是Softmax Loss损失函数。
将公式(1)中的偏置b,设置为0,然后权重W和输入x的内积用下面式子表示。
对权重W,使用L2正则化处理,使得||Wj||=1,得到公式:
然后对输入Xi也用L2正则化处理,同时再乘以一个缩放系数s;另一方面将cosθyi,用cos(θyi+m)替换,这部分是ArcFace的核心,m为附加角。于是得到ArcFace算法的损失函数:
ArcFace算法的整体流程如图3所示。
提取到人脸特征后,需要在特征库中匹配特征,以找到对应的身份信息。普遍的方法是计算目标人脸特征与特征库中所有特征的相似度,根据相似度找到最符合的特征。本文中使用余弦相似度来表示特征的相似性,对于特征向量m和特征向量n,其余弦相似度为两特征向量夹角a的余弦值:
2 主要方法
2.1 总体系统结构设计
深度学习模型的训练需要大量的计算,通常需要具有强大计算能力的服务器来训练。本文中的模型使用配备英伟达GPU的服务器来训练,模型训练完成后,应用到嵌入式系统中。ARM端系统总体设计如图4所示。
在本系统上,摄像头负责采集视频,交给CPU实时检测并追踪人脸;CPU检测到人脸后,若GPU处于空闲状态,则将检测到的人脸图像对齐后传送给GPU,在GPU上提取人脸的特征信息,CPU继续检测并跟踪人脸;GPU上人脸特征提取完成后,到数据库中,与事先提取好的特征库进行相似度匹配,若匹配到相应身份信息,则交由CPU实时追踪该目标,并不再对该目标进行识别。当一个目标被正常识别后,将识别结果发送到远程服务器,进行相应的业务逻辑处理。由于提取人脸特征需要较大的资源开销,系统无法对每帧检测到的人脸都进行识别,所以本文通过对人脸的实时追踪,对同一个目标只需要识别一次,避免识别每帧图像,进而提高系统运行的效率。同时,系统充分利用硬件设备的计算资源,使用CPU来检测追踪人脸,GPU提取人脸特征,CPU和GPU并行运行,互不干扰,系统运行起来流畅稳定。
2.2 改进MTCNN用于人脸追踪
本文中,人脸追踪是对检测到的人脸持续标记的过程,即同一个体的人脸在不同的视频帧中,具有相同的标记。本文对MTCNN算法进行了改进,使得MTCNN算法能够适用于人脸追踪。原始的MTCNN算法包含了三个级联CNN网络,这三个级联网络用于对人脸位置和关键点进行检测,对于视频序列,MTCNN算法不能实时追踪每个目标。在MTCNN三个级联网络的基础上,本文通过添加第四个CNN网络FNet(Feature Net)来实时提取每个目标的特征信息,通过匹配视频帧之间目标的特征相似度,实现对每个目标的实时追踪。
FNet 基于MobileFaceNet[24]进行设计。MobileFaceNet是一个轻量化的CNN网络,其中采用了可分离卷积(Depthwise Separable Convolution)来精简网络参数,使得网络更加适用于移动设备。同时,MobileFaceNet还在MobileNetV2的基础上,使用可分离卷积层代替全局平均池化层(Global Average Pooling),使网络可以学习不同点的权重。FNet在MobileFaceNet的基础上,精简了网络结构,并加入了通道混洗(Channel Shuffle)策略,通道混洗能够加强通道之间的信息流通,增强网络的信息表达能力。FNet网络结构表1所示。
人脸追踪算法流程
FOR视频中的每帧DO
MTCNN算法检测每帧图像
取出所有检测到的人脸,resize为112×112
FNet提取每帧人脸的128维特征
FOR每张人脸DO
计算与上一帧图像中所有人脸特征的相似度,并取最大值IF最大相似度>0.6DO
匹配相应的两张人脸为同一目标
ELSE DO
将当前人脸作为新目标
2.3 ARM平台下使用ResNet提取人脸特征
标准的深度网络一般需要部署在高性能服务器或者桌面级计算机上,而对于计算能力弱的嵌入式设备,通常使用轻量化的深度网络,例如MobileNet,ShuffleNet等。轻量化的网络虽然对设备性能要求更低,但识别精度也比较低。为了使ARM平台上人脸识别精度得到更高层次的提升,本文将ResNet应用到嵌入式设备上。
本文中使用了三个具有不同网络深度的ResNet 进行对比实验,其网络结构如表2所示。
Mali-GPU是ARM平台下专门用于图形和数字计算的处理器,相比较于ARMCPU,Mali-GPU的数值计算能力更强。本文基于TVM进行开发,使用Mali-GPU来完成ResNet复杂的网络运算,其速度比使用ARMCPU更快,同时不再占用CPU,CPU可以更好地用来检测和追踪人脸,系统整体运行速度更快。
为了利用Mali-GPU,TVM底层基开放运算语言(Open Computing Languege,OpenCL)进行编译,并使用开放基础线性代数子程序库(Open Basic Linear Algebra Subprograms,OpenBLAS)进行网络运算。框架对外提供统一的PythonAPI,方便编程开发。
3 实验结果分析
3.1 实验设置及数据
本实验训练模型的服务器运行64位的CentOS系统,版本为7.5,配备了IntelXeonE52620v4处理器,64GB内存,4张TeslaV100显卡,每张显卡显存32GB。
本系统最终运行在ARM平台上,设备为瑞芯微RK3399开发板,开发板配置如表3所示。
训练数据集为经过人脸对齐以及降噪处理之后的微软名人数据集MS-Celeb-1M(MicroSoft One MillionCelebrities in the Real World),处理之后的训练集包含了85164个不同个体共记约380万张人脸图像。
数据的校验即判断每两张人脸图像是否为同一人。本文使用的校验数据集为LFW、CFP(Celebrities in Frontal Profile)和AgeDB(Age Database)。其中,LFW校验集包含了6000对人脸图像;CFP使用包含正面和侧面的校验数据CFP-FP(CFP with Frontal-Profile),共计7000对人脸图像,同一人和不同人图像的分别有3500对;AgeDB使用年龄差距为30岁的数据组(AgeDB-30),分别包含3000对相同人人脸和不同人脸图像,共计6000对。
测试数据集为MegaFace Challenge1。MegeFace的测试分为干扰数据集Distractors和测试数据集FaceScrub,干扰数据集包含了690572个不同个体约100万张人脸图像,测试数据集包含了530个不同个体约10万张人脸图像。为了得到MegaFace最终测试结果,需要用待测试的模型提取所有干扰集和测试集人脸图像的特征,然后由MegaFace工具包根据所有测试人脸图像特征数据得到最终测试精度。
本实验参数设置如下:使用ArcFace算法训练 ResNet模型,缩放系数s设置为64,附加角度m设置为0.5;ResNet输出特征维度设置为512维。
3.2 结果分析
在人脸追踪当中,为了验证FNet的有效性,本文使用Softmax 损失函数训练MobileFaceNet和FNet各14万次,训练过程中初始学习率设置为0.1,batch size设置为256,使用两张显卡训练。其效果对比如表4所示。
通过两个网络的对比分析,可以看到,FNet 在精度上要比MobileFaceNet略低,但差距较小;与MobileFaceNet相比,FNet的模型大小减小了45%,速度提升了75%,有较大提升。由于人脸追踪实时性强,对FNet速度要求高。FNet在速度上满足实时要求,同时在精度上也接近MobileFaceNet。
为了说明人脸追踪的效果,本文对算法在单目标和多目标条件下进行了测试,测试数据为网络上采集的包含人脸的视频图像,然后每隔2秒抽取一张图像作为效果图,如图5、图6所示。算法每检测到一新目标,会对其从0开始编号。
从图5和图6中可以看到,在单目标和多目标条件下,同一目标的序号一直保持不变,说明算法准确地追踪到了该目标。算法在单目标和多目标的条件下具有良好的追踪效果。
本文通过实验对MobileFaceNet和具有不同深度的ResNet的识别效果进行了对比,训练中batch size 统一设置为128,使用4块GPU训练,初始学习率设置为0.1。ResNet均使用ArcFace算法训练14万次。由于MobileFaceNet直接使用ArcFace算法训练难以收敛,所以MobileFaceNet先使用Softmax损失函数训练14万次,然后使用ArcFace算法训练20万次,效果对比如表5所示。
对四个模型分别为Rockchip 3399 ARMCPU和Mali T860GPU进行耗时测试,实验结果为2000张人脸图像下的平均耗时,结果如表6所示。
通过对四个网络的精度和耗时对比可以看到,得益于轻量化的网络结构,MobileFaceNet在模型大小和耗时优于ResNet,但在识别精度上,ResNet要优于MobileFaceNet;随着网络的加深,ResNet的识别精度有明显的提高;四个网络在ARMGPU上的耗时都比ARMCPU上低,说明使用ARMGPU来加速人脸特征提取行之有效。
为了说明整套算法的实时性,本文在ARM平台上对不同算法组合进行了速度测试。人脸特征提取采用ResNet-50,其对比如表7所示。
首先测试了MTCNN算法的速度。原始MTCNN算法中,最小检测尺度min size设置为20px,而本文中设置为100px,通过增大最小检测尺度后,算法速度得到了大幅提升,同时,算法过滤掉了容易被误检和不易识别的小目标,增强了算法的鲁棒性。MTCNN检测完图像后,直接使用ResNet提取人脸特征速度会很慢,原因是提取人脸特征过程比较耗时,频繁地提取人脸特征会消耗大量时间和计算资源,使算法变慢。MTCNN加上人脸追踪后,人脸被识别后会转为追踪,不需要频繁地提取人脸特征,算法的速度得到了很大程度上的提高,特别是使用GPU加速后,特征提取在GPU上进行更快,而且不再占用CPU,CPU可以全部用来检测人脸,最终速度接近实时水平。
4 结语
本文基于瑞芯微开发板设计和实现了实时人脸识别系统。使用深度学习的方法来检测人脸和提取人脸特征。首先,本文在MTCNN算法的基础上添加了一个轻量化的CNN网络FNet来分辨每个目标,实现了对每个目标的实时追踪;其次,本文在嵌入式系统上采用了ResNet来进行更深层的特征提取,提高了算法的识别率;最后,本文在开发板上使用了Mali-GPU来对人脸特征提取加速,并实现了CPU和GPU的负载均衡。实验结果表明,本文方法在嵌入式系统上达到了较快的运行速度,并取得了比使用MobileFaceNet更好的识别率。
暂无评论内容