论文题目《Pyramid Stereo Matching Network》,被 2018CVPR 收录,后将用 PSM-Net 表示这个模型… 没办法,立体匹配这边大家都是这样给自己的网络命名的。这篇论文的代码是 PyTorch 的,所以重点关注了一下,终于大概知道了立体匹配这边经常用的 cost volume 是什么东西了…

    主要的创新点就是引入了空间金字塔池化模块(spatial pyramid pooling,SPP)。作者谈到,当前的方法没有利用好上下文(context,一直不知道这个词咋翻译好…)信息,于是用 SPP 聚合多尺度的信息。其实多尺度在深度估计 / 补全的很多方法都用到了,不过 SPP 的概念应该是在这边的首次引入吧。摘要中谈到的另一个点是堆叠漏斗网络(stacked hourglass networks),不过这个东西看着名字很厉害其实也就是一个用 3D 卷积做的 encoder-decoder 结构,然后用了好几个堆叠起来(stacked 的意思)。

    话说立体匹配这边得到的都是视差图,单位是像素,也即左图某像素点(x,y)在右图中匹配的像素点为(x-d,y),d 即视差。要转化为深度,还需要进行标定,要给出相机的基线 B 和焦距 f。深度 z=fB/d。

    传统的立体匹配主要是两步:匹配损失(matching cost)和后处理(post-processing),而神经网络出现后,很多工作都是基于 CNN 的。但是只施加强度一致的信息是不够的,很多病态区域如遮挡区域、重复出现的表象、低纹理区域、反射表面等。需要全局上下文信息进行整合。SPP 和膨胀卷积用来扩大感受野,使得 PSM-Net 可以将像素级的特征扩展至多尺度区域级的特征。全局信息和局部信息结合形成 cost volume,再用 3D 卷积的方式融合多通道信息,正则化 cost volume,最终预测视差图。

    根据《A taxonomy and evaluation of dense two-frame stereo correspondence algorithms》的总结,传统的立体匹配方法可以分四步:匹配代价计算;代价聚合;优化;视差调优。看的好多立体匹配的文章都再 Related Work 里引这个了,所以过来敲下黑板。还有一个要注意的是发表在 17 年 ICCV 上的工作:GC-Net,应该是首次提出 cost volume 并用 3D 卷积将其正则化。

    网络结构的示意图:

    立体匹配论文笔记(一):PSM-Net - 知乎 - 图1

    立体匹配这边左右视图提取特征的网络都是共享权重的。SPP 模块可以从左下方看到,就是四个不同尺度的池化,再上采样串联起来,其实就是整合多尺度的信息。送到 cost volume 之前左右图的特征是(1,32,96,312)维度的(连着两个乘号会把中间的加粗… 行吧),32 是通道数,96*312 是输入图像分辨率的 1/4,1 是 batch size,后面的 cost volume 的 1 也是这个,就不管了。cost volume 的维度是(1,64,48,96,312),64 的前 32 个通道是左视图的,后 32 个通道是右视图的;48 代表视差等级的维度,即视差为 0-47px(设置最大视差为 191px,后面会上采样)。贴一下形成 cost volume 这部分的代码,比如现在 i=10,即 cost volume 的第三个维度视差为 10px 时,第二个维度的前 32 个通道取左图 x 轴上 10 以后的像素,后 32 个通道取右图 x 轴上去掉最后 10 像素的所有,其他地方都是 0(截图没截出来)。

    立体匹配论文笔记(一):PSM-Net - 知乎 - 图2

    得到 cost volume 之后就是一大堆 3D 卷积(Stacked hourglass 的结构比 Basic 效果好,反正谁复杂谁强呗…),可以看到右下方有 bilinear 和 regression 模块,就是将低分辨率、低视差等级的图插值为(D,H,W)维度的,然后用 softmax 作用于所有视差等级求出各个视差的概率,加权得到最终各个像素点的视差,即 H*W 的视差图。

    训练的损失函数是 Smooth L1 损失,说是比起 L2 损失对异常点不敏感(low sensitivity to outliers)。训练集是 Scene Flow 是一个合成的数据集,然后在 KITTI 2015 上调优。KITTI 2015 立体匹配数据集规模比较小,训练集 200 对双目图像、测试集 200 对,而且视差的真值是稀疏的(约 20% 的像素有真实视差值数据)。所以现在合成的规模较大的 Scene Flow 上训练,再在 KITTI 2015 上调优。最终的结果:误差高于 3px 的点的数量为 1.98%,还是很不错的。放一张效果图稍微看下:

    立体匹配论文笔记(一):PSM-Net - 知乎 - 图3

    作者还谈到,PSM-Net 对病态区域鲁棒性很高,像车窗、墙啥的,和其他工作对比:

    立体匹配论文笔记(一):PSM-Net - 知乎 - 图4
    https://zhuanlan.zhihu.com/p/52641036