1. 程式人生 > >人臉特徵點檢測(四)——Tasks-Constrained DCN(TCDCN)

人臉特徵點檢測(四)——Tasks-Constrained DCN(TCDCN)

文章提出TCDCN(Tasks-Constrained Deep Convolutional Network),使用與人臉相關的屬性共同來學習人臉的特徵點位置,通過這種多工的學習,來提高人臉特徵點檢測的魯棒性。具體而言,就是在人臉特徵點檢測時候,同時進行多個任務(包括性別、是否戴眼鏡、是否微笑以及臉部姿勢)的學習。使用這些輔助屬性可以幫助更好的定位特徵點。

這種多工學習的困難在於:不同的任務有不同的特點,有不同的收斂速度。針對這兩個問題,作者給出的解決方法分別是tasks-constrained deep model和task-wise early stopping。文章所提出的方法優於當時已存在的方法,特別是能處理有嚴重遮擋和姿勢變化的情況,而且減少了模型的複雜度。


上圖展示了其他輔助屬性的檢測結果,人臉特徵點檢測這一任務可以與多個輔助任務同時進行,對比以前的CNN和Cascaded  CNN,文章具有更好的表現性

要點:

(1)對於不同的任務,具有不同的特點,文章給出的解決方法是tasks-constrained deep model

傳統的多工學習給每個任務都賦予相同的權重:


一般的多工學習則把主任務(特徵點)和其他任務(輔助屬性)分開處理,如下:


而文章採用對主任務(regression)採用最小二乘法作為損失函式,對輔助任務(classification)使用交叉熵損失函式,如下:


從這個式子上可以看到,損失函式的前半部分(f為線性函式)就是特徵點檢測,後邊部分(p為softmax函式)是不同分類任務的loss相加,最後一項是正則化項。

在訓練的時候,各個任務使用相同的特徵,只有在最後一級的時候才根據任務的不同做不同的處理(線性迴歸/分類)。

(2)不對於多工而言,不同的任務有著不同的損失函式,學習難度也不同,因此它們的收斂速度也可能相異。現有的解決這個問題的方法是通過探索這些任務的關係來解決,比如說通過所有任務的權重協方差矩陣,但是這篇文章提出了一個更有依據的方法:task-wise early stopping

當輔助任務達到最好的表現之後,這個任務對主任務就沒有什麼幫助了,這個時候就可以停止這個任務。那我們如何判斷這個輔助任務是否起到了它應起的作用呢,我們應該什麼時候終止這個任務呢?如下式所示,前一部分表示訓練誤差的趨勢,後一部分表示跟訓練誤差相比的泛化誤差。如果兩式乘積超過了某個閾值,則終止該任務。


文章所述,使用的是SGD(stochastic gradient descent)來更新任務的權重以及網路的過濾器,後向傳播計算梯度使用的策略如下:


TCDCN所用的框架如下,輸入是一個40x40的灰色影象,特徵提取階段包括4個卷積層、3個池化層和1個全連線層,過濾器的權重在空間上不是共享的,這意味著在輸入map中使用的是不同的過濾器集合。選擇絕對值整流的雙曲正切作為啟用函式;最大池化在沒有重疊的區域進行,跟在四個卷積層後的全連線層生成一個特徵向量,這個特徵向量在估計階段的時候被多個任務共享,其中線性迴歸(Linear regression)用來得出標記點位置,多個邏輯迴歸(logistic regression)用來處理其他多個人任務。


評估準則使用的額是均值誤差和失敗率來衡量,mean error通過計算landmark和the ground truths的距離,然後相對於雙目距離進行標準化得出,Mean error大於10%則認為失敗。

下圖是Facial Landmark Detection(FLD)和用其他輔助屬性進行比較的結果,很明顯可以看出使用輔助屬性進行特徵點檢測的誤差和失敗率比沒有使用輔助屬性的要低得多,而且使用的輔助屬性越多,效能及越好。



還推薦一篇作者同類型的文章:《Learning Deep Representation  for Face Alignment with Auxiliary Arribute》提出用輔助屬性的臉部對齊的深度表示