論文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
論文鏈接:https://arxiv.org/abs/1604.02878
官方代碼鏈接:https://github.com/kpzhang93/MTCNN_face_detection_alignment
其他代碼實現(MXNet):https://github.com/pangyupo/mxnet_mtcnn_face_detection
一 模型及流程概覽
使用mtcnn神經網絡進行人臉檢測是目前比較主流的方式,相較於傳統的人臉檢測方法,mtcnn更能夠適用各種自然條件下復雜的人臉場景。mtcnn是兩年前發表的成果,在原作者實現的時候先后有兩個版本:V1和V2。V1就是用matlab實現的論文《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks》,V2在V1的stage3后又添加了一個stage4,以實現更精確的回歸。
訓練前,對圖像做了multi scale的resize,構成了圖像金字塔,然后這些不同scale的圖像作為3個stage的輸入進行訓練,目的是為了可以檢測不同scale的人臉。
將圖像進行多級scale操作(除了第一次resize,每次resize操作使得待檢測圖片的面積變為之前的一半),如果最小邊長小於12,則停止scale操作;對於720p的圖片來說,一共會進行11次scale: [0.6, 0.4242640687119285, 0.3, 0.21213203435596426, 0.15, 0.10606601717798213, 0.075, 0.053033008588991064, 0.0375, 0.026516504294495532, 0.01875];然后將11個不同尺度的圖片送入P-Net;
MTCNN由三個子模型組成,由粗到細(coarse-to-fine)生成結果:
P(Proposal)-Net:淺層的全卷積神經網絡CNN快速產生候選窗體和邊界回歸向量,利用NMS方法去除重疊窗體。在訓練階段,頂部有3條支路用來分別做人臉分類、人臉框的回歸和人臉關鍵點定位;在推理階段,輸出只有N個bounding box的4個坐標信息和score,當然這4個坐標信息已經用回歸支路的輸出進行修正了,score可以看做是人臉的概率,具體可以看代碼。
R(Refine)-Net:通過更復雜的全連接CNN精煉候選窗體,利用邊界框向量微調候選窗體,再利用NMS去除重疊窗體,丟棄大量的重疊窗體。輸入是P-Net中得到的大量bounding box並都被resize成24*24尺寸。同樣在推理階段,這一步的輸出只有M個bounding box的4個坐標信息和score,4個坐標信息也用回歸支路的輸出進行修正了。
O(Output)-Net:網絡結構比R-Net多一層卷積,功能與R-Net作用一樣,只是在去除重疊候選窗口的同時,顯示五個人臉關鍵點定位。輸入大小調整為48*48,輸出包含P個bounding box的4個坐標信息、score和關鍵點信息。
二、損失函數
1. face classification
判定是否包含face的二分類問題,采用交叉熵損失函數
2.bounding box regression
回歸檢測人臉包圍盒,使用L2 loss
3.facial landmark localization
4. 權值平衡
不同的階段對應的損失函數組合不一樣,權重也不一樣,因此定義了公式4用來控制對不同的輸入計算不同的損失。可以在出,在P-Net和R-Net中,關鍵點的損失權重(α)要小於O-Net部分,這是因為前面2個stage重點在於過濾掉非人臉的bbox。β存在的意義是比如非人臉輸入,就只需要計算分類損失,而不需要計算回歸和關鍵點的損失。
三 模型細節
- PNet
圖片尺寸:12*12*3
卷積層一 : [in_channel(3), shape(3), shape(3), out_channel(10)] 激活PReLU MaxPool
卷積層二 : [in_channel(10), shape(3), shape(3), out_channel(16)] 激活PReLU MaxPool
卷積層三 : [in_channel(16), shape(3), shape(3), out_channel(32)] 激活PReLU
卷積層四_一 : [in_channel(32), shape(1), shape(1), out_channel(2)] conv4-1 激活Softmax 到 prob1層 對應人臉概率的得分
卷積層四_二 : [in_channel(32), shape(1), shape(1), out_channel(4)] conv4-2
rnet: 24x24x3, onet:48x48x3
三、人臉對齊的一些筆記