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层直接输出预测值。孪生与伪孪生两个分支具有相同的层结构,区别在于是否共享每一层的参数,而双通道网络将两灰度图输入看作是一张双通道输入的图。三种神经网络的参数量由小到大。
三种子网络结构
文中主要使用了三种网络结构构成孪生/伪孪生/双通道的子网络
- Deep Network:处理计算机视觉的常规深度卷积神经网络
- SPP Network:详情见blog,处理任意尺寸的输入
- Central-surround two-stream network:包含以下两个独立的数据流,中心和背景,支持对输入在不同的分辨率下对数据进行处理,Central-surround two-stream network与孪生神经网络之间的结合如下所示
- 中心高分辨率数据流:对 64*64 的输入图片进行中心裁剪到 32*32
- 背景低分辨率数据流:对 64*64 的输入图片进行降采样
- 中心-背景双数据流网络更强调位于中心的像素信息,而且多分辨率信息有助于改善图片匹配的表现
训练
损失函数如下所示
其中 表示网络的输出,是一个标量, 是ground truth label, 表示不匹配, 表示匹配。
数据增广方法包括水平翻转,竖直翻转,旋转90°、180°、270°
测试
其中的 是指在测试时,不适用FC层输出预测结果,而是将两分支提取出的特征向量使用 损失函数衡量,根据实验数据可以得到以下几点结论
- 基于双通道的网络进行图像块匹配显著优于其他,这说明在网络的第一层就将两个图像的信息进行联合处理很重要
- 2-channel 2-stream 的网络效果最优,这说明多分辨率对图像匹配的表现有显著提升
- 尽管网络没有使用 进行损失优化,但是测试时使用 依旧可以得到较好的结果
作者在 Mikolajczyk 数据集上进行的任意尺寸输入的性能测试,结果如下
可以发现,SPP Net 的引入对表现有一个比较大的提升
总结
个人感觉这篇文章干货比较少,通过实验观察到的几个结论没有进一步的讨论。