提起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

Siamese Network理解相关推荐

  1. ICCV 2017 DSiam:《Learning Dynamic Siamese Network for Visual Object Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做DSiam.作者提出一个Dynamic Siamese Network,可以使用一个transformation learning model来在线学习目标的外观 ...

  2. 【论文阅读记录】孪生网络(Siamese network)

    前言: { 之前深度学习不流行的时候,一般像指纹鉴别这种任务都需要很复杂的特征工程(比如寻找角点[1])来完成.我在谷歌搜索了深度学习的指纹识别解决方案,之后搜到了[2],便因此了解到了孪生网络(Si ...

  3. 神经网络学习小记录52——Pytorch搭建孪生神经网络(Siamese network)比较图片相似性

    神经网络学习小记录52--Pytorch搭建孪生神经网络(Siamese network)比较图片相似性 学习前言 什么是孪生神经网络 代码下载 孪生神经网络的实现思路 一.预测部分 1.主干网络介绍 ...

  4. SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images论文介绍

    SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images 该论文受DenseNet and N ...

  5. 基于caffe的度量学习实现(Siamese network Triplet network)

    基于caffe的度量学习实现,主要是孪生网络和三元组网络(Siamese network & Triplet network)实现图像的分类和度量. 包含数据集制作脚本,训练测试脚本和pyth ...

  6. 【深度学习】孪生网络(Siamese Network)的模式和训练过程

    [深度学习]孪生网络(Siamese Network)的模式和训练过程 文章目录 1 概述 2 Siamese network 孪生神经网络 3 孪生神经网络和伪孪生神经网络分别适用于什么场景呢? 4 ...

  7. 论文笔记:孪生神经网络(Siamese Network)

    Siamese Network 原文:<Learning a Similarity Metric Discriminatively, with Application to Face Verif ...

  8. Caffe官方教程翻译(3):Siamese Network Training with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  9. 【模型解读】深度学习网络之Siamese Network网络

    文章首发于微信公众号<有三AI> [模型解读]深度学习网络只能有一个输入吗 继续我们之前的专栏<模型解读>,今天说多输入网络,很久没写了因为实在是有更重要的事情. 平常我们所见 ...

最新文章

  1. 计算机维护系统Win8PE,u启动windows8PE工具箱
  2. 马斯克:SpaceX成功的背后,经历了18次失败、被骂是骗子、几近破产
  3. php成绩管理前段模板,php学生成绩管理系统(模板).doc
  4. [Java] Web开发环境搭建 - MyEclipse 篇
  5. DataNumen DWG Recovery中文版
  6. CVPR 2021 | 天津大学提出PISE:形状与纹理解耦的人体图像生成与编辑方法
  7. linux驱动头文件说明
  8. erlang四大behaviour简述
  9. 自动化测试框架selenium+java+TestNG——配置篇
  10. 自己调用NTDLL函数
  11. 一个人磊个小山包,与大家磊同一个小山包
  12. 最新影视小程序源码去授权版免费下载
  13. 关于通过请求获取的验证码不正确的解决的破解方法
  14. 求内切圆半径的c语言编程,数学内切圆半径公式
  15. 2022年茶艺师(初级)考试试题及在线模拟考试
  16. php月份转英文缩写,将日期转换成时间戳 strtotime
  17. 表格分组标签:表格行分组中的隐藏功能
  18. 基于 Apache Kylin 的微博舆情实时分析(内含 Demo)
  19. 医疗行业信息系统面试准备
  20. matlab数值差分二阶倒数,MATLAB07:数值计算

热门文章

  1. Py函数直接传入root是啥意思_Python内部函数——用处何在?
  2. php内核介绍及扩展开发指南,4.5. 发布扩展信息
  3. mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区
  4. android web3j 代币查询_Android通过web3j以太坊智能合约交互
  5. 后端技术:Maven 最全知识总结,值得收藏!
  6. 电脑维修:电脑维修必备工具整理
  7. 8 大错误SQL用法,你肯定踩过坑!
  8. 北漂、海漂的你,每个月发薪资支付生活成本后还剩多少钱
  9. Jquery一些常见性能的问题
  10. HTTP协议(1)—HTTP的连接