基于轻量级网络的实时人脸识别算法研究*
2020-02-20汪海涛
张 典,汪海涛,姜 瑛,陈 星
昆明理工大学 信息工程与自动化学院,昆明 650500
1 引言
人脸识别是一种重要的身份识别方式,是计算机视觉领域中的重要研究方向之一。由于人脸识别被认为是用户体验最为友好的生物识别方式,使得其在设备解锁、移动支付、应用认证等移动和嵌入式应用中有了广泛的应用。近年来,由于各大机构在网络上发布的大型人脸数据集,以及深度卷积网络在人脸识别技术上的研究取得了巨大的成功,使得深度卷积网络可以使用大量数据来学习数据中表征人脸的最佳特征。这让基于深度卷积网络的人脸识别算法实现了非常高的准确度。
由于有先进的网络结构和判别式训练方法,深度卷积网络将人脸识别的性能提高到了前所未有的水平。但是目前的研究重点大多在于如何构建层数更深、宽度更广的神经网络,这样会导致神经网络结构庞大。现有的高精度人脸识别模型都是建立在这样的大型深度卷积网络模型之上的,同时这种模型需要大量的计算资源,使得网络只能在性能高的处理器上运行,这不利于模型移植到移动和嵌入式设备中。在实际的使用场景中,一些移动和嵌入式设备中需要离线进行身份验证,如手机解锁、车载身份识别中,需要在有限的计算资源里实现精准的面部验证,同时还需要模型精简和迅速,因此神经网络的轻量化对移动平台设备的使用,有很好的工业价值。
轻量化神经网络需要考虑到三个维度:参数少、速度快和精度高。通过对现有的SqueezeNet、Moblie-Net V1、MobileNet V2、ShuffleNet、ShuffleNet V2等高效神经网络架构[1-5]进行研究,根据实验,与最先进的大型卷积网络生成的结果相比,它们只能达到非常低的准确度。
本文分析了常见的深度神经网络用于人脸识别时的缺点,并专门设计了Lightfacenet轻量级神经网络来克服这个缺点。这是一组非常高效的卷积神经模型,专为在移动和嵌入式设备上实现高精准度的实时面部验证进行设计。通过在现有的轻量级神经网络中引用了基于挤压和激励结构[6-7](squeeze and excitation)的轻量级注意力模型,为网络增加更多的非线性结构,可以使网络能更好地拟合通道间的复杂相关性,并使用Swish激活函数代替ReLU以提高神经网络的精度。在卷积网络的结尾处使用全局深度卷积层输出判别特征向量,使用交叉熵损失函数在MSCeleb-1M数据集上进行训练,并用中心损失函数调优,使得该网络的精度达到现有的大型卷积神经网络的水准。
本文提出的神经网络Lightfacenet,其参数量小,在相同的实验条件下,在LFW(labeled faces in the wild)、AgeDB等公有数据集上,对Lightfacenet与MoblieNet V1、MobileNet V2、ShuffleNet、ShuffleNet V2和Resnet-50等深度卷积神经网络进行对比实验。实验表明Lightfacenet拥有轻量级神经网络高效性的同时,也有着媲美大型卷积网络的精度。
2 原理与方法
本文主要研究的是基于轻量级深度卷积网络的人脸识别算法。通过调整深度神经网络结构使模型在速度和精度上取得平衡,这是在近几年中积极发展研究的领域。例如,SqueezeNet通过使用瓶颈结构设计了一个小巧的网络(参数量为125万),并在ImageNet上实现了AlexNet(参数量为6 000万)级别的准确度,同时其网络参数减少98%。MobileNet V1使用深度可分卷积模块构建轻量级神经网络,在细粒度识别中达到了Inception V3的效果,并且大大减少了计算量和尺寸。ShuffleNet使用逐点群卷积和通道混洗的方式降低计算成本,实现了比MoblieNet V1更高的效率。MoblieNet V2中引入了倒置残差模块,改善了模型性能。ShuffleNet V2使用了Channel-Split模块,使得模型的性能进一步提高。
2.1 通用轻量级神经网络在人脸识别应用中的弱点
在这些通用的轻量级卷积神经网络中都存在着全局池化层,比如SqueezeNet、MoblieNet V1、Mobile-Net V2、ShuffleNet、ShuffleNet V2等。通过研究表明,对于人脸验证和识别,不包含全局池化层的卷积网络比包含全局池化层的卷积网络更加精确。
如图1所示,在特征图进行全局池化前,可以得知人脸图像中心区域的感受野(receptive field)比边缘角落区域的感受野重要。在进行全局池化后,特征图所有的位置权重平均化,不区分位置的重要性,这样不符合真实的情况。使用全局深度卷积替换全局池化进行计算时,对于固定的空间位置,所有通道中的全局深度卷积的权重信息可以象征不同位置的空间重要性,这样的计算方式可以使神经网络重点学习图像中重要的特征。
Fig.1 Flow chart of lightweight convolutional neural network图1 轻量级卷积神经网络计算流程图
本文对神经网络中卷积核的感受野进行分析,通过级联神经网络来检测图像的人脸和面部特征点,并用面部特征点通过相似变换对齐矫正人脸图像。将对齐面部图像进行归一化处理后,使用以MoblieNet V2为主体结构的轻量级网络提取特征向量,在全局池化层合并特征之前,最后一层卷积层输出的特征图是具有7×7的矩阵特征图。尽管在角落的特征单元与中心位置的特征单元的感受野具有相同的尺寸大小,但是它们位于输入图像的不同位置。如图1所示,在中心位置的感受野特征点输出结果要比角落处的感受野特征点输出结果的影响大得多,其特征图的影响力分布近似于高斯分布。特征图在角落处的有效感受野要明显小于中心处感受野,因此角落处的特征点包含的信息要少于中心位置,不同位置的特征点提取到的面部特征也就有了不同的重要性。同时轻量级神经网络的卷积末端并不适合直接应用于人脸特征提取,因为它具有高达62 720维的特征尺寸,这使得网络会学习到很多影响力不大的特征,因此在轻量级神经网络的末端加入全局池化层虽然效果不好,但也是一种减少特征维度,使特征更加精简的方式。对以上的问题进行了研究,有两种方式解决这个问题,一种是用全连接层代替全局池化层,但是这会为网络模型增加大量的参数,即使是128维,全连接层也会给网络带来将近800万个模型参数,这显然是不符合本文要实现人脸识别的神经网络轻量化的目的,因此本文选择了另一种,使用全局深度可分卷积替换全局池化。
2.2 基于轻量级神经网络在人脸识别应用中的弱点改进的方法
为了处理不同位置具有不同重要性的特征图,本文使用了全局深度卷积替代轻量级神经网络中的全局池化层,全局深度卷积层本质上是深度卷积层,特殊之处在于其卷积核的大小与输入的大小相同,padding为0,stride为1,全局深度卷积如图2所示。
Fig.2 Global depth separable convolution图2 全局深度可分卷积
图中,F是W×H×D的特征图,K是W×H×D的深度可分卷积核,公式的计算结果如下:
当轻量级神经网络的最后一层使用7×7×1 280的全局深度可分卷积后,会输出1 280维的面部特征向量,其计算成本为62 720次,使用全局深度可分卷积后将网络通过MS-Celeb-1M数据集以角度损失函数训练,在LFW和AgeDB的数据集上准确度得到了明显的提升。
2.3 引入挤压和激励结构
在神经网络搭建的过程中采用挤压和激励结构让神经网络增加一个小型的注意力机制使之在学习的过程中自主获取到每一个特征通道的重要程度,之后再参照这个重要程度去提升有用的特征和抑制用处不大的特征。挤压和激励结构如图3所示。
Fig.3 Squeeze and excitation structures图3 挤压和激励结构
如图3所示,挤压和激励结构包含三部分:
第一部分是挤压函数Fsq,将特征图的全局空间信息沿着特征通道的方向压缩为一个通道信息,该通道拥有全局特征通道的感受野,这里通过使用全局池化层来实现统计数据。在形式上通过将空间维度H×W×D缩小为1×1×D来生成统计数据z∈RD ud表示第d层通道的特征图,zd表示第d层通道统计的数据。
第二部分是激励函数Fex,为了充分利用挤压函数中聚合的信息来捕获特征通道方面的依赖关系,这里使用了带有Sigmoid激活的门控机制学习参数W,为特征通道生成权重s。通过两个带有非线性激活函数的全连接层的瓶颈来实现门控机制,第一层减低维度使用ReLU选择性输出结果,第二层升高维度使用Sigmoid将权重归一化到0-1,让结果更具非线性的同时也极大减少参数量和计算量。
第三部分是重组权重函数Frw,将激励函数输出的结果与原来的特征图进行通道乘积为特征图权重加权,来重新设定每个特征通道的重要程度。
挤压和激励结构通过全局卷积和两层非线性激活函数以及重组权重的方式,在模型搭建和推理计算方面有良好性能,不需要新设计函数和神经网络层就可以实现挤压和激励结构,这使得模型的部署容易实现。
2.4 改进非线性激活函数
本文在Lightfacenet模型中引入了一种分段式线性激活函数(Hard_Swish)的非线性激活函数,当使用Hard_Swish替代用作ReLU时,对于分类任务可以显著提高神经网络的准确性,Hard_Swish是根据Swish[8]非线性激活函数改进的,Swish定义为:
Swish非线性激活函数可以提高网络的准确性,但是同时也带来了不好的问题,Sigmoid函数需要增加大量的计算,这对移动与嵌入式设备计算模型非常不友好。本文将通过以下方法来处理这个问题。
本文使用分段式线性函数(Hard_Sigmoid)来替代Sigmoid函数:
如图4所示,本文中替换Sigmoid的分段式线性激活函数(Hard_Swish)与Swish的非线性激活函数相比只有细微差别,其在准确性上面没有明显的差异,新的激活函数使用了ReLU6,这样大大提高了模型的推理速度,与直接使用ReLU激活相比速度几乎没有差别。从部署的角度来看,这样的替代优化了模型在移动平台上的运行效率,同时还消除了Swish中Sigmoid函数在计算数值的精度损失,在保持速度与ReLU相当的情况下,提高网络的准确性。
经过多次卷积后,网络应用非线性函数的成本会降低很多,因为在每次卷积后,每一层的特征图大小通常会减半,在更深层使用Hard_Swish函数更有利于轻量化网络的实现。因此本文仅在网络的后半部分使用Hard_Swish函数来提高模型的推荐速度。
2.5 本文算法模型网络结构
本章详细描述了Lightfacenet轻量级神经网络结构,如表1所示。
Table 1 Lightfacenet lightweight neural network structure表1 Lightfacenet轻量级神经网络结构
Fig.4 Contrast of nonlinear activation function图4 非线性激活函数对比
该网络包含10个block(模块),扩张为输入模型的特征通道数倍数,重复为重复模块的次数,SE为是否使用挤压和激励结构,NL为激活函数的类型。
Bottleneck为瓶颈结构[9],在网络中使用瓶颈结构,可以在保证精度不减的情况下大大减少网络的参数量。其结构如表2所示。
3 实验方法
3.1 数据集
在实验中主要使用MS-Celeb-1M[10]数据集作为轻量级深度网络的训练数据集。MS-Celeb-1M包含1 000多万张图,10万个类别,平均每个类别有100张图片,这是目前类别(ID)数量最大的数据集。使用这个数据集可以极大地避免由于训练不充分而导致模型性能低下的情况,使得深度神经网络更理想地发挥拟合模型的优势。现有的大规模人脸数据集如表3所示。
Table 2 Bottleneck structure表2 瓶颈结构
Table 3 Face data set table表3 人脸数据集表
3.2 数据预处理
在MS-Celeb-1M数据集中每个类别的图片有几十到几百张,由于图片的品质不同,图像信息完整性不一,使数据包含了很多噪音信息。不针对数据集做预处理就直接进行模型训练,会导致网络学习到错误或异常的数据,不能准确地对人脸特征进行辨别。再者因为图像的人脸姿态各异,位置和角度不同,如果没有对图片进行姿态矫正,就会给网络学习与收敛提高难度。因此在训练网络前对数据做预处理是非常有必要的。
实验中针对数据集中人脸位置和姿态角度不同、人脸信息是否完整的问题,将图像输入到级联人脸检测神经网络[11]中来判断图像是否具有完整的面部信息,如果信息完整就获取图像中的人脸区域和面部关键点信息,利用面部的关键点和仿射变换函数对人脸区域进行姿态矫正后截取出人脸区域图像[12-15],再将图像统一调整为112×112像素作为人脸识别的训练样本。
3.3 实验结果分析
为了验证本文提出的基于轻量级深度卷积网络的实时人脸识别算法,使用神经网络框架Mxnet实现算法,在网络的训练阶段从网络结构、参数量、运行速度、识别率几方面进行对比实验。网络主要使用Resnet50[16]、MobileNet V1、MobileNet V2、ShuffleNet、ShuffleNetV2和本文Lightfacenet轻量级神经网络。在测试集上本文使用LFW[17]、AgeDB等数据集进行测试。
实验将数据集的训练样本按9∶1划分,生成实验的训练集和测试集,采用arcface损失函数并用随机梯度下降法进行训练[18-19],批处理大小设置为256,学习率为0.1,在12 000次、14 000次将学习率下降到原来的10%。实验结果对比如表4所示。
Table 4 Effectiveness contrast table of neural network model表4 神经网络模型效果对比表
从表4中可以看出,本文中使用了深度可分卷积的网络模型大小要远远小于使用传统卷积的Resnet50网络模型,表中没有提到Resnet50迭代了15 000次相比较于本文的网络模型迭代了15 000次在训练时间上要快一些。本文网络在实现的代码中使用了大量的内存和指针的跳转,使得Resnet50会比本文网络更快完成训练。不过评价一个网络模型的优良,网络模型的推理速度、识别的准确率才是重要指标。可以看出Lightfacenet网络模型与MobileNet V1、MobileNet V2、ShuffleNet、ShuffleNet V2这样的轻量网络比较,本文的Lightfacenet网络因为在采用了全局深度可分卷积结构和瓶颈结构的情况下其在参数量保持较少的情况下有更好的准确率,在性能增益的同时保证模型参数不增加,从而更高效地使用模型参数。Lightfacenet_A表示没有使用挤压与激励结构的网络,可以看出没有使用这个结构的网络模型相比使用结构的Lightfacenet模型参数量稍微减少了一些,但效果还是挺明显的,网络推理的准确率有所下降。Lightfacenet_B表示没有使用Hard_Swish非线性激活函数的网络,与使用了Hard_Swish非线性激活函数的网络相比,Lightfacenet_B使用ReLU函数,其神经网络的准确性有所下降。因此可以看出Lightfacenet网络在人脸识别的准确率上基本达到了Resnet50的效果,与Lightfacenet_A和Lightfacenet_B相比也有明显的提升。使用了Hard_Swish非线性激活函数的Lightfacenet,其参数量只有1 100 000。与轻量级网络模型对比中Lightfacenet网络也非常具有优势,在参数量较少的情况下,达到了很好的识别效果,这对于后期在移动设备上移植算法打下了基础。
针对移动端的算法移植,使用神经网络前向计算框架NCNN将神经网络模型转化为移动端模型,并在Android系统平台上搭建运行算法的平台。表5是模型在搭载了高通625处理器的移动端Android平台上的运行速度对比表。
从表5中可以看出,Lightfacenet网络模型系列的推理运行的最少时间处于主流的网络模型的第一梯队,其推理运行的最长时间也要少于网络模型,因此从平均时间来看Lightfacenet网络模型与现在主流的神经网络模型在运行推理的速度上具有明显的优势,通过增加挤压与激励结构和Hard_Swish结构换来更好的识别准确率是有益的。同时Lightfacenet的网络参数量较少,在移动平台上只需要很少的存储空间就可以运行,大大减少了模型在嵌入式平台的移植难度,也因为速度的优势,让模型在移动嵌入式平台上可以达到实时运行使用的水平。
Table 5 Comparison table of operating speed of neural network model on mobile platform表5 神经网络模型在移动平台上的运行速度对比表 ms
4 结果与讨论
本文从实用角度出发,提出一种基于轻量级深度卷积网络的实时人脸识别算法Lightfacenet。本文的实验表明,因为Lightfacenet网络的结构采用了深度分离卷积单元、挤压和激励结构以及修改后的非线性激活函数,这些模块在深度学习框架中缺少原生代码支持,使模型在训练的速度上比传统的残差网络慢一些,接下来进一步优化代码结构,相信网络会有更好的训练速度。除此之外,Lightfacenet网络模型是一个成功的模型,它可以保持与大型卷积网络Resnet50模型基本相同的识别精度,并且在计算速度方面比Resnet50提高很多。在与现有的高效轻量级神经网络模型相比时也具有速度优势,网络具有非常高的效率,可以在搭载高通625处理器的移动设备上仅仅占用少量的存储空间,进行快速的推理计算来达到实时人脸验证的效果。