- 測試demo:https://github.com/Jack-CV/PCN
- 關鍵詞:rotation-invariant face detection, rotation-in-plane, coarse-to-fine
- 核心概括:該篇文章為中科院計算所智能信息處理重點實驗室VIPL課題組,鄔書哲博士在CVPR2018上的論文。論文主要針對的是在不同平面角度下的人臉檢測,主題思想可以概括為Progressive Calibration Networks(PCN), 即逐步校正不同角度的人臉。
- 已有方法:目前,針對平面角度的人臉檢測主要有3種策略,即data augmentation, divide-and-conquer, rotation router。



4. 改進:作者為了快速地檢測不同平面角下的人臉(0°~360°),通過逐級校正的路線,針對第一級檢測出來的人臉,將為[-180°, 180°]的人臉翻轉到[-90°, 90°]。這一步簡單來說,就是把朝下的人臉翻轉為朝上,這樣就減少了一半的角度范圍。第二級再繼續以兩條±45°的軸進行翻轉,將人臉的角度范圍限制到[-45°, 45°]。第三級,使用角度偏差回歸預測精准的角度。校正流程如下:

5. 樣本划分:
Positive, IOU > 0.7
Negative, IOU < 0.3
Suspected, IOU ∈[0.3, 0.7]
Positive 和 negative 用於人臉分類,positive 和suspected 用於人臉框的回歸和角度校正。
需要說明的是,
三級網絡的訓練樣本輸入分別為24x24,24x24,48x48。
對於第一級網絡,人臉范圍划分為2部分,人臉朝上的角度范圍是[−65°,65°], 人臉朝下的范圍是[-180°,-115°]∪[115°,180°],其他角度范圍不作訓練數據。可以定義朝上的label為0,朝下的為1。
對於第二級網絡,人臉范圍划分為3部分,分別為[-90°,-45°],[-45°,45°],[45°,90°],可以定義label分別為0,1,2。
對於第三級網絡,人臉范圍為[-45°,45°],與前兩個網絡不同,訓練的任務是人臉角度的回歸。
6. 訓練細節:
每個batch里的樣本比例,positive: negative:suspected=2:2:1
max_iters:100,000
type:SGD
lr_base:0.001
gamma:0.1
lr_policy:step
step:70,000
wd:0.0005
7. 網絡結構:

8. 算法介紹:
8.1 PCN-1
對於每一個輸入的滑窗,第一級網絡有3個目標:人臉與非人臉的判斷(f),人臉框的回歸(t),角度的分類score(g)。

第一個目標f,使用softmax-loss,y=1 if face else 0

第二個目標t,使用 l1 loss

人臉框的回歸由3部分組成,w代表寬度,(a,b)代表人臉框的左上角坐標

第三個目標g,和第一個類似使用softmax-loss, y=1 if face is up else 0

最終的loss為,λ為各個loss 的weight

第一級的人臉角度划分,根據預測的θ進行划分,0°表示人臉朝上,不翻轉;180°表示人臉朝下,進行翻轉。

8.2 PCN-2
第二級與第一級類似,只是角度的校正范圍發生了變化,轉變為[-90°,-45°],[-45°,45°],[45°,90°]

8.3 PCN-3
經過第二級的校正之后,人臉的范圍已經校正到豎直的一個區域。通過直接對角度進行回歸,使用的loss變為l1 loss。
最終的角度可以由3級網絡檢測的角度進行疊加得到。

9. 實驗結果:



