Advertisement

【论文笔记-Stereo】Deep Stereo Matching with Explicit Cost Aggregation Sub-Architecture

阅读量:

目录

    • 简介

    • 摘要

    • 论文主要内容

      • A: 匹配代价计算
    • 特征提取(ResNet18)

    • 特征Volume构建

    • 相似度计算

      • B: 匹配代价聚合
    • C:视差计算

      • 实验

简介

Deep Stereo Matching with Explicit Cost Aggregation Sub-Architecture
AAAI2018 ,KITTI2015目前(20180320)排名第二,PSMNet
https://arxiv.org/abs/1801.04065

摘要

深度卷积神经网络,在解决双目立体匹配问题上已经取得了非常不错的表现。很多工作都专注于特征提取和相似度的计算,但是,很少人关注匹配代价聚合,这个在视差计算中很重要的一步。在这篇文章中,我们将介绍一种基于学习的匹配代价聚合方法来进行立体匹配,通过引入新的子结构使得整个视差计算网络可以被端到端训练。我们将匹配代价聚合转化为可学习的匹配代价生成和挑选两个过程。
使用双束流网络:一个分支用来产生可能的匹配代价融合结果,另一个用来挑选最后的结果。挑选的准则由浅层的图像信息(形状,边缘)决定。通过这种方式,我们很好地矫正了视差的计算,我们在KITTI上进行验证,得到了超越前沿算法的效果。

论文主要内容

Architecture

我们通过三个步骤实现时差的计算:匹配代价计算,匹配代价聚合和视差计算

  1. 匹配代价计算包含三个部分:特征提取(A1), volume构建(A2),相似度计算(A3)

    • A1是一个特征提取网络,使用ResNet结构
    • A2使用简单的平移实现
    • A3通过编码-解码结构进行相似度计算
  2. 匹配代价聚合包含两个子结构:一个产生聚合结果的proposal(B2),另一个结合图像浅层信息对匹配代价进行融合(B1)。

  3. 最后一部分(C)主要负责视差计算

A: 匹配代价计算

特征提取(ResNet18)

这里写图片描述
输入:(H, W, nChannel) , (H, W, nChannel)
输出:(H/2, W/2, F), (H/2, W/2, F)
为了节省计算资源,先对图像进行5x5 stride =2 的卷积,然后使用ResNet18进行特征提取,图像大小变为H/2, W/2, F。

特征Volume构建

这里写图片描述
输入:(H/2, W/2, F) , (H/2, W/2, F)
输出:(D, H/2, W/2, 2F), 其中D = max_possible_disparity
3D卷积能够非常有效地处理volume类型的3D输入,因此,我们通过提取的特征构建feature volume。构造的方式很简单,通过平移feature map然后拼接实现。我们以左图feature map为基础,然后沿着W方向移动右图的feature map,移动{1, max_disparity}个像素,每次移动将超出的部分用于补充缺少的部分。

相似度计算

这里写图片描述
输入:(D, H/2, W/2, 2F)
输出:(D, H, W,1) cost map
因为,“3D convolutional networks are effective to take into account the context and geometry information ”。直接对feature volume进行学习得到相似度。
由于3D卷积耗时,耗内存,所以采用auto-encoder结构(FCN结构?)。使用4层编码单元 + 4层解码单元的结构。

  • 一个编码单元包含两个普通的s=1x1x1的卷积层和一个s=2x2x2的卷积层,使得原feature map在D,H,W维度各自减半。
  • 一个解码单元包含一个s=2x2x2的上采样卷积层,并且,每一层都使用ResNet的思想,和编码器中对应位置、相同大小的feature map 相连。

最后我们添加一个2x2的上采样层,使得输出图像恢复原图的大小(D, H, W),这个图就是初始的匹配代价图。

B: 匹配代价聚合

匹配代价聚合的目的是为了修正一些错误的匹配代价值。因为匹配代价是基于局部区域计算得到的,我们现在用全局的信息来进行修正。另外,匹配代价融合还可以让我们的到高质量的视差图,保证视差图有非常好的平滑性和连续性。
传统的匹配代价融合使用人工定义的方程实现(论文提到“static or dynamic function”,不是很理解)。这里我们使用学习的方法对初始匹配代价进行融合。我们使用一个双分支的网络。

  • proposal stream: 这一分支用来产生可能的匹配代价聚合结果, 我们直接在初始的匹配代价计算网络上添加匹配代价聚合网络(与其他端到端的方法不同,我们显示地定义聚合网络),是整个网络可以end-to-end训练。这一分支可以使得匹配代价计算考虑足够大的receptive filed,和足够丰富的语义信息。
    输入:(D, H, W, 1)
    输出:(D, H, W, G) G是所有可能的匹配代价聚合结果。如果只看一个维度,C(d,h,w,G)就表示在像素(h, w)处,视差为d时,聚合后的cost的可能结果有G个。

  • guidance stream: 这一分支直接使用CNNs从reference图片中提出浅层的图像结构信息,这种信息可以作为全局信息来对前一分支的结果进行选择。我们使用轻量化的网络进行特征提取,因为很多工作已经证明,在深度CNNs中,浅层网络能够提取浅层的结构信息,而高层网络往往提取的是高层的语义信息。两者对于匹配代价融合都是非常重要的。前一分支负责的结果富含语义信息,而这一分支的结果则主要提供结构信息。
    输入:(H, W, nChannel)
    输出:(H, W, G) 我们沿着G维度,把guidance的结果用sofmax转换为概率,代表取当前位置(h,w) 在target图中对应的cost的概率。

最后,我们结合两个分支的结果进行匹配代价聚合结果的结算:

其中*代表矩阵乘法。(这里为什么用乘法比较tricky,和同学讨论后得出了一些假设性的结论:用矩阵乘法可以比较好的结合两个分支的优势,同时可以使两个分支在反向传播过程中同步优化。我们用加法来做对比:用乘法进行融合,可以使两个分支的梯度相互影响,共同优化。相反地,如果用简单地加法,就不能很好地结合两个分支提供的信息。因为这个时候相当于两个网络,梯度的调整也是相互独立的。) 括号里的解释似乎不是很靠谱,这里的矩阵乘法的物理含义不知道如何解释,以及,矩阵乘法之后取max也不好理解,希望清楚这一点的读者帮忙解释一下,我留个坑,以后理解了再回来解释。

C:视差计算

使用soft-argmin 方程而不是WTA进行最后的视差计算。这种方法
是将匹配代价沿着d维度,使用softmax函数映射为概率,则-C(h,w,d)可以用来来表示位置(h, w)处的视差为d的可能性。然后使用概率的加权和计算最后的视差。其中,权重就是对应位置的视差值d。

其中 \sigma为softmax方程。

这种方法的优势是考虑了所有可能的视差值对应的Matching cost,这使得得到的视差图更加平滑,并且能够得到更高质量的(sub-pixel level accuracy?)。另外,上面的方程是可微分的,所以很容易参与训练。

最后的损失函数用L1损失:

实验

Scene Flow 是一个合成的双目立体匹配数据集,其中包含35454个训练图像对,4370个测试图像对。下表对比了我们和GC-Net效果:
这里写图片描述

KITTI Benchmark
这里写图片描述

验证guidance 分支的作用,可视化结果
这里写图片描述

全部评论 (0)

还没有任何评论哟~