立体匹配之(二):[MC-CNN] 2015CVPR: Stereo Matching by Training a Convolutional Neural Netw

来源:互联网 发布:sql语句查询时间段 编辑:程序博客网 时间:2024/06/05 15:46

1 摘要

  • project主页:https://github.com/jzbontar/mc-cnn
  • 基于patch的提取与比较,学习其相似性得到一个matching cost,并将正确匹配的patch定义为正样本,其他为负样本。
  • 后处理包括:cross-based cost aggregation, semiglobal matching, a left-right consistency check, subpixel enhancement, a median filter, and a bilateral lter.
  • fast 和accurate两个版本

2 介绍和相关工作

类似的有:[1] ,[2] (都是基于patches), 主要差别在于包括了pooling和subsampling 以引入更大的patch sizes and larger variation in viewpoint

3 匹配代价

A. 数据集正负样本建立

左图的点P(x,y)对应右图匹配点为q
正样本: q = (x - d + Opos, y);
负样本: q = (x - d + Oneg, y);
其中Oneg从[-dataset_neg_high, - dataset_neg_low] 以及[dataset_neg_low, dataset_neg_high]中选。Opos理论上是0,但实际选取一个不超过1 的值。

B. 网络架构

1. fast architecture

siamese network
这里写图片描述
特点:

  1. the cosine similarity computation is split in two steps: normalization and dot product.

  2. loss: hinge loss :定义为max(0;m+负样本的相似度 -正样本的相似度) ,只有当正样本的相似度比负样本的相似度大了超过m时, loss才是0 ,m=0.2.

  3. 其他参数:每个branch的卷积层数:num_conv_layers,卷积核大小:conv_kernel_size,每一层的feature maps的数目num_conv_feature_maps以及输入的patch大小:input_patch_size。

2. accurate architecture

  1. loss : binary cross-entropy loss : t log(s) + (1 - t) log(1 - s).其中s是网络的输出,t是其实际的样本标签,正样本为1,负样本为0
  2. 参数:每个branch的卷积层数:num_conv_layers,卷积核大小:conv_kernel_size,每一层的feature maps的数目num_conv_feature_maps以及输入的patch大小:input_patch_size,每个fc层的单元数num_fc_units,
    全连接层的层数num_fc_layers
    这里写图片描述

3. 计算匹配代价

网络的输出用来初始化cost
这里写图片描述
其实就是对score求反,score越高,代价cost越小。
架构的特点:
1. 对于两个sub-network,每个pixel只需要被计算一次,不需要每个视差都算一遍。
2. 对两个sub-network ,可以通过输入全图一次前向传播得到所有像素的输出(这一点还没理解)
3. 全连接层的输出也可在一个前向pass中得到,方法是替换fc层为1*1的卷积层,但我们需要对每个视差都计算一遍forward pass (还没啃透)。
那么,对每幅图我们需要计算一次sub-network ,而fc层需要run d次(d是disparity range)(而在fast 结构中,只有dot product需要被运行d次)

4 stereo method

下面的部分就不细说了,只列出主要方法:

4.1 cross-based cost aggregation

迭代i次

4.2 semiglobal matching

4.3 插值

For positions marked as occlusion, we want the new disparity value to come from the
background. We interpolate by moving left until we nd a position labeled correct and
use its value. For positions marked as mismatch, we nd the nearest correct pixels in 16 di erent directions and use the median of their disparities for interpolation。

4.4 亚像素增强

4.5 refinement

5*5 median filter + bilateral filter

5 实验

5.1 数据集

对于KITTI: 30%像素标了ground truth
error : >3

对Middlebury
error : >2 对full size

5.2 learning details

训练阶段,batchsize=128
测试阶段:输入全图
为何在训练的时候采用patch呢?作者做出来解释:
(1)更方便控制batch size
(2)可以随机化这些patch使得一个batch里面的patch可以来自不同的图片。
(3)可以保证一个batch中正负样本的数目相同。
这里写图片描述
momentum=0.9
lr=0.003/ 0.002

5.3 数据augmentation

rotate
scale
shear
change brightness and contrast
attention: 这些变换都是在patch被提取之后做的。
这里写图片描述

参考文献:

[1] Sergey Zagoruyko and Nikos Komodakis. Learning to compare image patches via convolutional neural networks. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2015
[2] Xufeng Han, Thomas Leung, Yangqing Jia, Rahul Sukthankar, and Alexander C Berg. MatchNet: Unifying feature and metric learning for patch-based matching. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2015.

0 0