论文来自https://arxiv.org/abs/1503.03832
英语渣渣的阅读和翻译


FaceNet:人脸识别和聚类的统一嵌入

  • 摘要:尽管最近在面部识别领域取得了重大的进展[10、14、15、17],但要有效地大规模实施面部验证和识别认识当前方法的一大挑战。在本文中,我们提出了一个名为FaceNet的系统,该系统直接学习从人脸图像到紧致的欧几里得空间的映射,其中距离直接对应于人脸相似度的度量。一旦产生了这个空间,就可以使用带有FaceNet嵌入作为特征向量的标准技术,轻松实现诸如人脸识别,验证和聚类之类的任务。

    • 我们的方法使用经过深度训练的深度卷积网络来直接优化嵌入本身,而不是像以前的深度学习方法那样使用中间的瓶颈层。为了进行训练,我们使用通过新颖的在线三重态挖掘方法生成的大致对齐的匹配/不匹配面部三元组。我们方法的优点在于更高的表示效率:每张脸仅使用128字节,就可以实现最优方法的脸部识别性能
    • 在广泛使用的LFW(Labeled Faces in the Wild) 数据集上,我们的系统实现了99.63%的新纪录准确率。在YouTube Faces DB上的准确率是95.12%,与两个数据集上的最佳结果[15]相比,我们的系统均将错误率降低了30%。
    • 我们还介绍了谐波嵌入的概念,以及谐波三元组损失,它们描述了面部嵌入(有不同的网络生成)的不同版本,这些版本彼此兼容,并且可以彼此进行直接比较。

1.引言

  • 在本文中我们提出了一个统一的系统,用于人脸验证(是否是同一个人),识别(是不是这个人)和聚类(在这些人脸中找到具有公共特征的人脸)。我们的方法是基于使用深度卷积网络学习每个图像的欧几里得嵌入。对网络进行训练,使得在嵌入空间中的L2距离的平方值直接对应人脸相似度:同一个人脸的距离很小,不同的人脸的距离很大。
  • 一旦已经产生了这种嵌入,那么上述任务就变得很简单:面部验证仅仅只用涉及一个距离阈值;面部识别就变成了一个k-NN分类问题;而人脸聚类就可以使用现成的技术(例如k均值或聚集聚类)来实现。
  • 以前的基于深度网络的人脸识别方法使用一个分类层[15、17],通过一个已知的人脸身份集进行训练,然后采取一个中间的瓶颈层作为一种表示,用于将识别推广到训练中所使用的身份集之外。这种方法的缺点是它的间接性和效率低下:人们必须希望瓶颈层能很好地推广到新的人脸。通过使用瓶颈层,每个人脸的表示大小通常都非常大(尺寸为上千个)。最近的一些工作[15]使用PCA降低了这种尺寸,但这其实是一种线性变换,是可以在网络的一层中轻松了解。
  • 与这些方法相比,FaceNet使用基于LMNN[19]的基于三重态的损失函数直接将其输出训练为紧凑的128-D嵌入。我们的三重态是由两个匹配的脸部缩略图和一个不匹配的脸部缩略图组成,损失的目的是通过一个距离值将匹配对与不匹配对分隔开。缩略图是面部区域的紧凑裁剪,除了缩放和平移之外,没有2D或者3D的对齐。
  • 选择使用的三重态对于获得良好的性能非常重要,并且受课程学习的启发[1],我们提出了一种新颖的在线负样本挖掘策略,该策略可以确保随着网络的训练,三重态的难度不断增加。为了提高聚类的准确性,我们还探索了正样本难例挖掘技术,该技术鼓励将球形聚类用于单人的嵌入。
  • 为了说明我们的方法可以处理那些难以置信的变化问题,请查看图1。显示的是来自PIE[13]的图像对,以前认为这对于人脸验证系统非常困难。
  • 本文的剩余部分的概述如下:在第2节中,我们回顾了该领域的文献。在第3.1节中定义了三元组的损失并且在第3.2节中介绍了我们新颖的三元组选择和训练的过程;在3.3节,我们描述了使用的模型架构。最后,在第4和第5节中,我们介绍了嵌入的一些定量结果,并定性地研究了一些聚类结果。

图1. 照明和姿势不变性。姿势和照明是人脸识别中长期存在的问题。该图显示了FaceNet在不同的姿势和照明组合中同一个人和不同人物的两对面孔之间的输出距离。距离0.0表示是相同的,而4.0表示不同的。您可以看到阈值为1.1时可以正确的分类每一对。

2.相关工作

  • 与其他最近使用深度网络的工作[15,17]相似,我们的方法是一种纯粹的数据驱动方法,可以直接从脸部像素学习其表示。我们没有使用工程化的功能,而是使用带有标签的面部的大型数据集来获得适当的姿态,照明和其他变化条件的方差。
  • 在本文中,我们探索了两种不同的深度网络体系结构,这些体系结构最近已在计算机视觉界获得巨大成功。两者都是深度卷积神经网络[8,11]。第一种架构基于Zeiler&Fergus[22]模型,该模型由卷积,非线性激活,局部响应规范化和最大池化层等多个交错层组成。通过工作[9]的启发,我们另外添加了几个1×1×d1\times1\times d1×1×d的卷积层。第二种架构基于Szegedy等人的Inception模型。最近被用作在ImageNet 2014[16]上表现最好的训练方法中。这些网络使用混合层,这些层并行运行几个不同的卷积和池化层,并将它们的响应串联起来。我们发现,这些模型可以将参数数量减少多达20倍,并且有潜力在具有相同的性能下减少FLOPS的数量。
  • 目前有大量的人脸验证和识别的相关文献。对其进行审查超出了本文的范围,因此我们仅简要讨论最近最相关的工作。
  • [15、17、23]的工作都采用了一个复杂的多级系统,该系统将深度卷积网络的输出与PCA进行降维,将SVM进行分类。
  • Zhenyao等人[23],采用深度网络将人脸“扭曲”为规范的正面视图,然后使用CNN学习将每个人脸归为已知身份的人。对于面部验证,将网络输出上的PCA与一组SVM结合使用。
  • Taiman等人[17]提出了一种多阶段的方法,将面部与通用的3D形状模型对齐。训练了一个多级网络可以对4000多个不同的人执行面部识别任务。作者还对称为Siamese网络进行了实验,在该网络中,他们直接优化了两个面部特征之间的L1距离。它们在LFW上的最佳性能(97.35%)源自三个使用不同的对齐方式和颜色通道的网络的集合。这些网络的预测距离(基于χ2\chi^2χ2核的非线性SVM预测)使用非线性SVM进行组合。
  • Sun等人[14,15]提出了一种紧凑的,因此相对简约的计算机网络。他们使用了这些网络中的25个集合,每个在不同的面部数据集上运行。作者组合了50个响应(选择和翻转),还有PCA和能有效对应于嵌入空间中线性变换的联合贝叶斯模型[2]来达到了在LFW上的最终表现(99.47%[15])。他们的放大不需要明确的2D/3D的对齐。通过使用分类和验证损失的组合来训练网络。验证损失类似于我们采用的三元组损失[12,19],因为它使用相同身份的面孔之间的L2距离最小化,并在不同身份的面孔之间建立了一定的余量。主要区别在于仅比较了成对的图像,而三元组损失则鼓励了相对距离约束。
  • Wang等人探索了与此处使用的损失相似的损失。[18]通过语义和视觉相似性对图像进行排名。

图2.模型结构。我们的网络由一个批输入层和一个深的CNN组成,然后进行L2归一化,从而产生人脸嵌入。之后产生三元组损失。

3. 方法

  • FaceNet使用深度卷积网络。我们讨论了两种不同的核心体系结构。Zeiler&Fergus[22]型网络和最近的Inception[16]型网络。这些网络的详细信息在第3.3节中描述。
  • 给定模型的详细信息,并将其视为黑匣子(参见图2),我们方法的最重要部分在于整个系统的端到端学习。为此,我们采用三元组损失,它直接反映了我们想要在面部验证,识别和聚类中实现的目标。即,我们努力将f(x)f(x)f(x)从图像中xxx嵌入到特征空间Rd\mathbb{R}^dRd中,以使具有相同身份的所有脸部之间的平方距离很小,而与成像条件无关,而不同身份的人脸之间的平方距离很大。
  • 尽管我们没有与其他损失进行比较,如[14]的例子(2)中使用的正样本和负样本对,我们认为三元组损失更适合面部验证。原因是[14]中的损失鼓励将一个人的所有人脸都投射到嵌入空间的一个点上。然而,三元组损失试图在从一个人到所有的其他面孔之间留出一个边距。这使得一个人的人脸就可以存在于多种样本中,同时加强了距离,因此可以与其他人的人脸进行区分。
  • 以下部分描述了这种三元组损失以及如何有效的大规模学习。

图3.三元组损失使具有相同身份的锚点和正样本之间的距离最小化,并且使具有不同身份的锚点和负样本之间的距离最大化。

3.1.三元组损失

  • 使用f(x)∈Rdf(x)\in\mathbb{R}^df(x)∈Rd来表示嵌入。它将图像xxx嵌入一个ddd维的欧几里得空间。此外,我们将这种嵌入限制在ddd维的超球面上,即∣∣f(x)∣∣2=1||f(x)||_2=1∣∣f(x)∣∣2​=1。这个损失在[19]中的以最近邻居分类的情况下被推荐使用。在这里我们要确保某个特定的人的图片xiax_i^axia​(锚点图)与其他的相同人的图片xipx_i^pxip​(正样本)的距离比其他人的任意图片xinx_i^nxin​(负样本)的距离要近。就如图3所示。
  • 因此我们想要,
    ∣∣f(xia)−f(xip)∣∣22+α<∣∣f(xia)−f(xin)∣∣22,(1)||f(x_i^a)-f(x_i^p)||_2^2+\alpha<||f(x_i^a)-f(x_i^n)||_2^2 ,(1)∣∣f(xia​)−f(xip​)∣∣22​+α<∣∣f(xia​)−f(xin​)∣∣22​,(1)
    ∀(f(xia),f(xip),f(xin))∈τ.(2)\forall(f(x_i^a),f(x_i^p),f(x_i^n) )\in \tau. \space(2)∀(f(xia​),f(xip​),f(xin​))∈τ. (2)
    其中,α\alphaα是在正负样本之间留出的边距。τ\tauτ是训练集中所有可能的三元组的集合,并且其基数是NNN。
  • 那么最小化的损失为L=L=L=
    ∑iN[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+.(3)\sum_i^N[||f(x_i^a)-f(x_i^p)||_2^2-||f(x_i^a)-f(x_i^n)||_2^2+\alpha]_+.\space(3)i∑N​[∣∣f(xia​)−f(xip​)∣∣22​−∣∣f(xia​)−f(xin​)∣∣22​+α]+​. (3)
  • 生成所有可能的三元组将导致有很多三元组都满足(1)中的约束。这些三元组队训练毫无帮助而且还会降低收敛的速度,因为他们仍会通过网络传递。因此选择可以帮助提高模型性能的难例三元组十分重要。下一节将会讨论三元组的不同选择方法。

3.2.三元组的选择

  • 为了确保快速收敛,选择违反约束(1)的三元组至关重要。这意味着,给定xiax_i^axia​,我们要选择一个xipx_i^pxip​(正的难样本)满足argmaxxip∣∣f(xia)−f(xip)∣∣22argmax_{x_i^p}||f(x_i^a)-f(x_i^p)||_2^2argmaxxip​​∣∣f(xia​)−f(xip​)∣∣22​,同理,我们还要选择出一个xinx_i^nxin​(负的难样本)满足argminxin∣∣f(xia)−f(xin)∣∣22argmin_{x_i^n}||f(x_i^a)-f(x_i^n)||_2^2argminxin​​∣∣f(xia​)−f(xin​)∣∣22​。
  • 在整个训练集上计算argminargminargmin和argmaxargmaxargmax是不可行的。此外,这还会导致很难训练,因为标签错误和成像不良的面部图像将导致正的难样本和负的难样本。然而有两个显而易见的选择可以避免此问题的产生。
    • 使用最新的神经网络保存点在数据子集上计算argminargminargmin和argmaxargmaxargmax,每隔nnn步离线生成三元组。
    • 在线生成三元组,这可以通过小批量的数据中选择正的难样本和负的难样本来完成。
  • 在这,我们专注于在线生成,并以几千个样例的顺序来使用大量的小批次,并且仅在小批次内计算argminargminargmin和argmaxargmaxargmax。
  • 为了获得有意义的锚点距离,我们需要确保在每个小批次数据中都至少有一定量的关于同一个人的样例。在我们的实验中,我们对训练数据进行采样,以便每个小批次中的每个身份选择大约40张人脸。此外,将随机采样的负样本人脸添加到每个小批次中。
  • 我们没有选择最难的正样本,而是在小批次中使用所有的锚定正样本对,同时仍选择了负的难样本。我们没有将小批次中的难的锚定正样本对于所有的锚定正样本对进行逐步的比较,但是在实践中我们发现,在训练的一开始使用所有的锚定正样本更稳定,收敛的速度也稍微快点。
  • 我们还结合了在线生成方式探索了三元组的离线生成方式,它可能允许使用较小的批次量,但是实验还尚无定论。
  • 在实践中选择最难的负样本可能会导致训练初期的局部极小值下降,特别是会导致模型崩溃(即f(x)=0f(x)=0f(x)=0)。为了减少这种情况,就要选择xinx_i^nxin​满足:
    ∣∣f(xia)−f(xip)∣∣22<∣∣f(xia)−f(xin)∣∣22.(4)||f(x_i^a)-f(x_i^p)||_2^2<||f(x_i^a)-f(x_i^n)||_2^2.\space(4)∣∣f(xia​)−f(xip​)∣∣22​<∣∣f(xia​)−f(xin​)∣∣22​. (4)
    我们称这些负样本为半难的,应为他们比正样本离锚更远,但是仍然很难,因为它们的平方距离接近于锚定正样本的距离,这些负样本与锚定正样本之间的差仍在边距α\alphaα内。
  • 如上所述,正确的三元组选择对于快速收敛至关重要。一方面,我们希望使用小批次,因为这些小批次的数据能够在随机梯度下降(SGD)[20]提高收敛性。在另一方面,实现细节使得数十到数百个实例批次效率更高。但是关于批次大小的主要限制是我们从小批次中选择强相关三元组的方式。在大多数实验中,我们使用的批次大小约为1800个样例。

表1.NN1。该表显示了我们基于Zeiler&Fergus[22]的模型的结构,该模型具有[9]启发的1×11\times11×1卷积。输入和输出大小以rows×cols×#filtersrows\times cols\times \#filtersrows×cols×#filters描述。卷积核大小为rows×colsrows\times colsrows×cols,步长和最大池化输出层[6]的大小为p=2p=2p=2

3.3.深度卷积网络

  • 在我们所有的实验中,我们使用带有标准的反向传播[8,11]和AdaGrad[5]的随机梯度下降算法(SGD)训练CNN。在大多数实验中,我们从0.05的学习率开始,我们将其降低以最终确定模型。与[16]相似,这些模块是从随机初始化,并在CPU集群上训练了1000至2000个小时。训练500小时后,损失的减少(以及准确性的提高)会大大减慢,但是额外的训练仍可以显著提高性能,并且我们的边距α\alphaα设置为0.2。
  • 我们使用了两种类型的架构,并在实验部分中更详细地探讨了它们之间的取舍。它们的实际差异在于参数以及FLOPS的差异。最佳模型可能会因应用程序而异。例如,在数据中心运行的模型可以具有许多参数并需要大量的FLOPS,而在手机上运行的模型则需要具有很少的参数,以便可以放入内存中。我们所有的模型都是用整流线性单位作为非线性激活函数。
  • 第一类如表1所示,正如[9]中建议的一样,我们在Zeiler&Fergus[22]架构的标准卷积层之间添加了1×1×d1\times1\times d1×1×d的卷积层,形成了一个具有22层深度的模型。它总共有1.4亿个参数,每个图像需要将近16亿个FLOPS
  • 我们使用的第二类是基于GoogleNet风格的Inception模型[16]。这些模型的参数减少了20倍(大约6.6M~7.5M),FLOPS减少了5倍(介于500M~1.6B之间)。其中一些模型的尺寸大大减少(深度和过滤器的数量),因此可以在手机上运行。一种是NNS1有26M个参数,每个图像仅需220M个FLOPS。另一个是NNS2,具有4.3M个参数和20MFLOPS。表2详细描述了我们最大的网络NN2NN3的架构相同,但是输入尺寸缩小为160×160160\times160160×160。NN4的输入大小仅为96×9696\times9696×96,从而大大降低了对CPU的要求(285M的FLOPSNN2的1.6B)。除了减小输入大小外,它还没有在较高的层中使用5×55\times55×5的卷积核,因为在那个时候的接收域已经变得很小了。之后我们发现删除5×55\times55×5的卷积核只会对准确度造成很小的影响。图4比较了我们所有的模型。

表2.NN2.初试版本的详细信息。该模型与[16]中描述的模型几乎一致。这两者最主要的区别是在指定的地方使用的是L2池化而不是使用最大池化(m),例如使用L2范数而不是采用空间最大值进行计算。池化的大小始终为3×33\times33×3(除了最终的平均池化层外),并且与每个Inception模块内部的卷积模块并行。如果合并后维度减少,则用ppp表示。然后将1×11\times11×1、3×33\times33×3和5×55\times55×5池化联合起来获得最终的输出。

图4.FLOPS与精度之间的权衡。图片显示了FLOPS与精度之间在各种不同模型尺寸和体系结构之间的权衡。重点介绍了我们在实验中关注的四个模型。

4.数据集和评估

  • 我们在四个数据集上评估我们的方法,并在LFW(Labelled Faces in the Wild)和YouTube Faces里,在人脸验证任务中评估了我们的方法。即给定一对两个两部图像,L2距离的平方阈值D(xi,xj)D(x_i,x_j)D(xi​,xj​)用于确定相同和不同的分类。所有属于同一人的脸部图像对都用PsameP_{same}Psame​表示,而不同人的脸部图像对使用PdiffP_{diff}Pdiff​表示。
  • 我们将所有真实正确接受的集合定义为
    TA(d)={(i,j)∈Psame,withD(xi,xj)≤d}.(5)TA(d)=\{(i,j)\in P_{same},with\space D(x_i,x_j) \le d\}.\space (5)TA(d)={(i,j)∈Psame​,with D(xi​,xj​)≤d}. (5)
    这些是被阈值ddd正确分类为相同的人脸图像对(i,j)(i,j)(i,j),相似地
    FA(d)={(i,j)∈Pdiff,withD(xi,xj)≤d}.(6)FA(d)=\{(i,j)\in P_{diff},with\space D(x_i,x_j) \le d\}.\space (6)FA(d)={(i,j)∈Pdiff​,with D(xi​,xj​)≤d}. (6)
    是被错误分类为相同(错误接受)的所有人脸图像对的集合。
  • 然后我们将给定面部距离ddd的确认率VAL(d) 和错误接受率FAR(d) 定义为
    VAL(d)=∣TA(d)∣∣Psame∣,FAR(d)=∣FA(d)∣∣Pdiff∣.(7)VAL(d)=\frac{|TA(d)|}{|P_{same}|} ,FAR(d)=\frac{|FA(d)|}{|P_{diff}|}.\space (7)VAL(d)=∣Psame​∣∣TA(d)∣​,FAR(d)=∣Pdiff​∣∣FA(d)∣​. (7)

4.1.保留测试集

  • 我们保留了大约一百万张图像的保留集,该图像集与我们的训练集具有相同的分布,但是身份却互相分离。为了进行评估,我们将其分为5个不相交的大小为200k的图像集。然后在100k×\times× 100k图像对上计算FARVAL,在五个分割的数据集中报告了标准错误。

4.2.个人照片

  • 这是一个和我们训练集具有相同分布的测试集,但是已经过手工验证,具有非常干净的标签。它由三个个人照片集组成,总共约有12k张图像。我们在所有12k的平方图像对上计算FARVAL

4.3.学术数据集

  • LFW是用于面部验证的测试数据集[7]。对于不受限制的,带标签的外部数据,我们遵循标准协议,并报告均值分类的准确性以及均值的标志误差。
  • Youtube Faces DB[21]是一个新的数据集,在人脸识别社区[17,15]中很受欢迎。设置与LFW类似,但不是验证一对图像,而是一对视频。

5.实验

  • 除非特殊说明,否则我们将使用100M~200M个训练面部缩略图,其中包含大约8M个不同的人。在每个图像上运行一个面部检测器,并在每个面部周围生成一个紧凑的边界框。将这些脸部缩略图调整为相应网络的输入大小。在我们的实验中,输入大小从96×9696\times9696×96像素到224×224224\times224224×224像素不等。

5.1.计算精度的权衡

  • 在深入探讨具体实验细节之前,我们将讨论精度与特定模型所需的FLOPS数量之间的权衡,图4显示了xxx轴上的FLOPS,以及我们在第4.2节中为用户标记的测试数据集的0.001错误接受率(FAR)的准确性。有趣的是,模型所需的计算与所达到的精度之间存在很强的相关性。该图突出显示了我们在实验中更详细讨论的五个模型(NN1,NN2,NN3,NNS1,NNS2)。
  • 我们还研究了有关模型参数数量的精度权衡。但是,在这种情况下图片并不清晰。例如,基于Inception的模型NN2可以达到与NN1相当的性能,但是只有20%的参数。FLOPS的数量是可比的。显然,如果进一步减少参数数量,则性能可能会下降。就像Inception[16]在这种情况下所做的一样,那些其他模型体系结构可能允许进一步降低而不损失准确性。

图5.网络架构。此图显示了4.2节中我们的个人照片测试集上四种不同模型的完整ROC。10E-4FAR处的急剧下降是因为真实标签的噪声。按性能顺序排列的模型为:NN2:224×224224\times224224×224输入基于Inception的模型;NN1:基于Zeiler&Fergus的网络,具有1×11\times11×1的卷积核;NNS1:只有220MFLOPS的小型Inception风格模型;NNS2:仅有20MFLOPS的微型Inception模型。

表3.网络架构。该表比较了我们的模型架构在坚持测试集上的性能(请参见第4.1节)。表中显示的是在错误接受率为10E-3的情况下,VAL的平均验证率。还显示了五个分割的测试的平均值的标准误差。

5.2.CNN模型的影响

  • 现在,我们详细讨论四个选定模型的性能。一方面,我们拥有传统的基于Zeiler&Fergus的架构,具有1×11\times11×1的卷积核[22,9](见表1)。另一方面,我们有基于[16]的模型,可以极大地减小模型的大小。总体而言,在最终性能方面,两种架构的顶级模型均具有可比性。但是,我们基于Inception的某些模型(例如NN3)仍然可以实现良好的性能,同时显著减少FLOPS和模型的大小。
  • 图5显示了在我们的个人图像集上的详细评估信息。尽管最大的模型与微型NNS2相比在准确性上有了极大的提高,但是后者可以在手机上以每张图像只需30ms的速度运行,并且仍然足够准确以用于人脸聚类。当FAR<10−4<10^{-4}<10−4时,ROC急剧下降表明测试数据的真实性中带有噪声标签。在错误接受率极低的情况下,一张贴错标签的图像可能会对曲线产生重大影响。

表4.图像质量。左表显示了在JEPG质量不同的情况下,以10E-3精度对验证率的影响。右侧的表显示了以像素为单位的图像大小如何在10E-3的精度下影响验证率。这些实验结果是在我们从保留的测试集中分割出的第一个测试集上使用NN1得出的。

5.3.对图像质量的敏感性

  • 表4显示了我们模型在各种图像尺寸上的鲁棒性。该网络在JEPG压缩方面具有令人惊讶的强大表现,并且在JEPG质量为20时性能非常好。对于尺寸小于120×120120\times120120×120像素的脸部缩略图,性能下降非常小,甚至在80×8080\times8080×80像素时,它也表现出可接受的性能。同时值得注意的是,网络是在220×220220\times220220×220输入图像上训练的。使用较低分辨率的人脸图像进行训练可以进一步改善此范围。

表5.嵌入维度。该表在第4.1节的保留集上比较了模型NN1的嵌入维度的影响。除了在10E-3处的VAL外,我们还显示了在五个分割的数据集中计算出的平均值的标准误差。

5.4.嵌入维度

  • 除了表5中列出的维度比较,我们还探索了所有的嵌入维度,并为所有试验选择了128个嵌入维度。一般来说,较大的嵌入至少能与较小的嵌入表现相同,但是,较大的嵌入可能需要更多的训练才能达到相同的准确性。也就是说,表5中展示的各维度的区别实际上是无关紧要的。
  • 应该注意的是,在训练过程中使用的是128维浮点向量,但是可以将其量化为128字节而不会损失准确性。因此,每个人脸都由128维字节向量紧凑地表示,这对于大规模聚类和识别来说是比较理想的。较小的嵌入虽然可能会降低准确性,但是其可以在移动设备上使用。

表6.训练数据大小。这个表比较了使用96×9696\times9696×96像素输入的较小模型训练700小时后的性能。模型架构类似于NN2,但在Inception模块中没有5×55\times55×5卷积。

5.5.训练数据的数量

  • 表6显示了大量数据的影响。由于时间限制,该评估是在较小的模型上进行的;在较大模型上的影响可能更大。显然,使用上千万个示例可以显著提高在第4.2节中提到的个人照片测试集上的准确性。与仅数百万张图像相比,错误的相对减少率是60%60\%60%。使用另一个数量级的图像时,更多的图像(数亿)仍然可以带来很小的提升,但是这种改善逐渐减弱,

图6.LFW错误。这显示了在LFW上错误分类的所有图像对。此处显示的13个错误拒绝中只有8个是实际错误,另外的5个在LFW中是被错误的贴了标签。

5.6.在LFW上的表现

  • 我们使用标准协议在LFW上对模型进行评估,以获取不受限制的,带标签的外部数据。有九个被分割的训练用于选择L2距离阈值。然后在第十次分割的训练中进行分类(相同或不同)。除了第八次被分割的训练中最佳的阈值是1.256以外,在其他的所有测试中的最佳阈值都是1.242。
  • 我们的模型有两种评估模式:
    1. FLW提供的中心裁剪缩略图。
    2. 在提供的LFW缩略图上运行专有的面部检测器(类似于Picasa[3])。如果无法对齐面部(这发生在两个图像中),则使用LFW对齐。
  • 图6概述了所有的失败案例。它顶部显示的是错误接受案例,在底部显示的是错误拒接的案例。当使用1中的中心裁剪图时,我们实现了98.87%±0.1598.87\%\pm0.1598.87%±0.15的分类精度,而使用2中的额外的面部对齐时,达到了标准差均值的99.63%±0.0999.63\%\pm0.0999.63%±0.09打破了记录。这将[17]中使用的DeepFace的错误减少了7倍以上,将[15]中使用的最新的DeepId2+的错误减少了30%30\%30%。这就是NN1模型的性能,但即使是小的多的NN3所获得的的性能在统计学上也没有显著差异。

5.7.在Youtube Faces DB上的表现

  • 我们使用面部检测器在每个视频中检测到的前100帧所有人脸对的平均相似度。这使我们的分类器精度为95.12%±0.3995.12\%\pm0.3995.12%±0.39。使用前1000帧可以获得95.18%95.18\%95.18%。与[17]中视频每100帧的评估值为91.4%91.4\%91.4%相比,我们将错误率降低了将近一半。DeepId2+实现的93.2%93.2\%93.2%与我们在LFW上的方法相比,我们的将错误率减少了30%30\%30%。

图7.人脸聚类。该图显示的是一个用户的示例集群。所有属于同一个人的照片都集中在一起。

5.8.人脸聚类

  • 我们紧凑的嵌入使其可用于将用户的个人照片聚集到具有相同身份的人群中。与纯验证任务相比,由聚类的面孔施加的约束能带来十分令人惊讶的结果。图7显示了使用聚类生成的用户个人照片集中的一个聚类。它清楚地展示了遮挡,照明,姿势甚至年龄的影响对结果的不改变性。

图8.谐波嵌入兼容性。这些ROC曲线显示的NN2的谐波嵌入与NN1的嵌入之间的兼容性,NN2是一种改进的模型,其性能比NN1更好,当将NN1生成的嵌入与NN2生成的谐波嵌入进行比较时,我们可以看到两者之间的兼容性。实际上,混合模式性仍要优于NN1

6.总结

  • 我们提供了一种方法可以直接学习在人脸验证任务中欧几里得空间的嵌入。这使其从使用CNN瓶颈层或其他后期处理(例如,多个模型和PCA的连接以及SVM分类。)的其他方法[15,17]中脱颖而出。我们的端到端训练不仅简化了设置,还表明了直接优化与任务相关的损失可以提高性能。
  • 我们模型的另一个优势在于,它仅需最小的对齐(面部区域紧密修剪)。例如,[17]执行复杂的3D对齐。我们还尝试了相似度转换对齐方式,但注意这实际上可以稍微改善性能。尚不清楚这些额外的复杂性是否值得。
  • 未来的工作将集中于更好地了解错误情况,进一步改进模型,以及减小模型的大小并减少对CPU的需求。我们还将研究改善当前极长训练时间的方法,例如使用小批次,离线和在线的难的正负样本挖掘的学习变化。

7.附录:谐波嵌入

  • 在本节中,我们介绍谐波嵌入的概念。这样,我们表示了一组嵌入,它们是由不同的模型v1和v2生成的,但是是可以相互比较的。
  • 这种兼容性极大地简化了升级路径。例如,在跨大量图像计算嵌入v1并推出新的嵌入模型v2的情况下,这种兼容性可确保平滑过渡,而无需担心版本不兼容。图8显示了我们3G数据集的结果。可以看到改进的模型NN2明显优于NN1,而NN2嵌入与NN1的嵌入相差不大。

图9.谐波嵌入的学习。为了学习谐波嵌入,我们生成了三元组,将v1嵌入与正在训练的v2嵌入混合在一起。从v1和v2嵌入的整个集合中选择半难负样本。

7.1.谐波三元组损失

  • 为了学习谐波嵌入,我们将v1的嵌入与正在学习的嵌入v2混合在一起。这是三元组损失内完成的,并导致额外生成的三元组提升了不同嵌入版本之间的兼容性。图9可视化了导致三元组损失的三元组的不同组合。
  • 我们从独立训练的NN2中初始化了v2嵌入,并通过兼容性的三元组损失,从随机初始化中重新训练了最后一层。首先我们仅对最后一层进行重新训练,然后我们继续用谐波损失训练整个v2网络。
  • 图10显示了这种兼容性在实践中如何工作的可能解释,绝大多数v2嵌入都可以嵌入到相应的v1嵌入附近,但是,放置不正确的v1嵌入可能会受到轻微的干扰,以使他们在嵌入空间中的新位置可以提高验证准确性。

图10.谐波嵌入空间。该可视化图描绘了谐波嵌入如何能提高验证准确性,同时又保持与不太精确的嵌入的兼容性的可能解释。在这种情况下,存在一个错误分类的人脸,其嵌入被扰乱到v2中的“正确”位置。

7.2.总结

  • 这些都是非常有趣的发现,而且效果如此之好,这令人有些惊讶。未来的工作可以探索这个想法可以有多大的扩展。大概在v2嵌入相对于v1可以改进的同时仍兼容的情况下,存在一个限制。另外,训练一个可以在手机上运行并与较大的服务器端模型兼容的小型网络将很有趣。

致谢

  • 我们要感谢Johannes Steffens的讨论和对人脸识别的深刻见解,以及Christian Szegedy提供的新网络架构,如[16],并讨论了网络设计选择。同时,我们也要感谢DistBelief[4]小组的支持,尤其是对Rajat Monga的帮助,以帮助他们建立有效的训练计划。
  • 同样,如果没有Chuck RosenbergHartwig AdamSimon Han的支持,我们将不可能完成我们的工作。

参考文献

[1] Y. Bengio, J. Louradour, R. Collobert, and J. Weston. Curriculum learning. In Proc. of ICML, New York, NY, USA,2009. 2
[2] D. Chen, X. Cao, L. Wang, F. Wen, and J. Sun. Bayesian face revisited: A joint formulation. In Proc. ECCV, 2012. 2
[3] D. Chen, S. Ren, Y. Wei, X. Cao, and J. Sun. Joint cascade face detection and alignment. In Proc. ECCV, 2014. 7
[4] J. Dean, G. Corrado, R. Monga, K. Chen, M. Devin, M. Mao, M. Ranzato, A. Senior, P. Tucker, K. Yang, Q. V. Le, and A. Y. Ng. Large scale distributed deep networks. In P. Bartlett, F. Pereira, C. Burges, L. Bottou, and K. Weinberger, editors, NIPS, pages 1232–1240. 2012. 10
[5] J. Duchi, E. Hazan, and Y. Singer. Adaptive subgradient methods for online learning and stochastic optimization. J. Mach. Learn. Res., 12:2121–2159, July 2011. 4
[6] I. J. Goodfellow, D. Warde-farley, M. Mirza, A. Courville, and Y. Bengio. Maxout networks. In In ICML, 2013. 4
[7] G. B. Huang, M. Ramesh, T. Berg, and E. Learned-Miller. Labeled faces in the wild: A database for studying face recognition in unconstrained environments. Technical Report 07-49, University of Massachusetts, Amherst, October 2007. 5
[8] Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. Backpropagation applied to handwritten zip code recognition. Neural Computation, 1(4):541–551, Dec. 1989. 2, 4
[9] M. Lin, Q. Chen, and S. Yan. Network in network. CoRR, abs/1312.4400, 2013. 2, 4, 6
[10] C. Lu and X. Tang. Surpassing human-level face verification performance on LFW with gaussianface. CoRR, abs/1404.3840, 2014. 1
[11] D. E. Rumelhart, G. E. Hinton, and R. J. Williams. Learning representations by back-propagating errors. Nature, 1986. 2, 4
[12] M. Schultz and T. Joachims. Learning a distance metric from relative comparisons. In S. Thrun, L. Saul, and B. Schölkopf, editors, NIPS, pages 41–48. MIT Press, 2004. 2
[13] T. Sim, S. Baker, and M. Bsat. The CMU pose, illumination, and expression (PIE) database. In In Proc. FG, 2002. 2
[14] Y. Sun, X. Wang, and X. Tang. Deep learning face representation by joint identification-verification. CoRR, abs/1406.4773, 2014. 1, 2, 3
[15] Y. Sun, X. Wang, and X. Tang. Deeply learned face representations are sparse, selective, and robust. CoRR, abs/1412.1265, 2014. 1, 2, 5, 8
[16] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. CoRR, abs/1409.4842, 2014. 2, 3, 4, 5, 6, 10
[17] Y. Taigman, M. Yang, M. Ranzato, and L. Wolf. Deepface: Closing the gap to human-level performance in face verification. In IEEE Conf. on CVPR, 2014. 1, 2, 5, 7, 8, 9
[18] J. Wang, Y. Song, T. Leung, C. Rosenberg, J. Wang, J. Philbin, B. Chen, and Y. Wu. Learning fine-grained image similarity with deep ranking. CoRR, abs/1404.4661, 2014. 2
[19] K. Q. Weinberger, J. Blitzer, and L. K. Saul. Distance metric learning for large margin nearest neighbor classification. In NIPS. MIT Press, 2006. 2, 3
[20] D. R. Wilson and T. R. Martinez. The general inefficiency of batch training for gradient descent learning. Neural Networks, 16(10):1429–1451, 2003. 4
[21] L. Wolf, T. Hassner, and I. Maoz. Face recognition in unconstrained videos with matched background similarity. In IEEE Conf. on CVPR, 2011. 5
[22] M. D. Zeiler and R. Fergus. Visualizing and understanding convolutional networks. CoRR, abs/1311.2901, 2013. 2, 3, 4, 6
[23] Z. Zhu, P. Luo, X. Wang, and X. Tang. Recover canonicalview faces in the wild with deep neural networks. CoRR, abs/1404.3543, 2014. 2

FaceNet:人脸识别和聚类的统一嵌入相关推荐

  1. facenet 人脸识别原理理解(三)

    在前两篇文章已经介绍了facenet人脸识别代码的使用和具体操作,但相关的原理还是没有说,这篇文章进行简单的讲解一下. 1. 原理 在人脸识别中,当我们需要加在图片数据库入新的一张人脸图片时,是怎么做 ...

  2. 基于facenet人脸识别设计文档

    基于facenet人脸识别设计文档 一.概述 在Ubuntu系统上,创建人脸库搭建基于facenet的人脸识别库,本文采用Python从百度下载明星照片,通过facenet的检测对齐人脸函数制作人脸库 ...

  3. facenet 人脸识别库的搭建和使用方法(二)

    上一篇文章介绍了facenet人脸识别的源码使用,这篇文章就来搭建自己的人脸识别库. 1. 制作自己的人脸识别库 1.1 准备数据集 通过百度图片爬取一些明星图片为例,这里准备了一个DownloadI ...

  4. 聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台

    聪明的人脸识别3--Pytorch 搭建自己的Facenet人脸识别平台 学习前言 什么是Facenet 源码下载 Facenet的实现思路 一.预测部分 1.主干网络介绍 2.根据初步特征获得长度为 ...

  5. facenet 人脸识别源码的使用方法(一)

    1. 开发环境 OS:        ubuntu16.04 tensorflow版本:1.12.0 python版本:    3.6.7 2. 下载源码到本地 facenet官方github: ht ...

  6. 聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台

    聪明的人脸识别1--Keras 搭建自己的Facenet人脸识别平台 学习前言 什么是Facenet 源码下载 Facenet的实现思路 一.预测部分 1.主干网络介绍 2.根据初步特征获得长度为12 ...

  7. matlab人脸识别样本库建立,facenet 人脸识别(二)——创建人脸库搭建人脸识别系统...

    搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...

  8. MTCNN人脸检测与对齐和FaceNet人脸识别

    一 MTCNN算法结构 MTCNN算法是一种基于深度学习的人脸检测和人脸对齐方法,它可以同时完成人脸检测和人脸对齐的任务,相比于传统的算法,它的性能更好,检测速度更快. MTCNN算法包含三个子网络: ...

  9. facenet 人脸识别(一)

    前言 已完成TensorFlow Object Detection API环境搭建,具体搭建过程请参照: 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系 ...

最新文章

  1. 日常工作问题的处理流程
  2. Texture Inspection 纹理检验halcon算子,持续更新
  3. STM32 MDK编译后生成的 .map文件深入分析
  4. rstudio python_Rstudio支持可视化的Markdown编辑了?
  5. 修复共享服务器,【转】Exadata存储服务器的紧急修复(rescue)经验分享
  6. 力扣-1925 统计平方和三元组的数目
  7. SAP BASIS SCC4 事务代码在项目实践中的使用初探
  8. 用手机otg方式给U盘制作一个Win10PE启动U盘,手机加U盘协助电脑重装系统
  9. 苹果iPad手机如何无线投屏电脑使用教程
  10. 导出qq群成员信息,并找出谁没进群或谁没改昵称
  11. 在线IDE的原理及设计思路 以Java为例
  12. 对马科维兹投资组合理论的总结
  13. 常用广告过滤规则整理
  14. FME 2017.0 的新特性(预览版发布)
  15. hive中NULL值问题
  16. 金融工程学(三):远期和期货的定价
  17. 豆制品加工黄浆水污水处理设备工艺特色
  18. 7-1 用格里高利公式求给定精度的PI值
  19. 今年的奥运会延期至2021年夏季举行,盘点一下历届奥运会数据
  20. 添加遮罩层,实现点击穿透,实现遮罩层按钮点击,遮罩层下层点击事件

热门文章

  1. Kinect开发(二)——注意项点,影像显示
  2. 安卓开发——tcp连接
  3. 基于java的springboot疫情疫苗预约系统毕业设计springboot开题报告
  4. java上传文件限速_java HttpClient 上传限速(避免宽带占用过高)
  5. 页面卡顿的原因及排查
  6. mongodb修改一列的值作为另一列的值/mongodb常用js、常用语句留底
  7. 微信软件服务器在那个国家,安道尔究竟是什么地方?为什么2000万中国人微信地址都选在安道尔...
  8. ieee access投稿过程
  9. IO-Link和CC-Link的区别是什么?
  10. VMware虚拟机安装Windows11