今天给大家带来一篇来自CVPR 2017关于人脸识别的文章。
文章题目:Deep Convolutional Neural Network using Triplets of Faces, Deep Ensemble, and
摘要:
文章动机:人脸识别在一个没有约束的环境下,在计算机视觉中是一个非常有挑战性的问题。同一个身份的人脸当呈现不同的装饰,不同的姿势和不同的表情都可以使人脸看起来完全不同。这种相同身份的变化可以压倒不同身份的变化,这样给人脸识别带来更大的挑战,特别是在没有约束的环境下。这些例子包括特征人脸分析,独立主成分分析以及他们的拓展版本。这些方法都是假定人脸图像都是对齐好的另外人脸图像有相似的姿势。但是,在一些自然环境中和实际应用中,这种假设是不存在的。因此减少个人内在的变化,同时扩大人与人之间的不同在人脸识别中是一个重要的课题,特别是在人脸验证中。(关于人脸识别和人脸认证,我将在后面进行补充)
人脸验证只对两张人脸进行分类,要么是一样的要么不是,这个过程要求减少个人内在的变化,同时加大人与人之间的变化,为了完成这个,子空间的认证方法例如:LDA,贝叶斯脸,同一标准的子空间,被提出来。例如LDA通过两个线性空间去逼近个人和人与人之间的人脸变换,同过找到两个线性投影去最大化它们的比值。但是这些方法都有它们的缺点,因为它们的线性和浅层结构,但是个人变化和人与人之间的变化是复杂的,非线性的,同时在一个高维的图像空间被观察,而不是花时间手动的试图去寻找新的图片描述。我们代替的提出了一个方法通过深度神经网络进行监督的特征学习自动地去得到新的表示,和一个新的训练数据类型。
提出的方法:
人脸的预处理:
训练一个深度学习模型需要大量的人脸数据库,因为有成千上万的参数需要训练。他们用爬虫在网上趴下很多的人脸图像,还有一些公开的数据集CASIA webface. 收集好之后,要把原始图像转成标准的图像,主要分为四个步骤:
- 首先用一个人脸检测器去寻找给出的图片的人脸部分。
- 第二步,用人脸特征探测器去寻找被检测人脸区域的基准点。
- 第三步,把对齐的人脸图片装入一个预先定义好的95x95的像素区域,将他们规范成标准人脸照片。
- 最后,用下采样建立一个图像金字塔,且每一个人脸的像素为:95X95, 67X67,47X47.
说一下图像金字塔:
图像:
多尺度的卷积层块(MCLBS):
示意图如下:
一些说明:1X1的卷积核主要是用来降维,降维之后可以加快网络的训练。这一部分在我的上一篇博客中有说过,这里就暂且不说了。这四个小网络连接成一个输出向量。文章说可以提高特征的层次性。
关于作用:知乎上说的很好。
人脸的三元组
是标准脸,是此人的另外一张脸,不是这个人的人脸图像。整个网络选择了四百万个这种三元组作为训练样本去得到参数。
损失函数的设置:
损失函数:
Triplet Loss:
是经过DCNN映射之后的输出,同理是经过DCNN映射之后的输出,是经过DCNN 映射之后的输出。是标准脸与负样本脸的距离,是标准脸,与本人的其他脸图片的距离。M是一个边缘限制了不是一个人与是一个人在欧几里得空间的比例。其实在这一段,我都是把他当成LDA来理解,类间越大越好,类内越小越好,也就是求他们的比例。
文章指出如果仅仅用这个作为训练目标,在成对图片之间(就是一个人的两张照片,不成对就是不同的两个人的照片)得到了一个不平衡的距离范围,这就意味着虽然两者的比例固定在一个确定的值上,但是成对图片之间的绝对距离的范围却不是的,因此,文章也考虑了成对之间的不同之处。
Pairwise Loss:
其实就是成对之间的距离之和。
这就是损失函数的目标,很朴素,但是很有效果。一直感觉LDA的思想真是好用。
这是整个网络的结构,其中加上auxiliary classifier loss的目的是防止梯度消失。那么整个网络通过这样训练得到的参数就可以抽取网络的深度的特征。然后代入连续贝叶斯学习中就可以了。
基于本文提到的人脸识别主要包含两个意思:
一种是分类:就比如现在屋子里十个人,是有记录的,现在新来的一个人就可以判定他是具体哪一个,他是一个多分类问题。
第二种是人脸验证问题:就是本文提到的问题,比如支付宝首先采集你的人脸,然后又用一个人脸去判定是不是同一个人,如果是的话,那么就可以登录系统,如果不是的话就不可以登录系统,这是一个典型的二分类问题。
好了这篇文章讲到这里,也没什么好说的了,大家下次再见。