论文题目:Learning to Compare Image Patches via Convolutional Neural Networks
发表于:CVPR2015
论文地址:http://de.arxiv.org/pdf/1504.03641
论文代码:https://github.com/szagoruyko/cvpr15deepcompare
比较图像之间的补丁可能是计算机视觉和图像分析最基本的任务之一。
“Comparing patches across images is probably one of the most fundamental tasks in computer vision and image analysis.”
在不同图像中,由于视点、光照、遮挡、阴影、相机设置等因素的影响,同一patch在不同图像中往往呈现出不同的appearance,判断两个patch是否对应是一个具有挑战性的问题。
传统手工设计的特征,如SIFT,难以以最佳的方式捕获到同一patch因各种因素导致的appearance不同。
另一方面,人们可以很容易获得大量包含图像间patch对应的大型数据集。
此时就产生了一个问题:能否适当利用这些数据集来自动学习图像间patch的相似度函数?
本文主要解决这一问题。
目标是从0开始生成一个patch相似函数,不适用任何手动设计的特征,直接从带注释的原始图像patch对中学习该相似函数。使用深度卷积网络,本文探索并提出了各种类型的网络,拥有展示不同权衡和优势的架构。为训练这些网络,使用一个大型数据库作为唯一的输入,该数据库包括一对原始图像patch(包括匹配与不匹配)。
1)传统比较patch方法:使用descriptors 描述符和 squared euclidean distance 欧几里得距离的平方。
2)传统特征描述符方法:SIFT、DAISY。
3)我们的方法使用卷积神经网络,虽然这些模型在训练过程中包含高度非凸目标函数,它们在各种任务中表现良好。
4)Fischer研究AlexNet网络的convolutional descriptors在Mikolajczyk数据集的表现,发现除了模糊以外大部分情况比SIFT好。
5)Zbontar and LeCun提出基于CNN的方法来对比patches,为了计算小基线立体问题的cost。在KITTI数据集表现最好。
6)相较于聚焦在窄基线立体问题,我们发力于解决a broader set of apperance changes,应用在更宽的领域:宽基线立体问题;特征匹配;图像检索。(基线的本意是指立体视觉系统中两摄像机光心之间的距离,宽基线一词用于匹配时,泛指两幅图像有明显不同的情况下的匹配。产生这种情况的原因有可能为摄像机之间的位置相差很大,也有可能由于摄像机旋转或焦距的变化等因素产生的。)
输入:一对图像patch对
训练时只使用灰度图像patch,尺寸为64*64 (SPP模型除外)
网络可以通过几种方式处理patch对,以及如何做到信息共享。
为此,本文研究了3种网络架构:2-channel(2-通道) 、Siamese(孪生)、Pseudo-siamese(伪孪生)。以提供不同方面的权衡速度和准确度。
这些架构源于它们试图解决以下问题的不同方式:当构成一个用于比较图像patch的相似度函数时,我们是首先选择为每个patch计算一个描述符,然后在这些描述符之上创建一个相似度,还是选择跳过与描述符计算有关的部分,直接进行相似度估计?
1)Siamese:孪生。网络有两个分支,共享完全相同的架构和权重。
每个分支以patch对中的一个作为输入,再经过一系列卷积层、ReLU层和max-pooling层。
分支输出被连接到一个由线性全连接层和ReLU层组成的顶层网络。
图中:青色=Conv+ReLU,紫色:max pooling,黄色:全连接层。
测试时,使用两个全连接层(每层512个隐藏单元)组成顶层网络,中间用ReLU激励层隔开。
先用分支独立计算descriptors,顶层网络则是一个相似函数,用来匹配。
2)Pseudo-siamese:伪孪生。和上面siamese架构相同,但两个分支的权重不耦合,不共享。
增加了灵活性,可以在训练期间调整参数量。但是训练效率较siamese低,测试效率一样。
3)2-channel:2通道。这个网络架构没有descriptor的概念。
将一个输入对的两个灰度化的单通道patch拼接成一张2通道的patch(单通道问题转化为多通道问题),直接送入网络的第一个卷积层。
网络底层由一系列卷积、ReLU层和max-pooling层组成。这部分的输出作为顶层模块的输入。
顶层由一个带有单一输出的全连接线性决策层组成。
因为联合处理两个patch,更灵活,训练更快。但是测试时间很长,需要brute-force对所有patch组合进行测试。
a) Deep network:深度网络。将大的卷积层拆分为更小的3x3 kernels,每层kernel用ReLU激励层分开,以此增加网络内部的非线性,使决策函数更具有鉴别性。最终架构的卷积部分由1个4*4卷积层和6个3*3卷积层组成,中间由ReLU激活层分开。
b) Central-surround two-stream network:两个分流(central stream 中心流 和 surround stream 环绕流),每个分流两个支路。
优点:多分辨率的信息有助于帮助图像匹配。在两个分流中都考虑到了patch的中间部分,更加关注patch的中心部分像素,减小周边像素的影响,有助于提升匹配精度。同时将维度减小2倍,提升训练的速度。
c) Spatial pyramid pooling (SPP) network:空间金字塔池化网络。
为了解决这个问题,input patches需要固定的空间维度。
SPP网络就是在卷积层和全连接层中插入SPP层,该层通过空间池化对最后一个卷积层1的特征进行聚合,SPP层的池化区域大小取决于输入的大小。
网络结构的3次创新:
- 从siamese 到2-channel: 将输入对的2个灰度化的单通道patch(64*64)拼接成一个2通道的patch(64*64*2),直接使用双通道图像进行训练。经过第一个卷积层后,两张图像的像素进行加权组合和映射,联合使用了两图的信息,不再分彼此。而Siam网络则是到最后全连接层时,两图特征才进行关联。"This is something that indicates that it is important to jointly use information from both patches right from the first layer of the network."
- 结合Central-surround two-stream network: 联合使用图像patch中心区域(32*32)和边缘环绕区域的信息(64*64下采样为32*32),也着重关注patch中心区域的像素,类似多尺度。
- 结合Spatial pyramid pooling (SPP) network: 训练图像不需要归一化处理,不需要裁剪成同等尺寸进入网络。使用了图像的多尺度信息,效果更好。
- 最终的网络结构:2-channel+Central-surround two-stream+SPP
1)优化:强监督方式。铰链损失函数 + l2范式(Hinge-based loss term and squared l2-norm regularization)。学习目标函数如下所示:
o为第i个训练样本的网络输出,y属于-1到1之间,-1代表non-matching,1代表matching。
输入两个patch,输出两个patch的匹配相似度。作者将其当作了一个分类问题。
异步梯度随机下降算法(ASGD):持续的学习率1.0,动量0.9,权重衰减0.0005。mini-batches大小为128。权重随机初始化。
2)数据增强和预处理:水平、垂直翻转图片,旋转90、180、270度。减小过拟合的影响。
数据集:有标准的benchmark dataset: Yosemite、Notre Dame, and Liberty。
评判标准:95%召回率下的false positive rate(FPR95)。
实验结果:
得出的结论:
宽基线立体评价,应用在同一场景不同视点图像之间特征点的自动立体匹配。因为这一块不是目前关注的焦点,暂且跳过。
跳过。
深度学习(十六)基于2-channel network的图片相似度判别_hjimce的专栏-CSDN博客_卷积图像相似度论文学习:Learning to Compare Image Patches via Convolutional Neural Networks_u011937018的博客-CSDN博客
【CV论文笔记】Learning to Compare Image Patches via Convolutional Neural Networks - 简书
论文笔记 — Learning to Compare Image Patches via Convolutional Neural Networks - 深度机器学习 - 博客园