Learning to Compare Image Patches via Convolutional Neural Networks【论文笔记】

这是一篇论文笔记,本篇笔记会记录一些我认为关键的细节以及心得体会。论文地址:httphttps://arxiv.org/abs/1504.03641
论文的出发点是使用卷积神经网络去学习一个相似函数(similarity function),并探讨了多种网络结构。笔者侧重于去了解论文中提及的不同网络结构。

一、数据集简介(Dataset)

我们使用一个包含成对原始图像块的大型数据库(database)作为唯一输入。成对包括匹配的(matching)和未匹配的(non-matching)。使用彩色图像数据集(dataset)和灰色图像数据集都行,使用彩色数据集进行训练能取得更好的效果,但为了和其他方法对比,论文中使用灰色图片数据集进行训练。

本论文中图片块大小固定为64x64,除了使用SPP结构时输入图像大小无所谓外(SPP会在第三部分介绍)。

针对不同的实验,作者使用了不同的数据集,具体使用什么数据集会在实验部分介绍。

二、基本模型(Basic models)

我们是从成对的图像块中进行学习,并不是所有结构都可以从成对图像中学习的,下面先介绍三种可行的神经网络结构:2-channel,Siamese, Pseudo-siamese

2-channel

(下图左边)
直接将成对的图像叠起来,形成两通道的图像进行训练,所以称为两通道神经网络。其中的结构就是一个普通的卷积神经网络,最后再加一个决策层(decision layer),输出一个值。

Siamese

(上图右边)
在神经网络中有两个分支,每个分支有相同的结构而且共享权值(shared),这就是孪生神经网络。孪生神经网络的两个分支可以看成特征提取模块,决策层看做相似函数。

Pseudo-siamese

(上图右边)
和孪生神经网络不同的是:伪孪生神经网络的两个分支结构可以不同,不共享权重。所以,相对于孪生神经网络,伪孪生神经网络具有更高的灵活度(flexibility),但没2-channel灵活度高。

在测试时,由于孪生和伪孪生神经网络可以提前计算出所有的特征描述符,然后再进行相似度计算,所以测试效率(efficiency)更高。

三、其他模型(Additional models)

Deep network

在论文Very deep convolutional networks for large-scale image recognition中提出更深的神经网络会取得更好的结果。所以本论文作者也借鉴这种思想,运用到自己的模型中。具体由一个4x4卷积和6个3x3卷积组成,使用relu激活函数。这就可以替换掉第二部分基本模型中的卷积网络部分。

Central-surround two-stream network

该结构由两个stream组成(如下图),这里stream可以翻译成“流”,但有点奇怪,所以本文保留英文的表达。这里每个stream使用孪生神经网络的结构,当然也可以使用上面三个基本结构中的任何一个。
我们称右边stream为the central high-resolution stream,顾名思义,我们取每个patch(64x64)中间的32x32部分作为输入,没有降低分辨率。我们称左边的stream为the surround low-resolution stream,将每个patch降采样两倍作为输入,大小也为32x32。

使用该结构有几大优点。首先,可以获取多分辨率的信息。除此之外,我们考虑中间部分两次(包括高分辨率和低分辨率),将更多的注意力放在中间部分,周围部分有更少的注意力,这会取得更好的准确率(因为这样我们允许周围部分有更大的差异)。最后,由于输入patch大小减半,训练效率也会更高。

Spatial pyramid pooling (SPP)

前面也提到了,如果使用SPP结构就不需要固定输入patch大小。下面参考何恺明大神的论文Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

SPP将特征图划分为不同的bins,例如下图从右到左,bins数分别为1x1、2x2、4x4。再对每一个bin进行pooling(可以是max-pooling、average-pooling等),分别输出1x256、4x256、16x256(256为输出特征图channel数)。最后,得到一个固定长度的特征向量。

由于bins是固定的,所以无论输入多大,最终结果长度都一样。而在基于滑动窗口的卷积中,输出大小与输入大小相关。

当然,SPP也有许多优点,本文并不赘述,详细可见何恺明的论文。自此,本篇论文的基本模型结构也介绍完了。

四、优化(Optimization)

论文中所有模型都采用下图的损失函数

这个损失函数有两项,一个正则化项(regularization)和一个铰链损失(hinge-based loss)项。在上图损失函数公式中, o i n e t o_i^{net} oinet代表神经网络输出, y i y_i yi是标签: { − 1 , 1 } \{-1,1\} {1,1},其中 -1 代表patch对不匹配,1 代表匹配。

公式中的正则项不做介绍,铰链损失项同SVM中的损失项类似,我们以最简单的SVM二元分类来推导。如下图有两类("x"为正类,"o"为负类),我们需要找到一个函数( y ^ = a x + b \hat{y}=ax+b y^=ax+b,相当于我们神经网络的输出 o i n e t o_i^{net} oinet)将两类分开。

y i = 1 y_i=1 yi=1 的时候,我们希望输出 y ^ = a x + b > 0 \hat{y}=ax+b>0 y^=ax+b>0;当 y i = − 1 y_i=-1 yi=1 的时候,我们希望输出 y ^ = a x + b < 0 \hat{y}=ax+b<0 y^=ax+b<0。其实为了得到更好的效果,即分界线离二类都比较远,我们会要求输出尽可能远离分界线。如下图,我们要求正类和负类不仅仅在分界线两侧,还要在蓝色区域两侧。
在这里插入图片描述
具体实现,只需更改一点点:

  • y i = 1 y_i=1 yi=1 的时候,我们希望输出 y ^ = a x + b > α \hat{y}=ax+b>\alpha y^=ax+b>α α > 0 \alpha>0 α>0
  • y i = − 1 y_i=-1 yi=1 的时候,我们希望输出 y ^ = a x + b < − α \hat{y}=ax+b<-\alpha y^=ax+b<α α > 0 \alpha>0 α>0

将上面两点合起来: α − y i o i n e t < 0 \alpha-y_io_i^{net}<0 αyioinet<0 ( α > 0 ) (\alpha>0) (α>0),这里还将上式的 y ^ \hat{y} y^ 换为了 o i n e t o_i^{net} oinet。所以,当分类成功即满足上式时,我们希望 l o s s = 0 loss=0 loss=0 ;当分类错误即上式大于零时,我们希望 l o s s loss loss越大越好,这里直接使用 l o s s = α − y i o i n e t loss=\alpha-y_io_i^{net} loss=αyioinet。写成一个具体的函数:
l o s s = m a x ( 0 , α − y i o i n e t ) loss=max(0,\alpha-y_io_i^{net}) loss=max(0,αyioinet)

在训练时,作者使用了**数据增强(Data Augmentation)**来对抗过拟合。将patch对进行水平和垂直翻转,旋转90、180、270度。作者说没有发现过拟合,每次差不多训练两天。作者还提供了超参数,具体见论文。

五、实验(Experiment)

Local image patches benchmark

我们使用由 Matthew Brown,Simon Winder,Gang Hua三位创建的基准(benchmark)数据集,该数据集由三个子数据集组成:Yosemite,Notre Dame,and Liberty,现在的数据集变成了Liberty,Notre Dame,Half Dome这三个。每个图像块(patch)都是大小为64x64的灰度图像,具有规范的尺度和方向。在由高斯差分(DOG)或者Harris获取的特征点周围进行采样得到每个patch。具体处理方法和实现细节见论文:Discriminative Learning of Local Image Descriptors

在评估的时候,我们生成ROC曲线,记录假阳率(false positive rate) 在召回率 (recall)95% 时的值(FPR 95)。作者将上述三个数据集两两组合,得到训练集和测试集。我们还计算了不同组合得到的平均值mean,表中的mean(1,4)代表只平均前四个组合得到的结果。至于为什么要计算一个mean(1,4),我认为只是为了和前人的工作统一罢了。(注:表中最后一列的结果是传统算法SIFT得到的结果)

观察上表,基于2-channel的方法表现比较好,其中2ch-2stream表现最好。基于siam的方法没有传统方法好,其中的siam-2stream方法最好,这也证明了多尺度信息在匹配中的重要性。

Wide baseline stereo evaluation

这一部分的评估,使用数据集“fountain” and “herzjesu” ,由Strecha等人提出。(后面再更吧)

Local descriptors performance evaluation

我们使用Mikolajczyk数据集进行局部描述符的评估。

六、结论(Conclusions)

通过作者实验,作者发现基于 2-channel 神经网络模型在所有结果中表现最好,以后还需要探索如何加快评估(evaluation)效率。

至于siamese-based architectures 和 2-stream multi-resolution models也表现强健,总能提高模型的性能,也证明了多尺度信息的重要性。当然,基于SPP结构的模型也得到同样的结论。

最后,单纯使用更大的数据集进行训练可能会进一步提高模型整体性能。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨BOSS响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值