Siamese Neural Network-鲸鱼比赛-kernel 解读3

https://www.kaggle.com/martinpiotte/whale-recognition-model-with-score-0-78563/notebook

Siamese Neural Network  比较了两张图片,并决定这两张图片是否来自同一条鲸鱼,通过对测试集中每张图片和训练集中每张图片进行测试,可以通过对图片进行排序以确定最有可能的鲸鱼。

Siamese Neural Network 由两部分组成,CNN将输入的图像转为描述鲸鱼的特征向量,这个CNN 称为branch model,采用Resnet 的灵感我做了一个定制的模型。第二部分称为head model,用来比较CNN得到的特征向量,并决定鲸鱼类别匹配与否。

(1)Head model

head model,用来比较CNN得到的特征向量,并决定鲸鱼类别匹配与否。典型的方法是使用有对比损失函数的距离度量(例如L1),但是还可以尝试其他的:

  • 距离度量是考虑loss 值为0 的两个特征为完美匹配,loss 值很小的为好的匹配,完全不相等的为不好的匹配,但是,我认为阳信号中激活的特征会多于阴信号。尤其是在有Relu 激活函数下,这个概念在距离度量中丢失了。
  • 另外 距离度量没有提供负相关的特征,例如,如果两个图像都有特征X,他们必须是相同的鲸鱼,如果他们同时有相同的特征Y,那么X 是不那么重要了。
  • 同时,存在这样的隐形假设,交换这两个图像必须产生相同的结果。

为了解决这些问题,我采取了以下方法:

  • 对每个特征i计算和,积,绝对差和平方差(x+y, xy, |x-y|,  (x-y)^{^{2}}),这个四个值通过一个小的神经网络传递,它可以学习到匹配0以及非0 的权重,每个特征都使用相同网络的相同特征。
  • 输出是转换的特征的权值和,带有一个sigmoid 激活函数,权重的值是多余的,因为权重只是特征的一个缩放因子,可以由另一层学习,然而,它允许负权重,这个是Relu得不到的。

(2)Branch model

Branch model是一个CNN模型,以下是其设计的关键要素:

  • 由于训练数据集很小,我试图保持学习参数相对小,同时保持模型足够的表现力。例如,Resnet 的结构比VGG的结构更经济。
  • branch 模型由6个block 组成,每个block 处理分辨率越来越小的映射,带有中间池化层。

Block 1 - 384x384

Block 2 - 96x96

Block 3 - 48x48

Block 4 - 24x24

Block 5 - 12x12

Block 6 - 6x6

 

Block 1 有一个单独的卷积层,步长为2,2*2 的最大池化层,高分辨率导致了内存使用很高,因此这里做了一些工作来节省内存。

Block2 有两个3*3 与VGG 相似的卷积,这些卷积可以节省内存,然后tensor的维度为96*96*64,与初始的384*384*1 的图形体积相同,因此我们可以假设没有丢失任何重要的信息。

Block3到6 执行像卷积一样的Resnet ,原理是形成一个1*1 的子块来减少特征的数量,3*3 卷积和另一个1*1 的卷积可以将特征恢复到原来的维度,然后这些卷积的输出可以加到原始的张量上面(旁路连接),我使用了4个这样的子block,加上一个单个的1*1 卷积来增加池化后的特征数。

最后一步是全局最大池化,可以增强模型的鲁棒性。

head model

Siamese Neural Network-鲸鱼比赛-kernel 解读3_第1张图片

 

你可能感兴趣的:(图像分类)