Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(MTCNN)论文和代码解读

论文地址: https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf
github地址: https://github.com/kpzhang93/MTCNN_face_detection_alignment

一、背景介绍

  • 人脸检测和特征点标定广泛用于人脸识别和表情分析等应用
  • 人脸检测和特征点标点存在挑战
    • 人脸遮挡
    • 光照
    • 等等
  • Mtcnn是级联网络结构,可以实现人脸检测和5个特征点的标定,由三个深度卷积网络构成(P、R、O),是一个轻量级网络,可以实现实时人脸检测和标定。

二、网络结构介绍

  • 级联网络工作流程
    • 数据预处理: 图像金字塔resize产生多个尺寸的图片。
    • 首先通过一个比较简单的卷积神经网络P产生多个脸部的预选框。
    • 其次通过一个比较复杂的卷积神经网络R优化P产生的人脸框,去除大部分非人脸区域的框。
    • 最后通过有个最强壮的网络优化R输出的人脸框和输出五个特征点的位置。

这里写图片描述

  • 训练阶段

    • P-Net

      • 数据层大小为:num × 3 × 12 × 12
      • 3个卷积核为 3 × 3的CNN层
      • 最后输出1个future维度为1 × 1 × 32。
        • 1 × 1 × 2: 表示这个预测框的区域是人脸和非人脸的概率值
        • 1 × 1 × 4: 表示这个回归的值
        • 1 × 1 × 10:表示脸部五个特征点的位置
          这里写图片描述
    • R-Net

      • 数据层大小为:num × 24 × 24 × 3
      • 2个卷积核为3 × 3的CNN + 1个卷积核为2 × 2的CNN。
        这里写图片描述
    • O-Net
      • 数据层大小为:num × 3 × 48 × 48
      • 3个卷积核为3 × 3的CNN + 2个卷积核为2 × 2的CNN + 1个全连接层。
        这里写图片描述
    • Loss层
      • 三个网络的classification的loss计算公式:
        L i d e t = ( y i d e t l o g ( p i ) + ( 1 y i d e t ) ( 1 l o g ( p i ) ) ) 1

        y i d e t : ground truth 的label { 0 , 1 }
        p i : 预测是人脸概率。
      • box的loss计算公式:
        L i b o x = | | y ^ i b o x y i b o x | | 2 2

        y ^ i b o x :网络输出的回归坐标
        y i b o x :ground truth的坐标位置
        • facial landmark localization的loss:
          L i d e t = | | y ^ i l a n d m a r k y i l a n d m a r k | | 2 2
      • 总目标loss,由于是多任务训练,比如背景取样自计算landmark loss,其他两个loss就可以置为0。如下面公式
        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

        N代表训练样本数量
      • α j 代表对应任务的重要性
        P-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 0.5
        R-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 0.5
        O-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 1
      • β j { 0 , 1 } 代表样本类型
    • Online Hard sample mining ,边训练边选择出hard sample,只有hard samples才进反向传播,其他样本不进行反向传播。具体做法:对每个小批量里所有样本计算loss,对loss进行降序,前70%samples 做为hard samples进行反向传播。
  • 训练数据预处理

    • 数据类型有下面四种,通过从WIDER FACE数据集随机crop生成 Negtives、Positives、Part faces,从CelebA 获得landmark数据。
数据类型 Negatives Positives Part faces Landmark faces
条件 IoU<0.3 IoU>0.65 0.4<=Iou<=0.65 5个特征点位置
用途 用于人脸分类任务 用于人脸分类任务 回归任务 landmark任务

P-Net
通过从WIDER FACE数据集随机crop生成 Negtives、Positives、Part faces。从CelebA 获得landmark数据。
R-Net
通过P-Net从WIDER FACE检测人脸生成 Negtives、Positives、Part faces。从CelebA 获得landmark数据。
O-Net
通过O-Net、P-Net从WIDER FACE检测人脸生成 Negtives、Positives、Part faces。从CelebA 获得landmark数据。

三、实验结果

  • the effectiveness of online hard sample mining
    本文章通过训练两个O-Net,两个网络的学习速率固定且一样,一个是有进行hard sample处理,一个是没处理。对比两个网络loss曲线, 可以看出hard samples的loss效果比较好。
    这里写图片描述

  • The effectiveness of joint detection and alignment
    本文章实验结论:O-Net加入人脸特征点标定任务,有利于人脸的检测和对齐。如下图,JA,代表加入人脸特征点标定任务,效果做好,No JA in BBR表示没有在回归任务上加入人脸标定任务,No JA表示全部都没加入人脸特征点标定任务。
    这里写图片描述

  • 运行时间分析
    2.60GHz CPU:16fp
    Nvidia Titan Black(GPU): 99fp

  • 运行demo人脸检测和对齐效果图

    这里写图片描述

猜你喜欢

转载自blog.csdn.net/jmu201521121021/article/details/79052363