0. 概述

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

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

由上图可知,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的网络结构如下图所示:

第一阶段,使用称为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的网络结构如下图所示:

从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网络结构如下图所示:

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

4. 完整流程

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

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

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

《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》论文解读。本文来自于中国科学院深圳先进技术研究院,目前发表在arXiv上,是2016年4月份的文章,算是比较新的文章。 论文地址: https://kpzhang93.github.io/ MT CNN _face_detectio
人脸检测 Face Detection 目标: 人脸检测 的目的是找出一张图片中的所有人脸的位置信息 人脸检测 是人脸其他应用的基础,只有获取到了是否有人脸和人脸的精确的位置信息,其它的应用才能继续开展,所以说 人脸检测 是一个基础且重要的一个技术。 本篇文章包含内容: 人脸检测 工程应用中面临的问题 人脸检测 算法 的发展过程 工程中常用的 人脸检测 算法 人脸检测 算法 案例详细说明 一、 人脸检测 工程应用中面临...
MT CNN 难点 WIDER FACE等数据集为我们提供的图片并不是 MT CNN 支持的训练样本, 需要通过几个脚本将其转为 MT CNN 可以接受的数据集, 这些脚本在github中可以找到; 为了增加数据读取的效率, 将数据转为tfrecord格式 制作PNet需要的pos, neg, part数据 数据来源: WIDER FACE和Cascad...
MT CNN (Multi-task Cascaded Convolutional Networks)是一种用于 人脸检测 的深度学习 算法 。它由三个级联的卷积 神经网络 组成,分别是P-Net、R-Net和O-Net。 MT CNN 的原理如下: 1. P-Net:P-Net是一个用于生成候选框的网络。它采用了全卷积 神经网络 结构,输入一张图像,通过卷积层和池化层提取特征,并输出候选框的位置和是否包含人脸的概率。P-Net通过滑动窗口的方式在不同尺度下搜索可能的人脸区域。 2. R-Net:R-Net是一个用于筛选候选框的网络。它接收P-Net生成的候选框作为输入,对每个候选框进行特征提取,并输出候选框是否包含人脸的概率以及人脸的精确位置。R-Net通过训练样本的正负样本分类和回归来优化模型。 3. O-Net:O-Net是一个用于人脸关键点定位和人脸属性分类的网络。它接收R-Net筛选后的候选框作为输入,对每个候选框进行特征提取,并输出人脸关键点的位置和人脸属性的概率。O-Net通过训练样本的关键点位置回归和属性分类来优化模型。 MT CNN 通过级联的方式,先使用P-Net生成候选框,再使用R-Net筛选候选框,最后使用O-Net进行人脸关键点定位和属性分类。这种级联的结构可以有效地提高 人脸检测 的准确性和鲁棒性。