机器学习---人脸对齐的基于形状模型的训练
基于形状模型的方法 主导了早期的人脸对齐思路, 这类方法 从局部特征中搜索关键点,对噪声比较敏感,CLM类(包括ASM、AAM)方法是这一类的典型代表。
在这一节,讲一下人脸对齐的一个重要算法 ESR,之所以重要,是因为 ESR开启的回归方法 -回归方法是对形状模型改进的一个重要方向。
ESR 之后,有两个著名算法,1ms 和 3000FPS(业内的简明叫法),已得到广泛应用。
• ESR
ESR算法来自 MSRA的曹旭东等,全称是 显式形状回归(Explicit Shape Regression),ESR并没有用PCA去约束形状模型,其核心在于回归。
ESR关键点之一:两级回归模型
1)Boost回归
这是一种提升型回归,将若干 弱回归器 (R0,R1,R2……)通过叠加的方式进行组合,对于给定的人脸样本 I,得到:
S(t) = S(t-1) + Rt ( I, S(t-1) )
回归器 Rt 由上一个形状 S(t-1) 训练得到,并对上一个形状 S(t-1) 进行修正,得到新的形状参数 S(t),示意描述为:
通过训练样本 I 对回归器(R0,R1…Rt)进行循环训练,直到训练误差不再增加,每个回归器R通过最小化误差函数计算,描述为:
其中
表示第 i 个样本
的真实形状(Ground truth),回归器 Rt 是一个 形状增量(即训练样本误差)。
2)cascade回归
ESR基于cascade regression框架(CVPR2010),算法对整个形状回归,对于较大的图像差异以及粗糙的初始化,单层弱回归器训练时收敛慢,测试结果差。
为了在训练时收敛更快更稳定,采用了两层级联的结构,如图所示:
每个回归器 R 由若干 弱回归器 r 组成,也就是说 回归器(r0,r1…rk)对应于同样的输入( 上图S(1) ),同样的输出( 上图S(2) )。
作者在训练中得到一个效果比较好的经验值 (t=10,k=500),上层采用10个回归器R 级联,下层每个回归器R对应500个弱分类器组合。
ESR关键点之二:回归依据
1)形状索引特征
ESR算法 通过 形状索引特征 来进行描述:
a)计算P个特征点 两两之间的像素差,像素采用 局部坐标系(需要 归一化到平均脸来计算像素差分)描述,相比全局坐标系稳定性更好。
通过协方差矩阵来计算:
得到 P(P-1)/2 个特征。其中pm、pn分别为对应像素点m、n的灰度值,这里有两个关键点:
为什么选择像素差:特征描述更加简单,计算回归时能够更快收敛;
b)将回归目标投影到一个随机方向,得到一个标量 D,并从上面特征中选择一个与该标量D相关度最高的一个特征;
随机投影可以有效保留 近似投影方向的特征,同时有别于其他的形状偏差,且多个方向的投影可以降低相关性,使特征更容易选取。
c)对步骤 b)重复计算F次,得到 F 个特征;
注:单个差值本身不反应区域特征,通过多个差值的组合来进行判别。d)将 F个特征与F个阈值组成一个 Fern。
2)随机蕨
对于下层弱回归器r,采用随机蕨(Random Fern)来实现,关于随机蕨 这里就不再细讲了,请参考论文:Fast key point recognition using random ferns。
• 1ms
基于2014年的一篇CVPR,One millisecond face alignment with an ensemble of regression trees,简称 ERT。
ERT 采用回归树方法直接从一个稀疏子集估计人脸特征点坐标,实现了高精度的人脸对齐效果。
该方法在dlib中有实现,这里仅列出。
• LBF(3000FPS)
2014年的一篇CVPR, Face Alignment at3000 FPS via Regressing Local Binary Features。
基于局部特征的回归方法,任少卿(MSRA 孙剑 组)力作,Github上热心网友也提供了源码(需要同时下载dataSet):
https://github.com/yulequan/face-alignment-in-3000fps
文章的主要贡献是使用限制使用了 LBF局部特征 和 回归树:
1)LBF特征提取
通过在特征点附近随机选择点做残差来学习 LBF特征,每一个特征点都会学到由好多随机树组成的随机森林,因此,一个特征点就得用一个随机森林生成的0,1特征向量来表示,将所有的特征点的随机森林都连接到一起,生成一个全局特征,后续过程就可以使用该全局特征做全局线性回归了。
2)基于Cascade的全局线性回归
回归是一个不断迭代的过程,∆S(t) 为 t 时刻的形状变化量,其输入 为 训练样本 I、t-1 时候的形状S(t-1) 变换得到:
∆S(t) = W(t)Φ(t) ( I, S(t-1) )
其中 W(t) 为线性回归矩阵,Φ(t) 为特征匹配函数。
回归过程 即是训练 变换矩阵W 和 特征匹配函数Φ的过程。
编译源码文件(设置 OpenCV2410 or 其他版本),设置数据集及图片路径,来看下对齐效果:
对齐效果貌似一般,但快是 一定、确定以及肯定的,Command Arguments:Demo Tom.png (阿汤哥)
测试对齐时间: 9.2ms :)