人臉識別學習筆記三:強化篇

一、MTCNN原理
1.MTCNN的推理流程

MTCNN包括三個階段:在第一階段,通過一個淺層的CNN網絡來快速生成檢測窗口作爲第二階段的輸入。第二額極端,通過一個更復雜的CNN網絡來剔除大量非面部窗口,以達到細化候選窗口的目的。第三階段,使用一個更強大的CNN網絡來再次細化結果,並輸出5個人臉關鍵點的位置。這三個階段分別對應三個網絡:P-Net、R-Net和O-Net。

MTCNN的總體流程

注意:第一階段的輸入並不是原始圖像,而是將圖片調整到不同比例之後,得到一個圖像金字塔,將其作爲輸入。

  • P-NET(Proposal Network):P-Net是一個全卷積網絡,用來獲得人臉的候選窗口(candidate facial windows)以及他們的邊界框迴歸向量(bounding box regression vectors)。之後通過估計的邊界框迴歸向量校準候選窗口。之後,我們採用了非極大值抑制(non-maximum suppression, NMS)來合併高度重合的候選框。

  • R-NET(Refine Network):R-Net進一步拒絕了大量錯誤的候選框,之後通過候選窗口的邊界框迴歸進行校準,之後執行NMS。

  • O-NET(Output Network):O-Net和之前類似,但是O-Net會識別出更多標註的人臉區域,並且這個網絡會輸出五個面部特徵點的位置。

2.CNN的結構

由於Cascade CNN的的性能可能受到以下限制:

  • 卷積層中的某些卷積核缺乏可能限制其辨別能力的多樣性。

  • 與其它檢測任務相比,人臉檢測是一項二分類任務,因此每層可能需要的濾波器數量較少。

因此,MTCNN減少濾波器的數量並將5×5的卷積核更改爲3×3以減少計算,同時增加深度以獲得更好的性能。通過這些改進,可以在更少的運行時間內獲得更好的性能。爲了公平比較,在每個組中使用相同的訓練和驗證數據。MTCNN將PReLU作爲卷積層和全連接層(輸出層除外)之後的非線性激活函數。

MTCNN的網絡結構

3.訓練模型

MTCNN人臉檢測器的訓練分爲三個任務(task):面部/非面部分類(face/non-face classification)、邊界框迴歸(bounding box regression)和麪部關鍵點定位(facial landmark localization)。

  1. 人臉分類:這是一個二分類問題。對於每個樣本\(x_i\),使用交叉熵損失:

    \[L_i^{det} = - (y_i^{det} log(p_i) + (1 - y_i^{det})(1-log(p_i))) \tag{1} \]

    其中\(p_i\)是樣本\(x_i\)被網絡判定爲人臉的概率,\(y_i^{det}\)是樣本\(x_i\)的標籤,只有0和1這兩個取值。

  2. 邊界框迴歸:對於每個候選窗口,預測它與最近的樣本真實值(ground truth,在有監督學習中,Ground Truth通常指代樣本集中的標籤)之間的偏移量(即邊界框的左邊、頂部、高度和寬度)。這是一個迴歸問題。對於每個樣本\(x_i\),使用歐式距離來度量損失:

    \[L_i^{box} = ||\hat{y}_i^{box} - y_i^{box} ||_2^2 \tag{2} \]

    其中,\(\hat{y}_i^{box}\)是網絡預測的迴歸結果,\(y_i^{box}\)是樣本真實值的座標(包含四個維度:左邊、頂部、高度和寬度,因此是一個四維向量)。

  3. 面部關鍵點定位:這也是一個迴歸問題。對於每個樣本\(x_i\),使用歐式距離來度量損失:

    \[L_i^{lan dmark} = ||\hat{y}_i^{landmark} - y_i^{landmark} ||_2^2 \tag{3} \]

    其中,\(\hat{y}_i^{landmark}\)是網絡預測的迴歸結果,\(y_i^{landmark}\)是第i個樣本的真實值的座標(包含五個關鍵點:是左眼,右眼,鼻子,左嘴角和右嘴角,因此是一個十維向量)。

  4. 多源訓練(Multi-source trainning):由於我們在每個CNN中使用不同的任務,所以在學習過程中有不同類型的訓練圖像,如人臉、非人臉和部分對齊的人臉。在這種情況下,一些損失函數(即等式1-3)不會被用到。例如,對於背景區域的樣本,我們只計算\(L_i^{det}\),其他兩個損失設爲0。這可以直接用樣本類型指示器來實現。然後總體學習目標可以表述爲:

    \[min \Sigma_{i=1}^N \Sigma_{j \in \{det, box, landmarks\}} \alpha_j \beta_i^j L_i^j \tag{4} \]

    其中N是訓練樣本的數量,\(\alpha_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\)是樣本類型指示器,用於指示樣本的類型。j有三個取值:det、box和landmrks,\(\beta_i^j\)有0和1兩個取值。最後使用梯度下降法來訓練模型。

  5. 在線難樣本挖掘(Online Hard sample mining):與傳統的在原始分類器訓練後進行難樣本挖掘不同,MTCNN在人臉/非人臉分類任務中進行在線難樣本挖掘,這與訓練過程相適應。特別是,在每一個小批量中,從所有樣本中對前向傳播計算的損耗進行排序,並選擇其中前70%作爲難樣本。然後只計算這些難樣本在反向傳播中的梯度。這意味着忽略了那些在訓練中對增強探測器幫助不大的簡單樣本。實驗表明,該策略在不需要人工選擇樣本的情況下取得了較好的性能。

二、MTCNN的訓練數據

因爲人臉檢測和人臉對齊是結合在一起的,所以在訓練過程中將數據標註爲了四類:

  • 負樣本(Negatives):指那些和任何真實人臉樣本(ground-truth faces)相比,並交比(也稱雅卡爾指數,Intersection-over-Union, IoU)小於0.3的區域
  • 正樣本(Positives):和一個真實人臉樣本(a ground-truth face)的IoU大於0.65的區域
  • 部分人臉樣本(Part faces):和一個真實人臉樣本(a ground-truth face)的IoU在0.4和0.65之間的區域
  • 關鍵點人臉樣本(Landmark faces):包含了五個人臉關鍵點的樣本

注意:在部分人臉樣本和負樣本之間的IoU值不存在明顯的差距,並且不同的人臉標註之間也存在差異。因此,選擇IoU值相差在0.3-0.4之間的樣本作爲訓練數據。其中,正樣本和負樣本作爲人臉分類的訓練數據,正樣本和部分人臉樣本作爲邊界框迴歸的訓練數據,關鍵點人臉樣本作爲面部關鍵點定位的訓練數據。並且負樣本:正樣本:部分人臉樣本:關鍵點人臉樣本=3:1:1:2。

每個網絡的訓練數據集描述如下:

  1. P-Net:從WIDER FACE中隨機裁剪了幾個窗口來收集正、負、部分臉樣本。之後,從CelabA中截取面部作爲關鍵點樣本。
  2. R-Net:使用框架第一部分檢測來自WIDER FACE的人臉來收集pos,neg,part樣本,同時檢測來自CelebA的關鍵點樣本。
  3. O-Net:與R-Net的數據收集類似,但是這次使用框架的前兩個部分來檢測臉部和收集數據。
三、一些小細節
1.圖像金字塔(image pyramid)
  1. 爲什麼需要圖像金字塔?

    由於原始圖像中,存在大小不同的臉,爲了在統一尺度下檢測人臉,進入網絡訓練之前,就要將原始圖片縮放至不同尺度。以增強網絡對不同尺寸大小人臉的魯棒性。

  2. 如何得到圖像金字塔?

    縮放因子:resize_factor,每次圖像縮放的比例。第一次縮放得到就是原圖\(\times resize\_factor\),第二次就是原圖\(\times resize\_factor^2\), ... ,依次類推。(這個具體根據數據集人臉大小分佈來確定,基本確定在0.60-0.80之間會比較合適,設的比較大,容易延長推理時間,小了容易漏掉一些中小型人臉。論文中設置的是0.6)

    圖片的最小尺寸: min_face_size,每次經過縮放後得到的圖片應該大於min_face_size,並且最後一次縮放得到的圖片大小應該恰好大於等於min_face_size。

    經過縮放後的得到的這些不同大小的圖片,堆疊起來的話像是金字塔,簡單稱爲圖片金字塔。注意,這些圖像都是要一幅幅輸入到Pnet中去得到候選的。

  3. mtcnn算法的訓練和推理階段,都要使用圖像金字塔嗎?

    對多個尺度的輸入圖像做訓練,訓練是非常耗時的。因此通常只在推理階段使用圖像金字塔,提高算法的精度。訓練的時候,需要對訓練集中的每個樣本縮放到\(12\times 12\)的大小,用來訓練全卷積網絡。在推理的時候,因爲測試圖像中人臉區域的尺度未知,所以需要使用圖像金字塔技術,增加人臉區域的召回率。

2.人臉分類(face classification)

爲什麼輸出是\(1\times1\times2\)的向量,如果是指示被判定爲人臉爲1的概率,最後一個維度應該是1啊?

之所以有兩個值(0和1的概率),是爲了方便計算交叉熵。

3.樣本類型指示器(sample type indicator)

\(\beta\)表示樣本類型,其取值只有0和1。具體的取值,和對應的數據用於哪一個任務的訓練有關。例如負樣本韓劇只用於人臉分類的訓練,所以只有\(\beta_{det} = 1\),其餘均爲0。

  • 當樣本爲負樣本數據時, \(\beta^{det} = 1, \beta^{box} = 0, \beta^{landmark} = 0\) ;
  • 當樣本爲正樣本數據時, \(\beta^{det} = 1, \beta^{box} = 1, \beta^{landmark} = 0\)
  • 當樣本爲部分人臉數據時, \(\beta^{det} = 0, \beta^{box} = 1, \beta^{landmark} = 0\) ;
  • 當樣本爲關鍵點樣本數據時, \(\beta^{det} = 0, \beta^{box} = 0, \beta^{landmark} = 1\);
4.訓練數據(training data)

P-Net使用的是\(12\times 12\)大小的圖片,這個圖片怎麼得到的呢?嗯,很簡單,去WIDER和CelebA數據集隨機截取,這個時候大家會問,隨機截取怎麼截取?就是字面上的意思,不過有點點技巧。首先,如果真的隨機截取的話,如果圖片裏面人臉只有一個,很多都會截取到非pos甚至非part的圖片,所以爲了得到足夠多的positives、part faces數據,真正的隨機截取是基於圖片實際label進行上下左右微調來截取,進而保障positivies、part faces數據的足夠。最終會得到很多還沒有resize的圖片,長寬不一,這個時候把他們resize爲\(12\times 12\)大小的圖片即可。

5.非極大值抑制(non-maximum suppression)

NMS 主要是用於對多個候選框去除重合率大的冗餘候選框,從而保留區域內最優候選框,其過程是一個迭代遍歷的過程。

NMS演示

算法步驟如下圖所示:

NMS的步驟

cls score表示face classification的得分,b box是指bounding box。

6.並交比(Intersection over Union, IoU)

論文中指bounding box和 groud truth 的並交比,計算方式:可以將這兩個看作兩個集合,交運算的面積/並運算的面積。

並交比的計算

7.爲什麼是三個階段(three stages)

P-Net 、R-Net、O-Net ,圖像的輸入越來越大,每一層卷積核的個數越來越多,網絡的深度也是越來越深。所以他們的運行速度也是越來越慢,然而其準確度卻是越來越高。

那既然O-Net的準確度最高,爲什麼不直接過O-Net呢?或者是比O-Net更深的網絡呢?

這是因爲,假如直接過O-Net網絡,運行速度會非常的慢,實際上P-Net和R-Net 這兩步對含人臉檢測Proposal 和bounding box 做了一個過濾,使得最後過耗時更大的O-Net網絡 的bounding box 比較少,從而減少了整體時間。

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