深度学习之视频人脸识别系列三:人脸表征

作者 | 东田应子

 

一、人脸表征

把人脸图像通过神经网络,得到一个特定维数的特征向量,该向量可以很好地表征人脸数据,使得不同人脸的两个特征向量距离尽可能大,同一张人脸的两个特征向量尽可能小,这样就可以通过特征向量来进行人脸识别。

二、论文综述

1. DeepFace:

2014年论文DeepFace: Closing the Gap toHuman-Level Performance in Face Verification提出了DeepFace算法,第一个真正将大数据和深度学习神经网络结合应用于人脸识别与验证。在该人脸识别模型中分为四个阶段:人脸检测 => 人脸对齐 => 人脸表征 => 人脸分类,在LFW数据集中可以达到97.00%的准确率。

(1)人脸检测与对齐:该模型使用3D模型来将人脸对齐,该方法过于繁琐,在实际应用中很少使用,经过3D对齐以后,形成的图像都是152×152的图像,具体步骤如下图。

分为如下几步:

a. 人脸检测,使用6个基点
b. 二维剪切,将人脸部分裁剪出来
c. 67个基点,然后Delaunay三角化,在轮廓处添加三角形来避免不连续
d. 将三角化后的人脸转换成3D形状
e. 三角化后的人脸变为有深度的3D三角网
f. 将三角网做偏转,使人脸的正面朝前。
g. 最后放正的人脸
h. 一个新角度的人脸(在论文中没有用到)

(2)人脸表征:人脸表征使用了5个卷积层和1个最大池化层、1个全连接层,如下图所示。前三层的目的在于提取低层次的特征,为了网络保留更多图像信息只使用了一层池化层;后面三层都是使用参数不共享的卷积核,因为主要是因为人脸不同的区域的特征是不一样的,具有很大的区分性,比如鼻子和眼睛所表示的特征是不一样的,但是使用参数不共享的卷积核也增加了模型计算量以及需要更多的训练数据。最后输出的4096维向量进行L2归一化。

a. Conv:32个11×11×3的卷积核

b. max-pooling: 3×3, stride=2

c. Conv: 16个9×9的卷积核

d. Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享

e. Local-Conv: 16个7×7的卷积核,参数不共享

f. Local-Conv: 16个5×5的卷积核,参数不共享

g. Fully-connected: 4096维

h. Softmax: 4030维

(3)分类:论文介绍了两种方法进行分类,加权的卡方距离和使用Siamese网络结构,设f1和f2为特征向量,上一个步骤的输出,则有:

①加权卡方距离:计算公式如下,加权参数由线性SVM计算得到:

②Siamese网络:网络结构是成对进行训练,得到的特征表示再使用如下公式进行计算距离:

2. DeepID1:

DeepID1 是2014年Deep LearningFace Representation from Predicting 10,000 Classes一文提出的,是DeepID三部曲的第一篇。DeepID1 使用softmax多分类训练,主要思想第一个是数据集的增大,包括训练集使用celebface,包含87628张图片,5436个人脸,增大了训练集;使用多尺寸输入,通过5个landmarks将每张人脸划分成10regions,每张图片提取60patches=10regions3scales2(RGB orgray),第二个是网络结构,DeepID提取的人脸特征就是一个由连接第三层与第四层组成的全连接层特征,如下图所示,每个patches经过这个cnn网络,第四层的特征更加全局化(global),第三层的特征更加细节,因此DeepID连接了两者,以求同时包含全局,细节信息。

60个patches使用60个CNN,每个CNN提取2160=320维特征(与水平翻转一起输入),总网络模型如下图所示,最后分别使用联合贝叶斯算法与神经网络进行分类,并比较结果。

模型最终以CelebFaces+中202,599图像作为训练集, patch数提升为100(10r10s2) ,特征数提升为100160*2=32000 然后使用PCA降为150维 ,使用联合贝叶斯算法进行验证, 最终在LFW上达到97.20%的验证准确率。

3. DeepID2:

DeepID2是Deep Learning Face Representationby Joint Identification-Verification一文提出的,对DeepID1进行了进一步的改进,提出了contrastive loss,在分类任务,我们需要的是减少类内差距(同一人脸),增加类间差距(不同人脸),softmax loss分类的监督信号可以增大类间差距,但是却对类内差距影响不大,所以DeepID2加入了另一个loss,contrastive loss,从而增加验证的监督信号,就可以减少类内差距。

网络结构类似DeepID1,不同之处在于使用了两种不同的损失函数,网络结构如下图所示。

损失函数:

①分类信号,Softmax loss。

②验证信号,contrastiveloss,使用l2范数距离表示,m为阈值不参与训练,括号内的θve={m},该损失函数可以让类间的距离给定一个限制margin,即m大小的距离。

两loss的组合方式: 首先使用2个输入,计算Softmax loss和contrastive loss,总损失为二者通过λ加权求和,通过总损失来执行梯度下降更新卷积参数,通过Softmax loss来更新softmax层的参数。

整个模型使用celebrate+数据集训练,每张图片使用了21 facial landmarks,分成200patches(20regions5scales2RGB&Gray),水平翻转后变为400patches,使用了200个卷积神经网络,提取400(2002)个Deepid2特征,使用贪婪算法降为25个Deepid2特征,使用PCA将25160Deepid2特征降为180维,最后使用联合贝叶斯算法进行验证,最终在LFW上得到的最终准确率是98.97%,使用7组25个Deepid2特征,SVM融合可得到准确率为99.15% 。DeepID2在2014 年是人脸领域非常有影响力的工作,也掀起了在人脸领域引进 MetricLearning 的浪潮。

4. DeepID2+:

DeepID2+源于论文Deeply learned facerepresentations are sparse, selective, and robust,DeepID2+是对DeepID2的改进。①卷积层在原来基础上再增加128维,第四层全连接层从160增加到512,训练数据增加了CelebFaces+ dataset,WDRef等,有12000个人脸的大约290,000张图片; ②每个卷积层的后面都加了一个512为的全连接层,并添加contrastive loss监督信号,而不仅在第四层全连接层上有 。网络结构如下图所示。

最终在LFW数据集上准确率为99.47%。

5. DeepID3:

DeepID3源于2015年的Deepid3:Face recognition with very deep neural networks论文,该论文探究了复杂神经网络对人脸识别的作用。论文研究VGG与GoogleNet用于人脸识别的效果,论文在VGG和GooLeNet的基础上进行构建合适的结构,使得方便人脸识别。结果发现DeepID3的结果和DeepID2+相当,可能是由于数据集的瓶颈,需要更大的数据才能有更好的提升,两个网络结构如下图所示。

网络输出使用PCA降维到300维的向量,使用联合贝叶斯算法进行验证,最终在LFW上得到的最终准确率是99.53%。

6. FaceNet:

FaceNet由论文Facenet: A unified embedding forface recognition and clustering提出,这篇 2015 年来自 Google 的 论文同样具有非常大的影响力,不仅仅成功应用了 TripletLoss 在 benchmark 上取得state-of-art 的结果,更因为他们提出了一个绝大部分人脸问题的统一解决框架,即:识别、验证、搜索等问题都可以放到特征空间里做,需要专注解决的仅仅是如何将人脸更好的映射到特征空间。FaceNet在DeepID的基础上,将 ContrastiveLoss 改进为 Triplet Loss,去掉softmaxloss。FaceNet实验了ZFNet类型网络和Inception类型网络,最终Inception类型网络效果更好,网络结构如下图所示。

一、人脸表征

把人脸图像通过神经网络,得到一个特定维数的特征向量,该向量可以很好地表征人脸数据,使得不同人脸的两个特征向量距离尽可能大,同一张人脸的两个特征向量尽可能小,这样就可以通过特征向量来进行人脸识别。

二、论文综述

1. DeepFace:

2014年论文DeepFace: Closing the Gap toHuman-Level Performance in Face Verification提出了DeepFace算法,第一个真正将大数据和深度学习神经网络结合应用于人脸识别与验证。在该人脸识别模型中分为四个阶段:人脸检测 => 人脸对齐 => 人脸表征 => 人脸分类,在LFW数据集中可以达到97.00%的准确率。

(1)人脸检测与对齐:该模型使用3D模型来将人脸对齐,该方法过于繁琐,在实际应用中很少使用,经过3D对齐以后,形成的图像都是152×152的图像,具体步骤如下图。

分为如下几步:

a. 人脸检测,使用6个基点
b. 二维剪切,将人脸部分裁剪出来
c. 67个基点,然后Delaunay三角化,在轮廓处添加三角形来避免不连续
d. 将三角化后的人脸转换成3D形状
e. 三角化后的人脸变为有深度的3D三角网
f. 将三角网做偏转,使人脸的正面朝前。
g. 最后放正的人脸
h. 一个新角度的人脸(在论文中没有用到)

(2)人脸表征:人脸表征使用了5个卷积层和1个最大池化层、1个全连接层,如下图所示。前三层的目的在于提取低层次的特征,为了网络保留更多图像信息只使用了一层池化层;后面三层都是使用参数不共享的卷积核,因为主要是因为人脸不同的区域的特征是不一样的,具有很大的区分性,比如鼻子和眼睛所表示的特征是不一样的,但是使用参数不共享的卷积核也增加了模型计算量以及需要更多的训练数据。最后输出的4096维向量进行L2归一化。

a. Conv:32个11×11×3的卷积核

b. max-pooling: 3×3, stride=2

c. Conv: 16个9×9的卷积核

d. Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享

e. Local-Conv: 16个7×7的卷积核,参数不共享

f. Local-Conv: 16个5×5的卷积核,参数不共享

g. Fully-connected: 4096维

h. Softmax: 4030维

(3)分类:论文介绍了两种方法进行分类,加权的卡方距离和使用Siamese网络结构,设f1和f2为特征向量,上一个步骤的输出,则有:

①加权卡方距离:计算公式如下,加权参数由线性SVM计算得到:

②Siamese网络:网络结构是成对进行训练,得到的特征表示再使用如下公式进行计算距离:

2. DeepID1:

DeepID1 是2014年Deep LearningFace Representation from Predicting 10,000 Classes一文提出的,是DeepID三部曲的第一篇。DeepID1 使用softmax多分类训练,主要思想第一个是数据集的增大,包括训练集使用celebface,包含87628张图片,5436个人脸,增大了训练集;使用多尺寸输入,通过5个landmarks将每张人脸划分成10regions,每张图片提取60patches=10regions3scales2(RGB orgray),第二个是网络结构,DeepID提取的人脸特征就是一个由连接第三层与第四层组成的全连接层特征,如下图所示,每个patches经过这个cnn网络,第四层的特征更加全局化(global),第三层的特征更加细节,因此DeepID连接了两者,以求同时包含全局,细节信息。

60个patches使用60个CNN,每个CNN提取2160=320维特征(与水平翻转一起输入),总网络模型如下图所示,最后分别使用联合贝叶斯算法与神经网络进行分类,并比较结果。

模型最终以CelebFaces+中202,599图像作为训练集, patch数提升为100(10r10s2) ,特征数提升为100160*2=32000 然后使用PCA降为150维 ,使用联合贝叶斯算法进行验证, 最终在LFW上达到97.20%的验证准确率。

3. DeepID2:

DeepID2是Deep Learning Face Representationby Joint Identification-Verification一文提出的,对DeepID1进行了进一步的改进,提出了contrastive loss,在分类任务,我们需要的是减少类内差距(同一人脸),增加类间差距(不同人脸),softmax loss分类的监督信号可以增大类间差距,但是却对类内差距影响不大,所以DeepID2加入了另一个loss,contrastive loss,从而增加验证的监督信号,就可以减少类内差距。

网络结构类似DeepID1,不同之处在于使用了两种不同的损失函数,网络结构如下图所示。

损失函数:

①分类信号,Softmax loss。

②验证信号,contrastiveloss,使用l2范数距离表示,m为阈值不参与训练,括号内的θve={m},该损失函数可以让类间的距离给定一个限制margin,即m大小的距离。

两loss的组合方式: 首先使用2个输入,计算Softmax loss和contrastive loss,总损失为二者通过λ加权求和,通过总损失来执行梯度下降更新卷积参数,通过Softmax loss来更新softmax层的参数。

整个模型使用celebrate+数据集训练,每张图片使用了21 facial landmarks,分成200patches(20regions5scales2RGB&Gray),水平翻转后变为400patches,使用了200个卷积神经网络,提取400(2002)个Deepid2特征,使用贪婪算法降为25个Deepid2特征,使用PCA将25160Deepid2特征降为180维,最后使用联合贝叶斯算法进行验证,最终在LFW上得到的最终准确率是98.97%,使用7组25个Deepid2特征,SVM融合可得到准确率为99.15% 。DeepID2在2014 年是人脸领域非常有影响力的工作,也掀起了在人脸领域引进 MetricLearning 的浪潮。

4. DeepID2+:

DeepID2+源于论文Deeply learned facerepresentations are sparse, selective, and robust,DeepID2+是对DeepID2的改进。①卷积层在原来基础上再增加128维,第四层全连接层从160增加到512,训练数据增加了CelebFaces+ dataset,WDRef等,有12000个人脸的大约290,000张图片; ②每个卷积层的后面都加了一个512为的全连接层,并添加contrastive loss监督信号,而不仅在第四层全连接层上有 。网络结构如下图所示。

最终在LFW数据集上准确率为99.47%。

5. DeepID3:

DeepID3源于2015年的Deepid3:Face recognition with very deep neural networks论文,该论文探究了复杂神经网络对人脸识别的作用。论文研究VGG与GoogleNet用于人脸识别的效果,论文在VGG和GooLeNet的基础上进行构建合适的结构,使得方便人脸识别。结果发现DeepID3的结果和DeepID2+相当,可能是由于数据集的瓶颈,需要更大的数据才能有更好的提升,两个网络结构如下图所示。

网络输出使用PCA降维到300维的向量,使用联合贝叶斯算法进行验证,最终在LFW上得到的最终准确率是99.53%。

6. FaceNet:

FaceNet由论文Facenet: A unified embedding forface recognition and clustering提出,这篇 2015 年来自 Google 的 论文同样具有非常大的影响力,不仅仅成功应用了 TripletLoss 在 benchmark 上取得state-of-art 的结果,更因为他们提出了一个绝大部分人脸问题的统一解决框架,即:识别、验证、搜索等问题都可以放到特征空间里做,需要专注解决的仅仅是如何将人脸更好的映射到特征空间。FaceNet在DeepID的基础上,将 ContrastiveLoss 改进为 Triplet Loss,去掉softmaxloss。FaceNet实验了ZFNet类型网络和Inception类型网络,最终Inception类型网络效果更好,网络结构如下图所示。

FaceNet没有使用PCA降维,而是在网络中直接训练输出128维的向量,用全连接层来完成降维,最后的128维的向量经过Triplet Loss。

Triplet Loss输入不再是 Image Pair,而是三张图片(Triplet),分别为 Anchor Face(xa),Negative Face(xn)和 Positive Face(xp)。Anchor 与 Positive Face 为同一人,与 Negative Face 为不同人,在特征空间里 Anchor 与 Positive 的距离要小于 Anchor 与 Negative 的距离,且相差超过一个 Margin Alpha。

loss的目标为:

总loss公式为:

Contrastive Loss与Triplet Loss的比较, Contrastive Loss目标是减少类内差距(两个蓝点),增加类间差距(蓝点与红点);Triplet Loss则是输入三张图片,Anchor 与 Positive 的距离要小于 Anchor 与 Negative 的距离,且相差超过一个 Margin Alpha,即Triplet Loss同时约束了两个距离。

最后FaceNet在LFW数据集上达到了99.63%的准确率。

基于 ContrastiveLoss 和 Triplet Loss 的 MetricLearning 符合人的认知规律,在实际应用中也取得了不错的效果,但同时也有很多问题,由于ContrastiveLoss 和 Triplet Loss 的训练样本都基于pair 或者 triplet 的,可能的样本数是 O(N2) 或者 O (N3) 的,所以模型需要很久的计算才能拟合并且训练集需要足够大。

三、总结

本期文章主要介绍人脸表征相关算法和论文综述,主要是2014年到2016年的研究成果, ContrastiveLoss 和 Triplet Loss在实际应用中也取得了很好的效果,但是也有很多问题,由于Contrastive Loss 和 Triplet Loss 的训练样本都基于 pair 或者 triplet 的,可能的样本数是 O (N2) 或者 O (N3) 的,所以模型需要很久的计算才能拟合并且训练集要足够大,所以在之后的人脸识别研究中,大部分在于loss函数的研究,这部分将会在下一期给大家介绍。

参考文献:

【1】 Taigman Y, Yang M, Ranzato M A, et al.Deepface: Closing the gap to human-level performance in faceverification[C]//Proceedings of the IEEE conference on computer vision andpattern recognition. 2014: 1701-1708.

【2】Sun Y, Wang X, Tang X. Deep learning facerepresentation from predicting 10,000 classes[C]//Proceedings of the IEEEconference on computer vision and pattern recognition. 2014: 1891-1898.

【3】Sun Y, Chen Y, Wang X, et al. Deeplearning face representation by joint identification-verification[C]//Advancesin neural information processing systems. 2014: 1988-1996.

【4】Sun Y, Liang D, Wang X, et al. Deepid3:Face recognition with very deep neural networks[J]. arXiv preprintarXiv:1502.00873, 2015.

【5】Simonyan K, Zisserman A. Very deepconvolutional networks for large-scale image recognition[J]. arXiv preprintarXiv:1409.1556, 2014.

【6】Szegedy C, Liu W, Jia Y, et al. Goingdeeper with convolutions[C]//Proceedings of the IEEE conference on computervision and pattern recognition. 2015: 1-9.

【7】Sun Y, Wang X, Tang X. Deeply learned facerepresentations are sparse, selective, and robust[C]//Proceedings of the IEEEconference on computer vision and pattern recognition. 2015: 2892-2900.

【8】Schroff F, Kalenichenko D, Philbin J.Facenet: A unified embedding for face recognition andclustering[C]//Proceedings of the IEEE conference on computer vision andpattern recognition. 2015: 815-823.

Be the first to comment

Leave a Reply

Your email address will not be published.