MTCNN 论文笔记

原论文地址:《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》
代码:

  1. MatLab
  2. C++&Caffe
  3. Python&Caffe

参考资料:MTCNN(Multi-task convolutional neural networks)人脸对齐(这篇文章有结构图,很清晰)

文中引用的这篇论文也用了CNN的层级结构:《H. Li, Z. Lin, X. Shen, J. Brandt, and G. Hua, “A convolutional neural network cascade for face detection,” in IEEE Conference on Computer Vision and Pattern Recognition, 2015, pp. 5325-5334.》,地址在:http://openaccess.thecvf.com/content_cvpr_2015/papers/Li_A_Convolutional_Neural_2015_CVPR_paper.pdf

这个模型利用多任务层级卷积网络(Multi-task Cascaded Convolutional Networks)将人脸检测与人脸对齐结合在一起。

基本框架

  1. 先用一个轻量级的CNN生成候选窗口。这一步的候选窗口会被边界框回归向量进行校准,也会用NMS算法合并IoU值较高的候选区域;
  2. 再用一个相对复杂的网络对上一步的到的候选框进行提炼(或者说是过滤),并进一步用NMS算法进行合并
  3. 最后用一个更复杂且更高效的网络对候选框进行进一步提炼,并输出人脸关键点(Facial Landmarks Position)。这一步相对于前两步加入了更多的监督信息

这几步中的CNN依次被称为P-Net(Proposal Network)、R-Net(Refinement Network)、O-Net(Output Network)。
下面是上面几个步骤的示例图,取自原论文。
MTCNN 论文笔记_第1张图片
下面是论文中给出的MTCNN架构图。其中,MP是Max Pooling,Conv是卷积,Conv与Pooling的stride分别是1和2。
MTCNN 论文笔记_第2张图片

训练

1. 人脸分类

L I d e t = − ( y i d e t l o g ( p i ) + ( 1 − y i d e t ) l o g ( 1 − p i ) ) L_I^{det}=-(y_i^{det}log(p_i)+(1-y_i^{det})log(1-p_i)) LIdet=(yidetlog(pi)+(1yidet)log(1pi))
其中, p i p_i pi x i x_i xi是人脸的概率, y i d e t ∈ { 0 , 1 } y_i^{det}\in \{0,1\} yidet{0,1}表示 x i x_i xi是否是人脸。

2. 边界框回归

L i b o x = ∣ ∣ y ^ i b o x − y i b o x ∣ ∣ 2 2 L_i^{box}=||\hat{\pmb{y}}_i^{box}-\pmb{y}_i^{box}||_2^2 Libox=yyy^iboxyyyibox22
其中, y ^ i b o x \hat{\pmb{y}}_i^{box} yyy^ibox为通过网络预测得到, y i b o x \pmb{y}_i^{box} yyyibox为实际的真实的背景坐标,且 y i b o x \pmb{y}_i^{box} yyyibox ( x , y , h , w ) (x,y,h,w) (x,y,h,w)组成的四元组。

3. 人脸 Landmarks 坐标回归

L i l a n d m a r k = ∣ ∣ y ^ i l a n d m a r k − y i l a n d m a r k ∣ ∣ 2 2 L_i^{landmark}=||\hat{\pmb{y}}_i^{landmark}-\pmb{y}_i^{landmark}||_2^2 Lilandmark=yyy^ilandmarkyyyilandmark22
其中, y ^ i l a n d m a r k \hat{\pmb{y}}_i^{landmark} yyy^ilandmark y i l a n d m a r k \pmb{y}_i^{landmark} yyyilandmark分别都有五个点:左眼、右眼、鼻子、左嘴角、右嘴角。每个向量共有10个值。

4. 多源训练

m i n ∑ i = 1 N ∑ j ∈ { d e t , b o x , l a n d m a r k } α j β i j L i j min\sum_{i=1}^N\sum_{j\in\{det,box,landmark\}}\alpha_j\beta_i^jL_i^j mini=1Nj{det,box,landmark}αjβijLij
其中, N N N为训练样本数量, α j \alpha_j αj表示任务的重要性, β i j \beta_i^j βij为样本标签, L i j L_i^j Lij为上面的损失函数。
关于 α \alpha α值,论文是这么给出的:
P-Net与R-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 0.5 \alpha_{det}=1,\alpha_{box}=0.5,\alpha_{landmark}=0.5 αdet=1,αbox=0.5,αlandmark=0.5
O-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 1 \alpha_{det}=1,\alpha_{box}=0.5,\alpha_{landmark}=1 αdet=1,αbox=0.5,αlandmark=1

5. Online Hard sample mining

对每个Batch前项传播得到的loss进行排序,取前70%,只利用这70%的数据进行反向传播更新梯度。这样能让方向传播的梯度更新更有效。

你可能感兴趣的:(MTCNN,深度学习,CNN,人脸检测,Landmarks,深度学习,目标检测,CV)