Cite
基于卷积的人脸识别pipeline共有四个阶段:检测 → \to →对齐 → \to →表征 → \to →分类。本文关注于对齐和表征操作:使用显式的3D人脸模型来应用分段线性仿射变换,并使用一个9层的深度神经网络模型来获得人脸表征。与标准卷积层不同,该网络包含120 million参数,并使用一些没有权值共享的局部连接层。训练后的模型再LFW上准确率达到 97.35 % 97.35\% 97.35%,比当前SOTA错误率降低了 27 % 27\% 27%,接近人类水平。
DeepFace模型在无约束人脸识别领域缩小大多数流行基准的差距,达到人类水平。与其他系统相比,该模型能够产生极为紧凑的人脸表征。它使用深度学习框架来替代精心设计的特征。学习后的网络以一种鲁棒式方式攫取面部外观高度依赖于快速的三维人脸对齐操作,贡献主要有三点:
1.人脸对齐
无约束场景下人脸对齐仍然是一个难题,原因包含很多因素,如姿态(人脸非平面性),非刚性表情,很难从带有身份的面部形态中分离出来。最近的解决方法主要有三个:使用可分析3D人脸模型;从外部数据集中搜索相似基准点配置并进行推断;使用无监督学习方法对每个像素进行相似变换。
本文基于基准点分析三维人脸建模,并用于将检测到的面部裁剪变形到三维正面模式。使用一个相对简单的基准点检测器,将其应用于多次迭代来改善输出。在每次迭代中,基准点由一个已被训练用于从图像描述符中预测点配置的支持向量回归器提取出来,图像描述符是基于LBP直方图,其他特征描述符也可以考虑,使用诱导相似变换矩阵T来将图像转化为一张新的图像,我们可以在新的特征空间上使用基准点检测器改进定位。
2D对齐
检测6个基准点,以眼睛中线中心为中心进行对齐操作**(a),它们被用于近似缩放、旋转图像到六个锚点位置通过 T 2 d i : = ( s i , R i , t i ) T^i_{2d}:=(s_i,R_i,t_i) T2di:=(si,Ri,ti),其中 x a n c h o r j : = s i [ R i ∣ t i ] ∗ x s o u r c e j , j = 1 , ⋯ , 6 x^j_{anchor}:=s_i[R_i|t_i]*x^j_{source},j=1,\cdots,6 xanchorj:=si[Ri∣ti]∗xsourcej,j=1,⋯,6,然后在新的图像上进行迭代,直到基准点没有太多变化,形成最终的2D相似变换: T 2 d : = T 2 d 1 ∗ ⋯ ∗ T 2 d k T_{2d}:=T^1_{2d}*\cdots*T^k_{2d} T2d:=T2d1∗⋯∗T2dk。聚合变换生成2D对齐裁剪(b)**。相似变换无法补偿平面外旋转,这在无约束条件下尤为重要。
3D对齐
为了进行平面外旋转面对齐,我们使用一个通用的3D形状模型并注册一个3D仿射相机,用于将2D对齐裁剪扭曲到3D形状的图像平面**(g)。使用第二个SVR在2D对齐裁剪图像中定位67组基准点©,至于3D通用形状模型,简单地从USF Human-ID数据集中取3D扫描均值(d)**,后续处理表示为对齐顶点 v i = ( x i , y i , z i ) i = 1 n v_i=(x_i,y_i,z_i)_{i=1}^n vi=(xi,yi,zi)i=1n。将67个锚点手动防止在3D形状上,这样就实现了67个基准点与它们的3D参考点的完全对应。对线性系统 x 2 d = X 3 d P ⃗ x_{2d}=X_{3d}\vec P x2d=X3dP及已知的协方差矩阵 ∑ \sum ∑使用广义最小二乘拟合3D-2D仿射相机 P P P,最小化损失: l o s s ( P ⃗ ) = r T ∑ − 1 r loss(\vec P)=r^T\sum^{-1}r loss(P)=rT∑−1r,其中 r = ( x 2 d − X 3 d P ⃗ ) r = (x_{2d}-X_{3d}\vec P) r=(x2d−X3dP)是残差向量, X 3 d X_{3d} X3d是一个 ( 67 ∗ 2 ) × 8 (67*2)\times 8 (67∗2)×8的矩阵,通过堆叠 ( 2 × 8 ) (2\times 8) (2×8)的矩阵 [ x 3 d T ( i ) , 1 , 0 ⃗ ; 0 ⃗ , x 3 d T , 1 ] \left [{x_{3d}^T(i),1,\vec 0; \vec 0, x^T_{3d}, 1}\right ] [x3dT(i),1,0;0,x3dT,1]得到,其中 0 ⃗ \vec 0 0是一个四维行向量,仿射相机 P P P大小为 2 × 4 2\times 4 2×4表示为一个8个未知量的向量 P ⃗ \vec P P。使用 ∑ \sum ∑的Cholesky分解可以将损失最小化,从而将问题转换为普通的最小二乘问题。
2.人脸表征
使用一个大型的深度网络来学习一个通用的人脸图像表征。在一个多类别人脸识别任务中训练DNN。
网络共分为三层:
C 1 C_1 C1到 C 3 C_3 C3:前端自适应预处理阶段,将输入拓展为一组简单的局部特征。使用最大池化增强网络的鲁棒性,同时为了避免网络丢失准确的面部结构和纹理特征,仅在第一个卷积层后使用最大池化。
L 4 L_4 L4到 L 5 L_5 L5使用局部连接,特征图的不同位置学习不同的滤波器集合,由于对齐图像的不同区域具有不同的局部统计量,因此卷积的空间不变假设无法成立。基于图像对齐来设计网络结构。局部连接不会增加计算负担,但是会增加网络训练参数。
F 7 F_7 F7和 F 8 F_8 F8:采用全连接结构,这两层能够获取人脸图像中特征之间的关系。其中第一个全连接层** F 7 F_7 F7作为原始人脸表征特征向量**。输出层采用K类softmax激活,产生每一类别的分布,假定 o k o_k ok为第k个输出,则输入指定为第k类的概率为:
p k = exp o k ∑ h exp ( o h ) p_k = \frac{\exp{o_k}}{\sum_h\exp(o_h)} pk=∑hexp(oh)expok
训练目标是最大化正确类别的概率,通过最小化交叉熵损失得到: L = − log p k L=-\log p_k L=−logpk,使用随机梯度下降进行梯度反向传播。由于使用ReLU激活函数,最顶层 75 % 75\% 75%的特征为0。对第一个全连接层使用Dropout。
给定一张输入图像 I I I,人脸表征 G ( I ) G(I) G(I)由前向网络计算得到,共有 L L L层,表示为:
G ( I ) = g ϕ F 7 ( g ϕ F 6 ( ⋯ g ϕ C 1 ( T ( I , θ T ) ) ) ) G(I)=g^{F_7}_\phi(g^{F_6}_\phi(\cdots g^{C_1}_\phi(T(I,\theta_T)))) G(I)=gϕF7(gϕF6(⋯gϕC1(T(I,θT))))
其中 ϕ ( C 1 , ⋯ , F 7 ) \phi(C_1,\cdots,F_7) ϕ(C1,⋯,F7)为网络参数, θ T = { x 2 d , P ⃗ , r ⃗ } \theta_T=\{x_{2d},\vec P, \vec r\} θT={x2d,P,r}为人脸对齐参数。
最后将特征归一化到0到1之间以降低光照变化的敏感性。特征向量的每个分量除以其在整个训练集中的最大值。这通过 L 2 L_2 L2归一化得到: f ( I ) : = G ˉ ( I ) / ∥ G ˉ ( I ) ∥ 2 f(I):=\bar G(I) / \|\bar G(I)\|_2 f(I):=Gˉ(I)/∥Gˉ(I)∥2,其中 G ˉ ( I ) = G ( I ) i / max ( G i , ϵ ) \bar G(I)=G(I)_i/\max(G_i,\epsilon) Gˉ(I)=G(I)i/max(Gi,ϵ)。由于使用了ReLU激活函数,系统对于图像强度的重新缩放不是不变的。在DNN中不适用偏置,完全均衡可能会实现。
在无约束人脸识别条件下,验证两个输入实例是否属于同一类别已被广泛研究,监督方法比无监督方法性能更好。通过在目标域的训练集上训练,人们能够微调特征向量(或分类器),以便在数据集的特定分布范围内表现得更好。但是在不同的数据集上训练和测试时会严重降低性能,需要进一步微调表征(分类器)来提高泛化性和性能。然而在一个小的数据集上拟合模型会降低他在其他数据集上的泛化性。我们需要学习一个无监督度量以便很好的泛化到其他数据集上。采用两个归一化特征向量的内积作为无监督相似性。
有监督度量:
加权 χ 2 \chi^2 χ2距离
χ 2 ( f 1 , f 2 ) = ∑ i w i ( f 1 [ i ] − f 2 [ i ] ) 2 / ( f 1 [ i ] − f 2 [ i ] ) \chi^2(f_1,f_2) = \sum_i w_i(f_1[i]-f_2[i])^2/(f_1[i]-f_2[i]) χ2(f1,f2)=i∑wi(f1[i]−f2[i])2/(f1[i]−f2[i])
其中 f 1 f_1 f1和 f 2 f_2 f2是人脸表征,权值参数使用线性SVM训练得到。
对偶网络
端到端度量学习:一旦网络完成学习,人脸识别网络(不包含输出层)被复制两次(每张输入图像一个),特征被直接用于预测两张输入图像是否属于同一人。将特征间的绝对值误差作为一个全连接层的输入,然后映射到一个单一的逻辑单元(是与否)。为了避免人脸验证任务过拟合,仅训练两个顶层,对偶网络诱导距离:
d ( f 1 , f 2 ) = ∑ i α i ∣ f 1 [ i ] − f 2 [ i ] ∣ d(f_1,f_2) = \sum_i \alpha_i|f_1[i]-f_2[i]| d(f1,f2)=i∑αi∣f1[i]−f2[i]∣
其中 α i \alpha_i αi为可训练参数,对偶网络使用标准交叉熵作为目标损失。