您的位置:首页 > 其它

人脸关键点定位3000fps的LBF方法

2017-06-07 21:49 323 查看
3000fps人脸对齐论文理解:

比较好的理解http://www.thinkface.cn/thread-4216-1-1.html

3000fps总体上采用了随机森林和全局线性回归相结合的方法,相对于使用卷积神经的深度学习方法,3000fps采用的算是传统的机器学习方法。论文中思路与前几年的论文
Face Alignment by Explicit Shape Regression(下面简称 ESR) 还有 Robust face landmark estimation under occlusion(下面简称 RCPR) 有共通之处。这三篇论文的总体思路都可以用下面这个公式来表达

St=St−1+Rt(I,St−1)
这个公式包含了很多信息,我们先来认识几个名词。我们把关键点的集合称作形状,形状包含了关键点的位置信息,而这个位置信息一般可以用两种形式表示,第一种是关键点的位置相对于整张图像,第二种是关键点的位置相对于人脸框(标识出人脸在整个图像中的位置)。我们把第一种形状称作绝对形状,它的取值一般介于
0 到 w or h,第二种形状我们称作相对形状,它的取值一般介于 0 到 1。这两种形状可以通过人脸框来做转换。公式中的 St 就表示了绝对形状,Rt 表示一个回归器,I 表示图像,Rt 根据图像和形状的位置信息,预测出一个形变,并将它加到当前形状上组成一个新的形状。t 表示级联层数,一般我们会通过多层级联来预测形状。
回归器 Rt
ESR 和 RCPR 采用了随机厥作 Regression,随机厥在叶子节点中存储了对应的形变,在预测过程中,当样本落入某个叶子节点时,就将其上存储的形变作为预测的输出,我们在这里不具体展开随机厥的相关内容。而在 3000fps 中使用了较为复杂的实现。首先,3000fps
并没用采用随机厥作为预测的单元,而是采用了随机树,并且用随机森林来做预测。其次 3000fps 并没有直接采用随机树叶子节点存储的形变量作为预测输出,而是将随机森林的输出组成一种特征(称作 LBF),利用这个 LBF 来做预测。除了采用随机森林的结构来做预测,3000fps 还针对每个关键点给出一个随机森林来做预测,并将所有关键点对应的随机森林输出的局部特征相互连接起来,称作局部二值特征(LBF),然后利用这个局部二值特征来做全局回归,用来预测形变。





上图描述了回归器 Rt 的训练和预测过程。其中 Φtl 表示第 t 级中第 l 个关键点所对应的随机森林,所有关键点的随机森林一起组成了 Φt,它的输出为 LBF 特征。然后利用 LBF 特征来训练全局线性回归或者预测形变。




上图描述了 Rt 生成 LBF 特征的过程,图的下半部分描述了单个关键点上随机森林输出了一个局部二值特征,然后把所有随机森林的输出前后连接起来组成一个非常大但又非常稀疏的 LBF 特征。这个特征只有 01 组成,且大部分是 0,特征非常稀疏。
Shape-indexed 特征
每个关键点都会对应一个随机森林,而每个随机森林是由多个相互独立的随机树组成。论文中的随机树采用的特征被称作 Shape-indexed 特征,ESR 和 RCPR 中也是用到了相同的特征,这个特征主要描述为人脸区域中两个点的像素差值。关于两个像素点的选取,三个方法使用到了不同的策略。




ESR 方法采用在两个关键点附近随机出两个点,做这两个点之间的差值作为 Shape-indexed 特征.




RCPR 方法采用选取两个关键点的中点外加一个随机偏置来生成特征点,用两个这样的特征点的差值作为 Shape-indexed 特征。
在 3000fps 中,由于随机森林是针对单个关键点的,所有随机树中使用到的特征点不会关联到其他关键点上,只在当前关键点的附近区域随机产生两个特征点,做像素差值来作为 Shape-index 特征。




3000fps 中随着级联的深入(即 t 越来越大),随机点的范围也会逐渐变小,以期获得更加准确的局部特征。
随机树的训练
上一节已经确定了随机树训练时用到的 Shape-indexed 特征。在训练随机树时,我们的输入是 X={I,S} 而预测目标是 Y=ΔS。实际在训练随机树时,树中的每个节点的训练过程都是一样的。我们在训练某个节点时,从事先随机生成好的 Shape-indexed
特征集合 F 中选取一个(当然,你也可以临时随机生成一个特征集合,或整棵随机树使用一个特征集合或整个随机森林使用一个特征集合,我们这里假设这棵随机树使用一个特征集合),选取的特征能够将所有样本点 x 映射成一个实数集合,我们再随机一个阈值将样本点分配到左右子树中,而目的是希望左右子树中的样本点的 y 具有相同的模式。特征选取可以用如下公式描述
f=argmaxf∈FΔ
Δ=S(y|y∈Root)−[S(y|y∈Left)+S(y|y∈Right)]
y∈{Left,Right,f(x)<δf(x)>=δ
上述公式中 F 表示特征函数集合,f 表示选取到的特征函数(即利用随机到的特征点计算 Shape-index 特征),δ 表示随机生成的阈值,S 用来刻画样本点之间的相似度或者样本集合的熵(论文中采用了方差)。针对每个节点,训练数据 (X,Y) 将会被分成两部分
(X1,Y1) 和 (X2,Y2),我们期望左右子树中的样本数据具有相同的模式(Y 的分布尽量固定下来,熵越小?),这个论文中用了方差来刻画,所以选择特征函数 f 时,我们希望方差减小最大。




随机树的每个节点都采用这种方法训练,而每棵随机树都是相互独立训练的,训练过程都是一样的,这样单个关键点的随机森林就训练完毕了。
全局线性回归训练
按照常理,我们可以在随机树的叶子节点上存储预测的形变,测试时可以将随机森林中每棵随机树的预测输出做平均或者加权平均,然而 3000fps 并没有这样做,它将随机树的输出表示成一个二值特征(详情见上面的图),将所有随机树的二值特征前后连接起来组成一个二值特征,即
LBF 特征。论文中,利用这个特征做了一次线性回归,将形变作为预测目标,训练一个线性回归器来做预测。

Wt=argminWt∥ΔS−Wt⋅lbf∥2+λ∥Wt∥2
线性回归可以用如上公式表示,ΔS 形变目标,lbf 表示特征,Wt 是线性回归的参数,λ 用来抑制模型,防止出现过拟合。预测时采用下面的公式

ΔS=Wt⋅lbf
在 3000fps 论文中,多级级联回归的方法的每一级都可以按如上所讲的拆分两个部分,利用随机森林提取局部二值特征,再利用局部二值特征做全局线性回归预测形状增量 ΔS。
关于 S0
在之前的讨论中,我们并没有说明 ΔS 具体是绝对形状增量还是相对形状增量。在实际情况中,我们需要 ΔS 为相对形状增量,因为绝对形状的位置是相对于整个图像的,我们无法对数据的绝对形变的分布做约束(绝对形变虽然可以抹去位置的绝对信息,但人脸框的尺度无法约束)。在提取局部二值特征时,我们需要绝对形状下的图像像素信息,而在预测得到的则是相对形状增量,而这两者可以通过人脸框做相互之间的转换。
所有形变 ΔS 均是相对于当前形状而言,通过级联的方式叠加在一起,而初始形状 S0 与模型预测本身无关,但是这个 S0 模型预测过程中起来关键性作用。我们假设预测样本理论上的真实形状为 Sg,那么 S0 和 Sg 两者之间的差异的大小将直接影响到预测结果的准确性。3000fps
中采用了训练样本的平均形状作为初始形状,而 RCPR 则选择从训练样本中随机选择初始形状。
一般来说,S0 是相对形状通过人脸框转变为绝对形状对应到当前的人脸中,那么人脸框的尺度对 S0 与 Sg 之间的差异也起到了决定性的作用,所以我们一般都需要用相同的人脸检测方法来标记训练图像和预测图像上的人脸框,保证两者的人脸框尺度,从而提高 S0
的准确性。但是我们不得不承认算法本身仍旧受到 S0 很大的影响。包括 RCPR 和 ESR 方法也同样受制于 S0。相比较而言,深度学习方法则没有太大的影响,一般可以先通过网络来预测得到 S0,这时的 S0 和 Sg 之间的误差能够做到非常小,进而再在 S0 的基础上做细微的修正,提高精度,深度级联卷积网络预测关键点就是采用了这个思路。虽然深度学习的方法能够摆脱 S0 的限制,但它仍然受制于人脸框的尺度,而且尺度对其模型的预测影响比其他传统方法也好不到哪里去。

代码参考:https://github.com/yulequan/face-alignment-in-3000fps
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: