1. 程式人生 > >人臉對齊:TCDNN人臉關鍵點演算法2014

人臉對齊:TCDNN人臉關鍵點演算法2014

《Facial Landmark Detection by Deep Multi-task Learning》發表於ECCV-2014,作者來自香港中文大學湯曉鷗團隊的Zhanpeng Zhang等人。

創新點: 
1.將MTL(多工學習)結合CNN應用到人臉關鍵點檢測 
2.為解決各任務有著不同收斂速度而導致的優化難問題,提出針對多工學習的early stopping。

Zhang等人將MTL(Multi-Task Learning)應用到人臉關鍵點檢測中,提出TCDCN(Tasks-Constrained Deep Convolutional Network)。作者認為,在進行人臉特徵點檢測任務時,結合一些輔助資訊可以幫助更好的定位特徵點,這些資訊如,性別,是否帶眼鏡,是否微笑和臉部的姿勢等等。看看作者給的對比圖,感受一下~~: 
這裡寫圖片描述

———————————————分割線—————————————————–

作者將人臉關鍵點檢測(5個關鍵點)與性別,是否帶眼鏡,是否微笑和臉部的姿勢這四個子任務結合起來構成一個多工學習模型,模型框架如圖所示。 
這裡寫圖片描述

網路輸出為40*40的灰度圖,經過CNN最終得到2*2*64的特徵圖,再通過一層含100個神經元的全連線層輸出最終提取得到的共享特徵。該特徵為所有任務共同享用,對於關鍵點檢測問題,就採用線性迴歸模型;對於分類問題,就採用邏輯迴歸。 
在傳統MLT中,各任務重要程度是一致的,其目標方程如下: 
這裡寫圖片描述
其中, f(xt;wt)f(xt;wt)表示xtxt 與權值矩陣wtwt相乘之後經過函式f()f(∗) ,l

()l(∗) 表示損失函式,Φ()Φ(⋅) 是正則項。可以看到對於各任務t而言,其重要性是相同的,但是在多工學習中,往往不同任務的學習難易程度不同,若採用相同的損失權重,會導致學習任務難以收斂。文章針對多工學習中,不同學習難度問題進行了優化,提出帶權值的目標函式: 
這裡寫圖片描述
其中,第一項表示主任務的損失函式,即人臉關鍵點檢測的損失函式,第二項表示其餘各子任務的損失函式,其中 λaλa表示任務a的重要性因子。針對人臉關鍵點檢測任務,本文結合了四個子任務,分別是:性別、是否帶眼鏡、是否微笑和臉部的姿勢,最終目標函式為: 
這裡寫圖片描述
其中,第一項是平方和誤差,表示人臉關鍵點損失函式,第二項是分類任務,採用的是交叉熵誤差,第三項即正則項。
針對多工學習的另外一個問題——各任務收斂速度不同,本文提出一種新的提前停止(Early Stopping)方法。當某個子任務達到最好表現以後,這個子任務就對主任務已經沒有幫助,就可以停止這個任務。文章給出自動停止子任務的計算公式,如下: 
這裡寫圖片描述

其中, EatrEtra表示訓練得誤差, EavalEvala表示驗證的誤差,εε 為閾值,第一項表示訓練誤差的趨勢,第二項表示泛化誤差與訓練誤差之比,當兩項之積大於閾值 ,則該任務停止。

TCDCN採用多工學習方法對人臉關鍵點進行檢測,針對多工學習在人臉關鍵點檢測任務中的兩個主要問題——不同任務學習難易程度不同以及不同任務收斂速度不同,分別提出了新目標函式和提前停止策略加以改進,最終在AFLW和AFW資料集上獲得領先的結果。同時對比於級聯CNN方法,在Intel Core i5 cpu上,級聯CNN需要0.12s,而TCDCN僅需要17ms,速度提升七倍有餘。

隨筆: 
TCDCN是藉助了MTL(多工學習)機制,有效將面部屬性(如:性別,是否戴眼鏡,微笑與否,面部姿勢)結合到人臉關鍵點檢測任務上。 
理論支撐:在進行人臉特徵點檢測任務時,結合一些輔助資訊可以幫助更好的定位特徵點。

TCDCN與TCNN是否有相似之處? 都是在面部屬性上做文章,TCNN是將fc層的特徵進行聚類(感覺是個繞了彎的trick,肯定是能把不同屬性的sample聚到一簇裡的啦,何必從fc層的特徵去做?),然後依據不同面部屬性分別的訓練一個輸出層;而TCDCN則是隻訓練一個輸出層,只不過在訓練時,有了四個子任務loss的輔助,給主任務做一定的“指導”。