DeepFace笔记

 阅读论文《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》

 传统的人脸识别过程分四个阶段:detect->align->represent->classify

 本论文采用显式三维人脸建模的方法,重新讨论了对齐和表示两步算法,应用分段仿射变换,从九层深度神经网络中推导出人脸表示。这个深层神经网络涉及一亿两千万个参数,使用几个局部连接的层,而不是标准的卷积层。在目前最大的人脸图像库上训练,这是一个由四百万张面部图像组成的标识数据集,共有4000多个身份。该方法在LFW人脸数据集上精度达到97.35%,使当前科技水平的误差率降低了27%以上,接近人工识别水平。


 人脸对齐的内容如上图:

 (a)通过6个基准点进行人脸检测

 (b)二维裁剪,将人脸部分裁剪出来

 (c)基于67个基准点的二维人脸对齐,使用相应的Delaunay三角化,在轮廓处添加三角形避免不连续

 (d)将上一步的结果转换为三维形状

 (e)三角化后的人脸变为有深度的三维三角网

 (f)将三角网做偏转,使人脸的正面朝前

 (g)最后放正的人脸

 (h)一个新角度的人脸(在论文中没有用到)


人脸表示

通过人脸对齐后,得到人脸图像,大小为152×152×3,,接下来交给神经网络得出向量特征。网络结构如图:

  • C1:卷积层,32个filters,卷积核11×11×3,得到结果32×11×11×3@152×152
  • M2:Max-pooling:3×3,stride=2,32×3×3×32@71×71
  • C3:卷积层,卷积核9×9×16,16×9×9×32@63×63
  • L4:Local-Conv,卷积核9×9,Local的意思是卷积核的参数不共享,16×9×9×16@55×55
  • L5:Local-Conv,卷积核7×7,参数不共享,16×7×7×16@25×25
  • L6:Local-Conv,卷积核5×5,参数不共享,16×5×5×16@21×21
  • F7:Fully-connected,4096d
  • F8:Softmax,4030d

前三层的目的是提取低层次特征,比如简单的边和纹理。其中Max-Pooling层使得卷积的输出对微小的偏移情况更加鲁棒。

但没有用过多,因为太多的Max-Pooling层会使得网络丢失一些细节信息

(information about the precise position of detailed facial structure and micro-textures)。

后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:

  • 对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失
  • 不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量
  • 使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。

全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。

全连接层的输出可以用于Softmax的输入,Softmax层用于分类。


猜你喜欢

转载自blog.csdn.net/u014657795/article/details/79112586