最近再看face alignment的相关文章,目前比较流行的算法都是基于(Cascaded pose regression,CPR)[1]的框架上作的,该算法之因此流行的缘由是简单高效。CPR分为训练和检测两个部分,首先介绍检测流程:算法
face alignment的目的是估计向量face shape,该向量由组成,其中K表示landmark的个数,因为每一个landmark有横纵两个坐标,将全部的坐标链接起来构成长度为2K的向量即face shape。CPR检测流程如上所示,一共有T个stage,在每一个stage中首先进行特征提取ft,这里使用的是shape-indexed features,也可使用诸如HOG、SIFT等人工设计的特征,或者其余learning based features,能够经过查阅最新的cvpr文章进行了解,而后经过训练得倒的regressor R估计获得upadate vector 即增量ΔS,把ΔS加到前一个stage的shape上获得新的shape,这样经过不断的迭代便可以获得最终的shape。我感受直白一些就是说经过不断的递归,使初始的shape朝着ground truth shape不断的靠近。框架
接下来是训练流程设计
首先是输入,N表示样本的个数,I表示图像,Si表示ground truth shape,剩下的那个参数表示initial shape,这个shape如何选取呢?从training data中随机的选取20个其余人脸的ground truth shape做为样本的initial shape 则训练样本的数量=原有的样本个数×20,即data augmentation 目的是为了enlarge training data和improve gengeralization ability。blog
接下来开始训练,每一个stage中对于每一个样本先经过ground truth shape与当前的shape相减计算得出ΔS,在第一个stage时,当前的shape为initial shape,而后进行特征提取得倒ft,以后经过loss function选择偏差最小的regressor,如何创建regressor和ΔS,就须要看paper了,好比SDM,LBF,ERT等等,我会在以后的博客中分享。递归
最后利用特征ft 和regressor得倒ΔS加到上一个stage的shape上获得当前stage的shape,而后用于下一个stage的求解。博客
经过T个stage的训练将全部的regressor保存起来用于检测。it
由上能够看出CPR中主要的操做是向量相加,不只有效并且计算复杂度较低,因此近年来在face alignment中普遍应用。io
参考文献function
[1]Dollár, P., Welinder, P., Perona, P.: ‘Cascaded pose regression’. Proc.
IEEE Conf. Computer Vision and Pattern Recognition, 2010sed