人脸识别算法MTCNN论文解读

论文名称:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

论文地址:https://www.lao-wang.com/wp-content/uploads/2017/07/1604.02878.pdf

 

 

1、MTCNN原理

MTCNN,Multi-task convolutional neural network(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在一起,该模型主要采用了三个级联的网络,分别是快速生成候选窗口的P-Net、进行高精度候选窗口过滤选择的R-Net和生成最终边界框与人脸关键点的O-Net。在使用这些网络之前,首先要将原始图片缩放到不同尺度 ,形成一个“图像金字塔”,接着会对每个尺度的图片通过神经网络计算一遍 。

 

2、P-Net

P-Net 全称为Proposal Network,其基本的构造是一个全卷积网络。对上一步构建完成的图像金字塔,通过一个FCN进行初步特征提取与标定边框,并进行Bounding-Box Regression调整窗口与NMS进行大部分窗口的过滤。网络结构如下:

P-Net是一个人脸区域的区域建议网络,该网络的将特征输入结果三个卷积层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步提议,该部分最终将输出很多张可能存在人脸的人脸区域,并将这些区域输入R-Net进行进一步处理。因此 ,对应的输出由3部分组成 :

  • 第1个部分要判断该图像是否是人脸,输出向量的形状为 1x1x2,也就是两个值,分别为该图像是人脸的概率, 以及该图像不是人脸的概率。这两个值加起来应该严格等于 1。之所以使用两个值来表示,是为了方便定义交叉熵损失 ;
  • 第2个部分给出框的精确位置,称为框回归。 这个偏移由四个变量组成 :框左上角的横坐标的相对偏移、框左上角的纵坐标的相对偏移、 框的宽度的误差、 框的高度的误差。 输出向量的形状就是图中的1*1*4;
  • 第3个部分给出人脸的 5 个关键点的位置 :左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置 、 右嘴角的位置 。每个关键点又需要横坐标和纵坐标两维来表示,因此输出一共是 10 维 (即1x1×10)。

 

 

3、R-Net

R-Net 全称为Refine Network,其基本的构造是一个卷积神经网络,相对于第一层的P-Net来说,增加了一个128全连接层,保留了更多的图像特征,因此对于输入数据的筛选会更加严格。在图片经过P-Net后,会留下许多预测窗口,我们将所有的预测窗口送入R-Net,再次使用边框回归和面部关键点定位器进行人脸区域的边框回归和关键点定位,最后将输出较为可信的人脸区域,供O-Net使用。R-Net 的输出和P-Net 完全一样,同样由人脸判别 、 框回归 、 关键点位置预测三部分组成 。在实际应用中,对每个 P-Net 输出可能为人脸的区域都放缩到 24×24的大小, 再输入到 R-Net 中,进行进一步判定。 R-Net 的网络结构如图所示:

 

4、O-Net

O-Net 全称为Output Network,基本结构是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。它是一个更复杂的卷积网络,把所得到的区域缩放成 48×48 的大小,输入到最后的 O-Net 中,有一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点。 O-Net的网络结构如图所示:

 

4、 集成架构及系统思想

从 P-Net 到 R-Net,最后再到 O-Net,网络输入的图片越来越大 ,卷积层的通道数越来越多,内部的层数也越来越多,它们识别人脸的准确率应该是越来越高的。之所以要使用三个网络,是因为如果一开始直接对图中的每个区域使用 O-Net,速度会非常慢 。实际上 P-Net 先做了一遍过滤,将过滤后的结果再交给 R-Net进行过滤,最后将过滤后的结果交给效果最好但速度较慢的O-Net进行判别,这样在每一步都提前减少了需要判别的数量,有效降低了处理时间。系统结构如图:

å·¥ä½æµç¨

 

5、MTCNN的损失定义

MTCNN中每个网络都有部分输出,因此损失也由三部分组成。针对人脸判别部分,使用交叉熵损失,针对框回归和关键点判定,使用 L2 损失。最后这三部分损失各自乘以自身的权重再加起来,就形成最后的总损失。在训练P-Net和R-Net时,更关心框位置的准确性,而较少关注关键点判定的损失,因此关键点判定损失的权重很小。对于 O-Net,关键点判定损失的权重较大。

 

6、三元组损失

原始的 CNN 模型使用的是 Softmax 损失。尽管使用 Softmax损失可以区别出每个人,但本质上没再对每一类的向量表示之间的距离做出要求。它不符合希望特征具有的特点:希望同一类对应的向量表示尽可能接近,不同类对应的向量尽可能远。

三元组损失( Triplet Loss ),其中的三元也就是如下图的Anchor、Negative、Positive,如下图所示通过Triplet Loss的学习后使得Positive元和Anchor元之间的距离最小,而和Negative之间距离最大。其中Anchor为训练数据集中随机选取的一个样本,Positive为和Anchor属于同一类的样本,而Negative则为和Anchor不同类的样本。

这也就是说通过学习后,使得同类样本的positive样本更靠近Anchor,而不同类的样本Negative则远离Anchor。

 

7、中心损失

与三元组损失不同,中心损失( Center Loss )不直接对距离进行优化, 保留了原有的分类模型,但又为每个类指定了一个类别中心。同一类的图像对应的特征都应该尽量靠近自己的类别中心,不同类的类别中心尽量远离。与三元组损失相比,使用中心损失训练人脸模型不需要使用特别的采样方法,而且利用较少的图像就可以达到与三元组损失相似的效果。

中心损失定义:设输入的人脸图像为x,该人脸对应的类别为y,对每个类别都规定一个类别中心,记作c。希望每个人脸图像对应的特征 f(x) 都尽可能接近其中心 c。 因此定义中心损失为 L = 1/2(|| f(x)-c ||2),多张图像的中心损失就是将它们的值加在一起。

如何确定每个类别的中心 c 呢?首先随机初始化各个中心 c,接着不断地取出 batch进行训练,在每个 batch 中,使用总的损失L,除了使用神经网络模型的参数对模型进行更新外 ,也对 c 进行计算梯度 ,并更新中心的位置 。此外还需要加入 Softmax损失,就是说,最终的损失由两部分构成。

 

8、Soft-NMS

NMS,顾名思义,非极大值抑制就是抑制不是极大值的元素。在目标检测领域里面,可以使用该方法快速去掉重合度很高且标定相对不准确的预测框,但是这种方法对于重合的目标检测不友好。

Soft-NMS,对于优化重合目标检测的一种改进方法。核心在于在进行NMS的时候不直接删除被抑制的对象,而是降低其置信度。处理之后在最后统一一个置信度进行统一删除。

 

9、PRelu

MTCNN中,卷积网络采用的激活函数是PRelu,带有参数的带有参数的Relu,相对于Relu滤除负值的做法,PRule对负值进行了添加参数而不是直接滤除,这种做法会给算法带来更多的计算量和更多的过拟合的可能性,但是由于保留了更多的信息,也可能是训练结果拟合性能更好。

 

10、常见应用

人脸验证:就是检测 A、 B 是否属于同一个人 。只需要计算向量之间的距离,设定合适的报警阀值即可;

人脸识别: 这个应用是最多的,给定一张图片,检测数据库中与之最相似的人脸。显然可以被转换为一个求距离的最近邻问题;

人脸聚类: 在数据库中对人脸进行聚类,直接用 K-Means 即可。

 

11、人脸识别模型常用数据集

CAISA-WebFace:https://pan.baidu.com/s/1cnnKrYQDheNfoEhcDoShyA,提取码:vk36

VGG-Face:http://www.robots.ox.ac.uk/~vgg/data/vgg_face/

MS-Celeb-1M:https://www.microsoft.com/en-us/research/project/ms-celeb-1m-challenge-recognizing-one-million-celebrities-real-world/

MegaFace:http://megaface.cs.washington.edu/

更多数据集:http://www.face-rec.org/databases/

 

 

参考文章:https://blog.csdn.net/qq_36782182/article/details/83624357

参考书:《21个项目玩转深度学习》

 

发布了139 篇原创文章 · 获赞 24 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览