Abstract
本文主要做了两件事:
- 用深度学习方法模拟经典的图像相似度估计问题
- 用深度学习方法估计仿射变换参数,以及更为复杂的thin-plate spline transformation
CNN
handle large changes of appearance between the matched images
经典的相似度估计方法,比如使用SIFT获取局部特征丢弃不正确的匹配进行模糊匹配,然后将模糊匹配的结果输入到RANSAC或者Hough transform中进行精确匹配,虽然效果不错但是无法应对场景变换较大以及复杂的几何形变的情况。本文使用CNN提取特征以应对这两点不足。
- 用CNN特征替换原有经典特征,即使场景变换很大,也能够很好的提取特征;
- 设计一个匹配和变换估计层,加强模型鲁棒性。
Architecture
end-to-end
输入:两幅图片
输出:仿射变换的6个参数
这里的思路如下:先用双路CNN提取两幅图片的特征,然后用correlation-layer进行融合,这个过程可以视为模糊匹配,然后进入回归层得到具体预测出的仿射变换的6个参数。
特征提取:
使用双路CNN,输入两幅图像,权值共享。
CNN采用VGG-16,L2-norm,fine-tuning ImageNet。
Matching:
我们通过双路CNN获取两幅图片的feature map:
w,h,d:分别为feature map的长、宽、深度(通道)
在进入matching阶段前,要把两路CNN提取到的特征融合为一个向量,这里使用的方法是correlation-layer。
correlation-layer
fA与fB进行点乘得到correlation map ()
原来两个w×h的feature map ,每个1×1×d的向量通过点乘得到w×h×(w×h)这样一个立方体。立方体当中的每一个位置(i,j)表示fB中的(i,j)位置的点对应fA中所有点的相似度。这里correlation map的深度(w×h)即fA中所有点被展开成k,表示fA中点的索引。
归一化:
得到correlation map 后对相似度进行归一化,以凸显相似度高的点。我们使用ReLU+L2Norm进行归一化。为什么选用ReLU呢?考虑这两种情况:
- 假设只有一个匹配点时,会直接将匹配值增大为1
- 假设有多个噪声匹配点,使用ReLU会对除了最匹配的点之外的噪声点降权,提高了模型的鲁棒性。
对correlation map归一化后,我们得到了在进入回归层之前所需要的correspondence map。
使用correlation-layer的原因如下:
- 两幅图像的相似度只需要保留其相似性以及空间位置,图像本身的特征不应该被考虑。
假设有两对图像的仿射变换参数相同,只是图像内容不同,如果考虑feature map的像素信息,那么两幅图像进入模型后输出的参数也将不同; - 如果只是简单的对两幅图中每一个通道的feature进行相加或者相减,如果匹配点相差很远,这种方法无法获取正确的相似度。如果使用correlation map+Norm,即使匹配点相差很远,也能够凸显出最为匹配的点。所以这种方法无法应对场景大范围变化的匹配问题;
Regression network
这里要注意的是,进入回归层中要使用卷积层而不是全连接层。因为correlation map的参数个数是feature map大小的平方,直接用全连接参数过多将会造成梯度爆炸。
Loss function
使用每个栅格点经过使用预测参数和真实参数进行仿射变换后得到的值之间的距离作为Loss。
Dataset
人工生成数据集:
为了避免仿射变换后带来的图像的边界问题,在原始图中央截取Padded image。
在padded image的中央截取ImageA
对padded image进行仿射变换,在中央截取相同大小,获得ImageB