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

《刷脸背后:人脸检测 人脸识别 人脸检索》6.2 VGG Face Descriptor算法

关灯直达底部

VGG Face Descriptor算法[6]基于卷积神经网络,其源代码链接为http://www.robots.ox.ac.uk/~vgg/software/vgg_face/,本书直接使用作者提供的训练模型提取图片特征。特征提取的网络结构保存在VGG_FACE_16_deploy.prototxt文件中。该算法使用论文中提供的数据集作为训练特征模型的数据集,在LFW和YFW[7](Youtube Faces in the Wild)两个数据集上验证最终准确率。

6.2.1 VGG Face Descriptor算法的原理

实现VGG Face Descriptor算法的步骤[6]如下。

(1)数据预处理:①首先使用文献[8]中的软件/方法对图像数据集(包括训练图像集、验证图像集、测试图像集三部分)中的每张图像进行人脸检测;②将检测到的每张人脸图像缩放到227×227像素;③计算训练图像集的像素均值,将训练图像集和验证图像集的每张图像的所有像素值同时减去该均值;④在使用训练图像集、验证图像集训练深度特征模型之前,以224×224像素的尺寸随机剪切(Crop)训练图像集中的每张图片;⑤随机选取训练图像集中50%的图片进行水平翻转。

(2)设置深度学习的网络结构参数:网络中权重初始化为均值为0,标准差为0.01,权重衰减设置为0.0005,学习率设置为0.01;然后以10的倍数减小学习率以训练模型。最终,选择在验证图像集上预测损失(Loss)最低的一组网络结构参数,作为深度学习模型的最终参数。

(3)特征提取:①对于测试图像集中的每张图像,以224×224像素的尺寸,分别从该图像的中心和四个边角进行图像剪切,并对这些切片进行水平翻转,最终每张图像可以得到10个224×224像素尺寸的切片;②使用(2)中最终训练得到的深度特征模型,对该图像的10个切片分别提取特征(每个切片能得到4096维的特征向量);③对这10个切片上的4096维的特征向量求均值,就得到了该图像对应的4096维的特征向量;④为了实现多尺度提取特征,可以首先将图片缩放到256×256像素、384×384像素和512×512像素三个尺寸,对这三个尺寸的图像分别按照①、②、③中的步骤提取到4096维的特征向量,最后得到3个4096维的特征向量,再对这3个4096维的特征向量求均值,作为该图像最终的特征向量,维度为4096。

(4)人脸验证:提取LFW数据集中每对人脸的深度特征向量,使用欧氏距离进行人脸验证。

6.2.2 VGG Face Descriptor算法的实现

文献[6]的作者公开了VGG Face Descriptor的源代码,网址为http://www.robots.ox.ac.uk/~vgg/software/vgg_face/。源代码中包括特征提取的配置文件VGG_FACE_16_deploy.prototxt、文献[6]中训练得到的深度学习模型VGG_FACE.caffemodel、示例图片ak.jpg和运行示例文件matcaffe_demo_vgg_face.m,该文件用于对测试数据集中的图像进行分类。

修改、运行matcaffe_demo_vgg_face.m文件,假设要测试ak.jpg(对应人名为Aamir_Khan)图像对应的人的标签,运行该文件后即可预测该图像对应的人的标签。该示例ak.jpg的预测结果为3,从源码中提供的name.txt文件中找到第3行名称是Aamir_Khan,则可知该预测是正确的。

matcaffe_demo_vgg_face.m文件由文献[6]提供,其主要内容如下:

如果仅仅要提取该图像的深度特征(而不需要预测该图像的标签),则只需要去掉VGG_FACE_16_deploy.prototxt文件中输出为2622的全连接层,即可提取到输入图片img的4096维的特征向量。

去掉VGG_FACE_16_deploy.prototxt文件中输出为2622的全连接层之后,再修改matcaffe_demo_vgg_face.m文件,去掉它的最后一行,即可得到一个4096维的特征向量。

需要强调的是,如果保留文件VGG_FACE_16_deploy.prototxt中输出为2622的全连接层,如在上面的代码示例中,scores = caffe(/'forward/', {img})得到的是该图像属于各类(标签)的概率;而去掉文件VGG_FACE_16_deploy.prototxt中输出为2622的全连接层之后,如下面的代码所示,scores = caffe(/'forward/', {img})得到的就是该图像的深度特征向量。

6.2.3 VGG Face Descriptor算法的结果

不同人脸识别算法在LFW数据集上的测试结果对比如表6-1所示,对应的ROC曲线如图6-7所示。

表6-1 不同人脸识别算法在LFW数据集上的测试结果

图6-7 在LFW数据集上测试的结果[11]

可以看出,VGG Face Descriptor算法表现出了较高的性能。其中DeepID3算法获得了最高的准确率,但主要是由于该方法对错误标记的测试集进行了纠正,而其他方法并没有做这项工作。

注:(1)6.1节中使用文献[1]中的网络结构和CASIA-WebFace数据库,从初始化参数开始训练,训练得到本书中用来提取深度特征的模型。

(2)6.2节中作者公开了使用自己的数据集训练得到的模型,本书只讲解了如何使用作者提供的模型提取深度特征,进而进行人脸验证。