人脸特征提取DeepID 1.0深度网络解读

标签: 深度学习 人脸校验 DeepID


作者:贾金让
本人博客链接:http://blog.csdn.net/jiajinrang93

1.概述

文章名称:Deep Learning Face Representation from Predicting 10,000 Classes
文章来源:2014CVPR
文章作者:Yi Sun, Xiaogang Wang, Xiaoou Tang
简要介绍:人脸校验是人脸识别中很重要的一部分,在经过人脸检测、人脸对齐之后,我们要开始判断两张人脸究竟是否是同一张脸。本文所采用的方法,简要来说,就是通过深度神经网络来提取人脸深层次的抽象的特征,这种特征抽象到可以区别出两张不同的人脸,在提取出特征后,再用分类器进行分类,文章采用了两种分类方法以突出特征提取网络的能力和效果,采用的两种方法分别为:联合贝叶斯人脸校验( Joint Bayesian)神经网络方法(neural network)。其中第一种方法联合贝叶斯是一种超有效的人脸校验算法,是传统贝叶斯脸算法的提升,过些日子我仔细研究后会另开一篇博客专门写,公式不好推啊。。。

2.整体算法流程描述

Deep hidden IDentity feature(DeepID)是一种特征提取的算法,这种网络一经训练好后,可以提取出输入人脸图片的深层次特征,用作者论文中的话来说,就是可以非常有效地完成多分类任务。这个多分类任务怎么理解呢,就是说,在提取出了特征以后,如果网络后面再加上一个softmax层,那么即使是分10000个类(10000个不同的人脸),网络也可以有效地区别它们。简而言之概括一下,这个训练好的DeepID网可以将输入图片转换成160维的特征向量(实际上是 160×2×60 维的特征向量,具体为什么后面再说),然后根据这个特征采用分类算法进行分类,比如用联合贝叶斯或者一个分类用的神经网络,当然也可以用一个softmax层进行分类,作者标题中的10000class实际上就是softmax层实现的。

2.1 DeepID网特征提取+softmax分类

下图就是这个特征提取DeepID网+softmax分类的示意图,看图的方式是从下至上,最下面的face patches是网络的输入,实际上,这个网络是由120个卷积神经网络(实际上是60个参数不同的网,但是由120个输入,所以算是120个网)并行而成的,比如最左边的网络的输入层输入的图片是这个人脸图片的偏左脸的部分,然后经过卷积层1、2、3、4逐步提取特征,最后一个卷积层接一个全连接层,这个全连接层由160个神经元组成,它的输出也就是这张输入图片的160维特征向量。之后这个特征向量链接一个10000维的softmax层,也就是分成10000类,10000个神经元每一个的输出都是属于该类的概率,哪个值最大,就说明这张图片属于那类的概率大,这就是传统的softmax的功能。这里有一点我不太清楚,因为作者是120个这种网络,也就是说最后会有120个softmax层,它们是并行结构,那么最终这120个softmax的输出是怎么联系在一起的呢,是这120个softmax的10000个节点一一对应相加然后归一化求概率么,还是单纯的进行投票操作呢?留个疑问。

image_1bgft7ng714qd12kp1324qp1r6k9.png-86kB

2.2 DeepID网特征提取+人脸校验

这一部分整个算法的流程和前面在DeepID前的所有过程都是相同的,不同之处在于,在提取出每一张图像的160维特征向量后,不连接softmax层,而是将120个160维特征向量连接在一起(再次说明,120是因为原始的一张人脸图片被取出了120块不同大小的人脸部分,但都是同一张图片的),组成一个19200维的特征向量,这个19200维的特征向量,就是这张图片的deepID特征。
之后,如果要进行人脸校验的话,我们会有两张人脸图片,提取它们各自的19200维的deepID特征,之后采用联合贝叶斯算法或是神经网络进行分类,判断它们是否是同一张脸。

3.DeepNets的训练过程

其实,DeepID网络结构很简单,看起来和非常经典的LeNet很相似,因此它的训练也不复杂,首先详细介绍它的网络结构。
网络结构示意图如下:

image_1bgg9rvs4pu113r34c2vtt15g613.png-49.5kB

还是想说很像LeNet啊。

一个DeepID网(就是前面的120个之一)包含4个卷积层(每一个都带有最大池化层)以及一个全连接层(也就是DeepID的160维特征),在训练网络时后面还要加上softmax层,不然不能给标签没法训练了,当然训练出网络后在测试数据上可以不加softmax,只到全连接层后就直接使用特征。

网络的输入是 39×31×k 大小的长方形或者是 31×31×k 大小的正方形,k是代表图片的通道数。
之后进入第一个卷积层,卷积核大小是 4×4×k ,得到 394+1×(314+1)×(kk+1)=36×28×1 的输出,因为该层由20个卷积核,得到了20个特征图,也就是 36×28×20 了。之后接最大池化层层,变成 18×14×20 ,之后接一个ReLU激励函数。后面卷积层和池化层的操作都类似,就不一一计算了,不过有一点要提及,每一个池化层结束后都由ReLU的激励函数存在,因为ReLU函数由更强的拟合能力和效果(相比于sigmoid来说)。

直到第四个卷积层加池化层后,我们得到 2×1×80 的输出,之后应该接全连接层,也就是我们的DeepID特征层,此处DeepID层固化为160个神经元。这里与往常不一样的是,作者将这个全连接层不仅和第四卷积层连接,还连接到了第三卷积层上,原因是不仅由于第四卷积层神经元数量过少,而且第四卷积层的特征相比与第三层更全局,为了获得多层次的特征,所以要也需要第三卷积层提取的特征。因此这个全连接层的公式为:

yj=max(0,ix1iw1i,j+ix2iw2i,j+bj)

其中上标1代表第三卷积层的神经元和权值,上标2代表第四卷积层的神经元和权值。

全连接层后也加一个ReLU层增加非线性拟合的能力。

全连接层后是一个10000类的softmax层,没什么说的,公式如下:

yi=exp(yi)nj=1exp(yj)

其中 yj=160i=1xiwi,j+bj
之后用梯度下降法和反向传播法可以更新权值,就不再介绍了。

4.人脸的特征提取

网络训练好了自然就要开始用它提取特征,前面第三节详细描述了训练一个DeepID网的过程,而实际上,对于一张人脸图片,我们要训练的DeepID网可不止一个,足有60个,每个网有两个输,也就是同一个网会有两个输入和两个输出,要计算两次,具体是怎么回事呢,下面介绍。

对于一张人脸图片,在经过人脸检测和人脸对齐之后,作者按照瞳孔和嘴的位置对所有训练样本进行了对齐(保证后面的切片工作是同一尺度下的),然后根据特征点的位置,进行了切块提取,下图上半部分就是对一张人脸在10个位置下的提取,然后每一个位置的切块提取还会有三个不同的尺度,这就得到了同一张人脸的30个不同的部位人脸图,下图下半部分就是某两个位置的三个不同尺度的图。

image_1bggc7qll1au71fra1c9r1h3gvqf1g.png-199.2kB

有了30个不同部位人脸图后,当然此时着30个不同部位人脸图还都是RGB图像,我们还需要灰度图像上的特征,因此每一个部位图还要有一份灰度图版的,因此30又翻个倍,变成了60。

之后,作者将每一个部位人脸图进行水平翻转。也就是同一个部位人脸图又多出了一个和它一样的但是翻转形式的图,所以就变成了120张图。这里要提一句,在两个眼睛特征点处的图和两个嘴角特征点处的图不是进行翻转,而是进行对称操作。

上面的过程可能有点繁琐,总结一下,一张完整的人脸图片,作者将它根据特征点提取处10个不同部位人脸图,之后每个部位人脸图有三个尺度,就变成了30个人脸图,之后由于RGB图像和灰度图像都需要,每个图又翻倍,变成60个人脸图,之后每一张图作对称或水平翻转,变成了120个图。

有了120个同一张脸的不同部位图后,我们将同一个图(包括翻转前和翻转后)的两张图输入一个网络,因此就是60个网络,每个网络有两次输入输出的计算(翻转前和翻转后)。最后在DeepID层得到一张人脸的特征向量大小是 160×2×60

5.人脸校验的两种方法

人脸校验当然有很多种方法,这里说的两种是论文中提及的,一种叫联合贝叶斯,一种是神经网络来分类。
在每一张人脸图片都已经提出DeepID特征的基础上,我们取两张图片来进行人脸校验,也就是取它们的DeepID特征,然后放入到分类器中。
讲到这里其实和DeepID网络本身就没什么关系了。因此就不细说。下面附上用神经网络来分类的网络结构图,输入就是两张图的DeepID特征对应连接在一起,然后就是单纯的局部连接和全连接,最后输出0或1表示两个类中的一个。

image_1bggdaemrg9tedkmto3qupt020.png-69.5kB

这里再附上作者两种分类方法的测试准确率曲线对比图。

image_1bggdchjs1bjb1egr12clld717cr2d.png-30.7kB

下面是作者把DeepID特征可视化的结果,也是可以挺明显的看出不同人脸提取的特征不一样哈。

image_1bggdeag66co1jbe19lshab1f462q.png-69.6kB

猜你喜欢

转载自blog.csdn.net/jiajinrang93/article/details/72566130