人臉檢測算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks論文詳解

背景:MTCNN作爲人臉定位算法被廣泛應用,無論是準確率和實時性方面都很有價值。

目的:解析MTCNN的論文。

論文地址https://arxiv.org/abs/1604.02878

目錄

一、摘要

1.1 貢獻點

二、方法

2.1 框架

2.2 CNN架構

2.3 訓練過程

人臉/非人臉判別

生成的備選框迴歸

人臉關鍵點標註定位

多任務訓練

難樣本挖掘

三、實驗

數據集

3.1 訓練數據

3.2 難樣本訓練的有效性

3.3 Joint detection與alignment

3.4 與其他方法對比

3.5 運行效率

四、結論及個人總結


一、摘要

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可能是目前爲止結合了幀率和準確率都是最好的算法,非常具有參考價值。

它通過三個級聯的網絡降低運算量並且取得了非常好的效果,值得我們參考和借鑑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章