版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hh_2018/article/details/80576290
参考地址:https://blog.csdn.net/guoyunfei20/article/details/78196286
论文题目:DeepFace: Closing the Gap to Human-Level Performance in Face Verification
论文地址:http://datascienceassn.org/sites/default/files/DeepFace%20-%20Closing%20the%20Gap%20to%20Human-Level%20Performance%20in%20Face%20Verification.pdf
DeepFace是FaceBook提出来的,后续有DeepID和FaceNet出现。而且在DeepID和FaceNet中都能体现DeepFace的身影,所以DeepFace可谓是CNN在人脸识别的奠基之作,目前深度学习在人脸识别中也取得了非常好的效果。DeepFace在进行人脸识别的过程中采用的是人脸检测——3D对齐——CNN提取特征——分类的过程。下边介绍DeepFace的基本框架:
一、人脸检测(face detection)
DeepFace采用了基于检测点的人脸检测方法(fiducial Point Detector)
1、先选择6个基准点,2只眼睛中心、 1个鼻子点、3个嘴上的点。
2、通过LBP特征用SVR来学习得到基准点。关于LBP的介绍见地址:https://blog.csdn.net/qq_32172681/article/details/100014705
二、人脸对齐(face alignment)
在对齐方面,DeepFace模型采用了3D对齐的方式,并且使用传统的LBP直方图(首先通过设置阀值并以某一像素点为中心邻域内的像素点一起和阀值比较,当大于阀值时就将其变为1小于阀值就变成0,然后在做成直方图统计各区域像素出现的次数)进行图片纹理化并提取对应的特征。对提取出的特征使用SVR处理以提取出人脸及对应的六个基本点。根据六个基本点做仿射变化,再根据3D模型得到 对应的67个面部关键点,根据这些点做三角划分最终得出对应的3D人脸。其具体对齐流程如下:
a: 检测出人脸和对应的6个基本点
b: 二维对齐后的人脸
c: 使用狄罗尼三角划分在2D人脸上划分出67个关键点,并在边缘处采用添加三角形的方式避免不连续
d: 转化为2D平面并和原始2D图片进行比较时所需的标准3D人脸模型(通过标准3D人脸库USF生成的对应的平均人脸模型)
e: 3D-2D转化(标准3D脸转化为2D和原有的2D做残差使用)时所需要的变化,黑色部分表示不可见的三角形。对应不可见的三角形处理采用的是对称方式解决的。
f: 通过3D模型产生的67个基准点进行分段映射使人脸变弯曲,对人脸进行对齐处理。
g: 处理生成的2D人脸
h: 根据处理生成的3D人脸
其中:c和f相比经过了标准3D人脸转化为 2D人脸时的残差处理,此时主要是为保证在转化过程中特征的保留。e的作用是为了显示在处理过程中3D-2D转化为何是通过三角形的仿射变化进行的,由e可以看出处理后的人脸是一个个的三角形块。
三、人脸表示(face verification)
经过3D对齐以后,形成的图像都是152×152的图像,送入CNN,其结果如下:
C1:卷积层,卷积核尺寸11*11,共32个卷积核
M2:池化层,最大池化3*3,即stride = 2
C3:卷积层,卷积核尺寸9*9 ,共16个卷积核
L4: 卷积层,卷积核尺寸9*9 ,共16个卷积核。L表示local,意思是卷积核的参数不共享
L5: 卷积层,卷积核尺寸7*7 ,共16个卷积核。L表示local,意思是卷积核的参数不共享
L6: 卷积层,卷积核尺寸5*5 ,共16个卷积核。L表示local,意思是卷积核的参数不共享
F7: 全连接,4096个神经元
F8: 全连接,4030个神经元
前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但没有用太多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。除了不共享的卷积之外,该模型还采用了dropout方式避免模型的过拟合,该方法只是在F7的时候使用。
紧接着的三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:
全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。全连接层的输出可以用于Softmax的输入,Softmax层用于分类。
四、人脸表示的归一化
归一化的主要是将人脸的特征值都变为(0,1)之间,避免光照等其他因素的影响。其归一化的方式为:先对每一维进行归一化,每一维除以该维的最大值,再将整个向量归一化。
五、分类(鉴定度量)
鉴定度量是归一化后的结果用来进行身份验证使用的,也是一种其他的可用来分类时的度量,主要在计算相似度方面起作用。可以代替最后一层softmax层对图片进行处理,也可以对处理后的结果采用度量计算相似度。
其分类的度量方式主要有三种:1:内积,2:卡方加权,3:siamese网络
1. 对于内积直接进行计算不做介绍:
2. 卡方加权的方式如下:
其中f表示归一化后的特征,w是通过SVM学习到的参数。
3. siamese网络:
使用成对的图片进行训练,保证了可以使用特征之间的绝对不同而不是简单的逻辑不同。同时由于两张图片虽然采用了相同的参数,但是由于要运算两次,所以其对应的网络计算量并无差异(原始处理两张图片相比)。该距离可以用来比较两张图片是不是一个人。其距离的具体计算方式为:
其中alpha是训练得到的。