@
0.論文連接
1.前言
MTCNN是一篇關於人臉檢測算法效果很不錯的論文,落地效果也很好,據我所知有不少公司在用這個算法做人臉檢測。
2.論文Abstract翻譯
在無約束環境下,人臉的檢測與對齊對於不同的姿勢,燈光和遮擋是非常有挑戰性的。近期的學術研究證明了深度學習方法在這兩個任務上能夠實現令人欽佩的性能。本文,我們提出了一個深度級聯多任務框架,它能夠利用人臉檢測與對齊的內在相關性來提高他們的性能。尤其是我們的框架利用級聯架構,分三個精心設計的深度卷積神經網絡通過由粗糙到細致的方式來預測臉部整體和特征點的坐標。另外,我們提出了一種新的在線挖掘困難樣本的策略,這樣可以更好的提高模型的實際性能。我們的方法實現了卓越的准確性通過最先進的技術來應對挑戰面向人臉檢測的FDDB和WIDER FACE基准測試AFLW面部對齊基准,同時保持實時性能。
3.論文的主要貢獻
- 提出了一種新的基於將臉部檢測和對齊的一體化級聯CNN框架,並且精心設計了一個輕量級的CNN框架,實現實時性能。
- 提出了一種有效可以在線生成困難樣本挖掘的方法來提高性能。
- 在具有挑戰性的基准上進行了大量的實驗,通過與人臉對齊和檢測上的先進方法的比較來顯示本文模型優秀的性能提高。
4.算法流程
4.1 網絡效果圖
由圖可知整體流程,首先對圖片多尺度變換構建圖像金字塔,作為網絡的輸入。接下來就是三層級聯卷積網絡。
4.2 三層網絡概述
4.2.1 P-Net
P-Net(Proposal Network)是一個全連接卷積神經網絡,他粗略的獲取臉部候選框跟邊框回歸變量,然后候選框通過邊框回歸變量(邊框回歸解釋)進行校正。最后用NMS算法合並高度重合的候選框。
4.2.2 R-Net
將所有的候選框作為下層網絡R-Net(Refine
Network)的輸入,這個網絡將會進一步拒絕大量的效果不好的候選框,然后同樣的通過邊框回歸變量進行校正,NMS進行合並。
4.2.3 O-Net
O-Net與R-Net較為相似,但是在這個網絡的目標是通過更多的監督來識別面部的區域。特別的是,這個網絡將會輸出人臉的五個特征點。
4.3 網絡的結構
在論文“A convolutional neural network cascade for face detection”中, 多種CNN被設計成可以做面部檢測。但是,他的性能可能被以下幾個因素限制:
- 在卷積層中的一些卷積層缺少多樣性,那樣會限制模型的識別能力。
- 與其他多類別的目標檢測跟分類任務相比,人臉檢測是一個具有挑戰性的二分類任務,所以他的卷積層可能需要更少的卷積核。為此,我們減少卷積核的數量並且將5x5的卷積核變成3x3,因此在減少計算量同時增加深度並且獲得更好的性能。
通過這些改善,與在論文“A convolutional neural network cascade for face detection”的網絡結構相比,可以在更少的運行時間獲得更好的性能。性能對比圖如下,
網絡結構圖如下
同時激活函數用的是PReLU.
4.4 訓練
我們利用三項任務來訓練我們的CNN檢測器:人臉檢測,邊框回歸,人臉特征點位置。
- 人臉檢測:學習目標制定為一個二分類問題,對每個樣本\(x_{i}\),我們用交叉熵損失函數:
\(p_{i}\)是通過神經網絡預測出樣本\(x_{i}\)為人臉的概率。\(y_{i}^{det}\)代表ground-truth,$y_{i}^{det} \in $ {0, 1}
- 邊框回歸:對於每個候選窗口,我們預測它與最近的ground truth之間的offset(例如回歸框的左上角坐標以及高跟寬)。學習目標制定為回歸問題,損失函數是平方損失函數:
\(\hat y_{i}^{box}\)是從網絡中得到的回歸目標,$ y_{i}^{box}$是ground-truth坐標,它是四維的,包括左上坐標,高度跟寬度。
- 人臉特征點坐標:與邊框回歸類似,損失函數為: $$L_{i}^{landmark} = ||\hat y^{landmark}{i} - y{i}^{landmark}||^{2}_{2}$$
同樣,\(\hat y_{i}^{landmark}\)是從網絡中得到的特征點坐標, \(y_{i}^{landmark}\)是ground-truth的坐標,有五個坐標,分別是兩只眼睛,兩個嘴角跟一個鼻子。 - 多源(Multi-source)訓練: 因為在每個CNN中有不同的任務,所以在學習過程中會有不同的訓練數據集,在訓練某個特指任務時,其他任務損失值應該為零,因此一個綜合所有任務的損失函數如下:
其中N代表訓練樣本的數量,\(a_{j}\)代表每個任務的重要程度,在P-Net跟R-Net中, \(\alpha_{det} = 1, \alpha_{box} = 0.5, \alpha_{landmark} = 0.5\)然而在O-Net中為了人臉特征點坐標更高的准確率,參數設置為\(\alpha_{det} = 1, \alpha_{box} = 0.5, \alpha_{landmark} = 1\),\(\beta_{i}^{j} \in \{0,1\}\)是樣本類型的指示器,在這種情況下,可以很自然的使用隨機梯度下降來訓練這些CNN。
5. 在線挖掘困難樣本:不同於傳統方式,需要在原始分類器訓練完之后進行困難樣本挖掘,實現在線操作。在每一小批量樣本中,對其按照前向傳播所有樣本的損失值進行排序,並且選取前70%作為“hard samples”,從而在反向傳播中,我們只計算“hard samples”的梯度。這意味着,訓練時我們將忽略那些對增強模型性能作用較小的簡單樣本。實驗證明這種策略相對手動選擇困難樣本有更好的性能。
5 模型性能分析
5.1 關於在線挖掘困難樣本的性能
為了體現性能,論文訓練了兩個O-Net,他們的初始參數全部一樣,一個進行“online hard sample mining”一個不進行,畫出他們的學習曲線如下:
5.2 將人臉檢測與對齊聯合的性能
為了測試貢獻,同樣訓練兩個相同的O-Net,一個"joint facial landmarks regression",另一個並不進行上述操作,對比其兩者的性能,同時對比邊框回歸的性能。可以發現加入人臉特征點坐標的學習對人臉檢測與邊框回歸都起到了有益的作用,如下圖:
5.3 人臉檢測的效果
與各算法在各數據集上的對比圖:
6 代碼閱讀[待更新]
7 感悟&&心得
此部分等閱讀完代碼,徹底理解算法進行補充