背景:MTCNN作爲人臉定位算法被廣泛應用,無論是準確率和實時性方面都很有價值。
目的:解析MTCNN的論文。
論文地址:https://arxiv.org/abs/1604.02878
目錄
一、摘要
1.1 貢獻點
- 運用三個級聯的網絡來共同提升模型的性能
- 特別的設計了三個相應的網絡
- 網絡模型訓練階段提出了一種運用難樣本訓練的方法提升網絡性能
二、方法
2.1 框架
三個級聯的網絡,Pnet,Rnet,Onet
Pnet: 生成備選框,並且根據迴歸得到相應的備選框的向量。然後運用NMS(非極大值抑制,解析https://blog.csdn.net/weixin_36474809/article/details/86234403)算法來抑制掉高度重疊的備選框。
Rnet: 重新篩選備選框,刪除掉僞正的樣本(即Pnet生成的正樣本備選框,Rnet判斷爲不是正樣本)
Onet:繼續篩選備選框並且生成相應的人臉landmark
2.2 CNN架構
之前的人臉檢測問題有下面這兩點缺點:
- 一些filter缺乏diversity,使之不能提取出更有判別力的特徵。
- 與其他多任務的目標檢測相比,人臉檢測是一個二值的網絡,所以需要更少的filter但是更具判別力的特徵
爲了滿足這點,我們將所有5x5的filter全部換爲3x3,來減少相應的運算但是增大網絡的深度。網絡與其它網絡性能的對比和採用的網絡結構如下:
2.3 訓練過程
設置三個量用於訓練網絡。
- 人臉/非人臉 判別
- 生成的備選框迴歸
- 人臉關鍵點標註定位
人臉/非人臉判別
對於樣本,設置交叉熵作爲loss:
pi爲網絡預測判斷是人臉的概率,
表示Ground truth
生成的備選框迴歸
輸出的位置與最近的ground truth之間的備選框的left top,height與width,所以學習的過程是一個迴歸問題。運用Euclidean loss作爲每個樣本xi的loss:
其中,
人臉關鍵點標註定位
一共5個關鍵點,左眼,右眼,鼻子,左嘴角,右嘴角,座標數字10個,依然運用歐氏距離作爲loss
ground truth
多任務訓練
舊的其他人的人臉識別會將三個任務在不同數據集上分開訓練,這樣我們將三個任務合在一起作爲多任務訓練。
其中,N爲訓練樣本的個數,阿爾法表示任務的重要性,貝塔表示樣本的類型。Pnet,Rnet與Onet訓練分別採用不同的係數。如下:
難樣本挖掘
我們運用前像傳遞之中所有樣本每個mini batch之中的top 70%作爲難樣本(這點難樣本的產生還是不明確,也沒有具體的描述,需要看相關論文或者代碼才能明確,但是思想已經明確,就是多生成難樣本來訓練網絡以取得更好的訓練效果)。
實驗中證明了這種方法的效果比手動提取的效果更好。
三、實驗
數據集
在下面這三個數據集上進行相應的訓練:
其中,FDDB包含5,171張人臉,2,845張圖像
WIDER FACE 包含了393,703張標註的人臉 32,203張圖像,其中50%被當作三個子數據集,40%被當作訓練與保留作爲validate
AFLW包含了人臉關鍵點標註,24.386張人臉
3.1 訓練數據
- 負樣本:與Gound Truth的IoU小於0.3
- 正樣本:IoU大於0.65
- 部分人臉:IoU介於0.4到0.65之間
- 關鍵點:人臉的5個關鍵點標註。
樣本作用:
- 正樣本,負樣本用於產生備選框的classification,
- 正樣本,部分人臉用於產生備選框的regression
- 關鍵點標註用於人臉關鍵點檢測
每個網絡的訓練:
- Pnet:運用WIDER FACE收集正負樣本與部分人臉,然後將人臉運用CelebA作爲關鍵點標註。
- Rnet:運用第一階段通過WIDER FACE產生的數據集來收集positive,negative,與part face來從CelebA之中獲取
- Onet:類似於Rnet通過上兩個階段之中來探測人臉。
3.2 難樣本訓練的有效性
在Onet上測評相應的結果,一個加了難樣本訓練,一個不加難樣本訓練
上圖綠線爲加了難樣本訓練的,黑線不加難樣本訓練。明顯看出綠線的validate loss更小。
3.3 Joint detection與alignment
detection與alignment任務共同訓練,然後運用不同的Onet的數據集來實現,FDDB數據集。運用Pnet與Rnet來實驗。
將landmark的任務與classification與regression的任務共同訓練明顯取得了更好的效果。
3.4 與其他方法對比
MTCNN在人臉檢測時候的PR曲線明顯好於其他方法。
且關鍵點檢測時候的Mean Error也明顯優於其他的方法。
3.5 運行效率
基於毫無優化的matlab代碼,在2.60GHz的CPU取得了16fps的幀率,在GPU(Nvidia Titan Black)上取得了99fps的幀率
四、結論及個人總結
MTCNN可能是目前爲止結合了幀率和準確率都是最好的算法,非常具有參考價值。
它通過三個級聯的網絡降低運算量並且取得了非常好的效果,值得我們參考和借鑑。