Deep Learning Face Representation from Predicting 10,000 Classes
通过深度学习学习一组人脸高级特征表示,深度特征可以通过多类人脸识别任务有效学到,模型能够泛化到其他任务(如人脸验证)以及未出现在训练集中的新身份。学习一个分类器在训练集上识别出10,000个人脸身份,沿着特征提取层级逐渐降低神经元数量,逐渐在只有少量隐藏神经元的顶层形成紧致的与身份相关的特征。从人脸的不同区域提取特征形成互补和过完整的表示。

训练多个分类器再将特征拼接构成最终的身份特征。如图所示,ConvNets依据身份学习分类所有人脸,使用最后一层隐藏层神经元激活值作为特征。每一个ConvNet以一个人脸patch作为输入并在底层提取局部低级特征。特征数目随着特征提取级联不断减少,最终在顶层形成全局高级特征。顶部的级联包含高度紧凑的160维DeepID,包含丰富的身份信息,能够用于预测更多的类别(如1000类别)。同时预测所有身份而不是训练二分类器有两点考量:多分类任务比二分类任务更困难,能够充分应用神经网络的学习能力够来提取特征用于人脸识别;向ConvNets隐式添加了强正则器,帮助共享隐藏特征能够更好地对所有身份进行分类。这两点使得学习特征有更好的泛化能力,在小的训练集上不过拟合。DeepID维度远小于预测类别数,这是为了学习高度紧凑的可区分特征。进一步将提取自不同人脸区域的DeepID拼接起来形成互补且过完整的身份特征表示,强化特征的泛化与区分能力。

ConvNets使用四个卷积层(最大池化)提取特征,紧接着全连接DeepID层和softmax输出层。输入为39×31×k39\times 31\times k39×31×k的矩形块和31×31×k31\times 31\times k31×31×k的正方形块,其中kkk为通道数。
如图所示,当输入尺寸改变时,卷积层的特征图尺寸也会改变,DeepID层固定为160维。卷积操作可以表示为:
yj(r)=max(0,bj(r)+∑ikij(r)∗xi(r))
y^{j(r)}=\max(0,b^{j(r)}+\sum_i k^{ij(r)}*x^{i(r)})
yj(r)=max(0,bj(r)+i∑kij(r)∗xi(r))
其中xix^ixi与yjy^jyj是第iii个输入特征图和第jjj个输出特征图。kijk^{ij}kij是用于第iii个输入特征图和第jjj个输出特征图的卷积核,bjb^jbj是第jjj个输出特征图的偏置,采用ReLU激活函数,rrr表示权值共享的局部区域。
最大池化公式为:
yj,ki=max0≤m,n<s{xj⋅s+m,k⋅s+ni}
y^i_{j,k}=\max_{0\le m, n < s}\{ x^i_{j\cdot s+m, k\cdot s+n} \}
yj,ki=0≤m,n<smax{xj⋅s+m,k⋅s+ni}
其中第iii个输出特征图的神经元yiy^{i}yi在第iii个输入特征图xix^ixi的不重叠s×ss\times ss×s的局部区域内池化得到。
最后的DeepID隐藏层与第三层和第四层卷积层特征进行全连接,能够看到多尺度特征。这对于特征学习至关重要,因为经过连续的降采样后,第四个卷积层包含很少的神经元,成为了信息传播的瓶颈。添加旁路连接能够降低信息丢失,最后一个隐藏层为:
yj=max0,∑ixi1⋅wi,j1+∑ixi2⋅wi,j2+bj
y_j=\max{0,\sum_i x_i^1\cdot w^1_{i,j}+\sum_i x^2_i\cdot w^2_{i,j}+b_j}
yj=max0,i∑xi1⋅wi,j1+i∑xi2⋅wi,j2+bj
其中x1,w1,x2,w2x^1,w^1,x^2,w^2x1,w1,x2,w2代表第三层和第四层对应的神经元和权值,使用ReLU激活函数。
ConvNet输出n类softmax预测n个不同身份的概率分布:
yi=expyi′∑j=1nexp(yj′)
y_i=\frac{\exp y'_i}{\sum_{j=1}^n\exp(y'_j)}
yi=∑j=1nexp(yj′)expyi′
其中yj′=∑i=1160xi⋅wi,j+bjy'_j=\sum^{160}_{i=1}x_i\cdot w_{i,j}+b_jyj′=∑i=1160xi⋅wi,j+bj。网络最小化−logyt-\log y_t−logyt,使用随机梯度下降进行反向传播。
检测人脸的五个关键点,包括两个眼睛中心,鼻尖和两个嘴角,根据两只眼睛中心和嘴角中点使用相似变换进去全局人脸对齐。使用60个人脸块提取特征,包括十个区域、三种尺度、RGB和灰度图。训练60个ConvNets,每个网络模型从一个图块中提取2个160维DeepID,包含原图和水平翻转。在两只眼睛和两个嘴角周围不进行翻转,而是采用它们的对称图块。最终总的Deep ID长度维19200维。
使用联合贝叶斯进行人脸验证。使用两个独立的高斯变量之和表示提取的面部特征xxx(减去均值后):
x=μ+ϵ
x = \mu + \epsilon
x=μ+ϵ
其中μ∼N(0,Sμ)\mu\sim N(0,S_\mu)μ∼N(0,Sμ)表示人脸身份,ϵ∼N(0,Sϵ)\epsilon\sim N(0,S_\epsilon)ϵ∼N(0,Sϵ)表示个体内部变化。联合贝叶斯模型在给定类内或类间变化假设的情况下对两张面孔的联合概率进行建模,P(x1,x2∣HI)P(x_1,x_2|H_I)P(x1,x2∣HI)和P(x1,x2∣HE)P(x_1,x_2|H_E)P(x1,x2∣HE)。两个概率也符合高斯分布:
∑I=[Sμ+SϵSμSμSμ+Sϵ]∑E=[Sμ+Sϵ00Sμ+Sϵ]
{\sum}_I = \left[ \begin{matrix} S_\mu+S_\epsilon & S_\mu \\ S_\mu & S_\mu+S_\epsilon \end{matrix} \right] \\
{\sum}_E = \left[ \begin{matrix} S_\mu+S_\epsilon & 0 \\ 0 & S_\mu+S_\epsilon \end{matrix} \right]
∑I=[Sμ+SϵSμSμSμ+Sϵ]∑E=[Sμ+Sϵ00Sμ+Sϵ]
对应的SμS_\muSμ和SϵS_\epsilonSϵ可以使用EM算法从数据中学到。在测试阶段,计算似然率:
r(x1,x2)=logP(x1,x2∣HI)P(x1,x2∣HE)
r(x_1,x_2) = \log \frac{P(x_1,x_2|H_I)}{P(x_1,x_2|H_E)}
r(x1,x2)=logP(x1,x2∣HE)P(x1,x2∣HI)
有有效的封闭形式解。
也可以训练一个神经网络模型用于验证。
