Siamese Network介绍

摘要:
暹罗网络主要用于测量两个输入的相似性。如下图所示,网络1和网络2是共享权重的相同神经网络。该网络将两个输入映射到一个新的特征空间中,并通过设计的距离相关损失函数训练网络参数,使得训练后的网络可以测量两个输入的相似性。当有许多或不确定的类别需要分类时,通常使用暹罗网络,但每个类别的样本很少,例如人脸识别。

Siamese Network主要用于衡量两个输入的相似程度,如下图所示,Network 1和Network 2是共享权值的相同神经网络,这个网络将两个输入映射到新的特征空间中,通过设计好的与距离有关的损失函数来训练网络参数,使得训练好的网络可以衡量两个输入的相似程度。

Siamese Network介绍第1张Siamese Network经常用于要分类的类别很多或者不确定,但每个类别的样本比较少的情况,例如人脸识别。针对Siamese Network的训练可以设计多种不同的损失函数,本文介绍以下两种:

1. Triplet Loss. 以人脸识别为例,训练过程中的模型架构如下图所示:        

Siamese Network介绍第2张在训练过程中每次同时输入三张人脸图片$(x, x^+, x^-)$,其中$x$和$x^+$为同一人,$x$和$x^-$为不同的人,损失函数的设计原理是使得网络输出$Net(x)$和$Net(x^+)$的距离很小,而$Net(x)$和$Net(x^-)$很大,Triplet Loss的形式可表示为:$$L(x, x^+, x^-) = max left(|Net(x)-Net(x^+)|_2^{2}-|Net(x)-Net(x^-)|_2^{2}+alpha, 0 ight)$$其中$alpha$为一个预先给定的正值。

Siamese Network介绍第3张Siamese Network介绍第4张
def triplet_loss(y_pred, alpha = 0.2):
    """
    Arguments:
    y_pred -- python list containing three objects:
            anchor -- the network output for the anchor images x, of shape (None, output_size)
            positive -- the network output for the positive images x+, of shape (None, output_size)
            negative -- the network output for the negative images x-, of shape (None, output_size)    
    Returns:
    loss -- real number, value of the loss
    """  
    anchor, positive, negative = y_pred[0], y_pred[1], y_pred[2]
    # Compute the (encoding) distance between the anchor and the positive
    pos_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, positive)), -1)
    # Compute the (encoding) distance between the anchor and the negative
    neg_dist = tf.reduce_sum(tf.square(tf.subtract(anchor, negative)), -1)
    # Subtract the two previous distances and add alpha.
    basic_loss = tf.add(tf.subtract(pos_dist,neg_dist), alpha)
    # Take the maximum of basic_loss and 0.0. Average over the training batch.
    loss = tf.reduce_mean(tf.maximum(basic_loss, 0.0), axis=None)
    return loss
Triplet Loss

网络训练好之后,使用Siamese Network进行两个输入相似程度的判断。仍以人脸识别为例,对输入的两张人脸图片$x_1$和$x_2$计算距离$d(x_1,x_2)=|Net(x_1)-Net(x_2)|_2$,若距离小于预先给定的临界值threshold,则判断为同一人,否则为不同的人,如下图所示:

Siamese Network介绍第5张

2. Binary Classification Loss. 如下图所示,在训练过程中每次输入两张图片$(x^{(i)},x^{(j)})$,从网络输出$f(x^{(i)}),f(x^{(j)})$后计算为同一人的概率$hat{y}$:

Siamese Network介绍第6张$$hat{y}=sigmoidleft(sum_{k=1}^{output{\_size}} w_{k}left|fleft(x^{(i)} ight)_{k}-fleft(x^{(j)} ight)_{k} ight|+b ight)$$若两张为同一人,则真实标签$y$为1,否则为0,使用Logistic回归中的交叉熵损失函数,即$$L(x^{(i)},x^{(j)})=L(hat{y},y)=-ylnhat{y}-(1-y)ln{(1-hat{y})}$$训练结束后对输入的两张图片计算$hat{y}$即可判断是否为同一人。

参考资料

免责声明:文章转载自《Siamese Network介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Zookeeper 简介创建oracle数据库时,出现ORA-00922: 选项缺失或无效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

matlab读取cvs文件的几种方法

matlab读取CVS文件的几种方法:1,实用csvread()函数csvread()函数有三种使用方法:1、M=csvread2、M=csvread3、M=csvread第一种方法中,直接输入文件名,将数据读到矩阵M中。textscan函数读取的结果会存在cell数组中。...

安装pygame

在python3中安装pygame库。一段时间后,您可以看到安装成功,并且可以导入pygame...

LaTeX表格tabular背景色添加技巧 [转]

我们所用的宏包为colortbl,这个宏包可以设置表格中数据、文本、行、列、单元格前景和背景以及边框的颜色,从而得到彩色表格。同时需要array和color两个宏包的支持。宏包提供了一组着色命令,经常用到是列着色命令,其格式为:\columncolor[色系]{色名}[左伸出][右伸出]。常用色系有三原色rgb灰度gray和四色cmyk三种;被预定义的色名有...

oracle报ORA-08103: 对象不再存在错误

今天,在导入数据时,数据库多次抛出异常。最常见的原因是同时操作。有人截断了表,然后将其放入选择表中。在群里发布错误,有人立刻出来认出他,说他正在整理表格……如果不是因为这个原因,百度也给出了其他尝试的计划:再次执行;查询时添加架构。...

ECMWF 和 GFS 模型

请注意,这里的命名法有点混乱,但ECMWF代表欧洲中期天气预报中心,是组织和模型的名称。从统计上讲,非常明确的答案是ECMWF始终比GFS表现更好,如上面的模型技能得分图所示。说到飓风,ECMWF和GFS模型在预测飓风或热带风暴可能去哪里方面做得相当好,但在确定强度方面却出了名的糟糕这将是。...

关于异常STATUS_IN_PAGE_ERROR(0xC0000006)

表示0x%p处的指令引用了位于0x%p的内存。由于0x%x的I/O错误状态,未将所需数据放入内存。设备如果读取出错,驱动程序可以返回此异常。其定义如下:////MessageId:STATUS_IN_PAGE_ERROR////MessageText:////Theinstructionat0x%preferencedmemoryat0x%p.Therequ...