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)被用来表示人脸。