好文档 - 专业文书写作范文服务资料分享网站

人脸验证技术发展概要

天下 分享 时间: 加入收藏 我要投稿 点赞

DeepID人脸识别算法之三代

如今,深度学习方兴未艾,大数据风起云涌,各个领域都在处于使用深度学习进行强突破的阶段,人脸识别也不例外,香港中文大学的团队使用卷积神经网络学习特征,将之用于人脸识别的子领域人脸验证方面,取得了不错的效果。虽然是今年7月份才出的成果,但连发三箭,皆中靶心,使用的卷积神经网络已经改进了三次,破竹之势节节高。故而在这里将DeepID神经网络的三代进化史总结一下,以期相互讨论,互有增益。

1. 问题引入及算法流程

DeepID所应用的领域是人脸识别的子领域——人脸验证,就是判断两张图片是不是同一个人。人脸验证问题很容易就可以转成人脸识别问题,人脸识别就是多次人脸验证。DeepID达到的效果都是在LFW数据集上,该数据集是wild人脸数据集,即没有经过对其的人脸,背景变化比较大。该数据集太小,很多identities都只有一张人脸,5000个人只有13000张图片。所以DeepID引入了外部数据集CelebFaces和CelebFaces+,每次模型更新都会使用更大的数据集,这在后面介绍DeepID时再细说。

卷积神经网络在DeepID中的作用是是学习特征,即将图片输入进去,学习到一个160维的向量。然后再这个160维向量上,套用各种现成的分类器,即可得到结果。DeepID之所以有效,首先在于卷积神经网络学习到的特征的区分能力比较强,为了得到比较强的结果,DeepID采取了目前最常用的手法——增大数据集,只有大的数据集才能使得卷积神经网络训练的更加的充分。增大数据集有两种手法,第一种手法,就是采集好的数据,即CelebFaces数据集的引入。第二种手法,就是将图片多尺度多通道多区域的切分,分别进行训练,再把得到的向量连接起来,得到最后的向量。DeepID的算法流程如下:

在上述的流程中,DeepID可以换为Hog,LBP等传统特征提取算法。Classifier可以是SVM,Joint Bayes,LR,NN等任意的machine learning分类算法。

在引入外部数据集的情况下,训练流程是这样的。首先,外部数据集4:1进行切分,4那份用来训练DeepID,1那份作为训练DeepID的验证集;然后,1那份用来训练Classifier。这样划分的原因在于两层模型不能使用同一种数据进行训练,容易产生过拟合。

如此,想必大家对DeepID的应用场景已经熟悉了,下面开始讲三代DeepID的进化。

2. DeepID

在这里,我假定大家对卷积神经网络已经有了基本的认识,如果没有的话,出门左转看我这篇blog:卷积神经网络。

2.1 DeepID网络结构

DeepID是第一代,其结构与普通的卷积神经网络差不多。结构图如下:

该结构与普通的卷积神经网络的结构相似,但是在隐含层,也就是倒数第二层,与Convolutional layer 4和Max-pooling layer3相连,鉴于卷积神经网络层数越高视野域越大的特性,这样的连接方式可以既考虑局部的特征,又考虑全局的特征。

2.2 DeepID实验设置

实验中,人脸图片的预处理方式,也就是切分方式的样例如下:

在DeepID的实验过程中,使用的外部数据集为CelebFaces+,有10177人,202599张图片;8700人训练DeepID,1477人训练Joint Bayesian分类器。切分的patch(也就是上图这样的数据)数目为100,使用了五种不同的scale。每张图片最后形成的向量长度为32000,使用PCA降维到150。如此,达到97.20的效果。使用某种Transfer Learning的算法后,达到97.45%的最终效果。

2.3 实验结论

? 使用multi-scale patches的convnet比只使用一个只有整张人脸的patch的效果要好。

? DeepID自身的分类错误率在40%到60%之间震荡,虽然较高,但DeepID是用来学特征的,并不需要要关注自身分类错误率。

? 使用DeepID神经网络的最后一层softmax层作为特征表示,效果很差。

? 随着DeepID的训练集人数的增长,DeepID本身的分类正确率和LFW的验证正确率都在增加。

这就是DeepID第一代。

3 DeepID2

DeepID2相对于DeepID有了较大的提高。其主要原因在于在DeepID的基础上添加了验证信号。具体来说,原本的卷积神经网络最后一层softmax使用的是Logistic Regression作为最终的目标函数,也就是识别信号;但在DeepID2中,目标函数上添加了验证信号,两个信号使用加权的方式进行了组合。

3.1 两种信号及训练过程

识别信号公式如下:

验证信号公式如下:

由于验证信号的计算需要两个样本,所以整个卷积神经网络的训练过程也就发生了变化,之前是将全部数据切分为小的batch来进行训练。现在则是每次迭代时随机抽取两个样本,然后进行训练。训练过程如下:

在训练过程中,lambda是验证信号的加权参数。M参数时动态调整的,调整策略是使最近的训练样本上的验证错误率最低。

3.2 实验设置

首先使用SDM算法对每张人脸检测出21个landmarks,然后根据这些landmarks,再加上位置、尺度、通道、水平翻转等因素,每张人脸形成了400张patch,使用200个CNN对其进行训练,水平翻转形成的patch跟原始图片放在一起进行训练。这样,就形成了400×160维的向量。

这样形成的特征维数太高,所以要进行特征选择,不同于之前的DeepID直接采用PCA的方式,DeepID2先对patch进行选取,使用前向-后向贪心算法选取了25个最有效的patch,这样就只有25×160维向量,然后使用PCA进行降维,降维后为180维,然后再输入到联合贝叶斯模型中进行分类。

DeepID2使用的外部数据集仍然是CelebFaces+,但先把CelebFaces+进行了切分,切分成了CelebFaces+A(8192个人)和CelebFaces+B(1985个人)。首先,训

练DeepID2,CelebFaces+A做训练集,此时CelebFaces+B做验证集;其次,CelebFaces+B切分为1485人和500人两个部分,进行特征选择,选择25个patch。最后在CelebFaces+B整个数据集上训练联合贝叶斯模型,然后在LFW上进行测试。在上一段描述的基础上,进行了组合模型的加强,即在选取特征时进行了七次。第一次选效果最好的25个patch,第二次从剩余的patch中再选25个,以此类推。然后将七个联合贝叶斯模型使用SVM进行融合。最终达到了99.15%的结果。

其中,选取的25个patch如下:

3.3 实验结论

? 对lambda进行调整,也即对识别信号和验证信号进行平衡,发现lambda在0.05的时候最好。使用LDA中计算类间方差和类内方差的方法进行计算。得到的结果如下:

可以发现,在lambda=0.05的时候,类间方差几乎不变,类内方差下降了很多。这样就保证了类间区分性,而减少了类内区分性。如果lambda为无穷大,即只有验证信号时,类间方差和类内方差都变得很小,不利于最后的分类。

? DeepID的训练集人数越多,最后的验证率越高。

? 对不同的验证信号,包括L1,L2,cosin等分别进行了实验,发现L2 Norm最好。

4 DeepID2+

DeepID2+有如下贡献,第一点是继续更改了网络结构;第二点是对卷积神经网络进行了大量的分析,发现了几大特征,包括:+ 神经单元的适度稀疏性,该性质甚至可以保证即便经过二值化后,仍然可以达到较好的识别效果;+ 高层的神经单元对人比较敏感,即对同一个人的头像来说,总有一些单元处于一直激活或者一直抑制的状态;+ DeepID2+的输出对遮挡非常鲁棒。

4.1 网络结构变化

相比于DeepID2,DeepID2+做了如下三点修改:

? DeepID层从160维提高到512维。

? 训练集将CelebFaces+和WDRef数据集进行了融合,共有12000人,290000张图片。

? 将DeepID层不仅和第四层和第三层的max-pooling层连接,还连接了第一层和第二层的max-pooling层。

最后的DeepID2+的网络结构如下:

上图中,ve表示监督信号(即验证信号和识别信号的加权和)。FC-n表示第几层的max-pooling。

4.2 实验设置

训练数据共有12000人,290000张图像。其中2000人用于在训练DeepID2+时做验证集,以及训练联合贝叶斯模型。

4.3 实验结论

分别使用FC-n进行实验,比较的算法包括DeepID2+、只有从FC-4反向传播下来进行训练的模型、使用少量数据的、使用小的特征向量的模型。结果如下:

DeepID2选取了25个patch,DeepID2+选取了同样的25个patch,然后抽取的特征分别训练联合贝叶斯模型,得到的结果是DeepID2+平均比DeepID2提高2%。

4.4 适度稀疏与二值化

DeepID2+有一个性质,即对每个人,最后的DeepID层都大概有半数的单元是激活的,半数的单元是抑制的。而不同的人,激活或抑制的单元是不同的。基于此性质。使用阈值对最后输出的512维向量进行了二值化处理,发现效果降低有限。

二值化后会有好处,即通过计算汉明距离就可以进行检索了。然后精度保证的情况下,可以使人脸检索变得速度更快,更接近实用场景。

4.5 特征区分性

存在某个神经单元,只使用普通的阈值法,就能针对某个人得到97%的正确率。不同的神经单元针对不同的人或不同的种族或不同的年龄都有很强的区分性。在这里,对每个单元的激活程度进行由高到低排序,可以得到下图所示:

上图只是其中一张图示,还有针对种族、年龄等的激活分析。此处不赘述。

但值得说的是,这种分析方法对我们很有启发。卷积神经网络的输出的含义是什么,很难解释,通过这种方法,或许可以得到一些结论。

4.6 遮挡鲁棒性

在训练数据中没有遮挡数据的情况下,DeepID2+自动就对遮挡有了很好的鲁棒性。有两种方式对人脸进行多种尺度的遮挡,第一种是从下往上进行遮挡,从10%-70%。第二种是不同大小的黑块随机放,黑块的大小从10×10到70×70。

结论是遮挡在20%以内,块大小在30×#30以下,DeepID2+的输出的向量的验证正确率几乎不变。

5 总结

至此,DeepID的三代进化史就讲完了。简单的说一下我的感受。

首先是卷积神经网络的作用,虽说之前听说过卷积神经网络既可以分类,也可以学习特征,但ImageNet上的卷积神经网络都是分类的,这次终于见到不关注分类错误率而关注特征的卷积神经网络。

其次,卷积神经网络的改进方式,无非如下几种:增大网络深度和宽度,增加数据,将网络隐含层连接到前面几层来,添加其他的信号。

再次,也是最重要的,就是DeepID在发展过程中对输出向量的分析,尤其是DeepID2+,神经网络的各个单元一直是无法解释的,但这次作者不仅试图去发现规律,还基于规律做出了一些改动,比如二值化。

最后,卷积神经网络的鲁棒性真的很厉害。

6 参考文献

? [1] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.

? [2] Sun Y, Chen Y, Wang X, et al. Deep learning face representation by joint identification-verification[C]//Advances in Neural Information Processing Systems. 2014: 1988-1996.

? [3] Sun Y, Wang X, Tang X. Deeply learned face representations are sparse, selective, and robust[J]. arXiv preprint arXiv:1412.1265, 2014.

DeepID3 face recognition

刚看完DeepID3[1],总结一下,还是先简单介绍一下网络结构吧。

Network Architecture

DeepID3有两种不同的结构: DeepID3 net1,DeepID3 net2。相对

DeepID2+,它的层数更多,网络更深。同时还借鉴了VGG net和GoogLeNet,引入了inception layer,这个主要是用在了DeepID3 net2里面。网络中还出现了连续两个conv layer直接相连的情况,这样使得网络具有更大的receptive fields和更复杂的nonlinearity,同时还能限制参数的数量。直接上图,从图中就能看出网络的结构,这里就不多说了。

Perfomance

在训练样本上,DeepID3仍采用原来DeepID2+中使用的样本,在25个image patches产生的网络上作对比时,DeepID3 net1优势最为明显,而DeepID3 net2提升不大显著。

DeepID3在LFW上的face verification准确率为99.53%,性能上并没有比

DeepID2+的99.47%提升多少。而且LFW数据集里面有三对人脸被错误地标记了,在更正这些错误的label后,两者准确率均为99.52%。

因此,作者对于具有更深的架构网络是否具有更强的优势没有下定论,这可以作为之后的研究方向。

在检查误判人脸时,作者在DeepID[5],DeepID2[6],DeepID2+,和DeepID3中找

出了12对相同的误判人脸。这些人脸确实不好分辨,我也分辨不出,毕竟DeepID系列从DeepID2+开始已经超越了人类。。。作者试图说明判错的原因是有的人脸确实相似,有的还有遮挡等因素,还有一些是年龄变化导致的。

Conclusion

DeepID3原文篇幅较短,与之前模型相比网络更深了,同时还引入了inceptionlayer。但是在更正了LFW上的错误后,它的准确率却和DeepID2+一样,所以这里层数的增加,inception layer的引入等结构上的改变并没有起到提高准确率的效果。那么是否网络更深优势更大?从这里我们真的看不出,但是我们不能说它真的没有。作者最后提出一个方向,在这样深的架构上采用更多的数据集,或许这可以提升性能。

References

[1] Sun Y, Liang D, Wang X, et al. Deepid3: Face recognition with very deep neural networks[J]. arXiv preprint arXiv:1502.00873, 2015.

DeepFace基本框架

人脸识别的基本流程是:

detect ->aligh -> represent -> classify

人脸对齐流程

分为如下几步:

a. 人脸检测,使用6个基点 b. 二维剪切,将人脸部分裁剪出来

c. 67个基点,然后Delaunay三角化,在轮廓处添加三角形来避免不连续 d. 将三角化后的人脸转换成3D形状 e. 三角化后的人脸变为有深度的3D三角网 f. 将三角网做偏转,使人脸的正面朝前。 g. 最后放正的人脸

h. 一个新角度的人脸(在论文中没有用到)

总体上说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。

人脸表示

经过3D对齐以后,形成的图像都是152×152的图像,输入到上述网络结构中,该结构的参数如下:

Conv:32个11×11×3的卷积核

max-pooling: 3×3, stride=2

Conv: 16个9×9的卷积核

Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享

Local-Conv: 16个7×7的卷积核,参数不共享

Local-Conv: 16个5×5的卷积核,参数不共享

Fully-connected: 4096维

Softmax: 4030维

前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但没有用太多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。

后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:

? 对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失

? 不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量

? 使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。

全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。

全连接层的输出可以用于Softmax的输入,Softmax层用于分类。

人脸表示归一化

对于输出的4096-d向量:先每一维进行归一化,即对于结果向量中的每一维,都要除以该维度在整个训练集上的最大值。

每个向量进行L2归一化 分类

得到表示后,使用了多种方法进行分类:

? 直接算内积

? 加权的卡方距离

? 使用Siamese网络结构

加权卡方距离计算公式如下:

其中,加权参数由线性SVM计算得到。

Siamese网络结构是成对进行训练,得到的特征表示再使用如下公式进行计算距离:

其中,参数alpha是训练得到。Siamese网络与FaceNet就很像了。

实验评估

数据集

? Social Face Classification Dataset(SFC): 4.4M张人脸/4030人

? LFW: 13323张人脸/5749人

? restricted: 只有是/不是的标记

? unrestricted:其他的训练对也可以拿到

? unsupervised:不在LFW上训练

? Youtube Face(YTF): 3425videos/1595人

Training on SFC

? 训练使用的人数不同(1.5K/3.3K/4.4K)

? 训练使用的照片数目不同(10%/20%/50%)

? 使用的网络不同(去掉第三层/去掉第4、5层/去掉第3、4、5层)

Results on LFW

Results on YTF

总结

DeepFace与之后的方法的最大的不同点在于,DeepFace在训练神经网络前,使用了对齐方法。论文认为神经网络能够work的原因在于一旦人脸经过对齐后,人脸区域的特征就固定在某些像素上了,此时,可以用卷积神经网络来学习特征。

针对同样的问题,DeepID和FaceNet并没有对齐,DeepID的解决方案是将一个人脸切成很多部分,每个部分都训练一个模型,然后模型聚合。FaceNet则是没有考虑这一点,直接以数据量大和特殊的目标函数取胜。

在DeepFace论文中,只使用CNN提取到的特征,这点倒是开后面之先河,后面的DeepID、FaceNet全都是使用CNN提取特征了,再也不谈LBP了。

参考文献

[1]. Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1701-1708.

FaceNet

与其他的深度学习方法在人脸上的应用不同,FaceNet并没有用传统的softmax的方式去进行分类学习,然后抽取其中某一层作为特征,而是直接进行端对端学习一个从图像到欧式空间的编码方法,然后基于这个编码再做人脸识别、人脸验证和人脸聚类等。

FaceNet算法有如下要点:

? 去掉了最后的softmax,而是用元组计算距离的方式来进行模型的训练。使用这种方式学到的图像表示非常紧致,使用128位足矣。

? 元组的选择非常重要,选的好可以很快的收敛。

先看具体细节。

网络架构

大体架构与普通的卷积神经网络十分相似:

如图所示:Deep Architecture就是卷积神经网络去掉sofmax后的结构,经过L2的归一化,然后得到特征表示,基于这个特征表示计算三元组损失。

目标函数

在看FaceNet的目标函数前,其实要想一想DeepID2和DeepID2+算法,他们都添加了验证信号,但是是以加权的形式和softmax目标函数混合在一起。Google做的更多,直接替换了softmax。

所谓的三元组就是三个样例,如(anchor, pos, neg),其中,x和p是同一类,x和n是不同类。那么学习的过程就是学到一种表示,对于尽可能多的三元组,使得anchor和pos的距离,小于anchor和neg的距离。即:

所以,变换一下,得到目标函数:

目标函数的含义就是对于不满足条件的三元组,进行优化;对于满足条件的三元组,就pass先不管。

三元组的选择

很少的数据就可以产生很多的三元组,如果三元组选的不得法,那么模型要很久很久才能收敛。因而,三元组的选择特别重要。

当然最暴力的方法就是对于每个样本,从所有样本中找出离他最近的反例和离它最远的正例,然后进行优化。这种方法有两个弊端:

? 耗时,基本上选三元组要比训练还要耗时了,且等着吧。

? 容易受不好的数据的主导,导致得到的模型会很差。

所以,为了解决上述问题,论文中提出了两种策略。

? 每N步线下在数据的子集上生成一些triplet

? 在线生成triplet,在每一个mini-batch中选择hard pos/neg样例。

为了使mini-batch中生成的triplet合理,生成mini-batch的时候,保证每个mini-batch中每个人平均有40张图片。然后随机加一些反例进去。在生成triplet的时候,找出所有的anchor-pos对,然后对每个anchor-pos对找出其hard neg样本。这里,并不是严格的去找hard的anchor-pos对,找出所有的anchor-pos对训练的收敛速度也很快。

除了上述策略外,还可能会选择一些semi-hard的样例,所谓的semi-hard即不考虑alpha因素,即:

网络模型

论文使用了两种卷积模型:

? 第一种是Zeiler&Fergus架构,22层,140M参数,1.6billion FLOPS(FLOPS是什么?)。称之为NN1。

? 第二种是GoogleNet式的Inception模型。模型参数是第一个的20分之一,FLOPS是第一个的五分之一。

? 基于Inception模型,减小模型大小,形成两个小模型。

? NNS1:26M参数,220M FLOPS。

? NNS2:4.3M参数,20M FLOPS。

? NN3与NN4和NN2结构一样,但输入变小了。

? NN2原始输入:224×224

? NN3输入:160×160

? NN4输入:96×96

其中,NNS模型可以在手机上运行。

其实网络模型的细节不用管,将其当做黑盒子就可以了。

数据和评测

在人脸识别领域,我一直认为数据的重要性很大,甚至强于模型,google的数据量自然不能小觑。其训练数据有100M-200M张图像,分布在8M个人上。

当然,google训练的模型在LFW和youtube Faces DB上也进行了评测。

下面说明了多种变量对最终效果的影响

网络结构的不同

图像质量的不同

最终生成向量表示的大小的不同

训练数据大小的不同

对齐与否

在LFW上,使用了两种模式:

? 直接取LFW图片的中间部分进行训练,效果98.87左右。

? 使用额外的人脸对齐工具,效果99.63左右,超过deepid。

总结

? 三元组的目标函数并不是这篇论文首创,我在之前的一些Hash索引的论文中也见过相似的应用。可见,并不是所有的学习特征的模型都必须用softmax。用其他的效果也会好。

? 三元组比softmax的优势在于

? softmax不直接,(三元组直接优化距离),因而性能也不好。

? softmax产生的特征表示向量都很大,一般超过1000维。

? FaceNet并没有像DeepFace和DeepID那样需要对齐。

? FaceNet得到最终表示后不用像DeepID那样需要再训练模型进行分类,直接计算距离就好了,简单而有效。

? 论文并未探讨二元对的有效性,直接使用的三元对。

参考文献

[1]. Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[J]. arXiv preprint arXiv:1503.03832, 2015.

人脸验证技术发展概要

DeepID人脸识别算法之三代如今,深度学习方兴未艾,大数据风起云涌,各个领域都在处于使用深度学习进行强突破的阶段,人脸识别也不例外,香港中文大学的团队使用卷积神经网络学习特征,将之用于人脸识别的子领域人脸验证方面,取得了不错的效果。虽然是今年7月份才出的成果,但连发三箭,皆中靶心,使用的卷积神经网络已经改进了三次,破竹之势节节高。故而在这里将DeepID神经
推荐度:
点击下载文档文档为doc格式
5swaq5wrwe0cqsi0v0jd0weks4q8c700nuo
领取福利

微信扫码领取福利

微信扫码分享