本文來自《DSFD: Dual Shot Face Detector》,時間線爲2018年10月,是南理工Jian Li在騰訊優圖實驗室實習時候的做品。在WIDER FACE,FDDB上效果也超過了PyramidBox和SRN。網絡
最近在比賽上拿到最好成績的人臉檢測模型大體能夠分紅2類:框架
- 基於RPN的網絡,這種網絡是2階段模型
- 基於SSD這種一次shot檢測,直接預測邊界框和置信度。
而一次shot的檢測器因其高預測速度和簡單的系統設計而更受青睞。不過度析下來,仍然有如下三個問題未徹底解決:ide
- 特徵學習:當前特徵金字塔網絡(feature pyramid network,FPN)廣受應用,然而FPN只是將high-level和low-level的輸出網絡層簡單合併了下,並未考慮到當前層的信息,並且基於錨之間的上下文關係信息都被忽略了;
- loss設計:主流使用的是目標檢測中傳統的loss函數,爲了解決類別不平衡問題,Focal loss能夠重點關注一個稀疏的硬樣本的訓練。爲了使用全部原始和加強的特徵,《Feature agglomeration networks for single stage face detection》提出層級loss以更有效訓練網絡。然而上面這些loss函數都沒考慮到feature map在不一樣level上須要漸進學習的能力;
ps:平滑L1 loss有助於阻止梯度爆炸;- 錨匹配策略:基本上,每一個feature map上面的預約義錨集合是經過在圖片上平鋪不一樣尺度和長寬比的框完成的。許多別人先前的工做分析了錨的合理尺度和錨的補償策略,以此來增長正錨的數量。然而這些策略忽略了數據加強中的隨機採樣。人臉尺度的連續性和大量不一樣尺度的錨仍然會致使負錨和正錨之間比例的差距
本文提出了一個新的人臉檢測框架叫DSFD(dual shot face detector),其繼承了SSD的結構:函數
- 首先,結合PyramidBox中low-level的FPN與RFBNet中的感覺野塊(receptive field block,RFB),提出一個特徵加強模塊(feature enhance module,FEM)來加強特徵的判別性和魯棒性;
- 其次,受到《Feature agglomeration networks for single stage face detection》中層級loss(hierarchical loss)和PyramidBox中的金字塔錨的啓發,將更小的錨平鋪到higher-level feature map cell上能夠得到更多關於分類的語義信息和更多關於檢測的高分辨率定位信息。提出漸進錨loss(progressive anchor,loss,PAL),經過一組更小的錨去計算輔助有監督loss,以輔助特徵學習;
- 最後,提出一個改進錨匹配方法(improved anchor matching,IAM),在DSFD中融合錨劃分策略和基於錨的數據加強方法去,以提供更好的迴歸器初始化,讓錨和ground-truth人臉儘量匹配。
圖1顯示更小的錨平湖和改進的錨與ground-truth人臉的匹配能夠消除尺度和遮擋的問題,從而提高人臉檢測性能。性能
DSFD的結構如圖2。
學習
這裏提出的FEM模塊主要是爲了加強original features 讓特徵變得更據辨識性和魯棒性。對於當前錨\(a(i,j,l)\),FEM會利用包含當前層錨\(a(i-1,j-1,l)\),\(a(i-1,j,l)\),...\(a(i,j-+1,l)\),\(a(i+1,j+1,l)\)和上層錨\(a(i,j,l+1)\)的不一樣維度信息。具體的,關聯錨\(a(i,j,l)\)的feature map cell能夠經過數學定義:
spa
- 首先用1x1卷積核去歸一化feature maps;
- 而後,上採樣上一層feature maps並與當前層進行逐元素相乘;
- 最後,將feature maps劃分紅3個部分,並鏈接對應的3個子網絡,每一個子網絡包含不一樣數量的擴張卷積層。
DSFD採用的是多任務loss,由於其可讓original和enhanced feature maps的訓練任務以兩個shots進行訓練。首先,DSFD的second shot anchor-based 多任務loss函數定義以下:
\[L_{SSL}(p_i,p_i^*,t_i,g_i,a_i)=\frac{1}{N}(\sum_iL_{conf}(p_i,p_i^*)+\beta\sum_ip_i^*L_{loc}(t_i,g_i,a_i))\]
這裏\(N\)是匹配的密集邊界框的個數;\(L_{conf}\)是基於2個類(人臉和背景)的softmax loss;\(L_{loc}\)是基於錨\(a_i\)下,介於參數化的預測邊界框\(t_i\)和ground-truth邊界框\(g_i\)之間的平滑L1 loss;當\(p_i^*=1(p_i^*=\{0,1\})\)時,錨\(a_i\)是正類,且此時位置loss也是激活的。\(\beta\)是一個權衡這兩個loss的超參數。相比於同一個level中的enhanced feature maps,original feature maps針對分類的語義信息更少,可是有更多針對檢測的高分辨率定位信息。所以,做者認爲original feature maps能夠檢測和分類更小的人臉。所以,做者提出了基於一組更小錨的first shot 多任務loss:
\[L_{FSL}(p_i,sp_i^*,t_i,g_i,sa_i)=\frac{1}{N}(\sum_iL_{conf}(p_i,sp_i^*)+\beta \sum_ip_i^*L_{loc}(t_i,g_i,sa_i))\]
這兩個shot loss能夠組合成一個漸進式錨loss:
\[L_{PAL}=L_{FSL}(a)+L_{SSL}(sa)\]
這裏first shot中錨的size是second shot中的一半。在預測階段,只採用second shot的輸出,這意味着預測階段並不會有額外的計算代價。設計
在訓練中,須要計算正錨和負錨以決定對應人臉邊界框是哪個錨。當前錨匹配方法是基於錨和ground-truth人臉之間雙向選擇。所以錨的設計和加強的人臉採樣是協同的,以此儘量讓錨和人臉進行相配,以此提供迴歸器更好的初始化。
3d
- 基於\(\frac{2}{5}\)的機率,採用PyramidBox中data-anchor-sampling類似的基於錨的採樣,其是在一個圖片中隨機選擇一我的臉(裁剪的子圖片包含人臉),並將子圖和選擇的人臉之間size比例設置爲\(\frac{640}{rand(16,32,64,128,256,512)}\);
- 基於\(\frac{3}{5}\)的機率,採用SSD中的數據加強方法。
.blog