人脸识别之DeepFace模型

之前了解过了DeepID和FaceNet网路结构,但根据一些博客的说法DeepFace是深度学习用在人脸识别领域的奠基之做,所以也看了一下DeepFace的理论,现在主要将自己的理解梳理一下,如理解有误希望能及时指出。

首先还是给出文章的地址,想看文章的朋友可以点击链接下载文章地址。 该文章介绍了整个方法的流程以及实验的结果。DeepFace在进行人脸识别的过程中采用的是检测——对齐——提取——分类的过程。

一、人脸对齐

在对齐方面,DeepFace模型采用了3D对齐的方式,并且使用传统的LBP直方图(首先通过设置阀值并以某一像素点为中心邻域内的像素点一起和阀值比较,当大于阀值时就将其变为1小于阀值就变成0,然后在做成直方图统计各区域像素出现的次数)进行图片纹理化并提取对应的特征。对提取出的特征使用SVR处理以提取出人脸及对应的六个基本点。根据六个基本点做仿射变化,再根据3D模型得到 对应的67个面部关键点,根据这些点做三角划分最终得出对应的3D人脸。其具体对齐流程如下:

人脸识别之DeepFace模型_第1张图片

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可以看出处理后的人脸是一个个的三角形块。

二、人脸表示

该模型采用了CNN的结构对对齐后的人脸进行处理(首次将卷积网络运用于人脸识别的模型并且识别的准确度大于人眼的准确度)。具体网络结构如下:

人脸识别之DeepFace模型_第2张图片

由网络结构可以看出其使用了2个共享卷积层,3个不共享卷积层,两个全连接层。该模型参数大概有1.2亿,其中95%的参数来自于不共享的卷积层和全连接层,之所以采用不共享的卷积核原因主要是:对齐的人脸图片中不同的区域存在不同的特征,人脸的局部稳定性假设并不存在,因此采用相同的卷积核会导致信息的丢失。同时由于采用了不共享的卷积核(同一张图片不同区域存在不同的卷积核)虽然会导致训练时的参数量增加,但是不会影响提取特征时的计算速度(变化所需的卷积核确定之后,变化所涉及到的原始图片大小是不变的)。并不影响我们对模型的使用。由于我们采用的数据量较大,所以也可以保证我们能够很好的进行不共享的卷积计算而不会影响模型的准确度。

除了不共享的卷积之外,该模型还采用了dropout方式避免模型的过拟合,该方法只是在F7的时候使用。在第一个卷积层后面还使用了对应的max池化层。由于池化虽然可以使模型具有一些不变性,增强模型的鲁棒性。但是池化有时候也会导致特征的缺失。因此该模型仅仅在第一层卷积层之后使用了池化层。

除上述特征之外,该网络和一般的卷积网络没有区别,训练时采用的是交叉熵函数,并通过SGD和反向传导的方法对模型的进行训练,训练过程采用整流线型激活函数。并且图片的输入大小是可以随着具体输入变化的。

具体的卷积计算过程为:

c1:32个11X11的卷积核

M2:3X3的池化层,stride=2

c2: 16个9X9的卷积核

L4: 16个9X9的卷积核,参数不共享

L5: 16个7X7的卷积核,参数不共享

L6: 16个5X5的卷积核,参数不共享

F7: 全连接层4096维(提取出的人脸特征)

F8: softmax分类层。4030是因为训练采用的LFW数据中包含4030个people。

三、人脸归一化:

归一化的主要是将人脸的特征值都变为(0,1)之间,避免光照等其他因素的影响。其归一化的方式为:先对每一维进行归一化,每一维除以该维的最大值,再将整个向量归一化。具体如下:

四、鉴定度量:

鉴定度量是归一化后的结果用来进行身份验证使用的,也是一种其他的可用来分类时的度量,主要在计算相似度方面起作用。可以代替最后一层softmax层对图片进行处理,也可以对处理后的结果采用度量计算相似度。其分类的度量方式主要有三种:1:内积,2:卡方加权,3:siamese网络

1. 对于内积直接进行计算不做介绍:

2. 卡方加权的方式如下:

其中f表示归一化后的特征,w是通过SVM学习到的参数。

3. siamese网络:

使用成对的图片进行训练,保证了可以使用特征之间的绝对不同而不是简单的逻辑不同。同时由于两张图片虽然采用了相同的参数,但是由于要运算两次,所以其对应的网络计算量并无差异(原始处理两张图片相比)。该距离可以用来比较两张图片是不是一个人。其距离的具体计算方式为:

其中alpha是训练得到的。

五、实验:

通过实验可以发现通过3D对齐之后的识别在LFW数据集上可以达到97.35%,不做对齐的话只有87.9%。说明对齐的重要性,同时如果对齐后的数据直接采用SVM或者LBP传统方法只有91.4%也证明了深度学习的卷积网络在处理人脸识别问题的优势。

对于计算复杂度,该网络没有GPU加速的情况下提取的时间为0.18。

你可能感兴趣的:(人工智能,卷积神经网络)