
原文地址: Deep Face Recognition
该论文主要从两个方面阐述了他们的工作:
- 通过半自动化的方式来生成大规模的数据集,使用web中资源,来收集人脸数据。
- 提出一种用于人脸识别的卷积网路的训练过程。
Google使用的一个人人脸图像数据集中包含2亿张图片,8百万个人物身份。但是公开的数据集很难达到这样的数据规模。
如上图所示,左侧的公开数据集在量级上要远小于大公司所使用的数据集。
论文提出以下的流程来建立数据集:
- 先在IMDB中找到一个公众人物列表,在通过Freebase,来获得相关公众人物的信息。这样能够得到5千个人名,构成一个候选列表。然后,使用谷歌图片搜索,为这5千个人名中的每一个人名收集200张图片,然后在人工对其进行过滤,如果每个人名的的200张图片中的纯度大于90%才保留,这样,一共得到了3250个人物。接下来过滤掉LFW,YTF中出现过的人物,这样一共收集到了2622个人物。
- 对2622个人物,借助谷歌以及必应图片搜索,为每个人物收集到了2000张图片。
- 对每一个人名,搜索引擎提供的前50的图片作为正例,其他人物的前50的图片作为负例,训练一个一对多的线性SVM。对每一个人名,都训练一个SVM,SVN将每个人物的2000张图片中得分最高的1000图片保留下来。
- 为每个人物的每张图片计算VLAD描述符,对图片进行聚类,在每个类中选取出一张图片,以此来去除重复的图片以及相似的图片。
- 使用AlexNet结构的CNN来辅助最后的人工过滤。这一步的目的是为了使用人工标注来降低数据的纯度。使用这个网络来对着2622个人物图像进行分类,这样,每个人物的图像,我们都能得到交叉熵得分。对每个人物的图像,我们按排序的每200张组成一个block,人工对每个block进行验证,如果该block的纯度大于95%,则保留。
在人脸识别中传统的方法通常使用浅层特征,这些方法别称为浅层方法(Shallow Methods),使用到神经网络的方法称为深层方法(Deep Methods)。
浅层方法
先使用手工的局部图片描述符(handcrafted local image descriptors)来取提取图片的表示,在使用池化机制来聚合这些局部描述符来形成人脸描述符。
深层方法
使用卷积网络来提取人脸特征,代表的系统有DeepFace。
This method uses a deep CNN trained to classify faces using a dataset of 4 million examples spanning 4000 unique identities. It also uses a siamese network architecture, where the same CNN is applied to pairs of faces to obtain descriptors that are then compared using the Euclidean distance.
DeepFace 使用组合的CNN,同时对人脸图像进行预处理,使用3D模型将人脸进行标准对齐,在当时DeepFace取得了最好的效果。随后,在DeepFace的基础上,DeepID系列由取得了一些列的进展。
例如:
- 使用多重CNN
- 使用贝叶斯学习框架
- 识别-验证多任务学习
- 更深层的网络
DeepID不使用3D人脸对齐,但是进行了2D的仿射对齐(Affine Alignment)
基础的网络结果如下图所示:
数学化表示如下:
$\phi$ : 网络
$N$ : 数据集中人物的个数,即类别的个数,$N = 2622$
$l_t$ : 第t张训练图像
$W, b$ : 全连接层的参数, 其中$W \in \R^{N\times D}, b \in \R^{N}$
$x_t = W\phi(l_t)+b$: 图片$l_t$ 经过网络后得到的该图片在N个类别中的得分
$e_c$ : 类别c的one-hot向量
经过一个softmax交叉熵损失来进行训练:
$$
E(\phi)=-\sum_t\log(\frac{e^{<e_{t_c},x_t>}}{\sum_{q=1, …,N}e^{<e_q, x_t>}})
$$
在学习过后,最后的全连接层(W, b)将被移除,通过网络$\phi$ 得到的特征$\phi(x_t)$将可以对其进行欧氏距离的计算来用于人脸验证。
作者提出,使用三元组损失(Triplet-loss)得到的表示更具有分辨力。
$\phi(l_i)$ : 图片i在卷积网络后得到的特征表示
$W’$ : 是一个纺射投影,通过
$$
x_i = W’ \frac{\phi(l_i)}{||\phi(l_i)||_2}
$$
将维度为$\R^D$ 的特征表示映射到$x_i \in \R^L$ 的特征表示,其中,$L \ll D$ ,其中的$W’$可以通过以下的损失来学习$(a, p, n)$: 是一个三元组,a是一个anchor 人脸图,p是a所属类别的一个正实例,n是a所属的类别的一个负实例
$$
E(W’) = \sum_{(a, p, n) \in T} max{ 0, \alpha-||x_a - x_n||^{2}_{2} +||x_a - x_p||^2_2 }
$$
实验结果
- 在LFW的实验结果
- 在YFD的实验结果