- Background
引入论文中的一句话来说明对比图像patches的重要性,“Comparing patches across images is probably one of the most fundamental tasks in computer vision and image analysis”.
同一个patch在不同图像中,由于光照、视角、阴影、遮挡、相机设置等因素的影响,这个patch在不同图像中往往呈现出不同的appearance。如何在存在存在各种外界影响的情况下,还能够准备判断它们是一个patch是一个挑战。
传统手工设计的特征,如SIFT等,难以捕获同一个patch因各种因素导致的appearance不同。此时,考虑到CNN具有极强大表达能力(可以理解为,能够模拟任意复杂情形),因此将其引入到patches对比是很自然的一间事情。作者在本文中追求的目标是,直接学习得到一个通用的“similarity function for image patches”,示意图如下:
- Main points
目标确定之后,有以下两个问题需要解决:数据、网络结构(采用CNN一般要解决的两个问题)。
1) 数据
有标准的benchmark dataset: Yosemite、Notre Dame, and Liberty。此外,我们也可以采用软件生成一些patch对。当然也可以采用深度学习常用的数据增强方式进行数据扩充。
2)网络结构
我们的输入是两个patch,输出是两个patch像素与否。这是不是很像分类问题呢?作者在本文中就是将这个问题当做分类问题来理解的,他选择Loss函数是(Hinge-based loss term and squared l2-norm regularization)
第一项为正则项,第二项yi是label(匹配为1、不匹配为-1),oi为网络的输出。
我们可以将两个patch当做输入的两个通道,如下图所示
我们也可以采用孪生网络的形式分别处理这两个patch(孪生网络的可以共享Siamese,也可以不共享pseudo Siamese),如下图所示
我们还可以分别提取两个输入patch的中心,降采样后的“patches”作为输入(这样相当于增强了patch中心对最后结果的影响)如下图所示
如果两个patch的sizes不想同怎么办呢?别担心,还有办法,就是通过在cnn的最上层引入SPP(spatial pyramid pooling),这样能够使得即使输入patches的sizes不同,输出的sizes是相同的,解决了深度网络全连接层输入维度必须固定的问题,如下图所示
- Summary
1) 两个patches作为网络输入的两个通道,这样能够给网络更大的自由度去捕获两个patches相似的本质因素。它的缺点是,在测试时,如果要判断每一个patch与另外所有patches是否相似(假如有N个patches),则每一对patches都需要经过同样的计算(深度网络计算时间较长,一共要做N^2次计算)。
2)采用孪生网络的形式,虽然网络的灵活性降低了,但是在测试的时候,我们可以先提取所有patch的卷积层输出,然后使用后续全连接进行对比。这样深度网络卷积部分只进行了N次计算。
3)抛开image patches的概念,这篇论文概括了深度网络多输入的两种形式,即输入作为一个整体(多通道形式)、输入分拆(每一输入对应一个单独的网络)。
4)在我们选定框架之后,下面的问题就是选取具体的网络结构、数据增强方式、网络初始化方式以及它们对应参数的选取。
5)现在感觉做科研的思路就是“有个idea,勾勒出框架(并描述清楚框架组成部分的性质),选取符合框架特性的block填充框架”,如果结果不错,恭喜,就可以发paper了。
6)加油!