mtcnn人脸检测算法介绍

0. 概述

MTCNN(Multi-task Cascaded Convolutional Networks,多任务卷积神经网络),是2016年由Kaipeng Zhang、Zhanpeng Zhang等提出的一种多任务人脸检测模型,该模型使用3个CNN级联算法结构,将人脸检测和人脸特征点提取同时完成。

原论文中被引用了无数次的算法示意图如下:

mtcnn人脸检测算法介绍_第1张图片

由上图可知,MTCNN整个流程结构中,首先会按照不同的缩放因子(resize_factor),将图像缩放成不同大小的size,形成图像的特征金字塔。接下来,是三个级联的CNN网络结构组成的三个阶段。在第一阶段,通过浅CNN(Proposal Network, P-Net)快速生成候选窗口;然后,通过更复杂的CNN(Refinement Network, R-Net)来过滤大量非人脸窗口;最后,通过更强大的CNN(Output Network, O-Net)再次优化结果,并输出5个面部关键点位置。

下面就来分别介绍这三个网络。

1. P-Net

P-Net的网络结构如下图所示:

mtcnn人脸检测算法介绍_第2张图片

第一阶段,使用称为Proposal Network(P-Net)的全卷积网络来获取候选人脸窗及其边界框的回归向量,然后利用估计的边界框回归向量校准候选框,最后,采用非极大值抑制(non-maximum suppression, NMS)对高度重合的候选框进行合并。

P-Net的输入是12x12的图像。这些训练样本可以通过滑动窗口或随机采样方法获取,训练样本分为三种,分别是正样本、负样本和中间样本。这些样本的划分使用候选区域和ground truth的IoU (Intersection over Union) 进行衡量,其中,大于0.65的为正样本,小于0.3的为负样本,介于0.4和0.65之间的为中间样本。 (网络上其他资料有将小于0.4的作为负样本,本文引用原论文的数据0.3)     

输入数据被resize成12x12大小并转换成12x12x3的格式,然后通过10个3x3x3的卷积核,3x3的Max Pooliing (stride=2),生成10个5x5的特征图;这些特征图再经过16个3x3x10的卷积核,生成16个3x3的特征图;接下来再经过32个3x3x16的卷积核,生成32个1x1的特征图;最后,针对这32个1x1的特征图,分为三个分支:(1) 经过2个1x1x32的卷积核,生成2个1x1的特征图用于分类;(2) 经过4个1x1x32的卷积核,生成4个1x1的特征图用于回归框判断;(3) 经过10个1x1x32的卷积核,生成10个1x1的特征图用于人脸关键点判断。

2. R-Net

 R-Net的网络结构如下图所示:

mtcnn人脸检测算法介绍_第3张图片

从P-Net输出的所有候选对象都被输入到另一个CNN,称为Refinement Network (R-Net),该网络会进一步过滤大量虚假候选对象,以及利用边界框回归进行校准、使用NMS合并候选框。

该层输入图像大小为24x24,前面两层卷积过程与P-Net相似,不再重复。第三层卷积,对第二层卷积输出的48个4x4的特征图用64个2x2x48的卷积生成64个3x3的特征图之后,将这些特征图转换为128的全连接层,接下来,仍然是三个分支:(1) 用大小为2的全连接层进行分类;(2) 用大小为4的全连接层进行bounding box的位置回归;(3) 用大小为10的全连接层进行人脸轮廓关键点检测。

3. O-Net

 O-Net网络结构如下图所示:mtcnn人脸检测算法介绍_第4张图片

该阶段与第二阶段R-Net相似,但网络结构更复杂了一些。但该阶段的目的是使用更多细节描述人脸,尤其是会输出5个人脸关键点(Facial Landmarks)。

4. 完整流程

综合以上介绍,整个mtcnn的完整流程如下:

mtcnn人脸检测算法介绍_第5张图片

因为暂时只关注网络结构及模型应用,暂时不关注训练过程,所以训练的内容基本没太介绍。

今天就分享这么多,回头再上代码。

你可能感兴趣的:(人脸识别,深度学习,cnn,人工智能,神经网络)