单样本学习(One shot learning)是一项分类任务,用一个或几个样本对未来的许多样本进行分类。

这是人脸识别领域中常见的任务,例如人脸识别和人脸认证,在这些任务中,必须根据给定一张或几张样本照片中的不同面部表情、光照条件、首饰和发型对人脸进行正确的分类。

现代人脸识别系统通过学习丰富的低维特征表示方法(称为人脸嵌入)来解决通过人脸识别进行单样本学习的问题。这种低维特征表示可以很容易地计算出人脸,并在验证和识别任务中进行比较。

从历史上来看,嵌入是通过使用孪生网络(Siamese network)来解决单样本学习问题的。通过对具有对比损失(Comparative Loss)函数的孪生网络进行训练,获得了更好的性能,后来导致了 Google 在 FaceNet 系统中使用三重损失(Triplet Loss)函数,这个函数在基准人脸识别任务取得了当时最先进的结果。

在本文中,我将阐述人脸识别中单样本学习中的挑战,以及如何使用对比损失和三重损失函数来学习高质量的人脸嵌入。

读完本文后,你将会学到:

  • 单样本学习是一种分类任务,对给定每个类的一个(或几个)样本来进行许多预测,而人脸识别就是单样本学习的一个例子。

  • 孪生网络是解决单样本学习的一种方法,通过比较已知样本和候选样本的学习特征向量。

  • 对比损失函数和后来的三重损失函数可以用来学习高质量的人脸嵌入向量,为现代人脸识别系统提供了基础。

言归正传。

概     述

本文将分四个部分:

  1. 单样本学习与人脸识别

  2. 用于单样本学习的孪生网络

  3. 用于降维的对比损失

  4. 用于学习人脸嵌入的三重损失

单样本学习与人脸识别

通常,分类包括对给出每个类的多个样本的情况下进行模型拟合,然后使用拟合模型对每个类的许多样本进行预测。

例如,我们可能对三种不同物种的植物进行了数千次测量。模型可以适用于这些样本,从给定物种的测量结果之间的共性进行归纳,并对比不同物种测量结果之间的差异。

单样本学习是一种分类任务,其中每个类都有一个样本(或极少数样本),用于准备模型训练,然后模型反过来又必须对未来的许多未知样本进行预测。

在单样本学习的情况下,向算法提供了一个对象类的单一样本。

——《Knowledge transfer in learning to recognize visual ibjects classes》,2006 年

对人类来说,这是一个相对容易的问题。例如,一个人可能有一次见过一辆法拉利跑车,那么在未来,他能够在新的情况下,比如在路上,在电影里,在图书中以及在不同的光照和颜色的情况下,能够认出法拉利跑车。

人类在几乎没有监督的情况下学习新概念,例如,一个小孩可以从书中的一张图片概括出“长颈鹿”的概念,但我们目前最好的深度学习系统就需要成百上千的样本才能学会。

《Matching Network for One Shot Learning》,2017 年

单样本学习与零样本学习相关,但又有所不同。

这应该区别于零样本学习,在零样本学习中,模型并不能查看目标类的任何样本。

《Siamese Neural Networks for One-shot Image Recognition》,2015 年

人脸识别任务提供了单样本学习的样本。

具体来说,在人脸识别的情况下,模型或系统可能只有一个或几个给定人脸的样本,并且必须从新照片中正确识别出该人,包括在表情、发型、光照和首饰等都有所变化的情况下。

在人脸认证的情况下,模型或系统可能只有一个人脸的样本记录,并且必须正确地验证该人的新照片,也许每天都要这样。

因此,人脸识别是单样本学习的常见例子之一。

用于单样本学习的孪生网络

目前已推广用于单样本学习的网络是孪生网络。

孪生网络是由两个并行神经网络构成的架构,每个神经网络采用不同的输入,其输出被组合起来以提供一些预测。

这是专为验证任务而设计的网络,最早由 Jane Bromley 等人在 2005 年题为《使用孪生时延神经网络进行签名认证》(《Signature Verification using a Siamese Time Delay Neural Network》)的论文中首次提出用于签名认证。

该算法基于一种新的人工神经网络,称为”孪生“神经网络。这个网络由在其输出端连接的两个相同的子网络组成。

——《Signature Verification using a “Siamese” Time Delay Neural Network》,2005 年

使用两个相同的网络,一个采取此人的已知签名,另一个获取候选签名。将两个网络的输出组合起来进行评分,以辨明候选签名是真实签名还是伪造签名。

验证包括将提取的特征向量与用于签名者存储的特征向量进行比较。接受比所选阈值更接近该存储表示的签名,所有其他签名将被视为伪造而拒绝。

——《Signature Verification using a “Siamese” Time Delay Neural Network》,2005 年

用于签名认证的孪生网络示例。摘自:《Signature Verification using a “Siamese” Time Delay Neural Network》

孪生网络是最近才开始被使用的,在 Gregory Koch 等人 2015 年发表的题为《用于一次性图像识别的孪生神经网络》(《Siamese Neural Networks for One-Shot Image Recognition》)中,将深度卷积网络用于并行图像输入。

首先训练深度 CNN 来区分每个类的样本。其思想是让模型学习能够有效地从输入图像中提取抽象特征的特征向量。

用于训练孪生网络的图像验证示例。摘自:《Siamese Neural Networks for One-Shot Image Recognition》

然后,这些模型重新用于验证,以预测新样本是否与每个类的模板相匹配。

具体来说,每个网络产生输入图像的特征向量,然后使用 L1 距离和 sigmoid 激活进行比较。将该模型应用于计算机视觉中使用的手写字符数据集的基准测试。

孪生网络的意义在于,它通过学习特征表示(特征向量)来解决单样本学习的方法,然后将特征表示进行比较以用于验证任务。

Yaniv Taigman 等人在 2014 年发表的论文《DeepFace:弥合人脸认证与人类水平的差距》(《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》)中,描述了使用孪生网络开发的人脸识别系统的一个例子。

他们的方法包括,首先训练模型进行人脸识别,然后移除模型的分类器层,将激活作为特征向量,然后计算并比较两种不同的人脸进行人脸认证。

我们还测试了一种端到端的度量学习方法,称为孪生网络:一旦学习完毕,人脸识别网络(没有顶层)将被复制两次(每个输入图像一次),这些特征将被用于直接预测两个输入图像是否属于同一个人。

——《DeepFace: Closing the Gap to Human-Level Performance in Face Verification》,2014 年

用于降维的对比损失

学习像图像这样的复杂输入的向量表示就是降维的一个例子。

降维目的是将高维数据转换为低维表示,以便将类似的输入对象映射到流形上的临近点。

——《Dimensionality Reduction by Learning an Invariant Mapping》,2006 年

有效降维的目标是学习一种新的低维表示,它保留了输入的结构,使得输出向量之间的距离能够有意义地捕捉到输入中的差异。然而,向量必须捕获到输入中的不变特征。

问题是在给定输入空间中的样本之间的邻域关系的情况下,找到一个将高维输入模式映射到低维输出的函数。

——《Dimensionality Reduction by Learning an Invariant Mapping》,2006 年

降维是孪生网络用于解决单样本学习的方法。

Raia Hadsell 等人在 2006 年发表的一篇题为《学习不变映射的降维》(《Dimensionality Reduction by Learning an Invariant Mapping》)论文中,探讨了利用具有图像数据的卷积神经网络进行孪生网络降维,并提出了通过对比损失对模型进行训练的方法。

与在训练数据集中的所有输入样本中评估模型性能的其他损失函数不同,对比损失是在成对的输入之间计算的,例如提供给孪生网络的两个输入之间。

成对的样本被提供给网络,损失函数根据样本的类别是相同的还是不同对模型进行不同的惩罚。具体来说,如果类是相同的,损失函数就鼓励模型输出更为相似的特征向量,而如果类不同的话,那么损失函数就会鼓励模型输出不太相似的特征向量。

对比损失需要人脸图像对,然后将成对的正类拉到一起,并抛弃成对的负类。…… 然而,对比损失的主要问题是裕度参数(margin parameters)往往难以选择。

——《Deep Face Recognition: A Survey》,2018 年

损失函数要求选择一个裕度(margin),用于确定来自不同对的样本进行惩罚的极限。选择这个裕度需仔细考虑,这是使用损失函数的一个缺点。

相似(红线)和不同(蓝线)对的对比损失计算图。摘自《Dimensionality reduction by learning an invariant mapping》。

对比损失可用来训练人脸识别系统,特别是用于人脸认证的任务。此外,通过在计算损失和更新模型之前顺序提供成对的样本并保存预测的特征向量,可以在不需要孪生网络架构中使用的并行模型的情况下实现这一点。

例如,DeepID2 和后续系统(DeepID2+、DeepID3),它们使用深度卷积神经网络,但并不是孪生网络架构,并在基准人脸识别数据集上实现了最先进的结果。

验证信号可直接对 DeepID2 进行正规化,从而有效减少人内变化(intra-personal variations)。常用的约束包括 L1/L2 范数和余弦相似度。我们采用以下基于 L2 范数的损失函数,它最初是由 Hadsell 等人提出的,用于降维。

——《Deep Learning Face Representation by Joint Identification-Verification》,2014 年

用于学习人脸嵌入的三重损失

对比损失的概念可以进一步扩展,从两个样本扩展到三个样本,称为三重损失。

Google 的 Florian Schroff 等人在 2015 年发表的论文《FaceNet:人脸识别和聚类的统一嵌入》(《FaceNet: A Unified Embedding for Face Recognition and Clustering》)中介绍了三重损失。

三重损失不是基于两个样本来计算损失,而是包含一个锚示例(anchor example)和一个正类或匹配的样本(相同类)和一个负类或不匹配的样本(不同类)。

损失函数对模型进行惩罚,减小匹配样本之间的距离,增加了非匹配样本之间的距离。

它需要人脸的三元组,然后它将锚和相同身份的正类样本之间的距离进行最小化,并将锚与不同身份的负类样本之间的距离进行最大化。

——《Deep Face Recognition: A Survey》,2018 年

结果就是一个特征向量,被称为“人脸嵌入”,它具有一个有意义的欧几里得关系,使得相似的人脸产生的嵌入距离很小(例如,可以进行聚类),并且同一个人脸的不同样本产生非常小的嵌入,允许对其他身份进行验证和区分。

这种方法被用做 FaceNet 系统的基础,该系统在基准人脸识别数据集上获得了当时最先进的结果。


©著作权归作者所有:来自51CTO博客作者mb5fdb0a1b25659的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 在iMovie 剪辑中如何添加即时重放或倒回效果?
  2. 如何让Mac电脑在Finder窗口顶部显示文件路径?
  3. 苹果Mac系统优化清理器推荐:MacCleaner PRO
  4. 外企抵制新疆棉 我国纺织企业如何寻求化解之道
  5. 编程利器!Facebook发布基于NLP的代码搜索工具
  6. 单机训练速度提升640倍!独家解读快手商业广告模型GPU训练平台Pers
  7. 流式数据处理在百度数据工厂的应用与实践
  8. web前端开发就业前景怎么样?
  9. 股票价格在随机漫步吗?用 Python 来告诉你

随机推荐

  1. Android IPC机制
  2. Android设置TextView行间距(非行高)
  3. Android--gravity、layout_gravity、padd
  4. Hello Android - Android中gravity与layo
  5. Android异步处理四:AsyncTask的实现原理
  6. Android(安卓)TableLayout 属性含义
  7. 移动支付之Android(安卓)HCE的基本使用
  8. Android Handler机制2之ThreadLocal
  9. android EditText inputType说明
  10. How to add a new keycode in android