DeepFace: Closing the Gap to Human-Level Performance in Face Verification
这篇文章是Facebook公司发表于CVPR2014的Oral文章, 这段时间非常火,一众科技媒体都在热炒“计算机的人脸识别能力正在赶超人类或者已经赶超了人类”,甚至微博上有人断言,CV研究的最高境界就是“用最牛的机器,实现最深度的算法”。铺垫到此为止,我们进入正题,由我的视角带领大家读一读这篇火的一谈糊涂的文章。
0. 本文的贡献
DeepFace一文依旧是沿着“检测-对齐-人脸表示-分类”这一人脸识别技术路线来的,其贡献在于对人脸对齐和人脸表示环节的改进。1)在人脸对齐环节,引入了3D人脸模型对有姿态的人脸就行分片的仿射对齐。2)在人脸表示环节,利用一个9层的深度卷积在包含4000人、400万张人脸的数据集上学习人脸表示,这个9层的DCNN网络有超过1.2亿个参数。本文的模型在LFW数据集上取得了97.25%的平均精度(逼近了人类97.5%的极限),同时在Youtube数据集上取得了当前最好的结果,比之前的NO.1整整高出了12.7%。
1. 人脸对齐
人脸对齐是人脸特征抽取前的预处理步骤,在real-world条件下,受姿态和表情影响,人脸对齐是一个困难的任务。本文提出了一种借助3D模型的人脸稠密对齐方法,见下图:
其基本步骤是:1. 检测六个面部关键点 2. 基于六个关键点进行人脸全局仿射变换。3. 检测67个面部关键点,并对人脸进行三角剖分。4. 将3D人脸转到当前对齐人脸同一视角并获得三角块的可见性。5. 利用3D模型产生新的67个关键点位置及其三角剖分 6. 分片仿射变换得到的正面人脸。
Details 1: 如何获得Figure 1 (d):
利用一个外部3D人脸库
USF Human-ID database我们可以获得一个平均3D人脸模型,进一步的我们可以计算相机投影矩阵P与2D坐标之间的对应关系,由此可以计算出这个相机投影矩阵P。显然的,这个平均3D模型投影到(c)当中时,会有一个残差r。
Details 2: 如何获得正面人脸
在Tom-versus-Pete一文中,特别提到了Indentiy-Perserved Alignment对齐的概念,其观点是将人脸严格对齐到同一个平均形状对于保持人的身份信息是不利的,因此Tom-versus-Pete一文利用Ref-set对面部关键点的位置进行校正。而本文的则在对齐的平均形状上加上残差r(见Details 1),从而保留了不同人的形状信息(宽鼻梁对齐后依旧是宽鼻梁)。最终的对齐就变成了对应三角块之间的仿射变换,不可见的三角块用对称的三角块来填充。
2. 表示学习
表示学习部分利用了深度卷积神经网络,技术细节需要注意的有两点:1. 激励函数使用的是ReLu , 优化目标是cross-entroy Loss,SGD算法优化。2. F7层的特征表示非常稀疏,75%的特征表示为0,为了提高对光照的鲁棒性,最终的特征还进行了二范数归一。
3. 测度学习
最终每张人脸用F7层4096维的特征向量来表示,进一步的,本文学习了一对人脸表示的度量函数,采用了两种方法1)加权卡方距离,用线性SVM学习权重。 2)Siame网络。
4. 实验
实验是本文的重头戏,技术细节很多,我们在这里对其中重要的参数和结果进行讲解,更细节的内容还请参考原文。
4.1 数据集
训练集是作者组织的SFC,共有4040人,每个人800~1200张图像,共有440万张图像,wow, A huge dataset! 这比孙剑老师整理的WDRef大了几十倍。
测试集有两个,LFW和YFC。
4.2. LFW测试结果
最重要的结果:1. LFW上的最好结果是97.25%,惊天地泣鬼神了。 2. 如果不做步骤2那一通复杂的对齐,只用全局仿射变换,94.3%。 3. 如果直接用人脸检测的结果,87.9%。 4. 如果不用DCNN学表示,在步骤2的人脸对齐的基础上做LBP/SVM,91.4%。 这组结果说明,对齐和特征表示学习各自带来了3%的增益。
另外一些中间结果,如果直接用F7层归一化后的特征做内积,95.92%, 如果学一个加权的卡方距离,可以提升到97.00%。
需要说明的是,虽然本文在LFW上达到了97.25的最好性能,但是来自不易。作者融合了三种网络输入,终于提升到了97.15%。
这还不够,作者继续努力,又学了Siame网络,再和97.15%的结果融合,终于做到了97.25%。其实97.00%到97.25%, 加了一大堆复杂的东西,搞了三种网络输出,才走完了最后的0.25%!下表是本文方法与state-of-the-art方法的一个比较,注意人类的极限是97.53%。
4.3 YFC上的结果
啥也不说了,见下表,直接比之前最好的结果高出了12.7%。
4.4 计算复杂度
本文还讨论了计算复杂度问题,通过SIMD优化,DCNN网络提取一张图片特征的时间为0.18s,这个时间不算长也不算短,如果有GPU相信这个速度还能获得更大提升。
5. 结论
一句话总结:DeepFace利用面部多点的稠密对齐,借助于3D模型对有姿态的人脸进行校正,同时利用一个9层深度卷积神经网络在400万规模的人脸库上训练了一个深度人脸表示模型,在LFW数据集上取得了97.25%的平均精度(逼近了人类97.5%的极限)。
八卦时间:博主最近改了个昵称,叫CV_BigMouth,希望可以从此大嘴评论CV。话说facebook这个文章出来之后,博主的感觉是:3D对齐+DCNN,LFW暴库,读了论文之后感慨97.00%到97.25%的路走的真艰辛。
大家可以看Yi Ma老师的微博,对这篇文章也有点评,这里留点悬念,大家自己去体会。