使用Siamese神经网络进行人脸识别

2018 年 1 月 22 日 AI前线 专注报道AI

作者|Firdaouss Doukkali
译者|孙浩
编辑|Emily
AI 前线导读:本文通过人脸识别的例子,介绍了一次性学习 (One-shot learning),特别是其中的 Siamese 神经网络。我将与大家分享我从 deeplearning.ai 上一篇论文 FaceNet《人脸识别和聚类的统一嵌入》上学到的知识。如果你对它很感兴趣的话,以此,你可以节省更多的时间深入研究这个话题。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)
一次性学习

为了理解为什么我们有一次性学习的原因,我们需要讨论下深度学习和数据。通常,在深度学习中,我们需要大量的数据,而我们拥有的数据越多,结果就越好。可是,假如可以用仅仅很少的数据学习就更方便了,因为我们并不是所有人都有丰富的数据。

另一方面,为了识别物体,大脑并不需要见过成千上万相同物体的图片。这里我们不讨论与大脑的类比,因为它太复杂,太强大,很多事情都涉及到我们学习和记忆的过程,比如感觉、先验知识和互动等等。

本文的思路是,我们只从很少的几个数据中学习对象类,这就是一次性学习算法的原理。

人脸识别

在这个人脸识别系统中,我们只想通过向系统提供一张人脸的照片便可识别一个人的身份。而且,如果它不能识别图片,那就意味着这个人的图像没有存储在系统的数据库中。

为了解决这个问题,我们不能只使用卷积神经网络,有两个原因:1)CNN 并不在一个小的训练集上工作 ;2) 我们每次向系统添加一个新人的图片时,不方便对模型进行再训练。然而,我们可以使用 Siamese 神经网络来进行人脸识别。

Siamese 神经网络

Siamese 神经网络有一个目标,就是找出两个相似的东西有多相似 (例如,签名验证、人脸识别等)。这个网络有两个相同的子网络,它们都具有相同的参数和权重。

图片来自 C4W4L03 Siamese Network.Andrew Ng 创建

上面的图片是来自 deeplearning.ai 的一个例子,它很好地使用 Siamese 神经网络体系结构进行了人脸识别。正如您所看到的,第一个子网络的输入是一个图像,然后是一系列的卷积、池化、全连接层,最后是一个特性向量 (我们不打算使用 softmax 函数进行分类)。最后一个向量 f(x1) 是输入 x1 的编码。然后,我们对图像 x2 做同样的事情,把它输入到与第一个子网络完全相同的第二个子网络中,得到了输入 x2 的编码 f(x2)。

为了比较这两个图像 x1 和 x2,我们计算编码 f(x1) 和 f(x2) 之间的距离 d。如果它小于一个阈值 (一个超参数),这就意味着这两个图像是同一个人,否则便是两个不同的人。

x1 和 x2 的两种编码之间的距离函数

此方法适用于任意两张图片 xi 和 xj。

那么,我们如何学习这些参数以便为输入图像获得良好的编码呢?

我们可以通过三联体损失函数使用梯度下降法,这是一个使用三张图片的损失函数:一张锚点图像 A,一张正确的图像 P(和锚点图像中人物一样),以及一个不正确的图像 N(人物与锚点图像不同)。我们想让图像 A 与图像 P 的距离 d(A,P) 小于等于图像 A 与图像 N 的距离 d(A,N)。换句话说,我们想让有同一个人的照片间的距离接近,而有不同人的照片距离则远离对方。

“三联”的损失使锚与正之间的距离最小化,两者都具有相同的身份,并使锚与一个不同的身份之间的距离最大化。《FaceNet: 人脸识别和聚类的统一嵌入》

这里有个问题,模型可以学习对不同的图像进行相同的编码,这就会使其间距离为 0,同时它仍满足三元组损失函数。由于这个原因,我们添加了一个边际 alpha(一个超参数) 值,以防止这种情况发生,这样在 A 和 P 及 A 和 N 之间便可一直存在差值。

三元组损失函数

max 是指,只要 d(A,P)-d(A,N)+alpha 小于或等于零,损失 L(A,P,N) 便是零,但是如果大于零,损失将是正的,此函数将设法使其最小化为零或小于零。

代价函数是所有训练集的不同三元组的个体损失的总和。

训练集:

训练集应该包含同一个人的多张图片,让他们拥有一对 A 和 P,这样模型一旦训练完成,我们就能认出只有一张照片的人。

我们如何选择三元组来训练这个模型呢?

如果我们随机选择它们,就很容易满足损失函数的约束,因为距离多数情况下都是比较大的。梯度下降的方法并不会从训练集中学到太多。因为这个原因,我们需要找到 A,P,N,其中 A 和 P 需要跟 N 尽可能接近。我们的目标是,让梯下降方法越来越难从模型训练中得到优化。

英文原文链接:

https://towardsdatascience.com/one-shot-learning-face-recognition-using-siamese-neural-network-a13dcf739e

登录查看更多
0

相关内容

基于深度神经网络的少样本学习综述
专知会员服务
171+阅读 · 2020年4月22日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
32+阅读 · 2020年4月15日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
【反馈循环自编码器】FEEDBACK RECURRENT AUTOENCODER
专知会员服务
22+阅读 · 2020年1月28日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
118+阅读 · 2019年9月24日
一个神经网络实现4大图像任务,GitHub已开源
卷及网络的弱点,有人想用胶囊网络给解决掉
人工智能头条
6+阅读 · 2018年11月21日
机器学习必知的8大神经网络架构
七月在线实验室
7+阅读 · 2018年4月26日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
使用张量融合神经网络的基于属性的人脸识别
统计学习与视觉计算组
3+阅读 · 2017年11月2日
卷积神经网络如何进行图像识别?
AI前线
8+阅读 · 2017年9月22日
Arxiv
5+阅读 · 2018年5月5日
VIP会员
相关资讯
一个神经网络实现4大图像任务,GitHub已开源
卷及网络的弱点,有人想用胶囊网络给解决掉
人工智能头条
6+阅读 · 2018年11月21日
机器学习必知的8大神经网络架构
七月在线实验室
7+阅读 · 2018年4月26日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
使用张量融合神经网络的基于属性的人脸识别
统计学习与视觉计算组
3+阅读 · 2017年11月2日
卷积神经网络如何进行图像识别?
AI前线
8+阅读 · 2017年9月22日
Top
微信扫码咨询专知VIP会员