RetinaFace論文解讀 --- RetinaFace: Single-stage Dense Face Localisation in the Wild

論文:https://arxiv.org/pdf/1905.00641.pdf
代碼:https://github.com/deepinsight/insightface/tree/master/RetinaFace
Pytorch復現:https://github.com/biubug6/Pytorch_Retinaface

RetinaFace於19年5月份出現,當時取得了state-of-the-art,可以說是目前開源的最強人臉檢測算法,它主要在以下五個方面作出貢獻:

  • 在single-stage設計的基礎上,提出了一種新的基於像素級的人臉定位方法RetinaFace,該方法採用多任務學習策略,同時預測人臉評分人臉框五個人臉關鍵點以及每個人臉像素的三維位置和對應關係

  • 在WILDER FACE hard子集上,RetinaFace的性能比目前the state of the art的two-stage方法(ISRN)的AP高出1.1% (AP等於91.4%)。

  • 在IJB-C數據集上,RetinaFace有助於提高ArcFace的驗證精度(FAR=1e-6時TAR等於89:59%)。這表明更好的人臉定位可以顯著提高人臉識別。

  • 通過使用輕量級backbone網絡,RetinaFace可以在VGA分辨率的圖片上實時運行

  • 已經發布了額外的註釋和代碼,以方便將來的研究

RetinaFace

與一般的目標檢測不同,人臉檢測具有較小的比例變化(從1:1到1:1.5),但更大的尺度變化(從幾個像素到數千像素)。目前most state-of-the-art 的方法集中於single-stage設計,該設計密集採樣人臉在特徵金字塔上的位置和尺度,與two-stage方法相比,表現出良好的性能和更快的速度。在此基礎上,我們改進了single-stage人臉檢測框架,並利用強監督和自監督信號的多任務損失,提出了一種most state-of-the-art的密集人臉定位方法。RetinaFace的想法如圖1所示。

在這裏插入圖片描述
由上圖可以看到,RetinaFace的detect head有四個並行的分支:人臉分類,框迴歸,關鍵點檢測和人臉像素的三維位置和對應關係

RetinaFace的大致結構如下圖:
在這裏插入圖片描述

一共有四個模塊,分別是Backbone,FPN,Context ModuleMulti-task Loss。其中Multi-task Loss對應圖1的四個並行分支Loss。

Implementation details

FPN
RetinaFace採用從P2到P6的特徵金字塔層,其中P2到P5通過使用自頂向下和橫向連接(如[28,29])計算相應的ResNet殘差階段(C2到C5)的輸出。P6是在C5處通過一個步長2的3x3卷積計算得到到。C1-C5是在ImageNet-11k數據集上預先訓練好的ResNet-152[21]分類網絡,P6是用“Xavier”方法[17]隨機初始化的。

Context Module
RetinaFace在五個特徵金字塔層應用單獨的上下文模塊來提高 感受野並增加剛性上下文建模的能力。從2018年 WIDER Face 冠軍方案中受到的啓發, 我們也在橫向連接和使用可變形卷積網絡(DCN)的上下文模塊中替換所有 3x3的卷積,進一步加強非剛性的上下文建模能力。

Multi-task Loss
對於任何訓練的anchor i,RetinaFace的目標是最小化下面的多任務的 loss:
在這裏插入圖片描述
包含四個部分:

  • 人臉分類loss Lcls(pi,pi*)。這裏的pi是anchor i爲人臉的預測概率,對於pi * 是1是positive anchor,0代表爲negative anchor。分類loss Lcls採用softmax loss,即softmax loss在二分類的情況(人臉/非人臉)的應用。
  • 人臉框迴歸loss,Lbox(ti,ti*),這裏的ti={tx,ty,tw,th},ti * ={tx *,ty *,tw * ,th *}分別代表positive anchor相關的預測框和真實框(ground-truth box)的座標。我們按照 Fast r-cnn的方法對迴歸框目標(中心座標,寬和高)進行歸一化,使用Lbox(ti,ti *)=R(ti-ti *),這裏R 是 smooth-L1 Loss
  • 人臉的landmark迴歸loss Lpts(li,li *),這裏li={l x1,l y1,…l x5,l y5},li *={l x1 *,l y1 *,…l x5 *,l y5 *}代表預測的五個人臉關鍵點和基準點(ground-truth)。五個人臉關鍵點的迴歸也採用了基於anchor中心的目標歸一化。
  • Dense迴歸loss Lpixel。

loss調節參數 λ1-λ3 設置爲0.25,0.1和0.01,這意味着在監督信號中,RetinaFace增加了邊界框和關鍵點定位的重要性。

anchors設置
在這裏插入圖片描述
如上表所示,RetinaFace從P2到P6的特徵金字塔級別上使用特定於比例的錨點,例如[56]。 在這裏,P2旨在通過平鋪小anchors來捕獲微小的面部,但要花費更多的計算時間,並且要冒更多的誤報風險。RetinaFace將scale step設置爲2^(1/3),aspect ratio設置爲1:1。輸入圖像大小爲 640*640 , anchors可以 覆蓋 從16x16 到 406x406的特徵金字塔層。從五個下采樣(4,8,16,32,64)的feature map平鋪anchors,每個feature map中的點預測3個anchors,總共有(160 * 160 + 80 * 80+40 * 40+400+100) * 3 = 102300個anchors,其中75%來自P2。不過在代碼中,只用了8,16,32這三個下采樣層的輸出feature map,且每個點只放兩個anchors。

所以,對於640 * 640的輸入,32,16,8的下采樣輸出,每個點的輸出是【(1,4,20,20),(1,8,20,20),(1,20,20,20)】,【(1,4,40,40),(1,8,40,40),(1,20,40,40)】,【(1,4,80,80),(1,8,80,80),(1,20,80,80)】。
其中4,8,20分別代表一個點兩個anchors的類別數(2 anchors * 2類),(2 anchors * 框的信息),(2 anchors * 5個關鍵點信息(一個點x,y))

數據增強
WIDER FACE訓練集中大約 有 20% 的小人臉 , RetinaFace遵循 [68, 49 ) 並從原始圖像隨機crop方形patches並調整這些 patches到 640*640 產生更大的訓練人臉。更具體地說,在原始圖像的短邊[0.3,1]之間隨機裁剪正方形patches。對於crop邊界上的人臉,如果人臉框的中心在crop patches內,則保持人臉框的重疊部分。除了隨機裁剪,我們還通過0.5概率的隨機水平翻轉和光度顏色蒸餾來增加訓練數據。

學習率調整
使用warmup learning 策略,學習速率從10e-3,在5個epoch後上升到10e-2,然後在第55和第68個epochs時除以10。訓練過程在第80個epochs結束。

實驗結果

在這裏插入圖片描述
RetinaFace與其他24個stage-of-the-art的人臉檢測算法對比。RetinaFace在所有的驗證集和測試集都達到的最好的AP,在驗證集上的AP是96.9%(easy),96.1%(Medium)和91.8%(hard)。在測試集的AP是96.3%,95.6%,91.4%.相比與當前最好的方法(Improved selective refinement network for face detection)在困難的數據集(包含大量的小人臉)的AP對比(91.4% vs 90.3%)。

在這裏插入圖片描述

Retinaface是人臉識別得到更高的準確率。
在這裏插入圖片描述
此外,使用輕量Mobilenet-0.25作爲backbone,對於VGA可以在CPU上達到實時。

參考
https://mp.weixin.qq.com/s/vGAQ4OXv_jHQJECG27o2SQ
https://blog.csdn.net/TheDayIn_CSDN/article/details/95058236

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章