DeepID1,DeepID2

1.DeepID1 (Deep Learning Face Representation from Predicting 10,000 Classes)算法

Step1:构建网络框架网络

DeepConvNet主要由卷积层、Pooling层和全链接层构成。其中,Deep hidden indentity features层与Pool3和Conv4部分链接。框架

Step2:特征提取函数

每张人脸图提取5个landmark(两个眼睛的中心,嘴角的两个角点,鼻尖):1.以部分landmarks弱对齐方式提取5个脸部patch;2.以每一个landmark为中心,提取5个脸部patch。每张脸提取10个patch,选取3种不一样分辨率,2种不一样色彩(即彩色图和灰度图),一张人脸图能够提取60个pathches,所以须要训练60个CNN。每一个CNN输出特征长度均为160,为了增长模型训练数据量,能够对60个patches进行镜像处理,最终获得的特征长度为160*60*2性能

 Step3:神经网络人脸验证学习

做者采用两种不一样的方法进行人脸验证,即基于联合贝叶斯的人脸验证方法和基于神经网络的人脸验证方法。测试

贝叶斯人脸验证方法:spa

将每个人脸的160*2*60维特征用PCA降维到150维长度,而后用用两个长度为150维的特征计算其联合贝叶斯几率值,并与预约阈值比较断定是不是同一张人脸。设计

神经网络人脸验证方法blog

用于人脸验证的神经网络包括四层,即input layer, locally connected layer, fully connected layer和output layer。

input layer:利用Conv-Net能够从一幅人脸图像中提取出160*2*60维长度的一维特征(在这里60表明以前训练获得的60个CNN)。人脸验证的输入是两幅人脸图像,那么用60个CNN中的其中一个CNN对两幅人脸图像及其镜像图像进行特征提取,能够获得160*2(mirror)*2(people)=640维长度的一特征。相应地,60个CNN能够生成60组640维长度的一维特征,将这些特征首尾获得640*60维长度的觉得特征。将640*60=38,400长度的一维特征做为人脸验证神经网络的输入。为了知足后续网络对输入层的需求,咱们在输入端仍然采用60段独立的640维长度的特征(每段640维的特征是有两我的脸图像及其镜像图像经过一个CNN生成的)。

locally connected layer: 以前经过CNN特征提取获得的60组特征。事实上,每一组特征内部都是高度冗余的,所以在输入层后添加以下图所示的局部链接层做为第一个隐层,这样既能够保留局部特征学习特性又能实现特征降维。

fully connected layer:第二个隐层是全链接层,用于学习全局特征。

output layer:输出层是一个sigmoid函数,用于输出学习结果。

另外,须要注意的是训练网络中每个隐层(即locally-connected layer和fully-cnnected layer)后都会跟relu层和dropout层,防止梯度弥散和过拟合,使loss收敛效果和网络泛化性能更好。

Step4:实验测试

做者比较了联合贝叶斯人脸验证和神经网络人脸验证方法的性能,实验结果以下:

1.经过联合贝叶斯人脸验证方法实验可知:采用60个Conv-net获得的特征比只使用1个Conv-net获得的特征效果好。(准确率从95.35%提高到96.05%)。即Convnet数量越多,准确率越高。

2.增长Soft-max layer的输出数量(即分类数,或识别的个体数)能够提高人脸验证的准确率。即分类的类别数越多,DeepConv-Net学到的DeepID特征(160维)越有效。此外,做者强调用于人脸验证的必定是160维长度的DeepID特征,而不是Softmax Layer的输出。若是用SoftmaxLayer输出的结果(例如用4348个不一样人的数据训练DeepID,Softmax输出是4348维)进行人脸验证特征,采用联合贝叶斯人脸验证方法获得的准确率约为66%,而神经网络人脸验证方法则彻底失效。

3.增长patches数(即Convnet数目,二者是相等的)会使DeepID特征维度升高,这与咱们在前面第1条结果中获得的结论是一致的。此外,将Convnet数目从1提高到60时,分别用联合贝叶斯和神经网络两种方式进行人脸验证。实验结果代表:虽然神经网络人脸验证方法在Convnet数从1提高到60的过程当中准确率相对提高幅度较联合贝叶斯方法略高,可是当Convnet数目是60个时,联合贝叶斯方法绝对准确率更高。

4.训练数据越多,Convnet数目越多(即一幅人脸图像提取的Patch数目),人脸验证准确率越高。

 

2. DeepID2 (Deep Learning Face Representation by Joint Identification-Verification)

继以前的DeepID1实现了97.45%的人脸验证准确率后,做者进一步发扬光大设计了DeepID2,将人脸验证准确率提升至99.15%。咱们知道,提升识别网络性能本质上就是要下降类内差别,提升类间差别。然而,传统的DeepID1特征更多将特征学习过程集中在如何提升类间差别,而没有考虑到下降类内差别。特别是对于一些训练时没有出现的类别,对于同一我的的两幅不一样图像,由于获得的DeepID1特征不一样,极可能在人脸验证时错误识别为不一样类别;又或者是,不一样人的DeepID1特征验证位同一我的。所以,做者在设计DeepID2时,经过修改Loss函数的组成形式,在提升类间差距的基础上进一步下降类内差距,从而对训练过程当中未出现的新类别在人脸验证阶段发挥积极做用。下面将具体介绍DeepID2:

Step1:DeepID2特征提取模型

DeepID2网络模型与DeepID1网络模型基本相似,DeepID2 layer的输入是有Pool3和Conv4共同组成的。这里须要注意DeepID2与DeepID1的一个重要区别是Loss函数的形式。DeepID1的Loss函数即SoftmaxLoss,DeepID2的Loss包括两个部分:SoftmaxLoss和L2/L1 Loss,即文中提到的识别Loss和验证Loss,具体形式以下所示:

第一个公式是识别Loss,其主要目的是增长类间差距,从而区分不一样人脸的图像。第二个公式是验证Loss,其主要目的是增长类间差距、下降类内差距。能够看出Yij=1时表示i和j属于同一类,这时fi和fj越接近(类内差距越小)则loss越低;Yij=-1时表示i和j属于不一样类,这是若是fi和fj的差值的平方大于某一个阈值m,则loss=0,所以可知对于不一样类别类间差距越大,loss越小。做者认为验证loss能够从L1/L2/Cos Loss中任选一种形式,另外做者用权重lamda表示识别Loss和验证Loss的相对权重。

Step2:人脸验证

在进行人脸验证时,做者采用SDM算法从一幅人脸图像中检测到的21个脸部特征点,而后经过类似性变换进行全局人脸对齐。而后根据人脸中landmark的位置、图像颜色、图像尺度及水平镜像方式生成400个脸部patches.考虑到水平镜像的因素,对400个脸部patches能够训练200个CNNs进行识别。200个CNNs处理一幅人脸图像能够生成400组长度分别为160维的特征,即特征总长为400*160=64,000维。固然,这样的特征冗余度很高,所以做者采用前向-反向贪婪算法选取出效果最好的25组特征,这样能够生成25*160=4000维的特征。而后用PCA将4000维的特征降至180维。用联合贝叶斯人脸验证方法验证DeepID2特征。

实验结果:

1.做者验证了lamda(即验证loss的权值)对人脸验证准确率的影响。当lamda=0(至关于不用验证loss)或lamda=+无穷大(至关于不用识别loss),人脸验证效果都不如lamda在俩者之间的取值。做者采用不一样的lamda取值测试L2人脸验证模型和联合贝叶斯人脸验证模型,从实验结果能够看出lamda从0增长到+无穷大时,两种人脸验证模型的准确率都是先升高后下降。

2.当用于训练DeepID2的人脸类别越丰富(即人脸类别数),经过CNN学习的特征在人脸识别阶段会越有效,该结论与DeepID1是相似的。

3.做者测试了不一样形式的验证loss函数(L2+ loss, L2- loss, 余弦loss)对于人脸验证结果的影响,此处不做介绍。

4.做者选取了七组不重复的特CNN特征组合,用联合贝叶斯方法处理后,进一步采用svm对结果融合,获得最终结果99.15%。(OMG,这种处理方法.......)

总之,做者经过修改CNN网络模型(卷积层的kernel数)和Loss(最重要的修改)的方式训练获得新的DeepID2特征,经过进化版本的特征组合方式,实现了99.15%的人脸验证准确率。

相关文章
相关标签/搜索