最近再看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。
接下來開始訓練,每個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保存起來用於檢測。
由上可以看出CPR中主要的操作是向量相加,不僅有效而且計算復雜度較低,所以近年來在face alignment中廣泛應用。
參考文獻
[1]Dollár, P., Welinder, P., Perona, P.: ‘Cascaded pose regression’. Proc.
IEEE Conf. Computer Vision and Pattern Recognition, 2010