用孪生网络、对比损失和三重损失进行人脸识别的单样本学习

2019 年 6 月 17 日 AI前线
策划 | Linda
作者 | Jason Brownlee
编译 | Sambodhi
编辑 | Linda
AI 前线导读: 孪生神经网络(Siamese network)是一个有趣的名词,Siamese 在英语中是 “孪生”、“连体” 的意思,简单来说,Siamese network 就是 “连体的神经网络”,神经网络的 “连体” 是通过共享权值来实现的。孪生网络的目标是寻找两个可比较对象的相似程度(例如,签名验证、人脸识别等)。这个网络有两个相同的子网络,两个子网络有着相同的参数和权重。单样本学习算法的主要思想是,我们需要仅仅从少量的数据中就能学会一个对象分类。

更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

单样本学习(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 系统的基础,该系统在基准人脸识别数据集上获得了当时最先进的结果。

本文提出了一种直接学习人脸图像到进奏欧几里得空间的映射系统,该系统称为 FaceNet,其中距离直接对应于人脸相似度的度量。

——《Facenet: A unified embedding for face recognition and clustering》,2015 年

用来训练模型的三元组都是精心选择的。

三元组很容易,只会造成很小的损失,并不能有效地更新模型。相反,我们寻求的是硬三元组,以鼓励能够对模型和预测的人脸嵌入进行更改。

选择使用哪个三元组非常重要,在课程学习的启发下,我们提出了一种新的在线负类样本挖掘策略,该策略保证了在网络训练过程中三元组的学习难度能够不断增加。

——《Facenet: A unified embedding for face recognition and clustering》,2015 年

三元组以在线方式生成,并找到所谓的硬正类(匹配)和硬负类(不匹配)的情况,用于批量损失的估计。

选择活跃的硬三元组非常重要,因为这些都是积极的,可有助于改进模型。

——《Facenet: A unified embedding for face recognition and clustering》,2015 年

直接训练人脸嵌入的方法,例如通过三重损失,以及使用嵌入作为恋人识别和人脸认证模型(如 FaceNet)的记住,是现代和最先进的人脸识别方法的基础。

……对于从零开始训练的模型以及预训练模型,使用三重损失的变体来执行端到端深度度量学习,比大多数其他已发表的方法都有很大的优势。

——《In Defense of the Triplet Loss for Person Re-Identification》,2017 年

延伸阅读

如果你希望深入了解,本小节提供了有关该主题的更多资源。

论文

  • 《Knowledge transfer in learning to recognize visual objects classes》,2006

    http://vision.stanford.edu/documents/Fei-Fei_ICDL2006.pdf

  •  《Matching Networks for One Shot Learning》,2017

    http://papers.nips.cc/paper/6385-matching-networks-for-one-shot-learning)

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

    https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf

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

    http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf)

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

    https://ieeexplore.ieee.org/document/6909616

  • 《Dimensionality Reduction by Learning an Invariant Mapping》,2006

    https://ieeexplore.ieee.org/abstract/document/1640964

  • 《Deep Face Recognition: A Survey》,2018

    https://arxiv.org/abs/1804.06655

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

    https://arxiv.org/abs/1406.4773

  • 《Facenet: A unified embedding for face recognition and clustering》,2015

    https://www.cv-foundation.org/openaccess/content_cvpr_2015/html/

  • 《In Defense of the Triplet Loss for Person Re-Identification》,2017

    https://arxiv.org/abs/1703.07737

文章

  • 《One-shot learning, Wikipedia》

    https://en.wikipedia.org/wiki/One-shot_learning

  • 《Siamese Network, Wikipedia》

    https://en.wikipedia.org/wiki/Siamese_network

  • 《Triplet loss, Wikipedia》

    https://en.wikipedia.org/wiki/Triplet_loss

英文原文:

https://machinelearningmastery.com/one-shot-learning-with-siamese-networks-contrastive-and-triplet-loss-for-face-recognition



你也「在看」吗?👇

登录查看更多
16

相关内容

【ICML 2020 】小样本学习即领域迁移
专知会员服务
77+阅读 · 2020年6月26日
【ICLR 2019】双曲注意力网络,Hyperbolic  Attention Network
专知会员服务
82+阅读 · 2020年6月21日
【KDD2020-清华大学】图对比编码的图神经网络预训练
专知会员服务
43+阅读 · 2020年6月18日
【浙江大学】人脸反欺诈活体检测综述
专知会员服务
31+阅读 · 2020年4月15日
基于Siamese网络的多视角三维人脸重建
计算机视觉战队
5+阅读 · 2019年11月28日
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
人脸识别损失函数综述(附开源实现)
极市平台
29+阅读 · 2019年3月12日
【干货】Lossless Triplet Loss: 一种高效的Siamese网络损失函数
机器学习研究会
29+阅读 · 2018年2月21日
Arxiv
4+阅读 · 2018年3月30日
Arxiv
10+阅读 · 2018年3月22日
Arxiv
6+阅读 · 2018年3月12日
Arxiv
8+阅读 · 2014年6月27日
VIP会员
相关资讯
基于Siamese网络的多视角三维人脸重建
计算机视觉战队
5+阅读 · 2019年11月28日
论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示
开放知识图谱
25+阅读 · 2019年10月31日
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
人脸识别损失函数综述(附开源实现)
极市平台
29+阅读 · 2019年3月12日
【干货】Lossless Triplet Loss: 一种高效的Siamese网络损失函数
机器学习研究会
29+阅读 · 2018年2月21日
Top
微信扫码咨询专知VIP会员