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进行人脸关键点定位和属性分类。这种级联的结构可以有效地提高
人脸检测
的准确性和鲁棒性。