參考:https://zhuanlan.zhihu.com/p/73546427

摘要: 來自天津大學、武漢大學、騰訊AI實驗室、美國天普大學,在曉龍845上能做到140fps的人臉關鍵點檢測器。
應用場景: 人臉特效,疲勞檢測,美妝,
非官方code: https://github.com/polarisZhao/PFLD-pytorch
1. 挑戰
- 局部變化:表情、局部極端光照(如高亮和陰影)和遮擋會給面部圖像帶來部分變化/幹擾
- 全局變化:姿态和成像品質是影響人臉圖像整體外觀的兩個主要因素,當對人臉的整體結構進行錯誤估計時,會導緻很大一部分标志點的定位效果不佳
- 資料平衡
- 模型效率
針對上面的問題,本篇文章從,模型+loss兩個方面進行設計改進。(其實作在深度學習的論文,會分析相關的挑戰,但是并不會針對對應的挑戰設計解決方案,更多的還是在通用AI的層面進行設計)
2. 模型結構
圖1 模型結構圖
圖2 人臉關鍵點
圖3 輔助分支
- 整個模型基于mobilenetv2設計
- 上面的橙色框為人臉關鍵點預測分支。mobilenet-v2提取特征,3個不同尺度的特征融合之後,接全連接配接層輸出196個值,98個關鍵點
- 綠色框為輔助分支。經conv特征加強後,經fc輸出3個值,分别代表歐拉角
- 輔助分支不在實際推理的時候使用,隻用于訓練
3. 訓練
- PFLD的模型訓練政策
一開始我們設計的那個簡單的網絡,采用的損失函數為MSE,是以為了平衡各種情況的訓練資料,我們隻能通過增加極端情況下的訓練資料、平衡各類情況下的訓練資料的比例、控制資料資料的采樣形式(非完全随機采樣)等方式進行性能調優。(re-sample)
- 損失函數(re-weight)
【人臉關鍵點】——PFLD人臉關鍵點檢測解讀
上式中 wn為可調控的權值函數(針對不同的情況選取不同的權值,如正常情況、遮擋情況、暗光情況等等)。C為6,表示有6個類别。theta為人臉姿态的三維歐拉角(K=3),d為回歸的landmark和groundtrue的度量(一般情況下為MSE,也可以選L1度量)。M表示批量大小。N表示關鍵點個數為98。該損失函數設計的目的是,對于樣本量比較大的資料(如正臉,即歐拉角都相對較小的情況),給予一個小的權值,在進行梯度的反向傳播的時候,對模型訓練的貢獻小一些;對于樣本量比較少的資料(側臉、低頭、擡頭、表情極端),給予一個較大的權值,進而使在進行梯度的反向傳播的時候,對模型訓練的貢獻大一些。該模型的損失函數的設計,非常巧妙的解決了平衡各類情況訓練樣本不均衡的問題。
- 輔助網絡 PFLD的訓練過程中引入了一個子網絡,用以監督PFLD網絡模型的訓練。該子網絡僅在訓練的階段起作用,在inference的時候不參與;該子網絡的用處,是對于每一個輸入的人臉樣本,對該樣本進行三維歐拉角的估計,其groundtruth由訓練資料中的關鍵點資訊進行估計,雖然估計的不夠精确,但是作為區分資料分布的依據已經足夠了,畢竟還該網絡的目的是監督和輔助訓練收斂,主要是為了服務關鍵點檢測網絡。
【人臉關鍵點】——PFLD人臉關鍵點檢測解讀
4. 總結
- 論文從re-sample,re-weight,資料集擴充三個方面來對多場景的人臉挑戰進行處理。但是這樣需要資料集中增加類别标簽,如:模糊,遮擋,卡通…(暫時還沒有看到非監督的方法)
- 論文利用人臉關鍵點的另一個相關名額——歐拉角,進行輔助監督學習。其實人臉關鍵點隻需要紅色的虛線框,用不用歐拉角都無所謂。論文的思路是:歐拉角算是人臉姿态中的一個相關量。是以增加一個輔助分支進行監督學習。
總結,論文從通用AI設計的資料平衡+相關名額輔助兩個主要方面進行人臉關鍵點檢測器的設計
4. reference
- https://arxiv.org/pdf/1902.10859.pdf
- https://zhuanlan.zhihu.com/p/73546427