Siamese Network理解

提起siamese network一般都会引用这两篇文章: 

《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming Distance Metric Learning》。

本文主要通过论文《Learning a Similarity Metric Discriminatively, with Application to Face Verification》来理解siamese网络。

介绍

Siamese网络是一种相似性度量方法,当类别数多,但每个类别的样本数量少的情况下可用于类别的识别、分类等。传统的用于区分的分类方法是需要确切的知道每个样本属于哪个类,需要针对每个样本有确切的标签。而且相对来说标签的数量是不会太多的。当类别数量过多,每个类别的样本数量又相对较少的情况下,这些方法就不那么适用了。其实也很好理解,对于整个数据集来说,我们的数据量是有的,但是对于每个类别来说,可以只有几个样本,那么用分类算法去做的话,由于每个类别的样本太少,我们根本训练不出什么好的结果,所以只能去找个新的方法来对这种数据集进行训练,从而提出了siamese网络。siamese网络从数据中去学习一个相似性度量,用这个学习出来的度量去比较和匹配新的未知类别的样本。这个方法能被应用于那些类别数多或者整个训练样本无法用于之前方法训练的分类问题。

主要思想

主要思想是通过一个函数将输入映射到目标空间,在目标空间使用简单的距离(欧式距离等)进行对比相似度。在训练阶段去最小化来自相同类别的一对样本的损失函数值,最大化来自不同类别的一堆样本的损失函数值。给定一组映射函数这里写图片描述,其中参数为W,我们的目的就是去找一组参数W。使得当这里写图片描述这里写图片描述属于同一个类别的时候,相似性度量这里写图片描述是一个较小的值,当这里写图片描述这里写图片描述属于不同的类别的时候,相似性度量这里写图片描述较大。这个系统是用训练集中的成对样本进行训练。当这里写图片描述这里写图片描述来自相同类别的时候,最小化损失函数这里写图片描述,当这里写图片描述这里写图片描述来自不同类别的时候,最大化这里写图片描述。这里的这里写图片描述除了需要可微外不需要任何的前提假设,因为针对成对样本输入,这里两个相同的函数G,拥有一份相同的参数W,即这个结构是对称的,我们将它叫做siamese architecture。 
在这篇论文中,作者用这个网络去做面部识别,比较两幅图片是不是同一个人,而且这个网络的一个优势是可以去区分那些新的没有经过训练的类别的样本。

Siamese也算是降维方法的一种。常见的降维方法有PCA、LDA、Kernel-PCA、MDS、LLE、LB、ISOmap、FA等不做具体介绍。

网络结构

这里写图片描述 
上图是论文中的网络结构图,左右两边两个网络是完全相同的网络结构,它们共享相同的权值W,输入数据为一对图片(X1,X2,Y),其中Y=0表示X1和X2属于同一个人的脸,Y=1则表示不为同一个人。即相同对为(X1,X2,0),欺骗对为(X1,X2’,1)针对两个不同的输入X1和X2,分别输出低维空间结果为这里写图片描述这里写图片描述,它们是由这里写图片描述这里写图片描述经过网络映射得到的。然后将得到的这两个输出结果使用能量函数这里写图片描述进行比较。 
这里写图片描述

损失函数定义

我们假设损失函数只和输入和参数有关,那么我们损失函数的形式为: 
这里写图片描述 
其中这里写图片描述是第i个样本,是由一对图片和一个标签组成的,其中LG是只计算相同类别对图片的损失函数,LI是只计算不相同类别对图片的损失函数。P是训练的样本数。通过这样分开设计,可以达到当我们要最小化损失函数的时候,可以减少相同类别对的能量,增加不相同对的能量。很简单直观的方法是实现这个的话,我们只要将LG设计成单调增加,让LI单调递减就可以了,但是我们要保证一个前提就是,不相同的图片对距离肯定要比相同图片对的距离小,那么就是要满足: 
这里写图片描述 
所以论文中用了一个 
这里写图片描述 
作为总的损失函数,可以满足这个condition1。论文中进行了各种假设的证明已经单调性的证明,这里不再重复。 
最后给出一个精确的对单个样本的损失函数: 
这里写图片描述 
其中 
这里写图片描述 
,Q是一个常量。 
这里写图片描述
上图说明了收敛性。

总结思想

其实讲了这么多,主要思想就是三点: 
1、输入不再是单个样本,而是一对样本,不再给单个的样本确切的标签,而且给定一对样本是否来自同一个类的标签,是就是0,不是就是1 
2、设计了两个一模一样的网络,网络共享权值W,对输出进行了距离度量,可以说l1、l2等。 
3、针对输入的样本对是否来自同一个类别设计了损失函数,损失函数形式有点类似交叉熵损失: 
这里写图片描述 
最后使用获得的损失函数,使用梯度反传去更新两个网络共享的权值W。

优点

这个网络主要的优点是淡化了标签,使得网络具有很好的扩展性,可以对那些没有训练过的类别进行分类,这点是优于很多算法的。而且这个算法对一些小数据量的数据集也适用,变相的增加了整个数据集的大小,使得数据量相对较小的数据集也能用深度网络训练出不错的效果。

实验设计

实验的时候要注意,输入数据最好打乱,由于这样去设计数据集后,相同类的样本对肯定比不相同的样本对数量少,在进行训练的时候最后将两者的数据量设置成相同数量。

总结

本文解释的只是最早提出的siamese网络结构,提出的是一种网络结构思想,具体的使用的网络形式完全可以自己定义。包括损失函数,相似度距离的定义等。比如将损失函数的这里写图片描述用hige loss代替等。 
《Hamming Distance Metric Learning》这篇论文对siamese进一步改进,提出了一个triple net,主要贡献是将成对样本改成了三个样本,输入由(X1,X2,Y)变成了(X1,X2,X1’),表示X1和X1’是相同类别的样本,X1和x2是不同样本的类别。 
《Learning to Compare Image Patches via Convolutional Neural Networks》这篇论文写得也很好,将两个网络进行合并,输入的成对标签直接同时输入同一个网络。

代码

使用tensorflow在mnist上实现的siamese net

参考文献2的官方code

参考文献

[1] S. Chopra, R. Hadsell, and Y. LeCun. Learning a similarity metric discriminatively, with application to face verification. In Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, volume 1, pages 539–546. IEEE, 2005. 
[2] Mohammad Norouzi, David J. Fleet, Ruslan Salakhutdinov, Hamming Distance Metric Learning, Neural Information Processing Systems (NIPS), 2012.

 

转载于:https://www.cnblogs.com/bentuwuying/p/8186364.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap是如何工作的

2019独角兽企业重金招聘Python工程师标准>>> 1 HashMap在JAVA中的怎么工作的? 基于Hash的原理 2 什么是哈希? 最简单形式的 hash,是一种在对任何变量/对象的属性应用任何公式/算法后, 为其分配唯一代码的方法。 一个真…

英特尔布局5G 提供端到端的解决方案

错失了移动互联设备市场的英特尔,想在5G和物联网上抢得先机。 在英特尔5G行业发展沙龙上,英特尔院士、通信与设备事业部无线标准首席技术专家吴耕表示,全球对5G产业有相当高的期待,下一代网的研发重心就是从以人为本的网向以物为本…

计算机网络实验进入实时模式,计算机网络实验1 PacketTrace基本使用.doc

计算机网络实验1 PacketTrace基本使用太原理工大学现代科技学院计算机通信网络课程 实验报告专业班级学 号姓 名指导教师 实验名称 同组人专业班级 学号 姓名 成绩一、实验目的掌握Cisco Packet Tracer 软件的使用方法。二、实验任务在Cisco Packet Tracer 中用HUB 组建局域网&…

adb不识别设备(手机)的若干情形及解决方法

1.执行adb root 提示adb: unable to connect for root: no devices/emulators found;执行adb devices ,List下无设备 》往往是数据线或USB插口问题,换根数据线或换个USB插口试试 2.执行adb devices List下提示 “592b925b no permissions (verify ud…

如何做到十五分钟领略PowerBI的DAX精华及框架

有小伙伴问,如何最快速理解整套 DAX 精华体系,例如:15分钟。这虽然是个不可能完成的任务,但在借助脑图PPT的强大能力下,还是可以做到的。如果你从没接触过 DAX,但未来要学习 DAX,以下视频值得看…

php html 转xml,用PHP生成XML文档(转义字符)

用PHP生成XML文档(转义字符)我正在从PHP脚本生成XML文档,并且需要转义XML特殊字符。我知道应该转义的字符列表; 但是正确的方法是什么?应该使用反斜杠(\)来转义字符还是正确的方法?有内置的PHP函数可以为我处理此问题吗&#xff1…

【例题 8-13 UVA - 11093】Just Finish it up

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 尺取法。 假设现在取[l..r]这一段。 然后发现累加的和小于0了。 那么方法只能是不走l..l1这一段了 即delta递减(p[l]-q[l]); 直到delta>0为止。 某个时刻如果发现r1l 或者l1且rn 则合法。 如果发现l大于n了.…

springboot配置允许跨域访问

2019独角兽企业重金招聘Python工程师标准>>> 因springboot框架通常用于前后端分离项目,因此需配置后台允许跨域访问(具体看注释),配置类如下,将该类加入工程中即可。 import org.springframework.context.a…

机器视觉传感器选型,交互作用决定取舍

目前,如何选择机器视觉传感器在当代的应用可谓是越来越广泛,如何选择机器视觉传感器是值得我们好好学习的,现在我们就深入了解如何选择机器视觉传感器。 相机是机器视觉系统的眼睛,而相机的心脏是图像传感器。传感器的选择取决于准…

大连交通大学计算机网络,计算机网络题库(大连交通大学)chapter5.doc

计算机网络题库(大连交通大学)chapter5Chapter 5 The Link Layer and Local Area Network1.A ( ) protocol is used to move a datagram over an individual link.Aapplication-layerBtransport-layerCnetwork-layerDlink-layer2.The units of data exch…

使用qrcode类制作二维码

<?phprequire_once ./phpqrcode/phpqrcode.php;/** 地址:http://phpqrcode.sourceforge.net/ 下载qrcode类* param string $url 要生成的链接* param bool $local 是否生成本地文件 * param string $logo 中间图片地址 */ echo qrcode(https://www.cnblogs.co…

《Hadoop大明白》【1】Hadoop的核心组件

为什么80%的码农都做不了架构师&#xff1f;>>> 本书适用于想对大数据平台Hadoop有深入了解的程序员朋友&#xff0c;会帮助你以后在应用开发方面趟平一些坑。 1&#xff0c;Hadoop 是一个系列大数据组件构成的应用平台&#xff0c;可由多个廉价机器搭建集群&#…

计算机专业学教育技术优势,西南交通大学教育技术学(040110)专业介绍

一、学科概况“教育技术学”是教育学一级学科下的一个二级学科&#xff0c;教育技术学是教育学和计算机信息技术发展下新兴的跨专业交叉性学科&#xff0c;也是一个理论与实践相结合的应用学科。主要研究信息技术特别是计算机网络技术、多媒体技术与教育技术的有效整合&#xf…

.NET7是如何优化Guid.Equals性能的?

简介在之前的文章中&#xff0c;我们多次提到 Vector - SIMD 技术&#xff0c;也答应大家在后面分享更多.NET7 中优化的例子&#xff0c;今天就带来一个使用 SIMD 优化Guid.Equals()方法性能的例子。为什么 Guid 能使用 SIMD 优化&#xff1f;首先就需要介绍一些背景知识&#…

go语言载入json的一个坑

问题简介 go语言标准库汇总内置了对 json 文件的处理&#xff0c;非常方便&#xff0c;最近在写一个应用的时候&#xff0c;需要从 json 文件中载入 配置&#xff0c;由于是 go 新手&#xff0c;忽略一个细节&#xff0c;导致载入内容始终为空 代码演示 代码是最好的说明载体 p…

el表达式 if 和 if else 的写法

javaScript的if else大家都不会陌生&#xff0c;但可能很多小伙伴并不知道在jsp文件里&#xff0c;el表达式的if else是怎么写的&#xff0c;下面安利给各位小伙伴。 el表达式 if 代码示例示例1<c:if test"${jsonObject.transportTypeName eq 火车}"><li>…

Effective_STL 学习笔记(二十七) 用 distance 和 advance 把 const_iterator 转化成 iterator...

并不存在从 const_iterator 到 iterator 之间的隐式转换 一种安全的、可移植的方法获取他所对应的 iterator&#xff1a; 1   typedef deque<int> IntDeque;     // 方便的typedef 2   typedef IntDeque::iterator Iter; 3   typedef IntDeque::const_iterato…

分布式唯一Id

支持.Net/.Net Core/.Net Framework&#xff0c;可以部署在Docker, Windows, Linux, Mac。分布式唯一Id&#xff0c;顾名思义&#xff0c;是指在全世界任何一台计算机上都不会重复的唯一Id。在单机/单服务器/单数据库的小型应用中&#xff0c;不需要用到这类东西。但在高并发、…

缺氧游戏黑科技计算机,《缺氧》游戏内参数修改图文详解

很多玩家都很喜欢缺氧这款游戏&#xff0c;有时候因为一些不可告人的秘密我们需要修改游戏中的内容来达到简化我们的生存难度&#xff0c;这样就需要修改游戏的脚本&#xff0c;所幸《缺氧 》对于这个问题很宽容&#xff0c;完全没有加密地图的生成脚本&#xff0c;让我们可以完…

Python 项目实践三(Web应用程序)第四篇

接着上节继续学习&#xff0c;本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它&#xff0c;不管用户身处何方。在本章中&#xff0c;你将创建一些表单&#xff0c;让用户能够添加主题和条目&#xff0c;以及编辑既有的条目。你还将学习Django如何…