【DeepFace】人脸识别模型之DeepFace框架

时间:2024-03-25 17:35:35
【DeepFace】人脸识别模型之DeepFace框架
论文名称
DeepFace: Closing the Gap to Human-Level Performance in Face Verification
作者
 
参考
 
书摘
[1]第一篇深度学习应用于人脸识别的
[2]传统的人脸识别流程是:检测——对齐——表示——分类
框架思想:
       创新:使用3D的人脸建模来人脸对齐,从一个9层的深度神经网络中得到人脸特征
       实验中,参数主要集中在最后的局部卷积和全连接层
 
[3]人脸对齐
       (a) 用LBP+SVR的方法检测出人脸的6个基准点,眼镜两个点,鼻子一个点,嘴巴三个点;
       (b) 通过拟合一个对基准点的转换(缩放,旋转,平移)对图像进行裁剪;
       (c) 对图像定位67个基准点,并进行三角剖分;
       (d) 用一个3D人脸库USF Human-ID得到一个平均3D人脸模型(正脸);
       (e) 学习一个3D人脸模型和原2D人脸之间的映射P,并可视化三角块;
       (f) 通过相关的映射,把原2D人脸中的基准点转换成3D模型产生的基准点;
       (g) 最后的正脸。
       (h) 由3D 模型生成的新的视图
 

【DeepFace】人脸识别模型之DeepFace框架

 
 
[4]人脸表征
       如下图所示,训练了一个DNN来提取人脸图像的特征表示。C1和C3表示卷积层,M2表示最大池化层,“[email protected]”表示使用32个大小为11x11x3的卷积核,输出feature map的大小为142x142。前三层主要提取低水平特征,其中最大池化可以使输出对微小的偏移更加鲁棒(可能人脸对齐歪了一些也没关系),因为最大池化会损失信息所有没有使用太多。
       L4,L5,L6是局部卷积层,对于feature map上每个位置,学到不同的卷积核(即一张feature map上的卷积核参数不共享),因为人脸的不同区域会有不同的统计特征,比如眼睛和眉毛之间的区域比鼻子和嘴巴之间的区域具有更高的区分能力。局部卷积层会导致更大的参数量,需要很大的数据量才能支撑的起。
       F7和F8是全连接层,用来捕捉(不同位置的)特征的相关性,比如眼睛的位置和形状,和嘴巴的位置和形状。F7层的输出提取出来作为人脸特征,和LBP特征对比。F8层的特征喂给softmax用于分类。对F7层的输出特征进行归一化(除以训练集上所有样本中的最大值),得到的特征向量值都为0到1之间。
 

【DeepFace】人脸识别模型之DeepFace框架

 
其中,后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:
  • 对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失
  • 不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量
  • 使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。
 
 
[5]人脸分类
 
得到表示后,使用了多种方法进行分类:1、直接算内积 2、加权的卡方距离 3、使用Siamese网络结构