Learning to Compare Image Patches via Convolutional Neural Networks

Paper : Learning to Compare Image Patches via Convolutional Neural Networks
Code :

摘要

个人认为,本文在孪生神经网络上没什么改进点,值得阅读的点是对双通道、孪生神经网络和伪孪生神经网络之间实验效果的比较,但是文章中所提到的在Image Patch Comparison 中引入CNN和SPP Net 感觉不算创新。使用CNN代替传统的人为设计的特征提取方法,例如SIFT或是HOG或是DAISY之类的在2015年基本上都用滥了。

三种网络结构

首先不考虑图像块的大小是任意大小,先假定是固定大小64*64,文中列出了3种神经网络的结构:孪生神经网络,伪孪生神经网络,双通道神经网络。对于三种神经网络,我们将分支的输出连接起来,使用FC层直接输出预测值。孪生与伪孪生两个分支具有相同的层结构,区别在于是否共享每一层的参数,而双通道网络将两灰度图输入看作是一张双通道输入的图。三种神经网络的参数量由小到大。

Learning to Compare Image Patches via Convolutional Neural Networks

三种子网络结构

文中主要使用了三种网络结构构成孪生/伪孪生/双通道的子网络

  • Deep Network:处理计算机视觉的常规深度卷积神经网络
  • SPP Network:详情见blog,处理任意尺寸的输入
    Learning to Compare Image Patches via Convolutional Neural Networks
  • Central-surround two-stream network:包含以下两个独立的数据流,中心和背景,支持对输入在不同的分辨率下对数据进行处理,Central-surround two-stream network与孪生神经网络之间的结合如下所示
    • 中心高分辨率数据流:对 64*64 的输入图片进行中心裁剪到 32*32
    • 背景低分辨率数据流:对 64*64 的输入图片进行降采样
    • 中心-背景双数据流网络更强调位于中心的像素信息,而且多分辨率信息有助于改善图片匹配的表现
      Learning to Compare Image Patches via Convolutional Neural Networks

训练

损失函数如下所示

minwλ2w2+max(0,1yioinet) \min_w \frac{\lambda}{2}||w||_2 + \sum \max(0,1-y_io_i^{net})

其中 oineto_i^{net} 表示网络的输出,是一个标量,yiy_i 是ground truth label,yi=1y_i = -1 表示不匹配,yi=+1y_i = +1 表示匹配。

数据增广方法包括水平翻转,竖直翻转,旋转90°、180°、270°

测试

Learning to Compare Image Patches via Convolutional Neural Networks
其中的 l2l_2 是指在测试时,不适用FC层输出预测结果,而是将两分支提取出的特征向量使用 l2l_2 损失函数衡量,根据实验数据可以得到以下几点结论

  • 基于双通道的网络进行图像块匹配显著优于其他,这说明在网络的第一层就将两个图像的信息进行联合处理很重要
  • 2-channel 2-stream 的网络效果最优,这说明多分辨率对图像匹配的表现有显著提升
  • 尽管网络没有使用 l2l_2 进行损失优化,但是测试时使用 l2l_2 依旧可以得到较好的结果

作者在 Mikolajczyk 数据集上进行的任意尺寸输入的性能测试,结果如下

Learning to Compare Image Patches via Convolutional Neural Networks
可以发现,SPP Net 的引入对表现有一个比较大的提升

总结

个人感觉这篇文章干货比较少,通过实验观察到的几个结论没有进一步的讨论。