李昊璇,王 芬
(山西大学 物理电子工程学院,山西 太原 030006)
随着人工智能技术的进步,生物特征识别技术也在逐渐发展并被人们所熟悉.最为常见的生物识别技术包括指纹识别,人脸识别,虹膜识别,声音识别等.人脸关键点检测作为人脸识别的子任务之一,可以直接应用于人脸动画生成、表情分析、人脸姿态分析、2D/3D人脸建模、视频人脸跟踪、人脸局部信息抽取等方面.人脸关键点检测方法大致分为3种,分别是基于ASM(Active Shape Model)[1]和AAM (Active Appearnce Model)[2,3]的传统方法、基于级联形状回归的方法[4]和基于深度学习的方法[5-8].
ASM[1]是由Cootes于1995年提出的经典的人脸关键点检测算法,主动形状模型即通过形状模型对目标物体进行抽象,ASM是一种基于点分布模型的算法;1998年,Cootes对ASM进行改进,不仅采用形状约束,而且又加入整个脸部区域的纹理特征,提出了AAM算法[2];2010年,Dollar提出CPR(Cascaded Pose Regression,级联姿势回归)[4],CPR通过一系列回归器将一个指定的初始预测值逐步细化,每一个回归器都依靠前一个回归器的输出来执行简单的图像操作,整个系统可自动地从训练样本中学习;2013年,Sun等人[5]首次将CNN应用到人脸关键点检测,提出一种级联的CNN——DCNN(Deep Convolutional Network),不仅改善了初始不当导致的局部最优问题,而且借助于CNN强大的特征提取能力,获得了更为精准的关键点检测.
深度学习网络广泛存在的一个问题是梯度爆炸与消失,这个问题主要通过初始归一化和中间归一化层来解决.随着网络深度的增加,准确度将持续饱和,然后迅速下降.为了解决网络达到一定程度或准确率会急剧下降的问题,本文提出了基于卷积神经网络的残差网络.
卷积神经网络(CNN)相对于传统的深层全连接神经网络,网络参数规模较小,因此在优化速度和计算速度上有显著的提高,能够在计算资源与最终结果之间达到很好的平衡.卷积神经网络由卷积层、最大池化层和全连接层等图层组成.
卷积层包含多个可训练的卷积核,每个卷积层神经元只与上一层的部分神经元连接,卷积网络相对于一般的全连接网络是稀疏的.如图1 所示.
图1 卷积层Fig.1 Convolutional layer
假设输入为一张二维的图像I,一个二维卷积核表示为K,卷积运算用星号*表示,则卷积结果
S(i,j)=(I*K)(i,j)=
∑m∑nI(i+m,j+n)K(m,n).
池化层是通过采样函数对数据进行非线性采样,能够减小数据维度并降低过拟合.池化方式有平均池化、最大池化和随机池化,其中最常用的是最大池化.最大池化是对区域内的特征点取最大.如图2 所示.
图2 最大池化层Fig.2 Max-pooling layer
卷积与池化操作取到局部特征后,全连接层将输出的二维特征图转化成一维的一个向量.在CNN中,全连接常出现在最后几层,对前几层得到的特征结果做加权和,将学到的分布式特征表示映射到样本标记空间.如图3 所示.
图3 全连接层Fig.3 Fully connected layer
在深层网络能够收敛的前提下,随着网络深度的增加,正确率开始饱和甚至下降,这称之为网络的退化问题.在给定的网络上增加层数会增大训练误差,这些退化并不是过拟合造成的,而是优化问题.本文针对这个问题提出了深度残差网络,使用残差块进行网络的跨层连接.
残差块如图4 所示.假设网络输入为x,期望输出是H(x).通过捷径连接的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,则H(x)=x,得到恒等映射[9].原始网络的学习目标是完整输出,使用残差块的网络学习目标是目标值H(x)和x的差值,也就是残差F(x),F(x)=H(x)-x.训练目标是将残差结果逼近于0,同时随着网络深度增加,准确率不下降.
图4 残差块结构图Fig.4 Structure of residual block
深度残差网络是在传统神经网络[10]的基础上增加了快捷连接,使某一层的输出可以直接跨过几层作为后面某一层的输入,因此深度残差网络能够叠加多层网络同时降低模型的错误率.神经网络层数的增加为高级语义特征提取和分类提供了可行性.传统神经网络与深度残差网络结构如图5 所示.
本文使用的深度残差网络共有18层.第一层是卷积层,使用64个维度为(7,7)的卷积核对输入的人脸图像进行卷积.后面的16层使用了8个残差块,残差块中使用的卷积核大小都是3×3,4个为一组,每一组的卷积核数量不同,分别是64,128,256,512.最后一层是全连接层,输出人脸检测的结果,即68组人脸关键点坐标.
图5 传统神经网络与深度残差网络结构图Fig.5 Structure of traditional neural network and deep residual network
残差网络中一部分快捷连接是虚线,一部分是实线.实线部分表示输入输出通道相同,所以采用计算方式为H(x)=F(x)+x.虚线部分表示通道不同,需要进行维度调整,采用的计算方式为H(x)=F(x)+Wx.
本文使用PyTorch[11]框架构建神经网络,使用的数据集来源于YouTube Faces,其中每组数据包含一张人脸图片与对应的关键点坐标.数据集包含5 770张彩色图片,分为3 463张训练集与2 308张测试集.面部关键点标记了脸部重要区域,面部边缘、眉毛、眼睛、鼻子和嘴,坐标表示为(x,y),关键点编号顺序如图6 所示.
网络输入图片的大小为224×224,因此需要对数据集的图片做处理.首先调整图片的最小边长为224,再将图片随机剪裁为224×224,最后进行归一化.归一化操作将图片转换为灰度值在[0,1]区域的灰度图片.
图6 关键点编号Fig.6 Number of keypoints
训练网络的过程共迭代了数据集50次,迭代一次数据集的过程中每一批次输入图片64张.输入批次过小将导致批标准化不稳定,批次过大将超出计算机内存限制.初始学习率设置为0.001,学习率决定了参数每次更新的幅度,如果幅度过大,那么可能导致参数在极优值的两侧来回移动.学习率衰减系数设置为5×10-4,学习率随着迭代次数在逐渐下降.
图7 是训练过程中残差网络与传统网络的平均误差对比图.图7 中显示传统网络在最初的几次迭代过程中平均误差迅速下降,比残差网络的表现要好,但在后续的训练过程中残差网络能够达到更小的平均误差.图8 是测试过程中残差网络与传统网络的平均误差的对比图.图中显示经过20次的迭代之后,残差网络在测试过程中的平均误差更低,表现更好.
图7网络训练过程中的平均误差
Fig.7The average error in network training process
图8网络测试过程中的平均误差
Fig.8The average error in network testing process
图9,图10 分别为残差网络与传统网络人脸关键点检测的结果.图中的点为数据集的标注点和网络的预测结果.图10中,传统网络输出的图片中有3张的检测结果与标注的关键点存在较大的偏移,分别是图10中的第1,3,10个人脸,这3张图片使用深灰色框进行标记区分,而图9中的数据集标注点与网络的预测结果能够很好地匹配,准确地输出人脸关键点的位置.
图9 残差网络检测结果Fig.9 Detection results of residual network
图10 传统网络检测结果Fig.10 Detection results of traditional network
训练与检测过程中,对深度残差网络与传统网络的误差进行比较,并且对输出结果进行直接观察,可以看出,深度残差网络可以更好地检测出人脸的68个关键点,检测精度较高.
本文基于卷积神经网络进行人脸关键点识别,在卷积神经网络中增加了恒等映射的分支形成残差块,使网络深度加深的同时增加关键点识别的准确率.实验结果显示深度残差网络能够达到更小的平均误差,与传统神经网络相比具有更高的检测精度.