《Face Alignment by Explicit Shape Regression》笔记

Introduction

《Face Alignment by Explicit Shape Regression》发表在2012年的CVPR上。该论文的主要思想是不断调整已有的人脸特征点的位置,使得人脸特征点不断地往真实人脸靠拢,最终与真实人脸对齐,而且速度非常快。这个逐步缩小人脸特征点坐标误差的方法名为explicit shape regression,具体过程如下图所示:
《Face Alignment by Explicit Shape Regression》笔记

Motivation

人脸对齐,顾名思义,就是使预测的人脸形状与实际人脸形状进行对齐。人脸形状一般使用人脸特征点表示。一个人脸形状S=[x1,y1, ,xNfp,yNfp]TS=[x_1, y_1, \cdots, x_{N_{fp}}, y_{N_{fp}}]^TNfpN_{fp}个特征点。在人脸对齐任务中,给定一张人脸图片,使得人脸形状S足够接近真实的人脸形状S^\hat{S},用公式表示,就是最小化
(1)SS^2 \lVert S - \hat{S} \rVert _2 \tag{1}

对齐方法有两大类,分别是基于优化和基于回归的方法。

基于优化的方法,比如AAM,构建了一个脸部模型,并通过最小化一个损失函数来实现人脸对齐,但是该人脸模型在表达复杂的和微妙的人脸变化有局限性,这种方法可能在遮盖脸上不起作用。

基于回归的方法学习一个回归器把人脸图片直接映射到目标输出。例如AAM使用参数模型,在训练时最小化模型参数误差,但是模型参数误差与人脸对齐误差(公式1)是不同的,导致得到的结果可能是局部最优。

同时,所有模型都应该注意到人脸的形状约束。只有一些显著的人脸特征点可以直接从图片外貌中判断出来,比如眼睛中心,嘴角等。大多数其他人脸特征点需要相对其他特征点才能判断出来,比如人脸的轮廓。许多方法为了保持人脸形状约束而在测试时固定好形状约束,使得人脸对齐得很粗糙。

Method

为了使人脸形状S逐渐逼近S^\hat{S},论文使用提升回归(boosted regression)方法,使用T个弱回归器(R1, ,Rt, ,RT)(R^1, \cdots, R^t, \cdots, R^T)进行加法迭代。靠前的迭代器处理大的形状变动来保证算法的鲁棒性,而靠后的回归器处理小的形状变动来确保对齐精度。给定一张人脸图片I和初始化人脸形状S0S^0,每个回归器从提取的图片特征中计算一个形状增量δS\delta S,并更新人脸形状S,如
(2)St=St1+Rt(I,St1),t=1, ,T S^t = S^{t-1} + R^t(I, S^{t-1}), t = 1, \cdots, T \tag{2}
该公式表示第t个回归器RtR^t更新前一个人脸形状St1S^{t-1}为新的形状StS^t

给定N个训练样本(Ii,S^i)i=1N(I_i, \hat{S}_i)_{i=1}^N,回归器(R1, ,Rt, ,RT)(R^1, \cdots, R^t, \cdots, R^T)会依次训练直到训练误差不再下降。每个回归器RtR^t的学习目标是最小化人脸对齐误差:
(3)Rt=argminRi=1NS^i(Sit1+R(Ii,Sit1)) R^t = \arg \underset{R}{\min} \sum_{i=1}^N \lVert \hat{S}_i - (S_i^{t-1} + R(I_i, S_i^{t-1})) \rVert \tag{3}
公式2和3与梯度提升算法很像,但是它不是梯度提升算法。梯度提升算法每次迭代使用的样本特征都是不变的,但是该方法每次迭代提取的图片特征不同,这个之后再讲。

Two-level cascaded regression

该论文使用提升回归算法,我们来看看它使用的弱回归器。论文中说弱回归器比如决策树桩和fern的效果不好。这些回归器太弱了以至于在训练时很难收敛。论文中给出的解释是在图片有大的外貌变动和粗略的初始化人脸形状的情况下,对整个形状进行回归太难了。因此,论文使用更强的回归器——提升回归模型。整个回归模型有两层回归,文中称为two-level cascaded regression。具体的说,每一个回归器RtR^t,我们使用K个回归模型来学习,即Rt=(r1, ,rk, ,rK)R^t = (r^1, \cdots, r^k, \cdots, r^K)。我们称这个回归器rr为初级回归器(Primitive regressor)。初级回归器训练过程类似公式2和3,这里注意的一点是,训练RtR^t初级回归器rr使用的特征不再变化,特征是RtR^t阶段的特征。因此,训练回归器RtR^t的方法是梯度提升模型。因为,如果训练初级回归器同样使用变动的特征,那么第二层回归与第一层回归一样,二者没有区别。整个双层级联回归模型如下图所示
《Face Alignment by Explicit Shape Regression》笔记

论文指出,在同样的训练效果下,双层级联回归模型的表现效果比一层回归模型的要好,例如,T=10,K=500比一层的T=5000效果好,具体的实验比较如下图所示
《Face Alignment by Explicit Shape Regression》笔记

Primitive regressor

论文中第二层使用的弱分类器r使用随机蕨(fern)。随机蕨有F个特征和阈值,把样本空间划分成2F2^F个bin,随机蕨就是一个完全二叉树,如下图所示
《Face Alignment by Explicit Shape Regression》笔记
类似于回归树,随机蕨根据某个特征和相应阈值把样本划分为两部分,遍历一次F个特征,把样本划分成2F2^F份,这2F2^F个叶子结点分别代表一个输出。

回到论文,论文中F=5。随机蕨的每个叶子结点b对应一个回归输出δSb\delta S_b,最优的输出结果是最小化叶子结点b中的所有训练样本Ωb\Omega_b的人脸对齐误差:
(4)δSb=argminδSiΩbS^i(Si+δS) \delta S_b = \arg \underset{\delta S}{\min} \sum_{i \in \Omega_b} \lVert \hat{S}_i - (S_i + \delta S) \rVert \tag{4}
其中SiS_i表示上一步迭代的人脸形状。最优结果是平均人脸形状误差:
(5)δSb=iΩb(S^iSi)Ωb \delta S_b = \frac{\sum_{i \in \Omega_b}(\hat{S}_i - S_i)}{|\Omega_b|} \tag{5}

为了避免叶子结点的训练样本不足导致过拟合,论文使用下列公式替换公式5,减少叶子结点的输出值:
(5)δSb=11+β/ΩbiΩb(S^iSi)Ωb \delta S_b = \frac{1}{1 + \beta / |\Omega_b|} \frac{\sum_{i \in \Omega_b}(\hat{S}_i - S_i)}{|\Omega_b|} \tag{5}
其中β\beta表示缩水参数(shrinkage parameter)。当训练样本数量足够时,Ωb+|\Omega_b| \to +\infty11+β/Ωb1\frac{1}{1 + \beta / |\Omega_b|} \to 1,对实际输出没有影响;如果样本数量不足时,Ωb|\Omega_b|减少,11+β/Ωb\frac{1}{1 + \beta / |\Omega_b|}减少,导致δSb\delta S_b减少,较小的δSb\delta S_b不会带来太大的误差。

Non-parametric shape constraint

现在来说一下论文算法如何保持人脸形状约束的影响。因为每个形状更新都是通过公式2进行加法运算,每个形状增量都是训练形状{S^i}\{\hat{S}_i\}的线性组合,看公式5或6,因此最终的回归形状S可以表示成初始形状S0S^0加上所有训练形状的线性组合:
(7)S=S0+i=1NwiS^i S = S^0 + \sum_{i=1}^N w_i \hat{S}_i \tag{7}
因此,只要初始形状S0S^0保持形状约束,回归形状总是被约束为驻留在由所有训练形状构造的线性子空间中。

Shape-indexed image feature

接下来看看论文是如何提取图片特征的。首先要讲的是形状索引特征(Shape-indexed image feature)。

论文对选择的像素点的记录方式不是使用像素点在原图中的坐标点,而是相对于离它最近的人脸特征点的相对坐标(δx,δy)(\delta x, \delta y),称为形状索引。这样做的好处是可以实现更好的几何不变性和更快的收敛速度。如下图所示,像素点的坐标使相对于人脸特征点(a),而不是相对于图片(b)。
《Face Alignment by Explicit Shape Regression》笔记

为了使特征相对于人脸的大小和旋转保持不变,论文首先计算相似变换以将当前人脸形状标准化为平均形状,其通过所有人脸特征点的最小二乘拟合来估计。然后,对于每一层每个回归器RtR^t,随机采样P个像素点(这些像素位置通过形状索引记录,在测试时使用),然后这P个像素点两两相减,得到P2P^2个像素差特征,再从这些特征中选择有效的特征。论文中P=400。

如何选择特征呢,通常的做法是使用这些特征随机生成一系列随机蕨,选择其中能够最小化如公式4的回归误差。论文定义这种方法为n-Best,就是从n个随机蕨中选择最好的一个。论文使用n-Best方法进行实验,训练误差只在n从1到1024中有明显的下降,而且训练时间非常长。

论文实际使用的方法是基于相关性特征选择法(CBFS)。对于机器学习来说,我们选择的特征应该有两个属性,(1)每个特征对目标有强区分能力;(2)特征之间相关性应该低,因此组合时可以互补。

论文的基于相关性特征选择方法过程是:

  1. 把回归目标投影到一个随机方向得到一个标量。
  2. P2P^2个特征中,选择一个与标量有最高相关性的特征。
  3. 重复步骤1和2 F次,得到F个特征。
  4. 使用这F个特征生成一个随机蕨。

随机投影是为了使特征之间的相关性低。论文对计算相关性的过程进行了一些优化,使得计算复杂度降低,提高了运算速度。

论文同样对比了n-Best和CBFS两种特征选择方法:
《Face Alignment by Explicit Shape Regression》笔记
可以看到n-Best随着n的增大,运行时间越来越大。CBFS不仅训练误差低,而且运算速度快。

Experiments result

具体的实现细节不讲了,看看实验结果。

在LFPW数据集上的结果(29个人脸特征点):
《Face Alignment by Explicit Shape Regression》笔记
可以看到实验的对齐误差很小。

而且,论文的方法速度非常快,5ms一张图片,比其他算法快千倍。

接着看看人脸对齐的效果:
《Face Alignment by Explicit Shape Regression》笔记

在LFW87数据集上的结果(87个人脸特征点):
《Face Alignment by Explicit Shape Regression》笔记
《Face Alignment by Explicit Shape Regression》笔记

在BioID数据集上的结果(17个人脸特征点):
《Face Alignment by Explicit Shape Regression》笔记

Conclusion

该论文的方法表现如此出色的原因,我觉得主要在于其逐步逼近的思想,其次是回归模型和形状索引特征的选择。该论文的逐步逼近法非常值得我们学习。