【Translate】Learning to Compare Image Patches via Convolutional Neural Networks

翻译:
Learning to Compare Image Patches via Convolutional Neural Networks

Abstract

这篇文章我们展示了如何直接从图片信息(例如:不需要存储人为设计的特征)产生一个相似函数,这个相似函数是用来解决比较两张图片的问题,这个问题是很多cv问题的基本问题。为了加密这个函数,我们采取了一个基于卷积网络的模型,这个用变化的图片进行训练。训练完成后,我们探索和学校多种神经网络结构,这些结构我们应用于这项工作。我们展示了这个方法,这个方法能优于几个问题和一些基准数据库的state-of-art

1. Introduction

比较两张图片可能是计算机视觉领域和图片分析的最基本的任务之一。比较两者图片通常作为一个子程序再多种视觉任务中扮演重要的作用。这些能够从一些低级的任务如structure from motionwide baseline matchingbuilding panoramassuper-resolution到高级应用如object recognitionimage retrievalclassification of object categories再到一些角色例子(characteristic examples)。
当然,决定两张图片是否是一样或者不一样是一个相当困难的问题因为存在很多因素影响最后图片的外观。这些包括视点的变化、各种场景的总体光照的变化、遮挡、阴影和相机设置上的不同等等。实际上,许多手动设计特征表述在比较图片方向上有很大的发展,包括SIFTSIFT在计算机视觉社区有很大的影响。但是,这种人为设计描述可能没有考虑在那些决定图片外观的先前因素考虑进去。另一方面,如今一个能够容易得到(或者用软件产生)的包含图片之间的对应关系的大型数据库。这提出如下的问题:我们能够合理的使用这些数据库,自动的学到图片匹对的相似函数?
这篇文字的目标是肯定地解决上述问题。因此我们的目标是从scratch没有尝试使用人为设计特征而是直接从标记的原生图片学到的函数产生一个图片匹配相似函数。最后,收到最近神经网络和深度学习的发展,我们选择用深度卷积网络来表达这个函数。为了做这些,我们也感兴趣解决什么样的网络结构最好的应用在这个问题。我们因此探索和提出各种各样的网络的类型,这种架构有不同的权衡和优势。在这些所有的例子中,为了训练这些网络,我们使用一个一个大型的包括原生图片的匹配的数据库作为单一的输入。这需要我们简单的通过丰富这个数据库更进一步改善我们方法的表现(因为那些自动产生图片的软件确实足够的)。
为了总结这个部分,本文的主要贡献如下:

  • 我们直接从数据中(例如,没有使用任何人工设计的特征)得到一个相似函数,这个相似函数能够隐士的将转换和影响考虑进去(由于,包括a wide baseline, illumination等等)。
  • 我们发现和提出一个多种不同的神经网络模型来表达这个函数,同时图吃提出了改善的网络架构,如文献[10]
  • 我们将我们的方法应用到几个应用和benchmark dataset,展示出比state-of-the-art更好的优势,也说明比图片特征描述比人工特征描述有更好的表现或者其他学到的描述正如文献[19]中提到的。
    更重要的是,由于卷积的特征,最后结果描述即使在一个密集的方法(a dense manner)也有很有效率。

'img'

2.Related Work

用卷积的方法去比较两个图片是使用描述符和一个欧拉平方距离。大多数的描述符是手动构造的例如SIFT或者DAISY。最近,学习一个描述符的方法已经被提出来了(例如:DAISY-like的描述符学习池化区域和降维操作)。Simonyan et al提出一个对于训练所有的任务凸的程序。
然而,我们的方法受到最近卷积神经网络的发展的启发。虽然这些模型在训练过程中涉及到一个高的非凸的目标函数,他们已经在各种各样的任务中展现出优异的结果。Fischer et al.AlexNet网络(AlexNet也是在Imagenet数据库上训练的)中分析卷积描述符的表现并且显示出这些卷积描述符在很多案例除了模糊上比SIFT有更好的表现。它也提出了一个无监督的训练方法推导出比SIFTImagenet训练好的网络更好的描述符。
ZbontarLeCun在文献[28]最近提出了一个基于CNN的方法来比较两个图片,这个方法在一个很小的基线的具体问题来计算损失并且显示出最好的在KITTI数据库的表现。然而,这个工作的重点仅仅是在一个狭小的基线具体问题中的非常小的匹配关系中进行匹配。相反的,我们的目标在于得到一个相似函数,这个函数能够解决一个更为宽泛的更加有挑战的应用中,包括,例如,wide baseline stereofeature matchingimage retrieval

3.Architectures

正如已经提到的,神经网络的输入为一组图片的匹配。我们的模型没有强加一些与输入通道数有关的限制,即给定一个彩色图片的数据库网络能够被训练到更好的表现。然而,为了能够将我们的方法和state-of-the-art方法在现存的数据库相比较,我们仅仅在训练过程中训练灰度图像。更重要的是,在3.2部分描述了SPP模型的期望,在这些例子中我们嘉定给网络的输入固定为64x64(这意味着原始的图片可能必须resize到上面描述的空间维度)。
有几种方法来通过网络处理匹配的图片和如何在这些例子中共享信息。处于这个原因,我们探索和测试了集中方法。我们从3.1部分开始描述我们研究的三种基本的神经网络架构即,2-channelSiamesePseudo-siamese,这些方法在速度和准确度上提供了不同的优势(注意:通常应用到图片匹配技术暗示测试一个图片和一个大规模的其他图片进行匹配,并且按照这样来看重新使用计算好的信息通常是有用的)。重要的是,这些架构来愿意不同的方法,并且这些方法都尝试去解决如下的几个问题:当组成一个比较图片的相似函数的时候,我们是否要选择去计算每个图片的描述符?或者我们是否要选择跳过那些与描述符计算相关的部分并直接处理相似估计?
另外,处理上面的基本模型,我们也在3.2部分讨论一些与网络结构有关的额外的变量。这些变量不是相互独立的,并且这些变量能够与在3.1部分描述的基本模型相关联。总之,这些意味着多种模型可以应用于比较图片。

3.1 Basic Models

  • 孪生网络(Siamese):这种类型的网络与有一个描述符类似。孪生网络有两个分支,这两个分组共享同样的架构同样的权重。每一个分支的输入为匹配图像的一张图片,并且通过一系列的卷积层、ReLU和最大池化层。在我们的测试中,我们使用一个顶层网络,这个顶层网络包含2个线性全连接层(每个有512个隐藏单元),这两个全连接层由一个ReLU激活层分开。
    孪生网络的每个分支被看作描述符计算模块(ddescriptor computation modules)和顶层网络—可以看作相似函数(similarity function)。对于完成从两组图片中进行匹配的任务,描述符能够在第一次独立地使用分支进行计算,然后用顶层网络来进行匹配(或者甚至使用像$l_2$的距离函数)。
  • 伪孪生网络(Pseudo-siamese):就复杂性而言,这种架构可以认为是介于孪生网络和2-channel网络直接。更准确的来说,伪孪生网络拥有上述孪生网络所描述的特征但是两个分支的全重是分开的,即不共享的。这增加了训练过程中调整参数的数量,并且伪孪生网络不仅相比一个严格的孪生网络也比下面描述的2-channel网络更加灵活可变。另一方面,伪孪生网络在测试时候保持了孪生网络的高效性。
  • 2-channel:不同于前面描述的网络,2-channel网络在架构中没有直接的描述符的记号。我们简单的认为2-channel网络将两张匹配的图片作为输入,然后这两张图片输入到网络的第一个卷积层.在这个案例中,网络的最底部有一系列的卷积、ReLU和最大池化层组成。这部分的输出然后被作为顶部模块的输入,顶部模块有一个简单全连接线性层一个输出组成。这个网络提供一个相对于上面提到的网络架构的更加灵活的结构因为它从头开始联合处理两个图片。更多的是,2-channel可以很快的训练,但是通常来说他的测试时间非常多,因为它需要将测试的所有图片联合起来。

3.2 Additional models

  • 深度网络(Deep network):我们把SimonyanZisserman在文献[29]中提出的技术所建议的卷积网络分成更小的3x3的核,由ReLU激活层分开,这会增加网络的非线性(变量/函数)并且使得决策函数变得更加具有对抗性。他们也提出在初始化这样的网络会变得非常复杂,但是我们没有观察到这个线性并且从草图中训练网路没有问题。在我们的例子中,当将这个技术应用到我们的模型中,最后架构的卷积部分由1个4x4的卷积层和6个3x3的卷积层组成,由ReLU激活函数分开。正如我们后面所谈到的实验结构所看到的,这个网络架构的改变可以使得最后的结果表现的更好,这和我们观察到的结果是类似的。
  • 中央环绕双流网络(Central-surround two-stream network):正如这个名字所提到的,我们提出的架构由两个分开的流、中心和环绕组成,这使得我们可以在空间处理两个不同的解析度。更准确的来说,中间的高解析度的流以32x32的图片作为输入,这个图片由剪裁原始图片得到的,剪裁的方式是剪裁原始64x64图片的中心32x32部分,这是通过下采样输入图片的一半。两个流的结果能够通过使用任何一个在3.1部分讨论的基本架构得到。
    利用这样的一个两个流的架构的原因是多个解析度的信息在改善图片匹配中是非常重要的。更重要的是,通过两次考虑图片的中心部分(即 在高解析度和低解析度流),我们隐式的更注重那些离相片中心的更近的像素并且更少在意那些周边的像素,这可以帮助我们更好的改善匹配的精度(重要的是,因为下采样采取的是池化,周边的像素在匹配过程中由更多的方差)。需要注意的是所有的输入的维数都被降低,主要的两个原因是。结果是,训练过程变得更快,这是另外的一个优点。
  • 通过SPP比较图片(Sptial pyramid pooling network for comparing patches):到目前为止我们假设网络的输入被设定在固定的size即64x64。这个要求来源于一个事实,这是因为网络的最后一个卷积层的输出需要一个提前定义好的维度。因此,当我们需要比较任意尺寸的图片时,这就意味着我们第一次必须resize这些图片达到上面的空间的维度。然而,如果我们看看像SIFT这样的描述符的例子,例如,我们能够发现有一种方法去解决任意尺寸的问题,这个方法就是通过调整空间池化区域的大小和输入图片的大小的比例,这样我们仍然保持需要固定最后一个卷积层输出的维度,而不需要退化输入图片的解析度。
    这也是最近提出的SPP-net架构背后的想法,这相当于在全卷积层和卷积层之间插入一个空间椎体池化层。这个层次通过空间的池化了聚集最后一个卷积层的特征,池化的大小区域依赖于输入的大小。受到这点的启发,我们也考虑到将3.1部分所讨论的模型应用到SPP架构。这可以对所有考虑到的模型很轻松的实现。

Learning

  • 优化(Optimization):我们用强监督学习来训练我们的模型。我们使用一个基于合页(hinge-based)的损失术语和平方的l_2范数的正则化的损失函数,我们的目标时优化下面的目标函数:
    $min_w \frac{\lambda}{2} \mid\mid w\mid\mid_2 + \sum_{i=1}^Nmax(0, 1 - y_io_i^{net})$
    其中$w$是网络的权重,$o_i^{net}$是网络中第$i$个训练样本,并且$y_i \in {-1, 1}$是对应的标签(-1 和 1 分别代表不匹配和匹配)。
    使用ASGD方法来训练模型,learning rate为1.0, 动量为0.9并且权重的deacy$\lambda = 0.0005$。训练过程中的批的大小为128。权重随机初始化并且所有的模型从草图中训练。
  • 数据增强和前处理(Data Augmentation and preprocessing):为了克服过拟合,我们通过横向、纵向和旋转翻转所有的匹配图片增强训练数据分别有90、180和270个程度。当我们用这种方式以一个特定迭代一般是2天来训练模型时,我们没有注意到过拟合,然后我们测试在测试集上的表现。