Siamese Network 孪生网络

 

介绍:算法

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

 

原理:函数

主要思想是经过一个函数将输入映射到目标空间,在目标空间使用简单的距离(欧式距离等)进行对比类似度。在训练阶段去最小化来自相同类别的一对样本的损失函数值,最大化来自不一样类别的一堆样本的损失函数值学习

给定一组映射函数这里写图片描述,其中参数为W,咱们的目的就是去找一组参数W。使得当这里写图片描述这里写图片描述属于同一个类别的时候,类似性度量这里写图片描述是一个较小的值,当这里写图片描述这里写图片描述属于不一样的类别的时候,类似性度量这里写图片描述较大。这个系统是用训练集中的成对样本进行训练。当这里写图片描述这里写图片描述来自相同类别的时候,最小化损失函数这里写图片描述,当这里写图片描述这里写图片描述来自不一样类别的时候,最大化这里写图片描述spa

 

最终思想:设计

其实讲了这么多,主要思想就是三点: 
一、输入再也不是单个样本,而是一对样本,再也不给单个的样本确切的标签,并且给定一对样本是否来自同一个类的标签,是就是0,不是就是1 
二、设计了两个如出一辙的网络,网络共享权值W,对输出进行了距离度量,能够说l一、l2等。 
三、针对输入的样本对是否来自同一个类别设计了损失函数,损失函数形式有点相似交叉熵损失: blog

 最后使用得到的损失函数,使用梯度反传去更新两个网络共享的权值W。图片

 

 

在我我的理解,Siamese就是一个类似度比较(模板匹配也能够,就是这类东西)算法,比较目标帧中和模板图片的类似程度,给出类似度最大的位置,就是目标帧中目标所在的位置。it

用做者的话说就是离线训练一个通用的类似学习问题,可以用在在线跟踪上面。模板

相关文章
相关标签/搜索