MTCNN+FaceNet实现人脸检测与识别

本文介绍MTCNN和FaceNet两种人脸识别算法。MTCNN用于人脸检测,由P-Net、R-Net和O-Net三个级联网络构成,实现人脸区域的定位和关键点检测。FaceNet用于人脸特征提取和识别,采用深度神经网络和Triplet Loss训练,输出固定长度的特征向量,用于计算人脸间相似度。

人脸识别

人脸识别包括两个模块人脸检测(人脸定位)+人脸识别。常用的人脸检测的算法有Dilb,OpenCV,OpenFace,MTCNN等。常用人脸识别的算法包括FaceNet,InsightFace模型等。

本文以MTCNN结合FaceNet实现人脸的检测与识别。

1、MTCNN

MTCNN(Multi-task convolutional neural network,多任务卷积神经网络)是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。这三个级联的网络分别是快速生成候选窗口的P-Net、进行高精度候选窗口过滤选择的R-Net和生成最终边界框与人脸关键点的O-Net。和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。

MTCNN第一阶段的目标是生成人脸候选框。首先对图片做“金字塔”变换。究其原因,是由于各种原因,使得图片中的人脸的尺度有大有小,识别算法需要适应这种目标尺度的变化;目标检测本质上来说上目标区域内特征与模板权重的点乘操作;那么如果模板尺度与目标尺度匹配,自然会有很高的检测效果。MTCNN使用了图像金字塔来解决目标多尺度问题,即把原图按照一定的比例,多次等比缩放得到多尺度的图片,很像个金字塔。在这里插入图片描述
而P-NET的模型是用单尺度(1212)的图片训练出来的,推断的时候,想要识别各种尺度的人脸更准,需要把待识别的人脸的尺度先变化到接近模型尺度(1212)。
在这里插入图片描述
P-NET的输出结果还原到原图上代表了各区域上有人脸的概率,获取到结果后,一方面可以通过切threshold,过滤一些得分低的区域;另一方面可以通过NMS算法,过滤重叠度高的区域。

除此之外,还可以使用边框回归(Bounding box regression)修正前面得到的边框区域位置。实际上边框回归是一种映射,使得输入原始的窗口 P(下图红框) 经过映射的结果跟真实窗口G(下图绿框)更接近。
在这里插入图片描述
MTCNN的R-NET和O-NET都运用了与P-NET相似的处理过程,每个流程都能同时输出分类的结果,以及修正的值。对所有分类得分高于阈值,且重叠率不高的框进行修正。

P-NET最终将输出很多张可能存在人脸的人脸区域,并将这些区域输入R-Net进行进一步处理。
在这里插入图片描述
R-NET相对于第一层P-NET来说,增加了一个全连接层
在这里插入图片描述
P-Net的输出只是具有一定可信度的可能的人脸区域,在R-NET中,将对输入进行细化选择,并且舍去大部分的错误输入,并再次使用边框回归和面部关键点定位器进行人脸区域的边框回归和关键点定位,最后将输出较为可信的人脸区域,供O-Net使用。对比与P-Net使用全卷积输出的1132的特征,R-Net使用在最后一个卷积层之后使用了一个128的全连接层,保留了更多的图像特征,准确度性能也优于P-Net。
在这里插入图片描述
O-NET基本结构是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。
在这里插入图片描述
该网络的输入特征更多,在网络结构的最后是一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点。O-Net拥有特征更多的输入和更复杂的网络结构,也具有更好的性能,这一层的输出作为最终的网络模型输出
在这里插入图片描述
至此,MTCNN完成了人脸检测的工作,给出一张人脸图像,通过MTCNN可以标记出人脸区域和人脸关键点定位。结合FaceNet模型,就可以识别几张图片是否为同一个人,进而可以推广到更多的领域,包括安检、人脸解锁等。

2、FaceNet

FaceNet模型是由 Google工程师Florian Schroff,Dmitry Kalenichenko,James Philbin提出。FaceNet的主要思想是把人脸图像映射到一个多维空间,通过空间距离表示人脸的相似度。同个人脸图像的空间距离比较小,不同人脸图像的空间距离比较大。这样通过人脸图像的空间映射就可以实现人脸识别,FaceNet中采用基于深度神经网络的图像映射方法和基于triplets(三元组)的loss函数训练神经网络,网络直接输出为128维度的向量空间。

FaceNet的网络结构如下图所示,其中Batch表示人脸的训练数据,接下来是深度卷积神经网络,然后采用L2归一化操作,在接入Embedding(嵌入)层,得到人脸图像的特征表示,最后为三元组(Triplet Loss)的损失函数。

所谓嵌入,可以理解为一种映射关系,即将特征从原来的特征空间中映射到一个新的特征空间,新的特征就可以称为原来特征的一种嵌入。


在这里插入图片描述
这里的映射关系是将卷积神经网络末端全连接层输出的特征映射到一个超球面上,然后再以Triplet Loss为监督信号,获得网络的损失与梯度。

  而Triplet Loss,就是根据三元组(Triplet)计算而来的损失(Loss)。其中,三元组由Anchor(A),Negative(N),Positive(P)组成,任意一张图片都可以作为一个基点(A),然后与它属于同一人的图片就是它的P,与它不属于同一人的图片就是它的N。其学习目标如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200226230306680.png) 网络没经过学习之前,A和P的欧式距离可能很大,A和N的欧式距离可能很小,如上图左边,在网络的学习过程中,A和P的欧式距离会逐渐减小,而A和N的距离会逐渐拉大。网络会直接学习特征间的可分性:同一类的特征之间的距离要尽可能的小,而不同类之间的特征距离要尽可能的大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy-Sky

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值