MTCNN 人脸检测

MTCNN 人脸检测关键 5 点:眼、鼻、嘴。

概述

MTCNN 人脸检测模型由中国科学院深圳先进技术研究院,在 2016 年发布,通过三个网络级联实现人脸 5 个关键点(双眼、鼻、嘴)的定位检测;大致检测流程如下:

0117-dl-mtcnn-summary.jpg

相关资源

几个名词

  • Bounding box regression
    边框回归,预测的框有可能不是完整的被检测到的物体,需要微调到到真实大小的框,这个预测框转换为真实框的过程叫做边框回归。
  • IoU
    IoU: Intersec over Union 交并比,也就是重叠度,计算的是预测框和真实框的交集和并集的比值,当 IoU 大于某个阈值(0.5)时,就认为预测框是正确的。常用于评价定位算法是否精准。
  • NMS
    NMS: Non Maximum Suppression 非极大值抑制,即只保留局部最大值,用于去掉重复的检测框,只保留局部最好的检测框,即检测分数最高的框。

模型结构

模型结构图

0117-dl-mtcnn-architecures.png

有三个独立的网络构成: P-Net, R-Net, O-Net

P-Net

P-Net: Proposal Network ,是全卷积网络,因此可以接受任意尺寸的输入图片,这里假定输入大小为 12*12*3

  • 第一层:使用 10 个 3*3*3 的卷积核,滑动步长为 1 , paddingVALID ,卷积输出大小为 10*10*10 ;再经过 2*2 的池化核,滑动步长为 2 的 Max Pooling ,生成 10 个 5*5 的特征图
  • 第二层:使用 16 个 3*3*10 的卷积核,滑动步长为 1 , paddingVALID ,生成 16 个 3*3 的特征图
  • 第三层:使用 32 个 3*3*16 的卷积核,滑动步长为 1 , paddingVALID ,生成 32 个 1*1 的特征图
  • 对于这 32 个 1*1 的特征图,训练时分三部分并行处理:分类 face classification , 回归框判断 bounding box regression ,轮廓点定位 Facial landmark localization
  • 分类 face classification : 使用 2 个 1*1*32 的卷积核,生成 2 个 1*1 的特征图用于分类
  • 回归框判断 bounding box regression :使用 4 个 1*1*32 的卷积核,生成 4 个 1*1 的特征图用于回归框判断
  • 轮廓点定位 Facial landmark localization :使用 10 个 1*1*32 的卷积核,生成 10 个 1*1 的特征图用于人脸轮廓点的定位

R-Net

R-Net: Refine Network ,该网络先通过卷积然后再做全连接,也是分成三部分处理; R-Net 的输入为固定大小 24*24*3 ,但是输入个数由 P-Net 输出的候选框个数决定。
P-Net 处理完图像后,得到的候选回归框通过 NMS 去除冗余,并将候选框调整为正方形区域;从原始图片中截取出候选框大小的图片,并缩放为 24*24 大小,作为 R-Net 的输入,每个 24*24*3 大小的候选框会经过 R-Net 处理:

  • 第一层:使用 28 个 3*3*3 的卷积核,输出大小为 22*22*28 ;再经过 3*3 的池化核,滑动步长为 2 的最大池化,生成 28 个 11*11 的特征图
  • 第二层:使用 48 个 3*3*28 的卷积核,输出大小为 9*9*48 ;再经过 3*3 的池化核,滑动步长为 2 的最大池化,生成 48 个 4*4 的特征图
  • 第三层:使用 64 个 2*2*48 的卷积核,生成 64 个 3*3 的特征图
  • 第四层:全连接层,64 个 3*3 的特征图喂入全连接层后,输出大小为 128 ;训练时,从这里分成三部分处理:分类 face classification , 回归框判断 bounding box regression ,轮廓点定位 Facial landmark localization
  • 分类 face classification :全连接输入大小为 128 ,输出为人脸的 2 分类结果
  • 回归框判断 bounding box regression :全连接输入大小为 128 ,输出为大小为 4 的回归框判断结果
  • 轮廓点定位 Facial landmark localization :全连接输入大小为 128 ,输出为大小为 10 的轮廓点定位

O-Net

O-Net: Output Network ,该网络和 R-Net 很类似; O-Net 的输入为固定大小 48*48*3 ,但是输入个数由 R-Net 输出的候选框个数决定。
R-Net 处理完图像后,得到的候选回归框通过 NMS 去除冗余;从原始图片中截取出候选框大小的图片,并调整为 48*48 大小,作为 O-Net 的输入,每个 48*48*3 大小的候选框会经过 O-Net 处理:

  • 第一层:使用 32 个 3*3*3 的卷积核,输出大小为 46*46*32 ;再经过 3*3 的池化核,滑动步长为 2 的最大池化,生成 32 个 23*23 的特征图
  • 第二层:使用 64 个 3*3*32 的卷积核,输出大小为 21*21*64 ;再经过 3*3 的池化核,滑动步长为 2 的最大池化,生成 64 个 10*10 的特征图
  • 第三层:使用 64 个 3*3*64 的卷积核,输出大小为 8*8*64 ;再经过 2*2 的池化核,滑动步长为 2 的最大池化,生成 64 个 4*4 的特征图
  • 第四层:使用 128 个 2*2*64 的卷积核,生成 128 个 3*3 的特征图
  • 第五层:全连接层,128 个 3*3 的特征图喂入全连接层后,输出大小为 256 ;训练时,从这里分成三部分处理:分类 face classification , 回归框判断 bounding box regression ,轮廓点定位 Facial landmark localization
  • 分类 face classification :全连接输入大小为 256 ,输出为人脸的 2 分类结果
  • 回归框判断 bounding box regression :全连接输入大小为 256 ,输出为大小为 4 的回归框判断结果
  • 轮廓点定位 Facial landmark localization :全连接输入大小为 256 ,输出为大小为 10 的轮廓点定位

损失函数

三个网络的损失函数分别为:

  • P-Net 损失函数为二分类交叉熵
  • R-Net, O-Net 损失函数都为 L2 均方差

多任务训练时,不是每个示例的都需要使用三种损失函数,在 P-Net, R-Net 中, α 分类、候选框、定位的值为 1, 0.5, 0.5 ;在 O-Net 中, α 分类、候选框、定位的值为 1, 0.5, 1 ;对于 β∈(0,1)

0117-dl-mtcnn-loss.jpg

模型小结

  • 三个网络的卷积核的滑动步长都为 1 , padding 都为 VALID
  • 卷积后面激活函数为 PReLU
  • 三个网络池化核滑动步长都为 2
  • 三个网络的输出都为三部分:分类 face classification , 回归框判断 bounding box regression ,轮廓点定位 Facial landmark localization ,但只有 O-Net 的轮廓定位点是有效的
  • P-Net 使用了 1*1 的卷积来代替全连接,好处是输入可以是任意尺寸
  • 2 个人脸分类结果:第二个表示是人脸的分数
  • 4 个回归框结果:分别对应回归框映射时左上右下映射参数
  • 10 个轮廓点定位:表示 5 个关键点(左眼,右眼、鼻、嘴左边、嘴右边)的坐标,其中第 1 个和第 6 个表示左眼坐标,第 2 个和第 7 个表示右眼坐标,以此类推

参考文档

0%