本论文是CVPR2019收录的文章。

论文链接:https://arxiv.org/pdf/1904.06587v1.pdf
GitHub链接:https://github.com/feihuzhang/GANet

摘要

在立体匹配任务中,为了准确估计视差,代价聚合在传统方法和深层神经网络模型中都是至关重要的。我们提出了两个新的神经网络层,分别用于捕获局部和整个图像的成本相关性。第一个是半全局聚合层(SGA),它是半全局匹配(SGM)的可微近似;第二个是局部引导聚合层(LGA),它遵循传统的成本过滤策略(Cost filter)来细化薄结构。
这两层可以用来代替广泛使用的耗费大量体积和内存的3D卷积层。

在实验中,我们发现具有两层引导聚集块的网络比具有19个3D卷积层的GC-NET更好。我们还训练了一个深度引导聚合网络(GA-NET),该网络在Scene Flow dataset和KITTI基准上比最先进的方法获得更高的精度。

创新点

GA-Net借鉴了大量GC-Net和传统的SGM 中的内容,主要的创新之处在于提出了一个代价聚合网络,其中包含两种代价聚合层: Semi-Global Aggregation (半全局聚合) 和 local guided aggregation (局部引导聚合)。

其中SGA是借鉴了SGM的思想,用于处理由于遮挡,平滑,反射,噪声造成的错误匹配。

LGA则是借鉴了Cost filter的思想,用于处理由于下采样和上采样过程中造成的边缘模糊或者是薄结构模糊。

相关工作

Local Cost Aggregation

本文的LGA借鉴于此。

CA(p,d)=∑q∈Npω(p,q)⋅C(q,d)C^{A}(\mathbf{p}, d)=\sum_{\mathbf{q} \in N_{\mathrm{p}}} \omega(\mathbf{p}, \mathbf{q}) \cdot C(\mathbf{q}, d) CA(p,d)=q∈Np​∑​ω(p,q)⋅C(q,d)
其中引导滤波权重w可以根据不同的图像滤波来获得。

Semi-Global Matching

经典的SGM算法,SGM 算法主要做出了两个贡献:1)提出了基于互信息的匹配代价计算方式 2)提出了一种半全局的代价聚合方式

本文借鉴了其半全局的代价聚合方式。

立体匹配可以看作是通过最小化能量函数E(D)来寻找最优的视差图D
E(D)=Σp{Cp(Dp)+∑q∈NpP1⋅δ(∣Dp−Dq∣=1)+∑q∈NpP2⋅δ(∣Dp−Dq∣>1)}(3)\begin{aligned} E(D)=\Sigma_{\mathbf{p}}\left\{C_{\mathbf{p}}\left(D_{\mathbf{p}}\right)\right.&+\sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{1} \cdot \boldsymbol{\delta}\left(\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|=1\right) \\ &\left.+\sum_{\mathbf{q} \in N_{\mathbf{p}}} P_{2} \cdot \boldsymbol{\delta}\left(\left|D_{\mathbf{p}}-D_{\mathbf{q}}\right|>1\right)\right\} (3)\end{aligned} E(D)=Σp​{Cp​(Dp​)​+q∈Np​∑​P1​⋅δ(∣Dp​−Dq​∣=1)+q∈Np​∑​P2​⋅δ(∣Dp​−Dq​∣>1)⎭⎬⎫​(3)​
其中,C为匹配代价,公式的第一项是数据项,表示当视差图为D时,所有像素的匹配代价的累加,第二项和第三项是平滑项,表示对像素p的Np邻域内的所有像素q进行惩罚,其中第二项惩罚力度较小(P1较小),对相邻像素视差变化很小的情况(1个像素)进行惩罚;第二项惩罚力度较大(P2> P1),对相邻像素视差变化很大(大于1个像素)的情况进行惩罚。较小的惩罚项可以让算法能够适应视差变化小的情形,如倾斜的平面或者连续的曲面,较大的惩罚项可以让算法正确处理视差非连续情况。于影像灰度边缘处视差非连续的可能性较大,为了保护真实场景中的视差非连续情况,P2往往是根据相邻像素的灰度差来动态调整。调整公式如下:
P2=P2′∣Ibp−Ibq∣,P2>P1P_{2}=\frac{P_{2}^{\prime}}{\left|I_{b p}-I_{b q}\right|}, \quad P_{2}>P_{1} P2​=∣Ibp​−Ibq​∣P2′​​,P2​>P1​
但是求解这个E是个NP完全问题,所以SGM提出了一种路径代价聚合的方法,即将像素所有视差下的匹配代价进行像素周围所有路径上的一维聚合得到路径下的路径代价值,然后将所有路径代价值相加得到该像素聚合后的匹配代价值。下面的式子是当视差为d时,位置p在整张图像中从方向r上的聚合代价
CrA(p,d)=C(p,d)+min⁡{CrA(p−r,d)CrA(p−r,d−1)+P1CrA(p−r,d+1)+P1min⁡CrA(p−r,i)+P2C_{\mathrm{r}}^{\mathrm{A}}(\mathbf{p}, d)=C(\mathbf{p}, d)+\min \left\{\begin{array}{c}{C_{\mathrm{r}}^{\mathrm{A}}(\mathbf{p}-\mathbf{r}, d)} \\ {C_{\mathrm{r}}^{\mathrm{A}}(\mathbf{p}-\mathbf{r}, d-1)+P_{1}} \\ {C_{\mathrm{r}}^{\mathrm{A}}(\mathbf{p}-\mathbf{r}, d+1)+P_{1}} \\ {\min C_{\mathrm{r}}^{\mathrm{A}}(\mathbf{p}-\mathbf{r}, i)+P_{2}}\end{array}\right. CrA​(p,d)=C(p,d)+min⎩⎪⎪⎨⎪⎪⎧​CrA​(p−r,d)CrA​(p−r,d−1)+P1​CrA​(p−r,d+1)+P1​minCrA​(p−r,i)+P2​​
其中,第一项为匹配代价值C,属于数据项;第二项是平滑项,表示的是和式2相同的含义,累加到路径代价上的值取不做惩罚、做P1惩罚和做P2惩罚三种情况中代价最小的值。

这个最小值是从4种可能的候选值中选取的最小值:

1.前一个像素(左相邻像素)disparity取值为d时,其最小的cost值。

2.前一个像素(左相邻像素)disparity取值为d-1时,其最小的cost值+惩罚系数P1。

3.前一个像素(左相邻像素)disparity取值为d+1时,其最小的cost值+惩罚系数P1。

4.前一个像素(左相邻像素)disparity取值为其他时,其最小的cost值+惩罚系数P2。

路径聚合示意图:


GA-NET 创新

Semi-Global Aggregation(SGA)半全局聚合

传统SGM算法应用在神经网络中存在的困难

传统的SGM算法从不同的方向迭代的聚合匹配代价。但是在端到端可训练的深度神经网络中应用这种方法存在一些困难:

  • SGM有许多用户自定义的参数(P1,P2),很难调优。这些参数在神经网络训练过程中都成为不稳定因素;
  • SGM对所有像素、区域和图像的代价聚合和惩罚是固定的,不适应不同的条件;
  • 在深度估计中,硬最小值选择会导致大量的前向平行曲面。

所以GA-NET提出了一种可以用于端到端神经网络的类SGM算法:SGA,公式如下

CrA(p,d)=C(p,d)+sum⁡{w1(p,r)⋅CrA(p−r,d)w2(p,r)⋅CrA(p−r,d−1)w3(p,r)⋅CrA(p−r,d+1)w4(p,r)⋅max⁡iCrA(p−r,i)C_{\mathbf{r}}^{A}(\mathbf{p}, d)=C(\mathbf{p}, d) +\operatorname{sum}\left\{\begin{array}{l}{\mathbf{w}_{1}(\mathbf{p}, \mathbf{r}) \cdot C_{\mathbf{r}}^{A}(\mathbf{p}-\mathbf{r}, d)} \\ {\mathbf{w}_{2}(\mathbf{p}, \mathbf{r}) \cdot C_{\mathbf{r}}^{A}(\mathbf{p}-\mathbf{r}, d-1)} \\ {\mathbf{w}_{3}(\mathbf{p}, \mathbf{r}) \cdot C_{\mathbf{r}}^{A}(\mathbf{p}-\mathbf{r}, d+1)} \\ {\mathbf{w}_{4}(\mathbf{p}, \mathbf{r}) \cdot \max _{i} C_{\mathbf{r}}^{A}(\mathbf{p}-\mathbf{r}, i)}\end{array}\right. CrA​(p,d)=C(p,d)+sum⎩⎪⎪⎨⎪⎪⎧​w1​(p,r)⋅CrA​(p−r,d)w2​(p,r)⋅CrA​(p−r,d−1)w3​(p,r)⋅CrA​(p−r,d+1)w4​(p,r)⋅maxi​CrA​(p−r,i)​

和SGM有三种不同:

  • 参数可学习,并将它们添加为匹配代价项的惩罚系数/权重。因此,对于不同的情况,这些权重在不同位置是自适应的并且更灵活。
  • 我们用加权和替换SGM中的第一个/外部最小选择。
  • 内部/第二最小选择被改变为最大值。这是因为我们模型中的学习目标是最大化 ground truth 深度的概率,而不是最小化匹配代价。由于方程中的max⁡iCrA(p−r,i)\max _{i} C_{\mathbf{r}}^{A}(\mathbf{p}-\mathbf{r}, i)maxi​CrA​(p−r,i)可以由d个不同的位置共享,这里,我们不使用另一个加权求和来替换它以便减少 计算复杂性。

为了防止CrA(p,d)C_{\mathbf{r}}^{A}(\mathbf{p}, d)CrA​(p,d)过大 ,使用归一化的参数:
s.t. ∑i=0,1,2,3,4wi(p,r)=1\text { s.t. } \quad \sum_{i=0,1,2,3,4} \mathbf{w}_{i}(\mathbf{p}, \mathbf{r})=1  s.t. i=0,1,2,3,4∑​wi​(p,r)=1
其中C(p,d)就是Cost Volume 大小是(H ×W ×Dmax × F) 。Cost Volume被切片成Dmax块的三维块,用于计算他在深度d时的聚合代价。所用的权重W0W4在不同深度间是共享的。W0W4是由一个引导子网络获得的。与原始SGM在16个方向上进行聚合不同,为了提高效率,建议的聚合是沿着整个图像的每一行或每一列在总共四个方向(左,右,上和下)进行的,即r∈{(0,1),(0,−1),(1,0),(−1,0)}\mathbf{r} \in\{(0,1),(0,-1),(1,0),(-1,0)\}r∈{(0,1),(0,−1),(1,0),(−1,0)}

最后的聚合Cost Volume是选择四个方向的代价聚合后最大的那个Cost Volume:
CA(p,d)=max⁡rCrA(p,d)C^{A}(\mathbf{p}, d)=\max _{\mathbf{r}} C_{\mathbf{r}}^{A}(\mathbf{p}, d) CA(p,d)=rmax​CrA​(p,d)
最后的最大选择仅从一个方向保留最佳消息。这保证了聚集效应不会被其他方向所模糊。

​ 这里不太清楚 ,为什么要选取最大的那一个?如何判断他是最大的那个?

从损失函数来看 ,Cost Volume的值应该是负的,这是他选取最大值的原因吗?

Local Guided Aggregation

局部引导聚合,目的在于细化薄结构和物体边缘。下采样和上采样在立体匹配模型中广泛使用,但是它模糊了薄的结构和对象边缘。 LGA层学习了几种引导滤波器,以优化匹配成本并帮助恢复薄结构信息。公式如下:
CA(p,d)=sum⁡{∑q∈Npω0(p,q)⋅C(q,d)∑q∈Npω1(p,q)⋅C(q,d−1)∑q∈Npω2(p,q)⋅C(q,d+1)s.t. ∑q∈Npω0(p,q)+ω1(p,q)+ω2(p,q)=1\begin{aligned} C^{A}(\mathbf{p}, d)=\operatorname{sum}\left\{\begin{array}{l}{\sum_{\mathbf{q} \in N_{\mathbf{p}}} \omega_{0}(\mathbf{p}, \mathbf{q}) \cdot C(\mathbf{q}, d)} \\ {\sum_{\mathbf{q} \in N_{\mathbf{p}}} \omega_{1}(\mathbf{p}, \mathbf{q}) \cdot C(\mathbf{q}, d-1)} \\ {\sum_{\mathbf{q} \in N_{\mathbf{p}}} \omega_{2}(\mathbf{p}, \mathbf{q}) \cdot C(\mathbf{q}, d+1)}\end{array}\right.\\ \text { s.t. } \sum_{\mathbf{q} \in N_{\mathbf{p}}} \omega_{0}(\mathbf{p}, \mathbf{q})+\omega_{1}(\mathbf{p}, \mathbf{q})+\omega_{2}(\mathbf{p}, \mathbf{q})=1 \end{aligned} CA(p,d)=sum⎩⎪⎨⎪⎧​∑q∈Np​​ω0​(p,q)⋅C(q,d)∑q∈Np​​ω1​(p,q)⋅C(q,d−1)∑q∈Np​​ω2​(p,q)⋅C(q,d+1)​ s.t. q∈Np​∑​ω0​(p,q)+ω1​(p,q)+ω2​(p,q)=1​
Cost Volume的不同切片(总计Dmax切片)在LGA中共享相同的过滤/聚合权重。

LGA和传统的代价滤波的不同之处

  • 传统的代价滤波方法在K×K局部/周围区域Np中采用K×K的滤波核去过滤代价值

  • LGA层在每个像素位置p上拥有三个K×K的滤波(w0,w1,w2),分别是针对于视差d,d-1,d+1。也就是说,在每个像素位置p的K×K的局部区域中,LGA采用K×K×3的权重矩阵进行聚合。

高效实施

引导子网络

GA-Net采用几个2D卷积层去构建一个快速的引导子网络(如网络框架中所示)。其输入是左右图、feature map,输出是聚合权重w。
引导子网络的参数量变化:
对于一个大小为H×W×D×F(D是最大视差,F是feature size)的4D代价值C而言:

  • SGA:将引导子网络的输出分割、变形和归一化为四个H×W×K×F权重矩阵,用于进行四个方向的SGA。注意:此处的K是公式中的w0~w4这5个参数,所以K=5
  • LGA:需要学习一个H×W×3K^2×F(K=5)的权重矩阵,然后使用公式进行LGA聚合。

并行

即使SGA层涉及整个宽度或高度上的迭代聚合,由于不同要素通道或行/列中元素之间的独立性,可以并行计算前向和后向。例如,在向左方向聚合时,不同通道或行中的元素是独立的,可以同时计算。通过简单地将LGA层的元素分解为逐元素矩阵的乘法和求和,也可以并行计算。

网络结构

GA-Net包含四个部分:

  • 特征提取块:一个堆叠的沙漏网络。左右视角图共享该特征提取块。

  • 对四维代价值的代价聚合:采用几个SGA层用于代价聚合。LGA层执行在视差回归的softmax层的前面和后面。

  • 引导子网络:生成代价聚合权重

  • 视差回归:softmax层



损失函数

L(d^,d)=1N∑n=1Nl(∣d^−d∣)l(x)={x−0.5,x≥1x2/2,x<1\begin{aligned} L(\hat{d}, d) &=\frac{1}{N} \sum_{n=1}^{N} l(|\hat{d}-d|) \\ l(x) &=\left\{\begin{array}{ll}{x-0.5,} & {x \geq 1} \\ {x^{2} / 2,} & {x<1}\end{array}\right.\end{aligned} L(d^,d)l(x)​=N1​n=1∑N​l(∣d^−d∣)={x−0.5,x2/2,​x≥1x<1​​

使用L1距离,因为作者觉得与L2损失相比,平滑L1在视差不连续时具有鲁棒性,并且对异常值或噪声的敏感性较低。
d^=∑d=0Dmax⁡d×σ(−CA(d))\hat{d}=\sum_{d=0}^{D_{\max }} d \times \sigma\left(-C^{A}(d)\right) d^=d=0∑Dmax​​d×σ(−CA(d))
视差预测dˆ是每个视差候选者的总和,按其概率加权。在通过softmax操作进行成本汇总之后,计算每个视差d的概率。与基于分类的方法相比,视差回归显示出更强大的功能,并且可以产生亚像素精度。

实验



GA-Net以最少的网络层数取得了优于GC-Net和PSMNet的正确率。

对于大范围无纹理区域、反射区域和物体边缘的深度概率预测,代价聚合层起到了明显的效果。

相较于传统的SGM方法,GA-Net没有出现SGM中的大量前向曲面。

GA-Net和GC-Net的对比

论文阅读 GA-Net: Guided Aggregation Net for End-to-end Stereo Matching相关推荐

  1. 【论文简述及翻译】RAFT-Stereo: Multilevel Recurrent Field Transforms for Stereo Matching(3DV 2021)

    一.论文简述 1. 第一作者:Lahav Lipson 2. 发表年份:2021 3. 发表期刊:3DV,Best paper 4. 关键词:立体匹配.端到端训练.迭代优化.GRU 5. 探索动机:立 ...

  2. 论文阅读《Deep Layer Aggregation(DLA)》

    Background & Motivation 文章认为特征聚合的关键是语义和空间信息的聚合. Semantic fusion, or aggregating across channels ...

  3. 论文阅读课1-Attention Guided Graph Convolutional Networks for Relation Extraction(关系抽取,图卷积,ACL2019,n元)

    文章目录 abstract 1.introduction 1.1 dense connection+GCN 1.2 效果突出 1.3 contribution 2.Attention Guided G ...

  4. 【论文阅读】Prior Guided Feature Enrichment Network for Few-Shot Segmentation

    Prior Guided Feature Enrichment Network for Few-Shot Segmentation Abstract Introduction Related Work ...

  5. 笔记:论文阅读 Enriched Feature Guided Refinement Network for Object Detection

    面向目标检测的丰富特征引导细化网络 摘要 提出一个单阶段检测框架,该框架解决了多尺度目标检测和类不平衡的问题. 没有设计更深层网络,而是引入一种简单而有效的特征丰富化方案来生成多尺度的上下文特征. 进 ...

  6. 论文阅读笔记:Multi-Turn Response Selection for Chatbots with Deep Attention Matching Network

    提示:阅读论文时进行相关思想.结构.优缺点,内容进行提炼和记录,论文和相关引用会标明出处. 文章目录 前言 介绍 模型细节 问题符号化 模型结构 注意力模块-Attentive Module 整理表示 ...

  7. 【论文阅读】Locally Adaptive Color Correction for Underwater Image Dehazing and Matching

    论文:Locally Adaptive Color Correction for Underwater Image Dehazing and Matching 作者:Codruta O. Ancuti ...

  8. 论文阅读《MVS Net:Depth Inference for UNstructured Multi-view Stereo》

    MVS Net:Depth Inference for UNstructured Multi-view Stereo 目录 MVS Net:Depth Inference for UNstructur ...

  9. 论文阅读【EMScore: Evaluating Video Captioning via Coarse-Grained and Fine-Grained Embedding Matching】

    EMScore: Evaluating Video Captioning via Coarse-Grained and Fine-Grained Embedding Matching 发表:CVPR ...

最新文章

  1. boost::gil::bit_aligned_pixel_reference用法的测试程序
  2. tensorboard ValueError: Duplicate plugins for name projector
  3. 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
  4. 可以用计算机进行模拟实验,随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验, - 问答库...
  5. ovation系统服务器安装,Ovation系统介绍.ppt
  6. 文本标点符号在前面怎么改_这三个标点符号,为什么写错的人越来越多?
  7. 五步法”判断自媒体创作好与坏的标准
  8. 解决eclipse为什么不能查看源码
  9. wireshark解密本地https流量笔记
  10. csdn头像修改失败的解决办法
  11. js pdf文件 如何调用打印机打印_pdf.js —— 在线预览下载打印pdf文件插件,实现的两种方式...
  12. 第24篇 研究WebRTC官网之生成工程文件
  13. 1371: 三位数求解
  14. 你对本岗位的认识PHP,本岗位工作认识
  15. Hololens开发笔记_在Unity运行没问题,在Hololens跑出现PathNotFoundException:Could not find a part of path.
  16. ES7 IK中文分词器
  17. JWS实现WebService
  18. 省钱版----查找 IoT 设备TTL线序__未完待续
  19. vue货币过滤器以及路由参数的使用
  20. js图片轮播效果实现代码

热门文章

  1. 学渣的刷题之旅 leetcode刷题 2. 两数相加
  2. HTML5常用标签【知识点整理】
  3. a标签去下划线或文字添加下修饰_怎样去除ul li a标签文字下的下划线
  4. 卓聚社区,新发现的全能社区
  5. Mac 清除dns缓存
  6. 什么是 Linux Mint,它比 Ubuntu 好在哪里?
  7. SQL Server数据库-存储过程(第一讲)
  8. c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言
  9. ATT格式汇编命令集合
  10. Word中录制宏,学会后成大神