4. 改進:做者爲了快速地檢測不一樣平面角下的人臉(0°~360°),經過逐級校訂的路線,針對第一級檢測出來的人臉,將爲[-180°, 180°]的人臉翻轉到[-90°, 90°]。這一步簡單來講,就是把朝下的人臉翻轉爲朝上,這樣就減小了一半的角度範圍。第二級再繼續以兩條±45°的軸進行翻轉,將人臉的角度範圍限制到[-45°, 45°]。第三級,使用角度誤差迴歸預測精準的角度。校訂流程以下:git
5. 樣本劃分:github
Positive, IOU > 0.7算法
Negative, IOU < 0.3網絡
Suspected, IOU ∈[0.3, 0.7]ide
Positive 和 negative 用於人臉分類,positive 和suspected 用於人臉框的迴歸和角度校訂。測試
須要說明的是,3d
三級網絡的訓練樣本輸入分別爲24x24,24x24,48x48。router
對於第一級網絡,人臉範圍劃分爲2部分,人臉朝上的角度範圍是[−65°,65°], 人臉朝下的範圍是[-180°,-115°]∪[115°,180°],其餘角度範圍不做訓練數據。能夠定義朝上的label爲0,朝下的爲1。blog
對於第二級網絡,人臉範圍劃分爲3部分,分別爲[-90°,-45°],[-45°,45°],[45°,90°],能夠定義label分別爲0,1,2。get
對於第三級網絡,人臉範圍爲[-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. 實驗結果: