最簡單最詳細的MTCNN講解

之前想弄懂MTCNN,又懶得看論文,把網上相關的博客都看了遍,發現真的是寫的要麼外行要麼就是非常簡單,很懷疑那幫人也是隨便看些博客自己寫的。特別是P-Net的輸入到底是圖像金字塔還是12x12固定尺寸,以及P-Net到底生不生產Landmark,都沒說到。還是自己去看了原論文,對照着源代碼,弄清了一些模糊的東西。

MTCNN

P-net:通過一個淺層的CNN快速篩選出許多人臉潛在候選框

R-net:通過一個更復雜的CNN網絡去除大部分不存在人臉的候選框

O-Net:最後的CNN優化結果結果並輸出人臉landmark

 

P-Net:全卷積網絡,獲得候選框和他們的bbox 迴歸向量,用迴歸向量來校準候選框,接着使用NMS來合併候選框

R-Net:輸入是P-Net的候選框輸出,篩除掉不存在人臉的候選框,並再次使用bbox迴歸校準候選框和NMS合併候選框。

O-Net:輸入是R-Net的候選框輸出,同時這一網絡會產生對人臉更細緻的的信息,最重要的是,這一網絡會產生5個人臉landmark。

論文裏只說O-Net會輸出landmark,但是代碼裏,三個網絡都會輸出landmark。

人臉分類Loss是交叉熵

迴歸損失函數:

Landmark損失函數:

 

聯合損失函數:

 

Hard sample mining:

在每個mini-batch,將前傳計算的loss進行降序排序,取前70%爲hard samples,反向傳播的時候只計算這些樣本。我看了代碼,沒有看到怎麼進行降序排序,只是把前一個網絡的輸出繼續分類成Negatives,Positives和Part face,可能我看的那份代碼沒這麼幹,有懂的歡迎評論。

 

訓練數據劃分:

Negatives:與GT的IOU小於0.3

Positives:IOU大於0.65

Part faces:IOU處於0.4-0.65

Landmark faces:標註的5個關鍵點

Nega和Posi用來訓練人臉分類;Posi和Part訓練bbox迴歸;landmark訓練facial landmark localization。

WIDER Face用來訓練人臉檢測,Celeba訓練人臉關鍵點,這裏我是這麼理解的,WIDER Face用來產生正負樣本和part face樣本,正樣本對應label1,負樣本對應0,part對應-1。正負用來訓練分類,顯然能理解,而負樣本是沒有框的(因爲沒有人臉啊),所以僅靠正樣本的數量用來訓練bbox迴歸,太少了,所以需要生成part face這麼一類,補充樣本數量專門用來訓練bbox迴歸。因爲WIDER Face數據集沒有landmark屬性,所以初始化爲0,反正他們也不用來訓練landmark localization。

Celeba數據集用來訓練landmark,label=-2.bbox=0,是因爲並不用他們訓練分類和迴歸,只需要landmark_label。

 

P-Net的輸入問題:將原圖隨機裁剪(不是縮放)成不同尺度,random(12,min(height,width)/2),再resize到12x12,也就是輸入是固定爲12x12,但是輸入圖像的確是隨機大小的。P-Net是有輸出landmark的。P-Net的輸入也有landmark,P-Net有訓練landmark。

訓練步驟:

分部訓練,先訓練P-Net,訓練完,用P-Net產生的結果經過bbox歸回校準位置,再用NMS減少候選框(先reg再NMS),再分類成正負,部分樣本三類,(landmark由Celeba產生,跟候選框這些都沒關係),再從原圖找到樣本bbox對應的位置,crop出來再resize成24x24大小,作爲R-Net的輸入,後面R-Net到O-Net也是一樣。

 

作者認爲人臉檢測相比物體檢測(多分類)是個二分類任務,更加需要信息的差異化而不是濾波器的數量(信息的數量)。(這裏我的理解是,多分類任務,不是簡單的0,1,網絡需要知道框裏的是什麼物體,自然網絡需要更多的物體信息幫助,才能進行分類,而二分類,是有與沒有,所以信息需要的少,但信息的差異性要更大。也就是二分類任務對於對於信息的容量可以減少,減少濾波器大小,增大數量)

這篇博文主要是針對論文里語意不清的部分,比如P-Net的輸入,還要訓練的具體過程等,這些必須要從實現的代碼裏找答案。

論文地址就不放了,百度即可。

參考的源代碼:https://github.com/AITTSMD/MTCNN-Tensorflow

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