人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解

背景:MTCNN作为人脸定位算法被广泛应用,无论是准确率和实时性方面都很有价值。

目的:解析MTCNN的论文。

论文地址:https://arxiv.org/abs/1604.02878

目录

一、摘要

1.1 贡献点

二、方法

2.1 框架

2.2 CNN架构

2.3 训练过程

人脸/非人脸判别

生成的备选框回归

人脸关键点标注定位

多任务训练

难样本挖掘

三、实验

数据集

3.1 训练数据

3.2 难样本训练的有效性

3.3 Joint detection与alignment

3.4 与其他方法对比

3.5 运行效率

四、结论及个人总结


一、摘要

1.1 贡献点

  • 运用三个级联的网络来共同提升模型的性能
  • 特别的设计了三个相应的网络
  • 网络模型训练阶段提出了一种运用难样本训练的方法提升网络性能

二、方法

2.1 框架

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第1张图片

 三个级联的网络,Pnet,Rnet,Onet

Pnet: 生成备选框,并且根据回归得到相应的备选框的向量。然后运用NMS(非极大值抑制,解析https://blog.csdn.net/weixin_36474809/article/details/86234403)算法来抑制掉高度重叠的备选框。

Rnet: 重新筛选备选框,删除掉伪正的样本(即Pnet生成的正样本备选框,Rnet判断为不是正样本)

Onet:继续筛选备选框并且生成相应的人脸landmark

2.2 CNN架构

之前的人脸检测问题有下面这两点缺点:

  • 一些filter缺乏diversity,使之不能提取出更有判别力的特征。
  • 与其他多任务的目标检测相比,人脸检测是一个二值的网络,所以需要更少的filter但是更具判别力的特征

为了满足这点,作者将所有5x5的filter全部换为3x3,来减少相应的运算但是增大网络的深度。网络与其它网络性能的对比和采用的网络结构如下:

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第2张图片

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第3张图片

2.3 训练过程

设置三个量用于训练网络。

  • 人脸/非人脸 判别
  • 生成的备选框回归
  • 人脸关键点标注定位

人脸/非人脸判别

对于样本,设置交叉熵作为loss:

 pi为网络预测判断是人脸的概率,

表示Ground truth

生成的备选框回归

输出的位置与最近的ground truth之间的备选框的left top,height与width,所以学习的过程是一个回归问题。运用Euclidean loss作为每个样本xi的loss:

其中,

人脸关键点标注定位

一共5个关键点,左眼,右眼,鼻子,左嘴角,右嘴角,坐标数字10个,依然运用欧氏距离作为loss

ground truth

多任务训练

旧的其他人的人脸识别会将三个任务在不同数据集上分开训练,这样作者将三个任务合在一起作为多任务训练。

其中,N为训练样本的个数,阿尔法表示任务的重要性,贝塔表示样本的类型。Pnet,Rnet与Onet训练分别采用不同的系数。如下:

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第4张图片

难样本挖掘

作者运用前像传递之中所有样本每个mini batch之中的top 70%作为难样本(这点难样本的产生还是不明确,也没有具体的描述,需要看相关论文或者代码才能明确,但是思想已经明确,就是多生成难样本来训练网络以取得更好的训练效果)。

实验中证明了这种方法的效果比手动提取的效果更好。

三、实验

数据集

在下面这三个数据集上进行相应的训练:

其中,FDDB包含5,171张人脸,2,845张图像     

WIDER FACE 包含了393,703张标注的人脸  32,203张图像,其中50%被当作三个子数据集,40%被当作训练与保留作为validate

AFLW包含了人脸关键点标注,24.386张人脸

3.1 训练数据

  • 负样本:与Gound Truth的IoU小于0.3
  • 正样本:IoU大于0.65
  • 部分人脸:IoU介于0.4到0.65之间
  • 关键点:人脸的5个关键点标注。

样本作用:

  • 正样本,负样本用于产生备选框的classification,
  • 正样本,部分人脸用于产生备选框的regression
  • 关键点标注用于人脸关键点检测

每个网络的训练:

  • Pnet:运用WIDER FACE收集正负样本与部分人脸,然后将人脸运用CelebA作为关键点标注。
  • Rnet:运用第一阶段通过WIDER FACE产生的数据集来收集positive,negative,与part face来从CelebA之中获取
  • Onet:类似于Rnet通过上两个阶段之中来探测人脸。

3.2 难样本训练的有效性

在Onet上测评相应的结果,一个加了难样本训练,一个不加难样本训练

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第5张图片

上图绿线为加了难样本训练的,黑线不加难样本训练。明显看出绿线的validate loss更小。

3.3 Joint detection与alignment

detection与alignment任务共同训练,然后运用不同的Onet的数据集来实现,FDDB数据集。运用Pnet与Rnet来实验。

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第6张图片

将landmark的任务与classification与regression的任务共同训练明显取得了更好的效果。

3.4 与其他方法对比

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第7张图片

MTCNN在人脸检测时候的PR曲线明显好于其他方法。

人脸检测算法MTCNN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks论文详解_第8张图片

且关键点检测时候的Mean Error也明显优于其他的方法。

3.5 运行效率

基于毫无优化的matlab代码,在2.60GHz的CPU取得了16fps的帧率,在GPU(Nvidia Titan Black)上取得了99fps的帧率

四、结论及个人总结

MTCNN可能是目前为止结合了帧率和准确率都是最好的算法,非常具有参考价值。

它通过三个级联的网络降低运算量并且取得了非常好的效果,值得我们参考和借鉴。

你可能感兴趣的:(目标检测,机器学习,论文解析)