《FaceNet: A Unified Embedding for Face Recognition and Clustering》

Abstract

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

我们的方法使用深度卷积网络训练直接优化嵌入本身,而不是像以前的深度学习方法那样的中间瓶颈层。为了训练,我们使用使用新颖的在线三重挖掘方法生成大致对齐的匹配/非匹配面部补丁的三元组。我们的方法的优势是更具代表性的效率:我们使用每个面只有128个字节来获得最先进的人脸识别性能。

关于广泛使用的野外Labeled Faces(LFW)数据库的数据,我们的系统获得了99.63%的新记录准确率。在YouTube Faces上它收到95.12%。与两个数据集上的最佳公布结果[15]相比,我们的系统将错误率降低了30%。

1. Introduction

在本文中,我们提出了一个统一的面部验证系统(这是同一个人),识别(谁是这个人)和聚类(在这些面孔中寻找普通人)。我们的方法基于使用深度卷积网络学习每个图像的欧几里德嵌入。训练网络使得嵌入空间中的平方L2距离直接对应于面部相似性:同一人的面部具有小距离并且不同人的面部具有大距离。

一旦产生了这种嵌入,则上述任务变得直截了当:面部验证仅涉及对两个嵌入之间的距离进行阈值处理;识别成为k-NN分类问题;并且可以使用诸如k均值或凝聚聚类之类的现有技术来实现聚类。

先前基于深度网络的面部识别方法使用在一组已知面部身份上训练的分类层[15,17],然后采用中间瓶颈层作为用于概括超出训练中使用的身份集合的识别的表示。这种方法的缺点是它的间接性和效率低下:人们不得不希望瓶颈表现能够很好​​地概括为新面孔;并且通过使用瓶颈层,每个面的表示大小通常非常大(1000的维度)。最近的一些工作[15]使用PCA降低了这种维度,但这是一种线性转换,可以在网络的一个层中轻松学习。

与这些方法相比,FaceNet直接将其输出训练为使用基于LMNN的基于三重损耗函数的紧凑128-D嵌入[19]。我们的三元组由两个匹配的面部缩略图和一个不匹配的面部缩略图组成,并且损失旨在将正对与负对分开距离边距。缩略图是面部区域的紧密裁剪,除了缩放和平移之外,没有2D或3D对齐。

选择使用哪些三元组对于实现良好的表现非常重要,并且受课程学习的启发[1],我们提出了一种新颖的在线负样本挖掘策略,确保在网络训练时不断增加三元组的难度。为了提高聚类精度,我们还探索了难正例挖掘技术,该技术鼓励球形聚类用于嵌入单个人。

作为我们的方法可以处理的令人难以置信的可变性的说明,请参见图1。显示了来自PIE [13]的图像对,这些图像对以前被认为对于面部验证系统来说非常困难。

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

本文其余部分的概述如下:在第2节中,我们回顾了该领域的文献; 第3.1节定义了三重态损失,第3.2节描述了我们新颖的三重态选择和训练程序; 在3.3节中,我们描述了所使用的模型架构。最后在第4节和第5节中,我们提供了嵌入嵌入的一些定量结果,并定性地探索了一些聚类结果。

2. Related Work

与其他最近采用深度网络的工作[15,17]类似,我们的方法是一种纯粹的数据驱动方法,它直接从面部像素中学习它的表示。我们使用标记面的大型数据集来获得姿势,光照和其他变化条件的适当不变性,而不是使用工程特征。

在本文中,我们探讨了最近在计算机视觉社区中取得巨大成功的两种不同的深度网络架构。两者都是深度卷积网络[8,11]。第一种架构基于Zeiler&Fergus [22]模型,该模型由多个交错的卷积层,非线性激活,局部响应归一化和最大汇聚层组成。我们另外添加了几个受[9]工作启发的1×1×d卷积层。第二种架构基于Szegedy等人的Inception模型。最近被用作ImageNet 2014的获胜方法[16]。这些网络使用混合层,并行运行多个不同的卷积和池化层,并连接它们的响应。我们发现这些模型可以将参数数量减少多达20倍,并且有可能减少可比性能所需的FLOPS数量。

有大量的面部验证和识别工作。审查它超出了本文的范围,因此我们将仅简要讨论最相关的最新工作。

[15,17,23]的工作都采用了多阶段的复杂系统,它将深度卷积网络的输出与PCA相结合,用于降维,SVM用于分类。

Zhenyao等。 [23]采用深度网络将面部“扭曲”成规范的正面视图,然后学习CNN,将每个面部分类为属于已知身份。对于人脸验证,使用网络输出上的PCA和一组SVM。

Taigman等[17]提出了一种多阶段方法,将面部与一般的三维形状模型对齐。训练多级网络以执行超过四千个身份的面部识别任务。作者还试验了一个所谓的连体网络(Siamese network),他们直接优化了两个面部特征之间的L1距离。它们在LFW上的最佳性能(97.35%)源于使用不同比对和颜色通道的三个网络的集合。使用非线性SVM组合这些网络的预测距离(基于α2内核的非线性SVM预测)。

Sun等人[14,15]提出了一种紧凑且因此相对简易的计算网络。他们使用这些网络中的25个网络,每个网络都在不同的面部补丁上运行。对于他们在LFW上的最终表现(99.47%[15]),作者组合了50个响应(常规和翻转)。采用PCA和联合贝叶斯模型[2],它们有效地对应于嵌入空间中的线性变换。他们的方法不需要明确的2D / 3D对齐。通过使用分类和验证丢失的组合来训练网络。验证损失类似于我们采用的三元组损失[12,19],因为它最小化了相同身份的面部之间的L2距离,并在不同身份的面部距离之间实施了边界。主要区别在于仅比较成对图像,而三重态损失促使相对距离约束。

Wang等人研究了与此处使用的类似的损失。 [18]用于通过语义和视觉相似性对图像进行排序。

3. Method

FaceNet使用深度卷积网络。我们讨论了两种不同的核心架构:Zeiler&Fergus [22]式网络和最近的Inception [16]型网络。这些网络的细节在3.3节中描述。

鉴于模型细节,并将其视为黑盒子(见图2),我们方法中最重要的部分在于整个系统的端到端学习。为此,我们采用三元组损失,直接反映了我们想要在面部验证,识别和聚类中实现的目标。也就是说,我们努力嵌入f(x),从图像x到特征空间 Rd\mathbb{R}^{d}Rd,使得相同身份的所有面之间的平方距离(与成像条件无关)很小,而来自一对不同身份的面部图像之间的平方距离很大。

图2.模型结构。我们的网络由批量输入层和深度CNN组成,然后进行L2归一化,从而实现人脸嵌入。接下来是训练期间的三联体损失。

虽然我们没有直接比较其他损失,例如使用成对的正面和负面的那个,如[14] Eq(2)。中所使用的那样。我们认为三联体损失更适合于面部验证。动机是[14]的损失鼓励一个身份的所有面孔被“投射”到一个嵌入空间中的单个点上。然而,三重态损失试图在从一个人到所有其他面部的每对面部之间强制执行边缘。这允许一个身份的面部生活在歧管上,同时仍然强制距离并因此可以与其他身份相区别。

以下部分描述了这种三重态损失以及如何有效地大规模学习它。

3.1. Triplet Loss

嵌入由f(x)∈Rd表示。它将图像x嵌入到d维欧几里德空间中。另外,我们将这种嵌入限制在d维超球面上,即 ∥f(x)∥2=1\|f(x)\|_{2}=1f(x)2=1. 这种损失在[19]中在最近邻分类的背景下被激发。在这里,我们希望确保特定人的图像 xiax_{i}^{a}xia(锚)比任何其他人的任何图像 xinx_{i}^{n}xin(负)更接近同一人的所有其他图像 x1px_{1}^{p}x1p(正)。这在图3中可视化。

图3.三联体损失最小化锚和正例之间的距离,两者具有相同的身份,并最大化锚和不同身份的负例之间的距离。

因此我们想要:
∥x1a−xip∥22+α&lt;∥xia−xin∥22,∀(xta,xip,xin)∈T.(1)\left\|x_{1}^{a}-x_{i}^{p}\right\|_{2}^{2}+\alpha&lt;\left\|x_{i}^{a}-x_{i}^{n}\right\|_{2}^{2}, \forall\left(x_{t}^{a}, x_{i}^{p}, x_{i}^{n}\right) \in \mathcal{T} . (1) x1axip22+α<xiaxin22,(xta,xip,xin)T.(1)

α\alphaα是正负对之间强制执行的余量。 TTT是训练集中所有可能的三元组的集合,并且具有基数N.

最小化的损失是L =
∑iN[∥f(xia)−f(xip)∥22−∥f(xia)−f(xin)∥22+α]+\sum_{i}^{N}\left[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right]_{+} iN[f(xia)f(xip)22f(xia)f(xin)22+α]+

生成所有可能的三元组将造成许多容易满足的三元组(即满足方程(1)中的约束)。这些三元组不会对训练有所贡献,导致收敛速度变慢,因为它们仍会通过网络传递。选择活跃的难三元组至关重要,因此可以有助于改进模型。以下部分讨论了我们用于三元组选择的不同方法。

3.2. Triplet Selection

为了确保快速收敛,在公式(1)中选择违反方程式中的三元组约束的三元组是至关重要的。这意味着,给定x1ax_{1}^{a}x1a,我们想要选择一个 xipx_{i}^{p}xip(硬正),使得 arg⁡max⁡xip∥f(xia)−f(xip)∥22\arg \max _{x_{i}^{p}}\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}argmaxxipf(xia)f(xip)22 最大和 类似的 x1nx_{1}^{n}x1n(硬阴性)使得argmin⁡xn∥f(xta)−f(xin)∥22\operatorname{argmin}_{x^{n}}\left\|f\left(x_{t}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}argminxnf(xta)f(xin)22 最小。

在整个训练集中计算argmin和argmax是不可行的。此外,它可能导致训练不佳,因为错误标记和不良成像的面孔将主导硬性正例和反例。有两个明显的选择可以避免这个问题:

  • 使用最新的网络检查点并在数据子集上计算argmin和argmax,每n步离线生成三元组。
  • 在线生成三元组。这可以通过从小批量中选择硬正/负样本来完成。

在这里,我们专注于在线生成和在几千范例的顺序使用mini-batch,仅在mini-batch内计算argmin和argmax。

为了有效地表示锚定距离,需要确保每个小批量中存在任何一个身份的最小数量的样本。在我们的实验中,我们对训练数据进行采样,使得每个小批量每个身份选择大约40个面部。另外,随机抽样的负面被添加到每个小批量中。

我们不是挑选最难的,而是在小批量中使用所有锚定对,同时仍然选择硬阴性。我们没有对一小批中的硬锚阳性对与所有锚 - 阳对进行并列比较,但我们在实践中发现所有锚定阳性方法在开始时更稳定并且训练收敛得稍快一些。

我们还与在线生成一起探索了三联体的离线生成,它可以允许使用更小的批量,但是实验却不是那么证据确凿的。

选择最难的负片实际上可能在训练早期导致不良的局部最小值,特别是它可能导致折叠模型(即f(x)=0f(x)=0f(x)=0)。为了减轻这种影响,选择xinx_{i}^{n}xin会有所帮助
∥f(xia)−f(xip)∥22&lt;∥f(xta)−f(xin)∥22\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}&lt;\left\|f\left(x_{t}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2} f(xia)f(xip)22<f(xta)f(xin)22

我们将这些负面样本称为半硬(semi-hard),因为它们比正面样本更远离锚点,但仍然很难,因为平方距离接近锚定距离。这些负面影响在余量α\alphaα范围内。

如前所述,正确的三元组选择对于快速收敛至关重要。一方面,我们希望使用小型mini-bqtch,因为这些趋向于在随机梯度下降(SGD)期间改善收敛[20]。另一方面,实施细节使得数十到数百个样本的批次更有效。然而,关于批量大小的主要限制是我们从小批量中选择最难相关的三元组的方式。在大多数实验中,我们使用的批量大小约为1,800个样本。

3.3. Deep Convolutional Networks

在我们的所有实验中,我们使用随机梯度下降(SGD)和标准反向支持[8,11]和AdaGrad [5]训练CNN。在大多数实验中,我们从0.05的学习率开始,我们降低以完成模型。模型从随机初始化,类似于[16],并在CPU群集上训练1,000到2,000小时。在训练500小时后,损失的减少(以及准确度的增加)急剧减慢,但额外的训练仍然可以显着提高性能。保证金?设置为0.2。

我们使用了两种类型的体系结构,并在实验部分中更详细地探讨了它们的权衡。它们的实际差异在于参数和FLOPS的差异。根据应用,最佳型号可能会有所不同。例如在数据中心运行的模型,而在移动电话上运行的模型需要很少的参数,以便它可以适应内存。我们所有的模型都使用整流线性单元作为非线性激活函数。

第一类,如表1所示,在[9]中建议,在Zeiler&Fergus [22]架构的标准卷积层之间增加1×1×d卷积层,得到22层深的模型。它总共有1.4亿个参数,每个图像需要大约16亿FLOPS。

我们使用的第二类是基于GoogLeNet风格的Inception模型[16]。这些模型的参数减少了20倍(约6.6M-7.5M),FLOPS减少了5倍。其中一些型号的尺寸(深度和过滤器数量)都大幅减少,因此可以在手机上运行。一,NNS1,具有26M参数,每个图像仅需要220M FLOPS。另一个是NNS2,有4.3M参数和20M FLOPS。表2详细描述了我们最大的网络NN2。 NN3在架构上是相同的,但输入尺寸减小了160x160。 NN4的输入大小仅为96x96,从而大幅降低了CPU要求(NN2为285M FLOPS对1.6B)。除了减小的输入尺寸之外,它在较高层中不使用5x5卷积,因为此时感受野已经太小。一般来说,我们发现5x5卷绕可以在整个过程中被移除,只是精度略有下降。图4比较了我们所有的模型。

FaceNet论文翻译相关推荐

  1. FaceNet论文翻译学习3

    原文链接:FaceNet: A Unified Embedding for Face Recognition and Clustering FaceNet 4. 数据集和评估(Datasets and ...

  2. Arcface v3 论文翻译与解读

    论文地址:http://arxiv.org/pdf/1801.07698.pdf Arcface v3 与 Arcface v1的内容有较大不同.建议先阅读Arcface v1 的论文,再看v3.可以 ...

  3. 深度篇——人脸识别(一)  ArcFace 论文 翻译

    返回主目录 返回 人脸识别 目录 下一章:深度篇--人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解 目录内容: 深度篇--人脸识别(一) ArcFace 论文 翻译 深度篇- ...

  4. Deep Face Recognition论文翻译

    Deep Face Recognition论文翻译 作者: Omkar M. Parkhi ····································· Visual Geometry ...

  5. 说话人验证论文翻译:Generalized end-to-end loss for speaker verification

    论文地址:2018_说话人验证的广义端到端损失 论文代码:Generalized End-to-End Loss for Speaker Verification 地址:说话人验证论文翻译:Gener ...

  6. 【论文翻译】OpenFace: A general-purpose face recognition library with mobile applications

    [翻译时间]2018.09.14 [完成时间]2018.09.15 [论文翻译]OpenFace: A general-purpose face recognition library with mo ...

  7. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译

    Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译 Abstract摘要 Convolutional neural net ...

  8. 论文翻译_论文翻译的注意事项有什么?

    针对不同题材的文稿有不同的翻译标准,论文翻译是比较严谨的一种翻译类型,下面小编给大家分享论文翻译的注意事项有什么? 注意"从一而终" 所有的论文,在权威平台上发布的时候都必须译为英 ...

  9. 转:经典论文翻译导读之《Google File System》

    首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 -首页所有文章资讯Web架构基础技术书籍教程Java小组工具资源 经典论文翻译导读之<Google ...

最新文章

  1. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优
  2. 会话管理之session技术
  3. vue脚手架搭建配置试调地址和端口号_全栈的自我修养: 002使用@vue/cli进行vue环境搭建 (使用Vue,SpringBoot,Flask完成前后端分离)...
  4. boost::lambda模块实现右值测试
  5. 查找满足断言的第一个元素
  6. springwebflux 页面_【SpringBoot WEB系列】WebFlux静态资源配置与访问
  7. 联想亮出智能手机全面投身移动互联网
  8. 这视频里的人真是帅爆了!
  9. zabbix创建ITEM,运算语法
  10. 单层感知机模型及其学习算法
  11. 51单片机定时器流水灯控制
  12. 注意力机制与V_net神经网络的介绍与实现
  13. 记测试双十一秒杀活动的坎坷历程
  14. ndoutils2.2.0(ndo2db)中文乱码问题解决
  15. 多兰大陆怎么在电脑上玩 多兰大陆模拟器玩法教程
  16. 海豚湾在哪_前任3中的海豚湾在哪里揭晓 热爱海洋之人的梦中圣地
  17. 关闭iOS上京东app不停询问“京东想从MF839粘贴”,您允许这样做吗? - 允许iphone应用访问剪切板
  18. Unraid使用记录:使用Docker与虚拟机
  19. 50岁的程序员还奋战一线,软件测试能干到多少岁?有年龄限制吗?
  20. CCleaner解决的三个问题

热门文章

  1. 微信域名检测php,微信域名检测接口调用演示步骤(含PHP、Python)
  2. 请别在代码里面hardcode
  3. 什么是“技术路线”?如何画好技术路线图?
  4. 基于微信小程序的课程点名签到系统设计与实现 报告+项目源码及数据库文件
  5. linux环境Mechanize安装,Python 爬虫:Mechanize 安装与测试
  6. vue中v-model使用方法
  7. html单选框怎么提交数据库,HTML复选框和单选框 checkbox和radio事件介绍
  8. Python 题库自动化面试题
  9. 列举微型计算机的主要性能指标,计算机基础考大纲.ppt
  10. 跨域 已被CORS策略阻止 请求的资源上没有Access-Control-Allow-Origin标头 (使用Access-Control-Allow-Origin解决跨域)