Deep Learning Face Representation from Predicting 10,000 Classes论文笔记(2015.03.24)
一、基本思路
作者利用卷积神经网络(Convolutional Neural Network,CNN)对大量样本进行训练,提取Deep hidden identity feature(DeepID)特征,然后利用这些特征进行人脸验证(Face Verification)。在LFW(Labeled Faces in the Wild)库上测试达到97.20%的效果,使用某种Transfer Learning的算法后,达到97.45%的最终效果。整个过程分为两个阶段。
第一阶段为DeepID 学习过程,训练多个深度卷积神经网络(Deep ConvNets)对输入的人脸块(face patches)进行特征提取。目的是对输入的人脸块进行分类,训练网络参数,使网络具备较好的网络泛化能力。这一步为有监督训练,即每个face patch对应于一个类别标签。每个ConvNet 的输出节点数目是相同的160,所有的这些ConvNets的输出(不是那个预测类别信息的输出,是该预测类别信息的前一层,即160维)就是提取到的特征,称为Deep hidden identity feature(DeepID)。
第二阶段为Face Verification过程,将上一阶段训练好的DeepID特征连起来,送到联合贝叶斯(Joint Bayesian,JB)或者一个神经网络( Neural Network,NN)进行Face Verification。整个过程可用下面两幅图来说明(以NN进行Face Verification为例):
第一阶段:DeepID
第二阶段:Face Verification
二、 ConvNet网络结构
下面将对ConvNet的结构进行详细讲解,结构图Figure2如下:
可以看到,这个网络结构与一般的卷积神经网络的结构十分相似,由4个卷积层(除第4个卷积层外,每一个卷积层后面接一个Max-pooling层)组成的网络,每个卷积后面都有相应函数式ReLU,这个是被实验证明了(参考文献[20]中提到)比sigmoid函数的有更好的拟合能力。特别之处在于DeepID那一层与第4个卷积层和第3个Max-pooling层全连接。作者在文章中解释说这样做的是因为第4层卷积层含有的神经元的个数太少,成为信息传递的瓶颈,这也就是作者所谓的多层次卷积网络(Multi-scale ConvNets)。第4个卷积层提取到的特征比第3个max-pooling层具备更多的全局性特征。最后,将DeepID层连接到softmax进行分类,并给出分类种类概率。提取到的特征是对类间具有很好的判别性的,相当于增加了类间的距离。
三、 特征提取
对人脸图片标记5个点(5 facial landmarks),包括两个眼睛,鼻尖(nose tip),和两个嘴角,然后以这5个点为中心对齐(alignment)。按照3个尺度将原图裁剪出60个patches(包括原图本身)。特征就是从这60个face patches提取出来的,这60个face patches包括10个不同的区域,3种尺度的灰度图或RGB图。下面Figure3图显示了10个人脸区域,3种尺度。
对于1张人脸图,一共训练60个ConvNets,每个ConvNet提取两个160维的特征,即一个face patch和该face patch水平翻转后的相对应的face patch。相当于镜像。最后1张图片提取的DeepID特征共19200维(160*60*2)。 ConvNet输入为39*31*k的矩形patch或31*31*k的正方形patch,k=1是灰度图,k=3是RGB三通道图。输入尺寸发生变化,后面的卷积层的尺寸也相应发生变化。但是无论如何,DeepID层都是固定的160维,不发生改变。
四、 Face Verification(NN)
在此,对Figure4进行分析。该部分的神经网络的输入是60组(group),即前面那60个ConvNets的输出,只是每一组变成了640维,这是因为要进行Face Verification,当然得输入两张人脸图片,来判定这两张人脸图片是不是来自同一个人。每张320维,故每组共640维。这里需要注意的是,从face patch学习到的毕竟是局部特征,将这些face patch组合起来再训练一个神经网络,这样从局部特征中学到一种全局性的特征。第一个隐藏层和这60组是局部连接的,这样做是迫使该隐藏层能够学习到该局部face patch压缩的特征表示,之后这个隐藏层和跟它节点数目相同的隐藏层进行全连接,以求学到全局特征。最后再接一个二分类器,来判定是否来自同一个人。隐藏层的相应的也使用了ReLU,并且同时对所有隐藏层节点使用了dropout方式。使用dropout对于使用梯度法来训练网络是必须的,因为不用dropout而学习高维特征会带来梯度扩散(gradient diffusion)问题(过拟合问题)。
关于dropout理论可参见参考文献[16]以及博客:http://www.cnblogs.com/tornadomeet/p/3258122.html
有关JB的内容可以参见参考文献[8],以及文献作者的官方网站:http://home.ustc.edu.cn/~chendong/JointBayesian/
五、 实验分析
作者首先是利用CeleFaces库(87625张人脸图片,5436个人,平均每人16张图片)来做实验,随机选取这个库的80%的人(4393)做DeepID的训练学习,剩下的20%的人(1043)做JB/NN的训练学习(在连接之前,首先用PCA降维到150维)。之后,在LFW库上进行测试。
为了证明Figure1中Identity classes与测试精度的关系,作者在训练DeepID的时候采用1个patch,即一整张图作为输入,Identity classes分别设置为136,272,544,1087,2175和4393。最终得到的联合贝叶斯网络和神经网络Face Verification 精度如图Figure6:
Figure6指出,随着Identity classes的增多,准确率也在提高。红色线为联合贝JB准确率,蓝色线为NN,Identity classes从136增长至4349,32倍的过程中,准确率增长了10.13%(JB)和8.42%(NN)。联合贝叶斯网络准确率显然高于NN,所以最终实验作者采用的是JB。这个实验也说明,随着网络输入种类(人数)的增大,能够提高网络的泛化能力,更利于提取的DeepID特征进行分类。
Figure8,三组(pairs)头像经过Deep ConvNets后的DeepID层的160维的可视化,为了方便显示,每行32维,共5行。我们可以发现,同一个人的两张头像的160维特征可视化比较类似,不同人的两张头像差距就比较大了。这也印证了前文所说的,“提取到的特征是对类间具有很好的判别性的,相当于增加了类间的距离”。
作者为了证明patch与准确率的关系,在Identity classes = 4349的情况下,将patch大小调整为1,5,15,30和60,实验精度如Figure9所示,说明了随着patch的增多,不论是采用JB还是NN,准确率都会上升。同样的,JB的准确率明显高于NN,平均高1.8%,最终准确率为96.05%。
最后,为了进一步提高实验精度,作者对训练库进行完善,扩充CeleFaces库为CeleFaces+库(202599张人脸图片,10177个人,平均每人19张图片),之后在CeleFaces+库上训练,LFW库上测试。
实验中,作者是采用了CeleFaces+库中8700个人用于DeepID训练学习,1477个人用于联合贝叶斯网络/神经网络训练学习,每张图片采用100 patches,5 scales。一张图片通过Deep ConvNets得到32000维的DeepID特征向量,再通过PCA降维得到150维特征向量,这个特征向量维度在LFW库上测试可以得到97.20%的精度。
作者在文中也提到,由于数据库贡献的特征不同,网络在CeleFaces+库中具备的泛化能力,不一定适合于LFW库,为了解决这个问题,作者在联合贝叶斯网络中采用CeleFaces+库中1477个人的图片和LFW库中9/10图像分别作为源域数据和目标域数据,并在LFW库上做十字交叉验证,得到的精度为97.45%,这个准确率逼近于自然人人脸验证水平97.53%。最后作者给出了目前几种流行算法的相关数据,如下表所示:
参考博客:
1.DeepID人脸识别算法之三代http://blog.csdn.net/stdcoutzyx/article/details/42091205#comments
2.深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes http://blog.csdn.net/chenriwei2/article/details/31415069