siamese(孪生) 网络

article/2025/9/30 21:08:52

siamese 网络, 是05年Yann Lecun提出来的。它的特点是它接收两个图片作为输入,而不是一张图片作为输入。


文献资料:

摘抄自caffe github的issue697

Siamese nets are supervised models for metric learning [1].   译:孪生网络是一种监督学习,用于度量学习。


[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. http://yann.lecun.com/exdb/publis/pdf/chopra-05.pdf


Speaking of metric learning, I remember that @norouzi had proposed and open sourced a method that learned a Hamming distance metric to distinguish similar and dissimilar images [2].   译:说到度量学习,我记得@norouzi 曾经提出一个开源方法,该方法可以学习Hamming 距离度量,来分辨相似和不相似的图片。


[2] Mohammad Norouzi, David J. Fleet, Ruslan Salakhutdinov, Hamming Distance Metric Learning, Neural Information Processing Systems (NIPS), 2012.


下面介绍原始的孪生网络


                             


目的:比较两幅图片是否相似,或者说相似度是多少

输入:两幅图片

输出:一个相似度数值

         其实我觉得,用“计算相似度”这个词有点不合适,我觉得应该翻译为匹配程度。因为文献所采用的训练数据中,如果两张图片匹配,输出值标注为y=1,如果两张图片不匹配,那么训练数据标注为y=-1,也就是说,这个训练数据的标注方法,根本就不是一个相似度数值,而是一个是否匹配的数值。我们打个比方,有三样物体:钢笔、铅笔、书包,那么在训练数据中,就把钢笔和铅笔标注为y=1,而不是用一个相似度数值来衡量,比我钢笔和铅笔的相似度我们把它标注为y=0.9……,所以说用于用相似度这个词有点不合理,即使我们最后计算出来的值是一个-1~1之间的数……


下面介绍改进的的孪生网络


         2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章对经典的算法Siamese Networks 做了改进。

        先在这里解释下为什么作者要把它称之为:2-channel networks。理解了2-channel这个词,有助于我们后面理解算法。Siamese 网络,我们可以看到这个网络有两个分支组成,因为我们是要比较两张图片patch1、patch2的相似度。

Siamese 网络(2-branches networks)的大体思路:

1. 让patch1、patch2分别经过网络,进行提取特征向量(Siamese 对于两张图片patch1、patch2的特征提取过程是相互独立的)

2. 然后在最后一层对两个两个特征向量做一个相似度损失函数,进行网络训练。


paper所提出的算法(2-channel networks) 的大体思路:

1. 把patch1、patch2合在一起,把这两张图片,看成是一张双通道的图像。也就是把两个(1,64,64)单通道的数据,放在一起,成为了(2,64,64)的双通道矩阵,

2. 然后把这个矩阵数据作为网络的输入,这就是所谓的:2-channel。


     这样,跳过了分支的显式的特征提取过程,而是直接学习相似度评价函数。最后一层直接是全连接层,输出神经元个数直接为1,直接表示两张图片的相似度。当然CNN,如果输入的是双通道图片,也就是相当于网络的输入的是2个feature map,经过第一层的卷积后网,两张图片的像素就进行了相关的加权组合并映射,这也就是说,用2-channel的方法,经过了第一次的卷积后,两张输入图片就不分你我了。而Siamese网络是到了最后全连接的时候,两张图片的相关神经元才联系在一起。2015年CVPR文章几个重要创新写在下面:


------------------------------------分割线(以下是patch选取)---------------------------------

Patch的选取

        假设我们输入的是大小为64*64的一张图片,那么Central-surround two-stream network的意思就是把图片64*64的图片,处理成两张32*32图片,然后再输入网络,那么这两张32*32的图片是怎么计算得到的?

法1. Central-surround方法,也就是第一张图片是通过以图片中心,进行裁剪出32*32的图片,也就是下图的浅蓝色区域的图片。


法2. 下采样方法。直接通过对整张图片下采样的方法得到的,也就是说直接把64*64的图片进行下采样得到32*32的图片。其实这个就像多尺度一样,在图片处理领域经常采用多分辨率、多尺度,比如什么sift、还有什么高斯金字塔什么的,总之作者说了,多分辨率可以提高两张图片的match效果

这个Central-surround two-stream network可以和上面提到的2-channel、Siamese结合在一起,提高精度。下面就是Siamese和Central-surround two-stream network结合在一起的网络结构:


-------------------------------------分割线(以下是SPP原理)------------------------------------

       空间金字塔池化采样:这个又称之为SPP(Spatial pyramid pooling,空间金字塔池化)池化,这个又什么用呢?这个跟上面的有点类似,这个其实就类似于多图片多尺度处理,我们知道现有的卷积神经网络中,输入层的图片的大小一般都是固定的,这也是我之前所理解的一个神经网络。直到知道SPP,感觉视觉又开阔了许多,菜鸟又长见识了。我们知道现在的很多算法中,讲到的训练数据图片的大小,都是什么32*32,96*96,227*227等大小,也就是说训练数据必须归一化到同样的大小,那么假设我的训练数据是各种各样的图片大小呢?我是否一定要把它裁剪成全部一样大小的图片才可以进入卷积神经网络训练呢?这就是SPP算法所要解决的问题,训练数据图片不需要归一化,而且江湖传说,效果比传统的方法的效果还好。下面是Siamese和SPP结合在一起的网络结构:


就是在全连接层的前面加了个SPP层。总之这一步是为了使得网络可以输入各种大小的图片,提高网络的实用性,鲁棒性等。paper最后的算法就是:2-channel+Central-surround two-stream+SPP 的网络结构。




---------------------------------------分割线(以下举例)----------------------------------------

      有一篇文章和这个网络差不多,文章:《 Learning Deep Face Representation 》译:《学习深层人脸表示》。下面以这篇文章为例解释孪生网络。

      人脸的表示,易于实施, 叫做Pyramid CNN (金字塔CNN),采用了greedy-filter-and-down-sample (贪心-滤波-和-向下-采样) 的操作,使得训练非常快,而且高效,并且PyramidCNN可以和多尺度人脸特征结合。97.3% 的LFW。


传统的人脸特征表示的方法:


    注意文章的基本的网络结构不是传统上的CNN结构,而是“Siamese”网络【2005 Lecun 组的一篇文章】,它的特点是它接收两个图片作为输入,而不是一张图片作为输入。    

而文章中,作者采用深度神经网络,DCNN来提取特征,其网络结构图:


网络的主要特点:

1. 它们是由多个金字塔组成,分为不同个level级别的特征,

2. 每一个level的网络由两部分组成,一部分是共享的层,它由它的前一个level的网络层组成;另一部分是一个非共享层在每一层中训练只需要训练非共享层就可以

       共享层是由前一个level的的网络层共享过来,每一个神经网络中,共享层用来进行数据的预处理,比如卷积下采样等。非共享层用来训练已经处理好的图片(由于网络的共享层,使得每一个level的训练速度不会随着网络层数的增多而急剧变慢,提高训练时间,说白了也就是说每次只需要训练网络的最后一层就可以了,前面的层可以保持固定。)

       采用金字塔的原因在于:1.加快网络的训练速度;2. 可以提取多尺度人脸结构特征;

       注意每一个非共享level多个神经网络,分别对应于每个输入图像的patch(小块),有眼睛,鼻子,嘴。每个网络的训练目标函数都是下面的损失函数:



其表示的意思就是同一个人的距离要相互接近,而非同一个人的表示要相互远离。利用这个损失函数来进行网络的训练。训练方法:


最终的特征:它由所有的level所有的patch特征级联而成,而patch的选择则依赖于人脸特征点的检测alignment(校正)。最终形成的特征其实是过完全的,也就是说有很多的冗余,但是很多文章都表明这种冗余性对于识别来说具有重要性。应该来说每一个level所有的patch特征连接起来之后的向量就是一个人脸这个level的特征了,多个level的特征再连接起来就形成了多尺度的特征表示


文章还说了,Pyramid CNN方法提取的特征可以很稀疏,最少可以在8d,而在这么低纬度的特征下,其识别率还不低。通过相同的维度特征的情况下进行识别率比较:其中LBP特征是通过了PCA降维到相对应的维度。


新的评判标准:因为在LFW数据库上面的识别率已经达到了99%以上了,所以作者他自己提出了一个新的评判标准,在人脸verification(验证)中,正确的匹配可能会比错误的匹配少(在安全接入方面,希望false positive 要尽可能的小,已防止非法进入)。新的评判标准就是在固定一个错误的接受率(false positive rate FPR )阈值下,评判各个算法的性能,如识别率等。





http://chatgpt.dhexx.cn/article/qeeXA9FP.shtml

相关文章

Siamese Network(孪生网络)

模型结构 上图是孪生网络的简单模型结构,思路很简单,就是输入两个样本到同样的网络(参数结构相同),最后计算两个网络输出的距离,如果距离较近就认为是同一类,较远就认为是不同的类别&#xff0c…

51、目标的相似度检测模型Siamese部署rk3399pro、ncnn、mnn进行推理加速

基本思想:需要一个判断目标相似度的模型,来比对被检测目标和既定目标的相似度,测试图片仅有的几张图片,感觉一般,量化图片尽量多点对于rknn 链接: https://pan.baidu.com/s/1NFjnCBh5RqJXDxEjl9TzHg?pwdxev4 提取码:…

SPCL:Siamese Prototypical Contrastive Learning

论文链接:https://arxiv.org/abs/2208.08819 BMVC 2021 abstract CSL(Contrastive Self-supervised Learning)的一个缺点是,对比损失函数需要大量的负样本,以提供更好的理想互信息边界。 通过变大batch size来增加负样本数理,同…

Exploring Simple Siamese Representation Learning论文笔记

写在前面 大三狗随手记录,不喜勿喷。 主要思想 Siamese network常常被用来计算图像的两个增强之间的相似性,但可能会造成模型坍塌(即输出恒定)。作者在本文提出了一个非常简单的Simple Siamese network,简称Simsiam…

SiamCAR:Siamese Fully Convolutional Classification and Regression for Visual Tracking

文章目录 AbstractIntroductionProposed MethodFeature ExtractionBounding Box PredictionThe Tracking Phase 值得关注的几个问题Q1:输入的图片大小不一?Q2:在两者做相关性之前,如何得到特征图?Q3:两者的相关性计算是如何实现的&#xff1f…

TensorFlow搭建VGG-Siamese网络

TensorFlow搭建VGG-Siamese网络 Siamese原理 Siamese网络,中文称为孪生网络。大致结构如下图所示: Siamese网络有两个输入,一个输出。其中,两个输入经过相同的网络层知道成为一个n维向量,再对这个n维向量进行求距离&…

mesa 概述

技术关键词:mesa、OpenGL、dri、gpu、kmd、xsever 目录 一、mesa概述 二、mesa架构 1. 架构设计 2. 模块划分 三、mesa与linux图形系统中的其他模块的关系 四、mesa的编译 五、链接资源 总结 一、mesa概述 mesa是OpenGL、OpenGL ES、Vulkan、OpenCL的一个开…

Siamese 网络(Siamese network)

来源:Coursera吴恩达深度学习课程 上个文章One-Shot学习/一次学习(One-shot learning)中函数d的作用就是输入两张人脸图片,然后输出相似度。实现这个功能的一个方式就是用Siamese网络。 上图是常见的卷积网络,输入图片…

MISF:Multi-level Interactive Siamese Filtering for High-Fidelity Image Inpainting 论文解读与感想

深度学习模型被广泛应用于各种视觉任务的同时,似乎传统的图像处理方式已经被人们渐渐遗忘,然而很多时候传统图像处理方式的稳定性和可解释性依然是深度学习模型所不能达到的。本文是CVPR2022的一篇将传统与深度相结合进行inpainting的文章。 在图像inpa…

Siamese系列文章

说明 在学习目标追踪方面,慢慢读懂论文,记录论文的笔记,同时贴上一些别人写的非常优秀的帖子。 文章目录 说明综述类型笔记SiamFC笔记 SiamRPN笔记 DaSiamRPN笔记 SiamRPN笔记复现 SiamDW笔记 SiamFC笔记 UpdateNet笔记 SiamBAN笔记 SiamMa…

SiamRPN阅读笔记:High Performance Visual Tracking with Siamese Region Proposal Network

这是来自商汤的一篇文章 发表在CVPR2018上 论文地址 目录: 文章目录 摘要1.引言2.相关工作2.2 RPN2.3 One-shot learning 3.Siamese-RPN framework3.1 孪生特征提取子网络3.2 候选区域提取子网络3.3 训练阶段:端到端训练孪生RPN 4. Tracking as one-sho…

【度量学习】Siamese Network

基于2-channel network的图片相似度判别 一、相关理论 本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章对经典的算法Siamese Networks 做了改进。学习这…

【论文阅读】Learning to Rank Proposals for Siamese Visual Tracking

Learning to Rank Proposals for Siamese Visual Tracking:2021 TIP 引入 There are two main challenges for visual tracking: 首先,待跟踪目标具有类不可知性和任意性,关于目标的先验信息很少。 其次,仅仅向跟踪器…

深度学习笔记-----多输入网络 (Siamese网络,Triplet网络)

目录 1,什么时候需要多个输入 2,常见的多输入网络 2.1 Siamese网络(孪生网络) 2.1 Triplet网络 1,什么时候需要多个输入 深度学习网络一般是输入都是一个,或者是一段视频切片,因为大部分的内容是对一张图像或者一段…

Siamese networks

Siamese Network 是一种神经网络的架构,而不是具体的某种网络,就像Seq2Seq一样,具体实现上可以使用RNN也可以使用CNN。Siamese Network 就像“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的(共享权值即左…

Siamese Network理解(附代码)

author:DivinerShi 文章地址:http://blog.csdn.net/sxf1061926959/article/details/54836696 提起siamese network一般都会引用这两篇文章: 《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming D…

详解Siamese网络

摘要 Siamese网络用途,原理,如何训练? 背景 在人脸识别中,存在所谓的one-shot问题。举例来说,就是对公司员工进行人脸识别,每个员工只给你一张照片(训练集样本少),并且…

Siamese网络(孪生网络)

1. Why Siamese 在人脸识别中,存在所谓的one-shot问题。举例来说,就是对公司员工进行人脸识别,每个员工只有一张照片(因为每个类别训练样本少),并且员工会离职、入职(每次变动都要重新训练模型…

Siamese网络(孪生神经网络)详解

SiameseFC Siamese网络(孪生神经网络)本文参考文章:Siamese背景 Siamese网络解决的问题要解决什么问题?用了什么方法解决?应用的场景: Siamese的创新Siamese的理论Siamese的损失函数——Contrastive Loss损…

8.HttpEntity,ResponseEntity

RequestBody请求体,获取一个请求的请求体内容就不用RequestParam RequestMapping("/testRequestBody")public String testRequestBody(RequestBody String body){System.out.println("请求体: "body);return "success";}只有表单才有…