【深度学习】triplet loss

论文题目:FaceNet: A Unified Embedding for Face Recognition and Clustering
中文翻译:FaceNet:人脸识别和聚类的统一嵌入算法
论文地址:https://arxiv.org/pdf/1503.03832.pdf
发布时间:2015

0,摘要
    尽管最近在人脸识别领域取得了重大进展[10,14,15,17],采用当前的方法高效地实现人脸识别和验证产生了严重挑战。本文中我们提出一个系统,称为FaceNet,直接将人脸图像映射到紧凑地欧几里得空间中,其中距离直接反映出人脸地相似程度。一旦产生这个空间,像人脸识别、验证和聚类何样的任务可以很容易采用FaceNet嵌入层作为特征向量地标准技术来实现。
    我们的方法是用一个经过训练的深度卷积网络来直接优化嵌入层,而不是像以前的深度学习方法使用一个中间的瓶颈层。训练中,我们使用新的实时的三元组优化方法匹配/非匹配人脸面部小块的三元组。我们方法的优点是更好的检测效率:采用128字节的特征向量实现最先进的人脸识别性能。
    广泛采用Labeled Faces in the Wild (LFW) 数据集,我们的系统达到了99.63%的新纪录精度。在YouTube Faces数据集上实现95.12%。我们的系统将两个数据集的错误率与最佳公布结果[15]相比降低了30%。
    我们还引入了harmonic潜入层和harmonic损失的概念,它表示不同的人脸嵌入层(不同的网路产生),相互兼容彼此并彼此之间直接比较。

1,引言
    在本文中,我们提出一个统一的人脸验证系统(这个同一个人吗?)实现识别(这是谁)和聚类(在这些人脸中找到相同的人)。我们的方法是对每张图片使用深度卷积网络学习一个欧几里得潜入层。训练网络使嵌入层的L2距离直接对应人脸相似度:同一个人脸距离小,不同人脸距离大。
在这里插入图片描述
    图1所示。光照和姿态不变性。光照和姿态是人脸识别长期存在的问题。这张图片表示同一个人和不同人不同姿态和光照组合的面部对之间的FaceNet输出距离。距离0.0表示面部相同,距离4.0表示相反的谱,两个不同的恒等式。你可以使用阈值1.1正确将人脸对分开。
    一旦产生嵌入层,那么上述任务就变得很直接:人脸识别就是对嵌入层点之间的距离进行阈值化;识别就变成一个KNN分类问题;聚类可以采用现有的技术(如KMeans或agglomerative聚类)来实现。
    以前基于深度学习的人脸识别方法是在一组已知的人脸识别使用一个分类层[15,17]进行训练,然后使用中间瓶颈层作为表示方法,用于训练中使用识别集之外的泛化识别。这种方法的缺点是不直接和低效率:我们必须希望中间瓶颈层能很好的推广到新的人脸上;通过中间瓶颈层表示每个人脸的特征向量非常大(1000维)。最近的一些工作[15]已经使用PCA降低了这个维度,但这是一个线性变换,可以很容易地在卷积网络的某个学习到。
    对比这些方法,FaceNet直接使用基于LMNN[19]的一个三元组损失函数将训练输出训练成一个128维向量。我们的三元组损失由两个匹配人脸区域和一个非匹配人脸区域组成,损失的目的是将正的一对从福德一对中分离出一定的距离。人脸区域缩略图是紧凑的面部区域,没有2D或3D对齐,除了进行缩放和平移。
    我们的方法可以处理的令人难以执行的可变一个例子,请参考图1。这里显示来自PIE[13]图图像对,这些图像以前被认为是人脸验证系统中非常困难的。
    下面是其余部分的概述如下:第二部分我们回顾这一领域的文献;第3.1节定义三元组损失,第3.2节我们描述三元组选择和训练程序,第3.3节我们描述所使用的模型架构。最后在第4和第5部分,我们给出了一些关于嵌入层的定量结果,并进行探讨了一些聚类结果。

2,相关工作

    类似于最近其他深度学习的研究[15,17],我们的方法是一个纯粹数据驱动的方法,直接从人脸面部像素学习其表征。而不是使用设计的特征,我们采用一个带标签人脸的大规模数据集来获得适当的不变性,以满足姿态、光照和其他变化条件。

    本文中,我们探讨两种不同的深度网络架构,他们最近在计算机领域获得了巨大的成功。两者都是深度卷积网络[8,11]。第一个架构基于Zeiler&Fergus[22]模型,由多个交错曾组成,包括卷积、非线性激活、局部相应规范化和最大池化层。受[9]的启发,我们又添加了几个1x1xd的卷积层。第二个架构基于Sezegedy等人的Inception模型,该模型最近被用作ImageNet2014[6]的获胜方法。使用这些混合层,这些混合层并行运行几个不同的卷积和池化层,并连接他们的相应。我们发现这些模型可以减少参数的数量多大20倍,并可能减少FLOPS需要的计算性能。

    这里有大量的人脸验证和识别工作。回顾它是超出了文本的范围。所以我们将只简要讨论最近的相关工作。

    [15,17,23]的工作都采用了一个复杂的多阶段系统,它将深度卷积网络的输出与主成分分析PCA和支持向量机SVM结合起来分别进行降维和分类。

    Zhenyao等[23]采用深度网络将人脸“扭曲”成标准的正面视图,然后学习CNN把每一张人脸都归为一个已知的身份。对于人脸验证,使用了与支持向量机集成在一起的网络输出的PCA。

    Taigman等人[17]提出一个多阶段方法,将人脸与通用3D模型进行对齐。一个多分类网络训练执行超过4000个身份的人脸识别任务。作者还进行Siamese网络实验,直接优化L1距离。在LFW上最佳表现(97.35%)源于三个使用不同对齐的颜色通道的网络。这些网络的预测使用了非线性的SVM(非线性SVM基于平方核函数).

    Sun等人[14,15]提出了一个紧凑的网络,因此计算相当轻量。他们集成了25个这样的网络,每个都在不同的人脸贴片上工作。他们最终在LFW(99.47%)[15]上的最终表现,作者还结合50个响应(常规和旋转)。利用主成分分析和联合贝叶斯模型[2]有效将嵌入空间进行先行变换。他们的方法不需要显示的2D/3D对齐。使用分类和验证损失相结合对网路进行训练。他们的验证损失与我们采用的三元组损失十分相似[12,19],在相同身份的人脸和最小化L2距离,并在不同身份的人脸距离强化差值。主要的不同在于比较图像对,三元组损失强调相对距离的限制。

    Wang等人[18]研究了类似的损失函数,即根据语义和视觉相对性对图像进行排序。

在这里插入图片描述
    图2是模型结构。我们网络包含一个批量输入和一个L2正则化的深度卷积网路,他的输出是人脸嵌入层。下图是损失函数的训练。
在这里插入图片描述
    图三是损失函数在anchor和postive优化,表示相同的身份,anchor和negative优化,表示不同的身份。

3,方法
    FaceNet采用一个深度卷积网络。我们讨论两种不同的架构:Zeiler&Fergus[22]和Inception[16]。在第3.3节介绍详细介绍网络的细节。
    给定模型的细节,将其作为黑箱(参见图2),我们方法最重要的部分在于整个系统是一个端到端的学习。我们才哟个三元组损失直接实现人脸验证、识别和聚类。即,我们嵌入一个emdbeding f x f_{x} fx,图像x进入特征映射 R d R^{d} Rd维空间,平方所有人脸距离,独立成像条件下,相同身份很小,但是不同身份的人脸距离就很显得很大。
    虽然我们没有直接计算出两者个损失进行比较,例如使用positive和negtive的比较,在[14]中进行,我们认为三元组损失更适合人脸识别。其原因是,来自[14]的损失函数支持一个身份的所有人脸特征都投影到嵌入空间中的一个点上。然而,三元组损失试图在一个人到所有人脸的特征之间,加强了一个限制。这允许一个身份的人脸表现是中总多样的特征,然而强化距离和辨识能力。
    接下来的部分是三元组的表示和怎么大规模有效学习。

3.1 三元组损失
    embedding代表 f ( x ) R D f_(x) R^{D} f(x)RD。即,图像转换到d维的欧式空间。而且,我们采用超球面限制嵌入层, ∣ ∣ f x ∣ ∣ 2 = 1 ||f_{x}||_{2} = 1 fx2=1。这个损失在[19]中最近邻分类的背景下产生的。我们确保图像 x i a x^{a}_{i} xia(anchor)特征更加接近相同的图像 x i p x^{p}_{i} xip(positive)而不是任何其他人 x i n x^{n}_{i} xin(negative)。如图3所示。
因此,我们想要,
∣ ∣ f x i a − f x p i ∣ ∣ 2 2 + a < ∣ ∣ f x i a − f x n i ∣ ∣ 2 2 ||f_{x^{a}_{i}} - f_{x^{p}_{}i}||^{2}_{2} + a < ||f_{x^{a}_{i}} - f_{x^{n}_{}i}||^{2}_{2} fxiafxpi22+a<fxiafxni22
其中, a a a是用于加强positive和negative对的间距。
    这个损失可以通过 L L L来优化
在这里插入图片描述
在这里插入图片描述
    产生可能的三元组将生成许多容易满足条件的三元组即可。这些三元组不会对训练有帮助并且导致更慢的收敛,因为他们仍然会通过网络。选择合适的三元组至关重要,他们是可以的,将有助于改进模型。下面的部分我们将讨论如何选择三元组。

3.2 三元组的选择

    为了确保快速收敛,根据三元组约束条件,选择三元组至关重要。即,给定 x i a x^{a}_{i} xia,我们想要得到 x p a x^{a}_{p} xpa(hard positive),如 a r g m a x x i p ∣ ∣ f x i a − f x i p ∣ ∣ 2 2 argmax_{x^{p}_{i}}||f_{x^{a}_{i}} - f_{x^{p}_{i}}||^{2}_{2} argmaxxipfxiafxip22,和同样得到 x n a x^{a}_{n} xna选择(hard negative),如 a r g m i n x i p ∣ ∣ f x i a − f x i n ∣ ∣ 2 2 argmin_{x^{p}_{i}}||f_{x^{a}_{i}} - f_{x^{n}_{i}}||^{2}_{2} argminxipfxiafxin22
    通过整个训练集很难计算出argmax和argmin。而且很容易造成训练不好,错误的标签和糟糕的人脸图像也容易导致hard positive和hard negative。有两个明显的事项可以避免这个问题:

每n步产生离线三元组。使用最新的网络checkpoints并在数据子集上计算argmax和argmin。
选择在线三元组。通过一个小批量数据中选择hard positive/negative对。

    因此,我们要关注在线生成,并按照上千个样本顺序使用大型小批量,在一个小批量中只计算argmax和argmin。
    anchor到positive之间的距离有很大的意义。任何身份都存在一个小批量中。我们的实验每个小批量中有40个不同身份的人脸。随机的负样本添加到小批量中。我们不是选择hardest positive,而是在一个小批量中选择achor positive对,同时选择hard negative对。
我们没有对一个小批量的hard anchor-positive对和所有anchor-positive对进行并排比较,但是我们在实践中发现所有的anchor-positive方法十分稳定且在训练中很容易收敛。
    我们开发了离线三元组生成并结合在线,它可以允许更小批量,但是方法不稳定。
在实践中,选择hardest negative 导致训练中早期局部最小,具体来说就是使模型崩塌。为了加强,我们选择 x i n x^{n}_{i} xin
∣ ∣ f x i a − f x i p ∣ ∣ 2 2 < ∣ ∣ f x i a − f x i n ∣ ∣ 2 2 ||f_{x^{a}_{i}} - f_{x^{p}_{i}}||^{2}_{2} < ||f_{x^{a}_{i}} - f_{x^{n}_{i}}||^{2}_{2} fxiafxip22<fxiafxin22
我们称negative样本为semi-hard,因为他们离anchor和positive更远,但是他的平方距离与anchor-positive更加接近。negative都要有一个 a a a间距。
    如上所述,正确的三元组选择至关重要且加速收敛。一方面我们可以使用小批量,因为随机梯度下降可以提高收敛性[20]。另一方面,实现方法在上前个样本中更加有效。在小批量中选择相关的三元组仍然约束着我们,大大多数实验中,我们使用1800个样本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值