人臉框檢測模型PyramidBox論文學習筆記
原論文:《Xu Tang, Daniel K. Du, Zeqiang He, Jingtuo Liu. PyramidBox: A Context-assisted Single Shot Face Detector[C]. The European Conference on Computer Vision (ECCV), 2018, pp. 797-813.》
代碼:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/face_detection
特點:
- 提出了一種基於 anchor 的環境輔助方法,即 PyramidAnchors,從而引入有監督的信息來爲較小的、模糊的和部分遮擋的人臉學習環境特徵。
- 設計了 LFPN 來更好地融合環境特徵和麪部特徵。同時,該方法可以在單步中較好地處理不同尺度的人臉。
- 提出了一種Context-Sensitive的預測模型,該模型由混合網絡結構和
max-in-out
層組成,從融合的特徵中學習準確的定位和分類。
- 提出了一種關注尺度的
data-anchor sampling
策略,改變訓練樣本的分佈,重點關注較小的人臉。
一、模型結構
骨幹網絡:基於VGG-16
的 S3FD 模型
1. 結構圖如下:
- 它使用了骨幹網絡中
Conv3_3
、Conv4_3
、Conv5_3
、Conv_fc7
、Conv6_2
以及 Conv7_2
輸出的特徵圖。
2. 主要結構說明:
2.1 低層級特徵金字塔層(Low-level Feature Pyramid Layers)
作用:將高層特徵圖中蘊含的人臉上下文信息融合到低層特徵圖中。
結構:其主要由低層級特徵金字塔網絡(Low-level Feature Pyramid Network, LFPN)構成。
基本結構如下圖所示。這個圖是從 Conv_fc7
開始的,另兩個從 Conv4_3
與 Conv5_3
開始融合的結構圖與此相似。
2.2 金字塔檢測層(Pyramid Detection Layers)
- 選用的特徵層爲:
lfpn_2
、lfpn_1
、lfpn_0
、conv_fc7
、conv6_2
以及 conv7_2
。
- 這些特徵層使用的
anchor
尺寸爲:16、32、64、128、256以及512。
- 其中,
lfpn_2
、lfpn_1
以及 lfpn_0
是分別基於Conv3_3
、Conv4_3
以及 Conv5_3
的 LFPN
層的輸出。
- 使用 L2 對
LFPN
層進行正則處理。
2.3 預測層(Predict Layers)
- 主要由 對上下文信息敏感的預測模塊 (Context-sensitive Predict Module, CPM)構成。
- CPM的結構:用 DSSD模型的無殘差預測模塊 (Residual-free Prediction Module)替換了 SSH模型的上下文模塊 (Context Module)。
- 每個檢測模塊後面都連接一個 CPM,所以一共有 6 個 CPM。
- 第 l 個 CPM 的輸出的尺寸爲:wl×hl×cl。(其中 wl=hl=640/22+l;cl=20;l∈{0,1,2,3,4,5})。
基本結構如下圖所示:
其中,每個通道的特徵負責預測面部、頭部與身體各自的分類與邊界框迴歸。
- 面部的分類需要 4(=cpl+cnl)個通道,邊界框迴歸需要 4個通道;
- 頭部的分類需要 2個通道,邊界框迴歸需要 4個通道;
- 身體的分類需要 2個通道,邊界框迴歸需要 4個通道;
- 所以一共有 20個通道:(4+4)+(2+4)+(2+4)=20
cpl 與 cnl 是前景與背景的max-in-out
,並滿足:
cpl={13, if l=0,, otherwise.
2.3.1 max-in-out算法
作用:減少小的負樣本的FP
值(False Positive Rate)。
應用的位置如下圖所示:
每個預測模塊預測出一共 cp+cn 個得分,然後:
- 選擇 cp 中最大的得分,作爲正樣本得分;
- 選擇 cn 中最大的得分,作爲負樣本得分。
在第一個預測模塊中,設置: cp=1, cn=3;(因爲小anchor
的背景更復雜,負樣本就會更多)
其他幾個預測模塊中,設置: cp=3, cn=1。(這是爲了召回更多的面部)
2.4 PyramidBox損失層(PyramidBox loss layers)
- 對於每個目標面部,都有一系列
pyramid anchor
來同時監督分類和迴歸的任務。
- 這一層主要由 PyramidAnchors算法模塊 構成。它會生成一些
anchor
,這些 anchor
與某個面部所處的更大的區域相對應,而這些區域包含了面部豐富的上下文信息,如頭部、肩膀以及軀體。
在原始圖片上,對於一個位於 regiontarget 的面部來說,考慮一個步幅爲 si,位於第 i 個特徵層上的第 j 個 anchor
:anchori,j,定義第 k 個 pyramid-anchor 的標籤爲:
labelk(anchori,j)={10, if IoU(anchori,j⋅si/2k,regiontarget)>0.35,, otherwise.
其中:
k∈{0,1,2},對應的 label0、label1 與 label2 分別爲:面部、頭部、身體;
anchori,j⋅si 爲 anchori,j 在原始圖片上的相應的區域;
anchori,j⋅si/2k 爲相應的以 2k 爲步幅的下采樣區域。
2.4.1 基於anchor的數據採樣方法(Data-anchor Sampling):
舉例說明:(輸入的圖尺寸爲:640×640)
- 對於一個尺寸爲140的面部,在 {24+i∣i=0,1,...,5} 中距離其最近的
anchor
尺寸爲128(此時 ianchor=3),
- 然後在 {0,1,...,min(5,ianchor+1)} (即在 {0,1,...,4)})中隨機地選擇一個序號以得到目標尺寸,如32。
- 以 32/140=0.2285 的比例重新調整原始圖片的比例。
- 從最後調整的圖中,裁取一個640×640的圖像,該圖像包含了那個被選中的圖片。
- 最終得到了採樣的訓練數據
2.4.2 損失函數
L({pk,i},{tk,i})=k∑λkLk({pk,i},{tk,i})
Lk({pk,i},{tk,i})=Nk,clsλik∑Lk,cls(pk,i,pk,i∗)+Nk,reg1ik∑pk,i∗Lk,reg(tk,i,tk,i∗)
其中,k 與面部、頭部、身體相對應;i 與anchor
相對應;Lk,cls 是在兩個類別上的對數損失函數;Lk,reg是 smooth L1 損失函數;tk,i 與 tk,i∗ 是與邊界框迴歸有關的座標向量,前者是預測值,後者是Ground-Truth的邊界框;pk,i 是第 i 個anchor
爲第 k 個目標的概率值;Ground-Truth的標籤 pk,i∗ 定義爲:
pk,i∗={10, 如果以步幅 2k 下採樣得到的anchor是正樣例,, 其他情況.
tk,i∗的定義如下:
tk,i∗=(tx∗+21−2ktw∗sw,k+Δx,k,ty∗+21−2kth∗sh,k+Δy,k,2ktw∗sw,k−2Δx,k,2kth∗sh,k−2Δy,k)
當 k<2 時,Δx,k=Δy,k=0,sw,k=sh,k=1;
當 k=2 時,Δx,k=0,Δy,k=th∗,sw,k=87,sh,k=1;
四、訓練
使用帶有衝量(momentatum) 0.9 與權重衰減(weight decay) 0.0005 的隨機梯度下降法。
- 數據集:WIDER FACE
- batch size:16
- 前期迭代八萬次的學習率:0.001;
- 中期迭代兩萬次的學習率:0.0001;
- 後期迭代兩萬次的學習率:0.00001;
參考材料