論文地址:RetinaFace: Single-stage Dense Face Localisation in the Wild
開源地址:https://github.com/deepinsight/insightface/tree/master/RetinaFace.
綜述
RetinaFace是一個多任務學習的多尺度人臉檢測模型,可實現人臉處理領域的檢測和關鍵點提取,並應用了FPN的UpSample實現特徵融合(多尺度檢測)。該研究的額外收益,是通過更準確的檢測對齊,提升了人臉識別模型的準確率。以下圖片均來源於論文截圖。
背景介紹
目前無約束人臉檢測已有了巨大的進步,但真實場景下人臉檢測的準確度和效率依然面臨挑戰,RetinaFace團隊在WIDERFACE數據集基礎上,通過標註5點關鍵點作爲人臉檢測訓練的額外監督信號,添加Mesh Decoder實現人臉三維編解碼進行自監督學習,顯著提升人臉檢測效果。
RetinaFace技術路線的設計基於以下原因:
- 特定特性的目標檢測:人臉檢測與普通目標檢測的相比,人臉快照的長寬比變化小(通常爲1~1.5),但尺度變化大,因此使用特徵金字塔(feature pyramid)以及可變性卷積網絡DCN。後者由微軟研究院於2017年提出,針對現實場景中目標在視角中呈現大小、姿態、視角變化甚至非剛體形變,在標準卷積採樣點添加一個可學習的偏移變量,使模型適應幾何形變特性的目標檢測(如何評價 MSRA 最新的 Deformable Convolutional Networks?),在2018年比賽中作用明顯;
- single-stage detection:相比two-stage methods處理更快,也是目前主流的研究方向,缺點是誤檢多且定位精度差,需要解決訓練時的樣本不均衡問題;
- extra supervision:人臉檢測包含人臉分類和位置迴歸,後續有基於檢測結果的級聯方法獲取關鍵點、MTCNN/STN在檢測時獲取關鍵點,作者在Mask R-CNN中發現類似關鍵點這樣的額外信息有助於提升目標檢測的準確度,因此將人臉關鍵點添加到人臉檢測中進行多任務學習;
- Mesh Decoder:結合現在出現的通過前景進行3維建模的技術,在人臉中添加注意力機制來提升檢測效果,在現存的監督分支上並聯一個自監督分支來實現。(參考文獻Dense 3D Face Decoding就是本文的參與作者,應該和PRNet有關,Insightface上有個同名目錄,但目前沒放實質性內容。這模型確實好,就是預訓練模型輸出項太多,也不好從開源中找到直接合適的數據自己訓練,倒是可以參考一些第三方實現)。
核心技術
損失函數
設定多任務訓練的損失函數:
即在人臉檢測的監督中加入檢測框和關鍵點的損失監督信號。這裏的中心歸一化就是將標註的點,放到以標註的anchor中心爲原點的座標上,並分別除以anchor的長寬。
Dense Regression Branch
Mesh Decoder是種圖卷積方法,相比二維卷積對歐式網格感受野計算加權和,圖卷積是計算連接兩個頂點的最小邊數。
實驗說明
數據
WIDER FACE,在此基礎上根據標註關鍵點的難易程度劃分5擋:
- 4127張高清人臉,可準確標註出68個關鍵點;
- 12636張較清晰人臉,能標註出68個關鍵點(大概是輪廓模糊)
- 38140張較模糊人臉,能準確標註出5個關鍵點(輪廓非常模糊)
- 50024張模糊人臉,能標註出5個關鍵點(只能勉強看出是人臉)
- 94095張沒法標註的人臉(只通過區域,已經看不出是什麼)
設置
特徵金字塔獲取5層多尺度特徵,骨架網絡是ImageNet-11k數據集上訓練的ResNet152分類模型,並在最後接上一個通過“Xavier”隨機初始化的3x3卷積層,stride=2。
Context Module,採用可變卷積網絡(DCN)對每個尺度的輸出添加後處理模塊。
損失權重,負樣本只用分類損失,正樣本添加1x1的卷積進行訓練,mesh decoder直接使用預訓練模型。
Anchor,對不同的金字塔輸出得到anchor,訓練的時候,與標註框的IOU大於0.5的匹配爲TP,小於0.3的匹配爲FP,中間未匹配部分在訓練時忽略;採用OHEM解決樣本不均衡問題,主要策略爲對負樣本按照損失值排序,按照與正樣本3:1的比例挑選靠前的部分。
數據增廣,從原圖中隨機摳取正方形區域,並resize到640x640,正方形摳選區域的邊長爲原圖最小邊的0.3~1,如果某人臉標註框的中心在摳選區域內,則保留該標註爲當前摳選區域中的有效人臉;同時對圖像按照0.5的概率進行隨機水平翻轉及顏色空間變換。
訓練參數:
項目 | 參數名 | 參數值 |
---|---|---|
訓練設備 | P40(24GB) x 4 | |
優化算法 | optimiser | SGD |
動量 | momentum | 0.9 |
權重衰減 | weight decay | 0.0005 |
批量 | batch size | 8 x 4 |
學習率 | lr | 初始化1e-3, 5 epochs 後1e-2, 55 epochs 後1e-3, 68 epochs 後1e-4 |
總迭代數 | epochs | 80 |
評價方法,採用WIDER FACE的評價標準,並對測試圖像水平翻轉以及短邊縮放到[500, 800, 1100, 1400, 1700],按照預測框與標註框0.4的IOU閾值進行統計。
訓練結果
多任務學習的性能提升
進行不同任務組合的性能對比,包含只有人臉檢測、人臉檢測+人臉關鍵點、人臉檢測+dense regression、人臉檢測+人臉關鍵點+dense regression,實驗證明通過多任務學習可以提高人臉檢測的性能。其中只增加dense regression方法時會出現hard檔數據檢測性能下降,作者認爲可能是dense regression在該場景下處理比較困難。
最終模型性能
檢測準確度,作爲目前性能最好的開源人臉檢測算法,在論文發佈時自然是WIDER FACE中準確度最好的,目前經次於AInnoFace、RefineFace。
關鍵點、3維點集等也達到不錯的效果,其中dense regression是通過自監督學習實現,在複雜場景下處理效果不佳,作者認爲可能是非對齊、1x1x256的緊湊特徵量的影響。
對人臉識別的幫助,基於更高性能的人臉檢測和關鍵點對齊,原有人臉識別模型性能得到進一步提升,即證明了人臉對齊對人臉識別的影響,也證明了RetinaFace的應用價值。
推理效率,除了在GPU上運行ResNet152,作者還在P40、i7-6700K、RK3399上測試了MobileNet的性能,在準確度略微下降的情況下取得更高的推理速度。