DeepID学习笔记
参考文献
- Deep Learning Face Representation from Predicting 10,000 Classes(DeepID1)
- Deep Learning Face Representation by Joint Identification-Verification(DeepID2)
- Deeply learned face representations are sparse, selective, and robust(DeepID2+)
- DeepID3: Face Recognition with Very Deep Neural Networks(DeepID3)
DeepID1
0. Abstract
- 目标是提取Deep hidden IDentity features(DeepID),这是在神经网络较高的一层所表示的特征,论文利用DeepID层提取的特征进行进行face verification(给两张人脸,判断是不是一个人)
1. Introduction
- 一般的,神经网络是使用二值verification信号(是或否)作为监督信号训练网络。但是本文使用identification信号(多分类,类别达10000)作为监督信号提取个体特征
- 模型的思想大概是:**将一张人脸切分成多个patch,然后每个patch训练一个网络产生多个网络。然后将多个网络的特征压缩到160维,作为整个人的特征。**具体的做法将在后面部分详述。
- 这160维的特征是high-level的(一般非深度学习提取的特征属于low-level的,如LBP),可以使用Joint Bayesian(联合贝叶斯)和NN(神经网络)等任意分类器对特征进行分类。后文也将给出联合贝叶斯和神经网络的比较
- 这种模型对于weakly aligned faces也可以达到很高的verification正确率
2. Related Work
- 太多了,见论文相关章节吧
3. Learning DeepID for face verification
- DeepID网络结构,见Figure 2。着重注意Max-pooling layer 3、Convolutional layer 4和DeepID layer,从图中看出Max-pooling layer 3和Convolutional layer 4是通过concatenate的方式形成的DeepID层(这点论文中并没有提到)。最后,DeepID层全连接到Soft-max层做分类
- 作者这样连接的目的是:高维的卷积层面临信息瓶颈的问题(神经元太少),使用低维卷积层提取的特征可以补充高维卷积层提取的特征,且这个特征是多尺度的(multi-scale),这个网络也称为multi-scale ConvNets
- 形成的特征一定要比类别少很多,这样才能体现出用特征做预测的价值
- 这里详细解释如何切分为60个patch:一个人脸图片按照左右眼为中心、最右嘴角为中心、鼻尖为中心切分成5部分,这5部分又有3中不同的尺度,这样就有15种patch了。然后因为图片是RGB通道的,所有按照3个通道可以形成45中patch;在加上15个gray通道的patch,最终一共是60个patch。60个patch每个都训练一个DeepID网络。以上部分可以参考一下Figure 3,但个人觉得看了也没什么用,只是一种切分patch的思想。
- 特征提取:通过上面的patch切分,我们现在有60个DeepID网络了。对于一张图片,我们用同样的方法切分成60个patch,通过60个网络,得到60* 160维的特征。然后将60个patch水平翻转,同理又得到60* 160维的特征。将两个特征合在一起,得到60* 160* 2维的特征
- 为了verification,作者这里使用的分类模型是Joint Bayesian和NN。关于Joint Bayesian,大致思想是人脸特征服从两个高斯分布(不同identity之间的差异和相同identity的不同图片之间的差异)的和,最终转换为用类EM算法求协方差矩阵的问题,更详细的内容要参考之前关于Bayesian Face的相关论文(这部分我也没有完全理解其数学推导,等学会了,我会整理一篇冠以Bayesian Face的学习笔记)。关于NN,输入层有60组,每组包含两个人脸的2个patch及其水平翻转;然后每个patch有160维特征,所以每组总共640维特征。两个隐含层分别是locally connected和fully-connected,分别用来学习同组两个patch之间的关系(顺便降低特征维度,减少训练参数)和综合所有关系。详见Figure 4
- NN的训练方法参数还是太多了,为了解决梯度弥散的问题,在隐层后面加入Dropout(input层后面不加),并预训练参数初始化权值
4. Experiments
- 使用CelebFaces(CelebFaces+)训练DeepID网络,使用LFW测试结果。
- 作者用实验证明,multi-scale ConvNets(多尺度卷积网络)比普通的CNN能学习到更有效的特征。见Figure 5
- 作者发现:在同样维度(160维)的特征表示下,随着类别增加,错误率下降。见Figure 6和Figure 7
- 作者发现:对于160维的DeepID层,同一个人在DeepID层的神经元响应的相似度更高,不同人响应相似度低。这再次证明了DeepID层提取的特征非常有效。见Figure 8
- 作者又研究了patch不同取值对正确率的影响:patch越多正确率越高。见Figure 9
- 作者又将论文中的方法和其他方法进行了比较。见Figure 10
5. Conclusion and Discussion
- 论文提出了一种有效提取不同个体high-level的人脸特征的方法
DeepID2
0. Abstract
- face recognition的关键得到一种特征表示,intra-personal之间差距小,inter-personal之间差距大。根据这个思想,作者提出了使用verification(减小intra-personal之间差距)和identification(增加inter-personal之间差距)两种监督信号训练模型
1. Introduction
- identification信号用于拉开不同identity之间的特征差距,使得不同人提取的特征有rich identity-related(inter-personal)variation;与identification互补,使用verification信号减小相同identity之间的特征差距
- 使用不同区域、不同分辨率的图片,提取特征。然后将这些特征连接起来,再用PCA降维,使用Joint Bayesian的方法做verification
2. Identification-verification guided deep feature learning
- 网络结构与DeepID1类似,但是**(1)第三和第四个卷积层局部权值共享**(不懂?),(2)DeepID2层是第三和第四层通过Dense(全连接)层之后的add(原文没说是add,但是理解起来应该是add),Dense和DeepID2后要加入ReLU,见Figure 1
- Identification信号:cross-entropy loss。 是指隐层参数
- Verification信号:L2范数规范化后的特征。 是指softmax层参数
- Verification信号可以改写成如下表达式
- 训练方法:每次抽取两个样本(不是按照batch训练了),对identification和verification信号的梯度加权,再用梯度下降更新。见Table 1
3. Face Verification
- 作者基于SDM算法搞出了400个patch(在位置、尺寸、颜色通道和水平翻转上各有不同),400个patch训练出200个网络(水平翻转使用同一个网络),每个网络提取160维特征。不同于DeepID1中用PCA降维,这里使用forward-backward greedy算法从400个特征向量中选择25个(每个向量对应一个patch)。再用PCA对25* 160的向量降维。最终使用Joint Bayesian做verification。
4. Experiments
- 训练过程:(1)用CelebFaces+A训练,CelebFaces+B验证,从而调整模型的lr、epoch、和参数 ;(2)用CelebFaces+B一部分训练网络权值,另一部分验证;(3)用整个CelebFaces+B训练Joint Bayesian,用LFW测试(为什么要这样训练?)
- 参数 (控制identification和verification权重的参数)对实验结果的影响:参数 为0.05时(identification为1,verification为0.05),效果最好,见Figure 3。作者用LDA中的inter- and intra-personal variations解释了参数选择的原因(暂时还没有懂),见图Figure 5。
- 作者还发现,和DeepID1一样,用于训练的类别数越多,模型准确率越高,见Figure 4
- 作者调查了verification的作用:在相同的identification信号下,降低类内距离且增加类间距离的L2效果最好。见Table 2
- 对patch数和模型准确率的关系的研究:见Table 3。最终模型选择了25个patch
- 与其他模型做了比较:使用SVM将过个Joint Bayesian融合,创造了state-of-the-art
5. Conclusion
- 用identification和verification两种信号监督训练的模型准确率很高
DeepID2+
0. Abstract
- 相比DeepID2,增加隐含层的尺寸,在较低的层次加入监督信号
- 对神经元进行深入研究,实验发现:神经元的激活特性有稀疏性(激活神经元稀疏;用二值信号表示激活效果也很好)、选择性(更高层的神经元对不同的identity激活或抑制区分明显)、鲁棒性(训练中无遮挡数据,但测试时对遮挡鲁棒)
1. Introduction
- 稀疏性:(1)对于一个图片,DeepID层有一半左右的神经元被激活;对于一个神经元,只对一半左右的图片处于激活状态。(2)使用二值表示的激活状态作为人脸特征进行verification准确率只下降了1%,也就提出了一种非常高效(时间+空间)的人脸表示方法
- 选择性:对于同一个人的不同图片,总有一部分神经元是一直处于激活状态的,还有一部分一直处于抑制状态。说明,虽然模型并没有明确的让DeepID层提取特征,但是这层“偷偷”学到的特征已经比LBP更适合分类了
- 鲁棒性:对于遮挡,神经元激活状态几乎一样(然后激活程度有些差别)。作者认为,高层次的神经元可能已经拥有获取全局特征的能力了(只是基于实验现象的猜想)
- 以上三种特性对应实验中的现象,见Figure 1(这图不用仔细看,后面部分会更详细的解释)
2. Related work
- 详见论文,不再一一列举
3. DeepID2+ nets
- DeepID2+继承自DeepID2网络,但主要有3点区别:(1)DeepID2+的feature maps(filters)提高到128个,最后一层的DeepID层扩大到512维;(2)训练数据量更大,包括CelebFaces+、WDRef和其他一些数据;(3)在4个卷积层的后面都加入一个512维的全连接层,并对每一层都加入identification和verification监督信号。见Figure 2。
这里我认为图画的不是很好,FC-4应该是全连接到Conv-3和Conv-4的(就像DeepID2中一样),这里图中并没有画出来。根据DeepID3的论文,作者这里已经改变了DeepID2的结构,但是在论文中没有提到,真实的结构就像图中画的一样
4. High-performance of DeepID2+ nets
- 训练方法,和DeepID2相同。选DeepID2中选定的25个patch,用FC-4作为特征,同样用Joint Bayesian训练,最终得到每个patch的verification准确率都高于DeepID2。见Figure 3
- 在和其他模型的比较,见Table 1, Table 2, Table 3
5. Moderate sparsity of neural activations
- 作者认为这种moderate sparsity使得特征有最大化的表达差异的能力
- 用实验现象解释稀疏性:对于一个图片,DeepID层有一半左右的神经元被激活;对于一个神经元,只对一半左右的图片处于激活状态。见Figure 6
- 用实验结果证明二值化的特征依旧有很好的表达能力
6. Selectiveness on identities and attributes
- 通过实验证明,DeepID2+的FC-4层的特征和高维LBP相比,可以更好的表示属性与个体。见Figure 7
- 通过实验证明:
- 看前两列:DeepID2特征对于一个人激活程度高时;则对于其他的人,激活程度相对较低(一定程度上证明了选择性)
- 看第三列:且对于同一个人的不同图片,平均激活程度较高(或者较低)的神经元,单单用这个神经元的激活程度+阈值就可以有很高的正确率(输入一张图片,判断是不是某个特定的人)。见Figure 10,其中神经元按第一列的激活平均值(对指定人的激活平均值)排序
- 实验证明:特征对于不同的人有很好的选择性。见Figure 12,随机选择了5个神经元。
- 试验证明:对于类中的一个属性激活,则对应同类的其他属性就会抑制。见Figure 13,其中神经元是选择了5个判断准确率最高的神经元。
7. Robustness of DeepID2+ features
- 实验证明,无论哪个FC层的特征,其面对遮挡的鲁棒性都优于高维LBP特征。见Figure 15
- 即使面对大面积的遮挡,DeepID2+特征仍然有较高的准确率
8. Conclusion
- 基于实验,DeepID2+网络有更高的准确率
- 基于实验,DeepID2+网络有稀疏性、选择性和鲁棒性
- 基于实验,研究了神经元激活特性,帮助人们理解神经网络(虽然只是一些表层的结论)
DeepID3
0. Abstract
- 在DeepID2+的基础上,借鉴了VGG net和GoogleNet,加深了网络层数,同样在每个中间层都使用identification+verification监督信号训练,分别训练了2个模型(基于VGG net和GoogleNet),达到了更高的准确率
1. Introduction
- 介绍了之前的网络结构,包括DeepID系列、VGG net和GoogleNet
2. DeepID3 net
- 这里作者在回顾DeepID2+的时候,又偷偷改变了网络结构:第三层卷积层变成了局部卷积层(在局部区域共享权重,什么意思?),第三个池化层后加入了一个局部连接层 ,见Figure 1
- 相比较DeepID2+,DeepID3更深。连续的conv或inception可以获得更大区域的更复杂的非线性表示;而局部连接层的权值不共享可以使用更低的维度表达更具有表达能力。2种网络结构,见Figure 2和Figure 3
- 训练方法和DeepID2+相同
3. Experiments
- 两种网络各提取总特征数的一半(同一种网络不能同时训练一个patch及其水平翻转),然后将特征拼在一起形成30000维的向量,然后PCA降维到300
- DeepID3效果比DeepID2+效果好一点,见Table 1
4. Discussion
- 其实LFW中有一些错误标注的数据,当把这些错误修正后,DeepID3相比DeepID2+就没有提高了。原因未知。
- 作者分析了一下false negatives和false positives的图片对,错误来源主要是人确实长得比较像、或者有遮挡、或者化妆差距大
5. Conclusion
- 作者说这个模型更好,但我觉得这个文章相比前三篇DeepID系列,确实水了点…
后记
终于总结完DeepID系列的文章了,累死。
我最初的目的是写一个很简单的笔记,但不知道怎么的,写着写着就越写越细了。
可能是因为我在总结笔记的时候又发现了很多之前没有注意到的细节,想要写在笔记里提醒自己吧。
以后不能这样了,真的要总结精华,才是笔记的作用。