《deep face recognition》论文解读
z

原文地址: Deep Face Recognition

该论文主要从两个方面阐述了他们的工作:

  • 通过半自动化的方式来生成大规模的数据集,使用web中资源,来收集人脸数据。
  • 提出一种用于人脸识别的卷积网路的训练过程。

Google使用的一个人人脸图像数据集中包含2亿张图片,8百万个人物身份。但是公开的数据集很难达到这样的数据规模。

1535092056000

如上图所示,左侧的公开数据集在量级上要远小于大公司所使用的数据集。

论文提出以下的流程来建立数据集:

  1. 先在IMDB中找到一个公众人物列表,在通过Freebase,来获得相关公众人物的信息。这样能够得到5千个人名,构成一个候选列表。然后,使用谷歌图片搜索,为这5千个人名中的每一个人名收集200张图片,然后在人工对其进行过滤,如果每个人名的的200张图片中的纯度大于90%才保留,这样,一共得到了3250个人物。接下来过滤掉LFW,YTF中出现过的人物,这样一共收集到了2622个人物。
  2. 对2622个人物,借助谷歌以及必应图片搜索,为每个人物收集到了2000张图片。
  3. 对每一个人名,搜索引擎提供的前50的图片作为正例,其他人物的前50的图片作为负例,训练一个一对多的线性SVM。对每一个人名,都训练一个SVM,SVN将每个人物的2000张图片中得分最高的1000图片保留下来。
  4. 为每个人物的每张图片计算VLAD描述符,对图片进行聚类,在每个类中选取出一张图片,以此来去除重复的图片以及相似的图片。
  5. 使用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)

基础的网络结果如下图所示:

1535113904161

数学化表示如下:

  • $\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的实验结果

1535113663280

  • 在YFD的实验结果

1535113718635