应用卷积神经网络的人脸活体检测算法研究*
2018-10-12佟越洋
龙 敏,佟越洋
1.长沙理工大学 计算机与通信工程学院,长沙 410114
2.长沙理工大学 综合交通运输大数据智能处理湖南省重点实验室,长沙 410114
1 引言
随着计算机技术的快速发展,生物特征识别技术的识别率也在稳步提高,在各种识别技术中,人脸识别因其安全性高,稳定性好且具有自然性、非接触性、并发性以及隐蔽性等优点,被广泛应用于刑事侦查、监控系统以及安全检测技术中[1]。目前,对人脸识别的研究主要集中在对复杂场景下不同个体的人脸定位上,关于人脸检测问题的安全性研究却很少[2]。随着网络的广泛应用,包含用户信息的人脸图像很容易从各种社交网络中被非法用户获取,对认证系统造成严重威胁,如假脸攻击。假脸攻击是指非法用户试图通过提供虚假数据(翻拍合法用户图片、视频以及3D模具等)获得系统访问权限,其中翻拍合法用户图片和视频截取用户图片,由于成本低廉及实现简单,成为非法入侵者使用的主要攻击方式。针对这类攻击,目前主要采用人脸活体检测技术进行识别。
本文研究主要针对摄像机捕获活体真人的活脸图像和对活体图像进行二次翻拍后得到的假脸图像的鉴别。如图1所示,这两类图像具有高相似度,肉眼通常难以区分。研究者们通过分析活体人脸与翻拍人脸的本质化差异,如纹理特征、频谱特征、光照反射差异、运动信息等,提出了大量的反欺诈人脸活体检测方法[3-12]。目前,对活体人脸检测算法的研究大体可分为两类:静态检测算法和动态检测算法。
Fig.1 Examples of liveness faces and recaptured faces图1 活体人脸与二次翻拍人脸示例
静态活体检测算法是基于单张图片对人脸信息进行分析。Määttä等人提出使用LBP算子度量图像微纹理细节,提取人脸的LBP特征、Gabor小波特征以及定向梯度直方图,采用支持向量机(support vec-tor machine,SVM)对人脸进行活体检测[3-4]。Li等人使用傅里叶光谱分析方法分析人脸图像的高频分量以鉴别活性人脸[5]。Kim等人提出使用局部区域的扩散速度模型(local speed patterns,LSP)分析活性人脸特征[6]。
动态算法则主要分析视频序列中的信息(如生理特征、动态纹理等),通过面部运动变化检测人脸活性。Pan等人对人眼模型进行眨眼建模,分析眨眼检测率[7]。Pinto等人提出基于码本的检测算法,通过计算时频描述子(visual codebooks of spectral temporal cubes,VCST)区别真伪人脸[8]。Singh等人提出使用Haar级联分类器分析唇部以及眼部运动[9]。Schwartz提出对视频提取灰度共生矩阵、HOG(histogram of oriented gradient)、LBP(local binary pattern)等特征辨别视频真伪[10]。
上述文献提出的算法都是基于手工提取人脸特征,手段单一,不能准确描述活体人脸的特点,对多类型攻击手段的人脸欺诈方式的检测精度差,不具有鲁棒性,受场景约束度较高。2014年,Yang等人首次将卷积神经网络引入生物特征识别算法,提出使用imagenet网络分析人脸图像[11]。Alotaibi等人提出一种ND-CNN(nonlinear diffusion using convolution neural network)算法对人脸扩散速度模型进行分析并将图像放入deepnet网络进行活体检测[12-13]。这类算法均获得了较好的检测结果,但由于深度学习的运算复杂度高,计算量大,算法容易出现“梯度弥散”以及过拟合等问题,进而影响检测效率。为了避免这些问题,本文提出一种针对单帧图像的人脸活体检测算法,算法首先对摄像头捕获的信息进行预处理,然后放入卷积神经网络训练。对现有的卷积神经网络(convolutional neural network,CNN),提出一种优化策略,采用一种并行的卷积神经网络BMCNN(based on mixnetwork-convolutional neural network),通过两个不同结构的网络对人脸图像进行并行处理,使得到的特征更加客观全面。将预处理后的人脸图像作为BM-CNN的输入,对人脸图像提取深层次的纹理特征,卷积网络在下采样过程中使用二均值池化方法对特征向量降维,提取下采样范围内的二均值元素代表池化域的整体信息,并综合批量归一化方法以及多类型非线性单元获得深层次的人脸特征表达,最后通过网络的决策层对人脸活性进行鉴别。
2 人脸活体检测算法
卷积神经网络(CNN)作为人工神经网络的一种,已被广泛应用于图像识别、文字识别、音频识别等领域,它的网络结构对二维形状的平移、比例缩放、倾斜以及其他形式的变形具有高度不变性[14]。本文提出的人脸活体检测算法分为两个步骤:首先对摄像头捕获视频图像进行人脸图像的预处理,再对预处理后的人脸进行深度学习。如图2所示,在对人脸图像进行活体检测时,CNN的输入是对单帧照片采用人脸关键点定位,人脸分割以及图像增强等预处理手段处理后的人脸图像,为了加快卷积神经网络的收敛速度并提高活体检测算法的鉴别能力,算法采用并行网络结构,并在BM-CNN网络下采样过程中使用二均值池化方法,结合批量归一化BN(batch normalization)、Relu与Tanh非线性单元对人脸进行特征学习与分类决策。
Fig.2 Procedure of algorithm图2 算法过程
2.1 预处理算法实现
在活体检测之前,需要对摄像头捕获画面进行预处理,如图3所示。算法首先对人脸视频的单帧图片进行人脸定位分割:通过OpenCV随机抽取摄像头捕获的视频帧信息获取单帧人脸图像,并针对OpenCV中的Viala-Jones算法在人脸定位方法中存在的偏差问题,采用一种面向对齐的人脸定位方法FPS-LBF(3000 FPS via regressing local binary features)[15]优化人脸框定位68个关键点,提取精确的人脸图像,并保留部分人脸背景边框以提高算法的检测性能[16]。
另外,为了解决现有人脸增强方法存在的计算繁琐,运算耗时长等问题,并提高算法整体性能的准确度,算法使用GC(Gaussian curvature)高斯曲率滤波[17]方法对分割后的人脸图像进行增强,对人脸采用优化正则项原则,在图像优化模型中存在如下关系:
式(1)中,数据拟合项能量εd(S,I)一直增加,正则项能量εr(S)不断减小,整体能量ε(S)一直处于下降的状态,因此只要满足正则项能量的下降大于数据拟合项的增加,就可以保证整体优化策略的稳定。这样的预处理手段可以在去除人脸图像噪声的同时有效保留人脸图像中的纹理细节信息以及边缘特征。
2.2 BM卷积神经网络
算法提出的卷积神经网络BM-CNN包括两个并行的卷积神经网络Innet1与Innet2,每个子网络有三部分:卷积运算部分、池化运算部分与全连接部分。卷积部分有3层结构,每层包含卷积层、BN(批量归一化层)和不同类型的非线性单元。
Fig.3 Procedure of image preprocessing图3 图像预处理过程
Fig.4 Architecture of Innet1 algorithm图4 Innet1网络结构
网络Innet1结构如图4所示包含3个卷积层、3个池化层,前两个卷积层中使用BN层以及非线性单元Relu层,第三个卷积层使用Tanh非线性单元,参数设置如下:卷积层1由64组卷积核组成,每组卷积核的尺寸为9×9×3(9×9表示卷积核的大小,3表示输入图像的通道数),卷积层的步长为2;通过BN层和RELU层映射到核为3×3步长为2的交叠池化层,得到64幅特征图输出到卷积层2。卷积层2与卷积层1结构相同,它有64个5×5大小卷积核,卷积层步长为1;通过BN层以及RELU层映射到下采样层,得到64幅特征图输出到卷积层3。卷积层3与卷积层1结构相同,它有96个3×3大小卷积核,卷积层步长为1;通过BN层以及Tanh层映射到下采样层,得到96幅特征图输出到全连接层。
Innet2网络结构如图5所示,在网络的中间卷积层部分使用分解的小卷积核,在降低计算量的同时提高算法的准确度。网络参数设置如下:卷积层1、2与卷积层3、4分别由20和50个卷积核组成,卷积层1、4的每个卷积核尺寸为3×3,卷积层2和卷积层3通过分解卷积核采用1×3以及3×1的非对称卷积滤波器,在降低特征维数的同时,可以有效提高网络的鉴别能力。池化部分采用2×2大小的卷积核对特征映射图不重叠降维。
Fig.5 Architecture of Innet2 algorithm图5 Innet2网络结构
Fig.6 Architecture of BM-CNN algorithm图6 BM-CNN网络结构
BM-CNN的网络结构如图6所示,它的输入为经过预处理后的人脸图像,每个卷积层都加入批量归一化层(BN),卷积层的激活函数采用不同的非线性单元Relu以及Tanh;在池化层采用BM-Pooling池化方法保持图像纹理细节的同时避免增大图像噪声的影响;全连接层的激活函数采用非线性单元Tanh;通过全连接层将两个网络的输出特征图拉成一个列向量。
2.2.1 池化方法
卷积层获取人脸图像的特征图谱之后,需要做进一步的计算和分类输出,由于卷积层输出的特征向量维数较高,对于16个360×360大小的输出特征图谱会产生150多万维卷积特征,高维数的特征向量将会耗费大量的运算时间,且容易出现“过拟合”现象。池化(下采样)的目的是进行二次特征提取[18]。在卷积神经网络结构中,通常使用下采样(池化)方法,逐步减小特征表示的空间大小,减少网络中的参数,降低计算量。本文算法采用二均值池化(下采样)方法对区域特征进行分析统计以降低输入特征图的维度,并避免过拟合问题。常用的池化模型有最大池化(Max-Pooling)、平均池化(Mean-Pooling)以及随机池化(Stochastic-Pooling)。最大池化方法侧重于描述池化域的显著纹理特征,平均池化侧重保留特征图的背景信息,随机池化介于两者之间。
针对有效描述人脸区域信息的问题,本文采用二均值池化(BM-Pooling)方法,可以更准确地描述人脸特征图的纹理信息,BM-Pooling池化方法的表达式为:
在BP反向更新隐层单元权重时,BM-Pooling的反向传播误差推导如下:
式中,δl表示第l层池化部分的误差灵敏度,l-1层为卷积层。σ′(zl-1)代表激活函数的偏导数,运算符号∘代表哈达玛乘积,upsample(δl)为池化结果重置后的扩展矩阵,池化前矩阵元素为aij,扩展矩阵推导如下:
式中,Ψij表示第l层池化层中的第j个池化域的前向传播输出元素值。
在反向传播过程中对重置的扩展矩阵的部分元素置零,满足Ψij=max(aiĵ)i∈n,对池化层输入过程中max(aij)所在位置赋值为池化域元素值,其他位置置零,若设当i=j时aij有最大值,则:
图7描述了当对输入特征图谱进行2×2大小步长为2的BM下采样时的池化层运算结果,由于滑动窗口的步长为2,可以将特征图分为2×2大小的4个不重叠池化域,对每个池化域选取最大二均值代表2×2区域内的特征图信息实现对特征图的降采样处理。
Fig.7 Forward propagation algorithm of BM pooling图7 BM池化前向传播算法
针对人脸图像纹理信息波动幅度不稳定的问题,BM-Pooling算法可以在描述特征图纹理信息的同时,考虑到对池化域影响较大的第二元素以降低CNN算法对活体人脸的误判率。
2.2.2 卷积网络运算过程
卷积神经网络的输入为经过预处理后归一化到像素大小为256×256的人脸图像,首先对输入图像进行卷积操作:
式中,表示l卷积层的第j个特征图(map);Cj表示输入卷积层的map集合;*表示对卷积核k与卷积层的输入map做卷积运算并求和;b表示偏置参数;f(⋅)表示激活函数。
为了避免过拟合现象,BM-CNN在卷积操作后加入批量归一化(BN)层[19],将卷积层的输出作为BN层的输入,引入可学习重构参数γ和β,满足x=γ⋅x̂+β,其中x̂表示归一化后的数据,γ和β通过链式求导方法训练求出,增加模型的泛化能力,在训练过程采用批量随机梯度下降方法。归一化过程如下:
其中,μB与分别代表BN层输入特征映射x的均值与方差。由式(8)~式(10)得到归一化的图像x̂i,数据归一化后均值为0,标准差为1,BN层的输出由式(11)得到:
需要注意的是算法对前几层卷积采用非线性单元Relu,使一部分神经元的输出为零,并设置为通道间共享参数,使网络具有稀疏性而减少参数的相互依存关系,以缓解过拟合问题并加速收敛[20]。对最后一层卷积以及全连接层采用非线性单元Tanh。池化层(下采样层)使用二均值池化方法,计算公式如下:
式中,pool(⋅)表示二均值池化(BM-Pooling)方法;β表示权重系数。最后一层池化部分的输出作为第一个全连接层的输入,全连接层将学到的“分布式特征表示”映射到样本标记空间,使用决策函数进行分类预测。
3 实验结果与分析
本文算法基于Caffe深度学习框架,配置一块12 GB大小的GPU,使用Python语言实现,在对比实验中,为了验证BM-CNN算法的真实性和有效性,与其他大部分人脸检测算法相同,将CNN学习率设为0.01,迭代次数为8000次。
3.1 数据集介绍
本文使用两种经典的活体人脸检测数据库,NUAA(http://parnec.nuaa.edu.cn/xtan/NUAAImposterDB_download.html)人脸照片欺骗数据库以及CASIA(http://www.cbsr.ia.ac.cn/english/CASIA-WebFace-Database.html)人脸视频欺骗数据库。
NUAA数据库是首个公认的反照片人脸欺骗数据库,数据库的采集分为3个时间阶段,并在不同光照条件下完成,共有15个目标参与数据收集,数据库图片数量如表1所示。为了模拟假冒人脸攻击方式,摄像头捕获的假脸数据存在前后上下左右以及旋转弯曲的空间位置移动和多种照片欺诈的运动形式。
Table 1 Number of images in NUAAdatabase表1 NUAA数据库图片数量
CASIA数据库由600段视频组成,数据库的构成如表2所示。对50个样本进行采集,假脸视频包括扭曲的人脸照片欺骗、剪切的照片欺骗以及人脸视频欺骗,使用3种不同成像质量的摄像头在背景复杂以及不同光照环境下进行数据收集,并模拟眨眼攻击手段,考虑了多种欺诈可能性。
Table 2 Number of videos in CASIA-FASD database表2 CASIA-FASD数据库视频数量
3.2 算法性能实验及分析
在本文提出的算法实验中,首先对单帧图像进行人脸分割、图像增强以及归一化的预处理,然后通过BM-CNN网络对输入图像进行特征学习以及决策分类。实验中,采用准确率(ACC)、误判率(ERR)以及半错误率(HTER)作为评估活体人脸检测算法分类结果的指标,HTER定义为:
式中,FRR是指将真实人脸错判为假冒人脸的概率,FAR是指将假冒人脸错判为真实人脸的概率。
3.2.1 预处理算法实验与分析
为了验证本文提出的预处理方法的有效性,实验获取曲率滤波在不同迭代次数下对算法检测准确率的影响,得到最佳预处理模型。并与经典活体检测算法的预处理方法进行比较,验证BM-CNN预处理算法可靠性。
表3展示了在CASIA数据集上进行不同滤波迭代次数的高斯曲率滤波后的实验结果,可以看出,随着滤波迭代次数的增加,算法的准确率不断提高,这是因为GC曲率滤波有较好的收敛效果。如图8所示,随着滤波迭代次数的增加,人脸图像的曲率能量逐渐降低,并在滤波迭代9次后,人脸图像能量趋于平稳。
Table 3 Performance comparison of CASIA database with different iterations表3 对CASIA数据库在不同迭代次数下的性能对比
Fig.8 Curvature energy of different face images changes with the number of iterations图8 不同类型人脸图像曲率能量随迭代次数变化
表4、表5分别表示在CASIA数据集以及NUAA数据集上采用不同的预处理方式对人脸图像进行处理,对BM-CNN算法检测识别率的影响。
Table 4 Performance of different preprocessing methods on CASIAdatabase表4 对CASIA数据库在不同预处理方法下的性能 %
Table 5 Performance of different preprocessing methods on NUAAdatabase表5 对NUAA数据库在不同预处理方法下的性能 %
可以看出当算法不使用预处理手段,将切割的人脸图像归一化后直接放入BM-CNN时算法的识别率最低,检测效果最差,说明预处理手段对BM-CNN算法的有效性和必要性。在4种预处理手段中,本文采用高斯曲率滤波预处理方法的性能优于采用图像扩散速度的预处理方法[12]以及自适应同态滤波的人脸光照补偿方法[21]和小波降噪预处理方法[22],说明高斯曲率滤波的预处理方法在去噪的同时可以较好地保留人脸图像的边缘信息与细节纹理。
对比算法在两种不同类型数据集上的识别准确率,可以看出,活体人脸检测算法对NUAA数据集进行测试的检测性能优于CASIA数据集,这是因为CASIA数据集中包含了不同分辨率的视频人脸信息和更加丰富的攻击手段。
3.2.2 BM算法中的池化方法实验与分析
为了验证BM算法使用的二均值池化的性能,分别在NUAA以及CASIA数据集上使用BM-Pooling池化算法同常用池化算法最大池化Max-Pooling、均值池化Mean-Pooling以及随机池化Stochastic-Pooling算法进行对比实验。
表6和表7分别展示了在不同数据集上池化方式对算法检测识别率的影响。可以看出,对3种现有的池化模型,当算法使用中值池化(Mean-Pooling)模型对人脸活性进行检测时,检测效果最差,使用随机池化(Stochastic-Pooling)的检测效果高于另外两种方法,对特征图纹理细节的保持度较高。而相比较现有的3种池化模型,当采用BM-Pooling二均值下采样方法时,算法对人脸活性的检测识别率最高,说明BM-CNN采用的池化方法可以更准确地提取特征图的纹理信息,提高人脸活体检测算法的整体性能。
Table 6 Effect of pooling methods on recognition rate on CASIAdatabase表6 池化算法在CASIA库上对识别率的影响 %
Table 7 Effect of pooling methods on recognition rate on NUAAdatabase表7 池化算法在NUAA库上对识别率的影响 %
3.2.3 并行网络性能分析
为了验证并行网络的准确性和有效性,在NUAA数据集以及CASIA数据集上分别对本文提出的3种卷积神经网络和经典的卷积神经网络Lenet、Alexnet以及Googlenet网络进行对比实验,分析在相同的硬件条件和预处理方式下,不同的网络结构对活体人脸的检测效果。
表8和表9分别表示在NUAA数据集上以及CASIA数据集上的实验结果。可以看出,当通过Lenet网络结构对活体人脸进行检测时,对算法的检测识别率最低,效果最差。Googlenet网络结构采用分解小卷积核策略,检测效果较高。而本文提出的BM-CNN卷积神经网络对活体人脸的检测效果均优于其他网络结构。在NUAA数据集上,BM-CNN以及Innet1都可以达到100%的识别率。对挑战性更大的CASIA数据集进行测试,BM-CNN的识别率为99.33%。
Table 8 Effect of parallel network on recognition rate on NUAAdatabase表8 并行网络在NUAA库上对识别率的影响 %
Table 9 Effect of parallel network on recognition rate on CASIAdatabase表9 并行网络在CASIA库上对识别率的影响 %
3.2.4 算法检测性能对比
为了验证整体算法的有效性和可靠性,对本文提出的BM-CNN算法与部分经典活体人脸检测算法进行了实验对比。
表10表示在NUAA活体人脸数据库上不同检测算法的实验结果,可以看出,在基于手工提取人脸特征的活体检测方法中,M-DOG(multiple-DOG)算法[23]以及 LTP(local ternary pattern)算法[24]对活体人脸的检测性能较差。CDD(component dependent descriptor)算法提出优化人脸背景框,检测效果较好,基于DK(diffusion-based kernel)模型的活体检测[25]算法对活体人脸的检测准确率最高为99.3%。基于深度学习的检测算法的性能与DK算法相当;本文算法准确率为100%,表明BM-CNN活体人脸算法对照片攻击有着很好的防御作用。
Table 10 Performance of different algorithms on NUAAdatabase表10 NUAA数据库上不同算法的性能 %
表11表示在CASIA库的验证集上的测试结果,可以看出,在基于深度学习的活体检测方法中,基于S-CNN[11]以及长短期记忆网络(long short-term memory-CNN)的活体检测算法[26]对活体人脸的检测错误率最高,DB-CNN(diffusion-based-CNN)算法对活体人脸的检测性能较好,STM(spatio-temporal mapping)算法的检测性能最好。本文算法的半错误率HTER仅为0.56,低于其他活体人脸检测算法,验证了BM-CNN算法在实际应用中的可靠性。
Table 11 HTER of different algorithms on CASIA-dev database表11 CASIA数据库验证集上不同算法的半错误率
表12为在CASIA数据库测试集的实验结果,本文算法的准确率为99.33%,表明本文提出的BMCNN算法在应对不同情况下的视频攻击时,具有较好的鲁棒性,可以对不同质量的打印照片人脸、冲洗照片人脸以及高清设备显示的假冒人脸实现高效可靠的检测。
Table 12 Accuracy of different algorithms on CASIAdatabase表12 对CASIA数据库上不同算法的性能 %
3.2.5 算法在小样本数量下的对比实验
为了验证BM-CNN算法在小数量的样本空间下仍然具有良好的检测性能,分别在700~200张人脸图像上进行样本数量间隔为50的递减样本数量的分类性能对比实验。
Fig.9 Effect of sample size on accuracy图9 样本数量对准确率的影响
图9描述了NUAA数据库上训练样本数对识别率的影响,算法识别率随着样本数的增加而增加,当样本数为550时,BM-CNN算法的准确率已达到100%,在相同训练样本数的条件下,本文提出的算法性能优于算法ND-CNN[12]。
3.2.6 算法耗时检测
在实际应用中,人脸识别系统需要快速精准地对用户信息进行活体检测。为了验证BM-CNN算法的实时检测性能,在同一硬件条件下分别在CASIA和NUAA数据集上对相同的人脸图像使用不同的算法网络进行训练并测试,统计网络训练时间以及在验证集上的单张测试耗时,结果如表13所示。
Table 13 Real-time testing on NUAA and CASIAdatabase表13 在NUAA和CASIA数据集上的实时性测试
可以看出,ND-CNN网络训练耗时最短,在NUAA数据集上训练的时间约为2.92 h,本文提出的BM-CNN训练耗时为3.07 h,这是因为BM-CNN网络的深度和复杂度均高于包含3层网络结构的NDCNN,Googlenet由于模型复杂,训练耗时最长。在测试耗时方面,本文提出的BM-CNN算法对NUAA数据库的测试耗时为8.56 s,在CASIA数据库的测试耗时为8.98 s,均优于其他几种网络,说明ND-CNN在实际应用中,可以在提高检测效率的同时保证算法的实时处理能力。
4 结束语
本文提出了一种基于改进卷积神经网络的人脸活体检测算法(BM-CNN),通过设计合理的预处理方法以及有效的卷积神经网络结构来提取人脸特征并检测人脸活性。
算法采用FPS-LBF方法定位人脸信息,将提取到的人脸图像通过曲率滤波(GC)方法进行预处理优化。设计了拥有并行卷积结构的BM-CNN网络,采用BM-Pooling方法并结合批量归一化算法,针对网络特性使用两种不同类型的非线性单元,提升网络收敛速度、识别率以及学习性能。对算法在两个公开的人脸数据集(NUAA和CASIA)上进行测试。实验结果表明,通过曲率滤波方法对提取的人脸图像进行增强后放入BM-CNN网络可以对活体人脸进行准确分类,有效增强活体人脸检测算法的泛化能力,并在一定程度上提高了人脸生物特征识别算法的实用性。
下一步工作,将更深入地研究卷积神经网络,利用CNN分析人脸的动态信息,将稀疏概念引入CNN隐藏层,降低网络的参数数量,并进一步研究可优化的卷积神经网络结构,提高人脸识别系统的安全性能以及可靠性能。