首页 » 刷脸背后:人脸检测 人脸识别 人脸检索 » 刷脸背后:人脸检测 人脸识别 人脸检索全文在线阅读

《刷脸背后:人脸检测 人脸识别 人脸检索》6.1 DeepID算法[1]

关灯直达底部

DeepID算法[1]是基于深度卷积神经网络的人脸识别算法,该算法由Y.Sun等人在2014年提出。在LFW数据集上,DeepID算法具有99%的识别准确度。在本书中,由于CelebFaces和CelebFaces+数据库并未公开,所以我们在CASIAWebFace[2]数据库上进行训练,在LFW[3]数据集上进行实验验证。LFW数据集包含10 575个人,共有494 414张图片,该数据集中每人均有多张图片。本文只基于Caffe 深度学习平台[4]实现了其中一个DeepID深度神经网络,并用于提取人脸的特征。然后,通过计算LFW数据集上6000对图片特征向量的夹角余弦距离,进行人脸识别的验证,即计算每对人脸(深度特征之间)的夹角余弦距离,并求解最优的夹角余弦距离阈值。

Caffe平台的安装请参考如下文献:http://caffe.berkeleyvision.org/installation.html和http://blog.csdn.net/wangpengfei163/article/details/50488079。

6.1.1 DeepID算法的原理

本书实现的DeepID算法流程如下。

(1)首先使用Y.Sun等人[5]提出的面部检测软件,检测出所使用的数据集中每张图片中的人脸边框信息,根据人脸边框信息检测面部关键点,包括2个眼部中点、鼻尖和2个嘴角,共5个面部关键点。根据这5个关键点首先产生10个切片(包括5个全局区域和5个以关键点为中心的局部区域),如图6-1(上)所示。每张切片有3种尺寸,如图6-1(下)所示。其又分为灰度图和RGB图两种,因此每张检测出来的人脸被处理成了对应的60个切片。

图6-1 人脸切片(上部:左边五个为全局区域,右边五个为以检测到的五个关键点产生的局部区域;下部:其中两个切片的三个不同的尺寸)

分别对这60种切片(共60种切片,数据集中每个图像上得到的60个切片,分别放到这60种切片中)训练深度模型,共训练得到60个深度网络结构模型(每种切片对应一种深度模型)。然后,对每个图像的60个切片,就可以分别使用这60个深度模型对对应切片提取深度特征了。这样,每个切片上可以得到一个160维的特征(DeepID特征向量)。接着,对每个切片进行水平翻转,然后使用相同的深度模型提取特征。最后,每张人脸图片对应的总的DeepID特征向量维度为19 200(160×2×60)。

(2)LFW数据集包含了5749个人,只有85个人的图片超过了15张,4069个人只有一张图片。可以看出,LFW数据集并不适合训练模型(因为在5749个人中,只有1680个人有两张及以上的图片,故不适合训练机器学习模型)。于是本书采用了CelebFaces数据库,随机选取人数的80%(4349个人)来训练DeepID模型,剩余的20%用于训练人脸验证模型。在深度特征学习的过程中,使用了切片和该切片对应的水平翻转切片,随机选择每个人10%的图片来作为训练DeepID模型的验证数据。

(3)为了验证论文中的算法和评估结果,选择使用了扩展数据库CelebFaces+,该数据库包含10 177个人,共有202 599张图片。随机选取8700个人训练DeepID模型,剩下的1477个人用来训练联合贝叶斯模型做人脸验证。通过使用5种不同的尺寸,将每个图像的切片数量提高到100个,每个图像的特征向量维度提高到32 000,然后使用PCA将其降维到150维。实验结果表明,本书设计的方法在LFW数据集中实现了97.20%的准确率(对LFW数据集中的6000对图片,分别计算每对人脸图像的特征向量的夹角余弦距离,来进行人脸识别的验证)。考虑到数据分布的影响,最终选择使用一种迁移学习算法和10折交叉验证,在LFW数据集中实现了97.45%的准确率。

6.1.2 DeepID算法的流程

整体操作步骤如下。

(1)运行源码中process_data/Face_Detect_Master文件夹下的process_data_master.m文件剪切图片。

(2)运行源码中preprocess_data/Face_Detect_Master文件夹下的split_data.m文件,将数据划分成训练集和验证集。

(3)运行源码中extract_featuredeepID_webFacemodel文件夹下的run_deep IDnet.sh文件,最终会得到后缀名为.caffemodel的模型文件。

(4)在源码中extract_feature文件夹下,getDeepID.m文件可以实现对指定文件列表中的所有图片进行提取深度特征,classify.m可以利用提取到的深度特征和夹角余弦距离进行人脸验证。

DeepID算法的具体实现细节如下。

1.数据预处理

这部分主要是进行数据预处理,代码保存在源码文件夹 code/preprocess_data 下。

(1)我们首先使用Y.Sun等人[5]提出的面部检测方法,检测出所使用的数据库中每张图片中包含的人脸边框信息,如图6-2所示。

图6-2 原始图片和裁剪出的面部区域

运行所提供的源码文件process_data/Face_Detect_Master工具,在process_data_master.m文件中指定原始图片路径、剪切后图片保存路径和图片剪切后尺寸。运行process_data_master.m文件,process_data/Face_Detect_Master/Output文件夹中会生成检测到的图片边框和关键点信息的文件,会在指定的剪切路径下生成对应剪切尺寸的图片。process_data_master.m文件内容如下:

(2)运行源码中preprocess_data/Face_Detect_Master文件夹下的split_data.m文件,随机选取图片数的10%作为验证集,剩余图片作为训练集,需要指定图片数据的路径,生成训练集文件train.txt和测试集文件test.txt,文件中每行包含对应的图片路径和标签。split_data.m文件内容如下:

2.深度网络结构

我们使用DeepID网络结构[1],主要包括4个卷积层、3个下采样层(Pooling层)和2个全连接层、1个线性修正单元(ReLU层)及标记所属类别的输出层。网络最后一个全连接层的输出需要设置为类别数,输入图片尺寸:长方形切片尺寸为39×31×k,正方形切片尺寸为31×31×k,其中k=3表示为彩色图像,k=1表示为灰度图像。输出为属于每个类别的概率值。我们选择网络结构中的倒数第二个全连接层作为要提取的深度特征层(DeepID层,维度为160),由于该层后跟有线性修正单元(ReLU层),所以提取出的深度特征向量都是非负值。使用的网络结构如图6-3所示。

图6-3 DeepID网络结构[1]

DeepID网络结构说明:该网络结构包括4个卷积层、3个下采样层和2个全连接层。每一个立方体的维度分别表示输入层、卷积层、下采样层的长度、宽度和高度。内部的小正方形表示卷积核的尺寸。DeepID层连接了第四个卷积层和第三个下采样层,实现了整体特征和局部特征的结合,称为多尺度网络结构。

我们使用的图片尺寸为48×48,训练模型所需源码在extract_feature/deep ID_webFace/model文件夹下,所包含的文件如图6-4所示。

图6-4 训练深度学习模型需要使用的文件夹下的文件列表

train_val.prototxt文件定义了DeepID网络结构、训练集和验证集,solver.prototxt文件定义了训练网络所需的网络参数,deploy.prototxt用于提取深度特征。

在安装有Caffe环境的Ubuntu系统中,运行run_deepIDnet.sh文件,最终会得到后缀名为.caffemodel的模型文件。run_deepIDnet.sh文件内容如下:

说明:源码中涉及的路径问题,请更改为读者自己的对应路径。

3.提取深度特征与人脸验证

上文已经提到,本实验进行人脸验证时,对LFW数据集中的6000对图片,分别计算每对人脸图像的特征向量的夹角余弦距离,根据该距离的大小判断两个图像是否是同一个人。

本实验选择图6-3 中的DeepID网络结构中的倒数第二个全连接层作为要提取的深度特征层。在本实验中,对LFW数据集中的每张图片,我们只使用了一个切片(人脸区域),因此每张图片上最后得到的特征向量维度为160。

我们穷举不同的阈值,分别获得对应的准确率。最后采用最高准确率对应的阈值,作为本实验的最终结果。

该部分对应的代码包含在源码中extract_feature文件夹下,getDeepID.m文件可以实现对指定文件列表中的所有图片进行提取深度特征,classify.m可以利用提取到的深度特征和夹角余弦距离进行人脸验证。

getDeepID.m文件内容如下:

classify.m文件内容如下:

6.1.3 DeepID算法的结果

本部分介绍我们的实验结果。我们在CASIA-WebFace数据库中训练DeepID模型,进行特征学习;在LFW数据集中进行实验验证。由于CASIA-WebFace数据库中每人对应的图片并不相等,因此在该数据库中获得的数据是不均衡的,而且存在图片错误归类的情况,会对实验结果造成一定的影响。

1.人脸识别数据

(1)我们在CASIA-WebFace数据库上训练DeepID模型,进行特征学习。该数据库包含10 575个人,共有494 414张图片,每人均有多张图片。图6-5所示为 CASIA-WebFace数据库中的一些样例图片。

图6-5 CASIA-WebFace数据库中的一些样例图片

(2)我们主要在LFW数据集上进行人脸验证,该数据集中一共有5749个人,但4069个人只有一张对应的图片,而只有85个人的图片多于15张。图6-6所示为LFW数据集中的一些样例图片。

图6-6 LFW数据集中的一些样例图片

2.实验细节

在实验中,数据预处理方法使用6.1.1节中介绍的方法,生成每个原始图片样本对应的1个切片图。使用6.1.2节中介绍的方法提取深度特征,获得每个原始图片样本对应的160维的特征向量。

通过数据预处理得到数据集,我们随机选取每个人10%的图片作为训练DeepID模型的验证数据,然后使用训练得到的模型提取LFW数据集中6000对数据的深度特征,计算6000对特征向量的夹角余弦距离。通过穷举不同的阈值,得到不同的准确率,我们选择最高准确率作为最终的验证准确率。最终准确率为0.823 167。得到的准确率并不高,主要原因如下:

(1)CASIA-WebFace数据库中每人对应的图片并不相等,因此在该数据库中获得的数据是不均衡的,而且存在图片错误归类的情况,会对实验结果造成一定的影响。

(2)该实验中没有使用一些数据增强的方法(增加切片数目的方法)。有兴趣的读者,可以尝试筛选CASIA-WebFace数据库,去除错误标记的图片和使用一些数据增强技术(增加切片数目的方法,如每个图像产生60×2个切片)来提高最终验证准确率。

我们尝试了不同的参数组合,如逐渐减小学习率、调整批处理大小、测试不同的迭代次数,最终选择较好的参数组合来调优深度学习模型,用于提取深度特征向量。