級聯回歸屬於人臉對齊中的判別方法,優點和缺點如下:
優點:
- 通過對initial shape進行調整,可以簡單方便地進行數據增廣。
- 能夠有效訓練大規模數據
- 簡單,通用性強,替換不同的特征和模型方便,計算效率高。
缺點:
- 大pose下效果差(跟initial shape主要是mean shape有關)。
用來做姿態估計可能並不太適合。
論文摘要
本文主要面向使用單幅圖像進行人臉對齊的問題。我們展示了如何利用級聯回歸樹,從像素強度(像素灰度值)的稀疏子集中估計人臉關鍵點的位置,並且取得了很好的預測效果以及完全可實時應用的性能。我們提出了一個基於gradient boosting學習級聯回歸樹,優化平方誤差loss,並且能夠處理標注不全數據的方法。我們展示了如何使用合適的先驗來利用圖像數據的結構幫助高效的特征選擇。我們同樣調研了不同的歸一化策略和這些策略對於防止過擬合的重要性。另外,我們分析了訓練數據的質量對於預測的影響,並研究了使用合成數據及性能數據增廣的影響。
參考:https://blog.csdn.net/App_12062011/article/details/78661992
“此算法通過建立一個級聯的殘差回歸樹(GBDT)來使人臉形狀從當前形狀一步一步回歸到真實形狀。每一個GBDT的每一個葉子節點上都存儲着一個殘差回歸量,當輸入落到一個節點上時,就將殘差加到該輸入上,起到回歸的目的,最終將所有殘差疊加在一起,就完成了人臉對齊的目的。”
Method
1. 回歸器的級聯 the cascade of regressors
其中S(t)S(t)表示第t級回歸器的形狀,是一個由坐標組成的向量,t表示級聯的級數,I為圖像,rtrt表示當前級的回歸器,是需要訓練的量。
更新策略采用GBDT梯度提升決策樹,即每級回歸器學習的都是當前形狀(當前形狀初始時為initial shape也就是mean shape)與ground truth形狀的殘差。
代碼見shape_predictor.h
參數及含義
級聯的級數表示GBDT的棵樹,相互獨立,有10棵GBDT就有10個特征池。
每層級聯包含樹的數目就是每棵GBDT有多少棵樹。500表示一共有10*500棵樹,每一個需要學習的回歸器rtrt由500個弱回歸器組成。
樹的深度指的是每棵子樹的深度,深度為5則葉子節點為32個。
特征池的size,就是特征池中選擇多少個坐標點。
num_test_splits,是指同一棵GBDT中,每一次節點分裂,都從特征池中挑出20對點,隨機產生20個閾值進行分裂。
oversampling_amount 初始化的時候隨機生成shape的倍數。R is the number of initialisations user per image.
2.學習級聯中的每一個回歸器 learning each regressor in the cascade
也就是訓練rt。
通過GBDT來表示初始形狀與真實形狀的關系,輸入時從當前圖像中提取出的特征,用像素差作為特征(特征是樹進行分裂的依據)。
構建一個GBDT 中的第一棵樹,將N張圖片輸入這一棵樹,圖片會落入其中一個葉子節點,全部分完后(有些葉子節點可能會沒有圖片落入,有的葉子節點會有多張圖片落入),計算殘差(殘差的含義是每一張圖片的當前形狀與真實形狀之間的差值),同一個葉子節點中的所有殘差取平均,保留在這個葉子節點中。
GBDT中的第二棵樹要基於第一棵樹,使用殘差+圖片current shape->current shape,來更新current shape。依次類推,構建一整棵GBDT。
3.基於樹的回歸器 tree based regressor
3.1 形狀不變的分裂測試 shape invariant split tests
3.2選擇節點進行分裂 choosing the node splits
3.3 特征選擇 feature selection
特征選擇和每棵樹中的節點如何分裂,合並起來一起說。
特征是像素差 pixel difference。
建立一個特征池feature pool(所有的GBDT樹,比如說10棵,相互獨立,那就有10個特征池)。特征池中有幾百上千個隨機挑選的點的坐標(對應於每一幅圖像中的不同像素值)。
節點分裂的時候,從特征池中挑選兩個點,計算每一幅圖像在這兩個點的像素值和像素差pixel difference,然后隨機產生一個分裂閾值,使用分裂閾值作為分裂依據,如果像素差小於這個閾值向左分裂,反之向右分裂。
重復這樣的過程,可以將所有的圖片分為兩部分(一個節點分裂,將圖片分為左右兩部分),然后根據方差判斷根據哪兩個點(特征池中挑選的)和哪個閾值分裂地比較好,就選擇這個點和閾值。
依次分裂直至葉子節點(都是二叉樹,且深度指定,葉子節點的數量是固定的)。
4. 處理缺失標簽 handling missing labels
Experiments
原文鏈接:https://blog.csdn.net/u010821666/article/details/81537254
