2020年Google的这篇立体匹配文章可以说是目前为止效果最好的一个了,所以这里对论文做一个详细的阅读和分析和大家分享

摘要

Hitnet借鉴了传统立体匹配的思路,应用到深度学习中实现了实时的立体匹配效果,与其他立体匹配方法相比,

作者的方法没有使用full cost volume和3D卷集等复杂度高的计算,而是利用多精度的初始化、可微的2D几何

传播和warping步骤来代替,为了能够获得更高的精度还使用了slanted plane来实现几何warping和上采样运算

1、介绍

基于端到端学习方法最常见的模式是利用CNN例如unet,但这总方法很大程度上无法匹配立体匹配问题的几何特性

随后的研究发现,结合显式匹配cost volumes 来encoding每个像素视差的损失,在结合3D卷积在精度方面得到显

著提高,但代价是显著增加了计算量,随后有工作显示通过对cost volume 进行下采样可以实现速度和精度的trade off

近些年的立体匹配方法中为了实现速度和精度双优,主要建立在三个优化思路上,第一,通过对特征进行稀疏化

来实现快速的高精度立体匹配,第二,采用更有效的视差优化方案,而不是依赖full cost volume;第三,利用倾斜平面

的迭代图像warp,通过最小化图像不相似度来实现高精度;以上三个方法都没有使用cost volume 和3D卷积

我们提出的hitnet克服了计算量大的缺点通过将图像warp、空间传播和快速高分辨率初始化步骤集成到网络结构中,

同时通过允许特征在网络中流动来保持灵活的学习表现能力, 我们方法的主要思想是将image tiles表示为planar patches,

并附加一个学习到的紧凑的特征描述符, 该方法的基本原理是利用空间传播来融合来自高分辨率初始化和当前hypotheses

的信息,该方法是通过卷积神经网络模块不断更新planar patches及其包含的特征参数, 为了通过网络迭代来提高视差预

测的精度,我们使用网络内的image warping使网络最小化图像差异,在planar patch周围的窄范围(±1视差)内为网络提供

一个local cost volume。为了重建精细的细节,同时捕捉大面积的无纹理区域,我们从低分辨率开始,并分层上采样预测

到更高的分辨率。我们体系结构的一个关键特征是,在每个分辨率上,初始化模块提供匹配,以方便恢复在低分辨率下无

法表示的薄结构。我们方法的一个输出示例显示了我们的网络如何恢复非常精确的边界.

总结本文的主要贡献是

1)一个快速的多分辨率初始化步骤,通过学习到的特征可以计算高分辨率匹配。

2)利用slanted support windows与learned descriptors实现了一个有效的,2D的,视差传播级,

2、相关工作

传统算法中提出的高效的算法,主要通过patch match和super-pixel技术来避免全视差空间搜索从而提高效率,主要是通过随机森林和决策树。

深度学习方法中关键的部分是cost volume layer(or correlation layer) 这个模块可以实现网络对每个pixel进行特征匹配,但这个模块速度很慢,为了提高速度,有人提出级联的模型结构实现coarse to fine的视差搜索等。Hitnet的方法借鉴了现有的一些工作,[52]这个工作中提出了一种分层算法,利用slanted support windows对tiles的匹配代价计算进行了摊销。在这项工作的启发下,我们提出了一个端到端学习方法,克服了手工制作的算法的问题,同时保持了计算效率。

PWC-Net [50]虽然用于光流估计,但与我们的方法有关。该方法通过image warp和局部匹配代价计算构建了一个带有多个refine stage的低分辨率的cost volume。因此,遵循经典的金字塔匹配方法,通过上采样初始化当前级别与前一级别的融合输出得到一个hierarchically的低精度结果,之后在使用更高分辨率的局部匹配refine细化。相反,我们提出了一种快速、多尺度、高分辨率的初始化,能够恢复良好细节不能以低分辨率表示。最后,我们的细化步骤产生了局部倾斜的平面近似,用于预测最终的差异,而不是在[50]中使用的标准双线性弯曲和插值。

3、方法

hitnet的方法follow传统的机器学习立体匹配方法[44],我们发现最近高效的方法都依赖一下步骤,1)对特征图进行稀疏话处理,

2)一个高分辨率视差初始化利用这些特征来检索合适的hypotheses, 3)一个有效的传播步骤使用倾斜的支持窗口来细化估计

通过上面的观察,我们将视差图表示为不同分辨率的planar tiles,并依赖一个可学习的特征每个tile hypothesis的向量来学习

这使得我们的网络能够学习到视差图的一小部分信息与进一步改进结果有关,这个可以看作是3D cost volume的高效稀疏版本。
整个方法的大概流程为,对输入的主副摄图使用unet提出多个尺度的特征,特征提取完成后,将视差贴图初始化为多个分辨率的正面平行tiles,为了实现这个,一个匹配器评估多个hypotheses,并选择左视图和右视图特征l1距离最小的一个, 此外,使用一个小型网络计算得到一个compact tile descriptor

然后,初始化的结果被传递到传播阶段,传播阶段的作用类似于这里使用的近似条件随机场解[12, 52],这一阶段以迭代的方式分层refine tile hypotheses

3.1 Tile Hypothesis

文中将tile hypothesis定义为一个带有可学习特征的planar patch,具体来说,tile hypothesis由三部分组成:一个描述视差d的斜面的几何部分,

一个x和y方向上的视差梯度(dx, dy),和一个可学习的P,给他命名为feature descriptor

Tile Hypothesis 中feature descriptor是可以学习的,所以它会为网络附加额外的信息到Tile Hypothesis上对于这部分我们不增加约束信息,只是

跟着网络end2end的学习

3.2 Feature Extractor

特征提取器产生多尺度的特征图e0--em,这些特征图用在后面initing matching 和 传播级中的warping,关于不同尺度的feature map的定义如下

3.3 Initialization

Initialization stage的目标是在不同的精度下为每个tile生成一个初始的d_init和P_init,因此 Initialization stage输出的是fronto-parallel tile hypotheses

Tile Disparity. 为了保持初始的视差图的高分辨率,我们沿着x方向使用了重叠的tiles, 为了提取tile的特征,我们对每个提取的feature map el进行4 × 4的卷积,左边(参考)图像和右边(次要)图像的stride是不同的,以方便前面提到的重叠贴图, 对于左边的图像,我们使用了4 × 4的stride,而对于右边的图像,我们使用了4 × 1的stride,这对于保持完整的视差分辨率以最大化精度是至关重要的。这个卷积之后是一个leaky ReLU和一个1 × 1的卷积

这步输出的结果是一个新的dict,需要注意的是此时左右视图的feature map的宽度是不同的,每个tile feature是沿着扫描线是匹配的,定义matching cost如下(2)

注意,尽管初始化阶段对所有的视差都进行了完全匹配的计算,但没有必要存储整个成本量,在测试时,只需要提取最佳匹配的位置,

这样可以非常有效地利用快速内存,例如gpu上的共享内存和在单个Op中的融合实现。因此,不需要存储和处理3D成本量。

Tile Feature Descriptor

初始化阶段还预测一个特征描述P_init(l, x, y)对每个(x,y)位置和精度l

上面公式可以发现这个特征由分号前的两个因素决定,分号后是可学习的参数由1X1卷积+leaky relu实现,通过公式可以

发现P中包含matching cost,所以网络学习参数中包含了match confidence。

3.4 propagation

传播步骤以tile hypotheses为输入,输出基于空间信息传播和信息融合的精细tile hypotheses。对前面提取的特征进行

warp,warp是从右图像(次要)到左图像(参考),以预测高度准确的偏移输入tiles。另外还预测了一个置信度,该置信度允许

有效的融合从早期传播层和初始化阶段的hypotheses

Warping

这个阶段计算一个匹配损失,由左右视图feature map在分辨率l下计算得到,这个步骤用来创建一个local cost volume针对

当前的hypothesis,每个tile hypothesis 被转换成一个尺寸为4 × 4的planar patch,它原本覆盖在feature map中,我们定义

这个局部的4X4的local disparity map 为d' 公式如下

使用沿着扫描线的线性插值,利用局部视差被用来warp得到e(R,l),从右(次要)图像warp到左(参考)图像得到e(R,l)‘ 如果d‘是精确的

那么得到的e(R,l)‘将和相应的左(参考)图像非常相似,通过比较参考(x, y)图和warp得到的图,我们定义了上图中的代价向量。

Tile Update Prediction

这一步以n个tile hypotheses为输入,并预测tile hypotheses的增量加上每个tile hypotheses的标量值w,表示这个tile hypotheses有多大可能是正确的,即一个置信度量,这个机制使用一个CNN模块U来实现,卷积架构能让网络看到空间邻域的tile hypotheses,从而能够在空间上传播信息,这一步的一个关键部分是,我们扩大了tile hypothesis使用从warping步骤中计算的匹配代价φ;通过在视差空间中为一个小邻域这样做,我们建立了一个local cost volume,允许网络更有效地精炼tile hypotheses,详细的步骤是,我们替换tile中的全部视差,我们在正负两个方向上以一个恒定的视差偏移量替换tile中的所有视差,并计算三次cost,使用此方法让a成为输入tile map h的增广tile hypothesis map

U使用没有bn的residual blocks来实现,此外还是用了dilated convolutions来增大感受野,在运行一系列具有不同膨胀因子的residual blocks之前,我们先运行1×1卷积,然后使用一个leaky ReLU来减少特征通道的数量, 更新模块以分层迭代的方式应用(Fig.2),在最低精度l=M下每个位置我们仅有一个tile hypotheses因此n=1;我们通过累加输入的tile hypotheses和增量来应用tile更新,并在每个方向上对贴图进行2倍的上采样,因此,视差d是使用tile的平面方程和剩余的tile hypothesis dx, dy和使用最近邻抽样进行上采样的p三部分完成的;在下一个分辨率M -1,我们现在有两个hypotheses:一个来自初始化阶段,另一个是较低分辨率的上采样hypotheses,故n = 2;我们利用wi为每个位置选择置信度最高的更新tile hypothesis,迭代这个过程知道分辨率为0。为了进一步细化视差图,我们将tile的大小减小了2 × 2倍,并为tile分配了full resolution特征,我们使用n = 1来运行传播模块,直到我们达到tile大小为1 × 1,

这是我们的最终预测。

4、Loss Functions

这部分会详细介绍loss部分,我们的loss依赖ground truth disparities, 为了在不同精度计算loss,我们使用maxpool来down sample GT 到我们需要的分辨率。

4.1 Initialization Loss

GT的视差是亚像素精度的浮点型,而初始化匹配过程中用的是整数的视差。因此,我们使用线性插值计算亚像素差异的matching cost,cost公式如下

公式(9)中为了简化没有写下标,训练的时候学习特征的参数使得matching cost 最小(视差像素),其他像素

位置尽量大,为了实现这一点,我们设计了一个l1对比损失如图(10),其中beta在实验中设置为1,在早期基于深度学习的立体匹配方法中,类似的对比损失也被用

于学习匹配分数。但是,他们分别使用一个随机的非匹配位置作为负样本,或者使用所有的非匹配位置作为负样本。

4.2 Propagation Loss

在传播过程中,我们对tile几何形状d,dx,dy和tile置信度w施加损失,我们使用视差GT_d和视差梯度GT_dx和GT_dy,我们通过在以像素为中心的9×9窗口

中强制将一个平面拟合到GT_d来,为了在tile几何上应用损失,我们首先将tile扩展到一个完整的分辨率视差图d使用平面方程(d,dx,dy)类似于Eq.5,我们使用来自[2]

的一般鲁棒损失函数ρ(·),它类似于一个平滑的L1损失,也就是说,Huber损失。此外,我们使用阈值A对loss进行了截断, 公式如下图

χ是一个指标函数当条件满足时值为1否则值为0,为了监督置信度w,我们施加一个损失,如果预测的hypothesis比阈值C1更接近GT,则增加了置信值,如果预测的

假设比阈值C2更远离GT,则减少了置信值

4.3 Global Loss

整个网络训练是end2end的,所以全部的loss都是在不同的scale和pixel加权求和得到总loss

5、Experiments

HITNet: Hierarchical Iterative Tile Refinement Network for Real-time Stereo Matching--Google相关推荐

  1. Segment-based Disparity Refinement with Occlusion Handling for Stereo Matching翻译和理解

    摘要 摘要:本文提出了一种视差细化方法,通过对视差统计意义的探讨,直接细化赢者通吃视差图.根据基于分割的立体匹配的主要步骤,将参考图像过度分割为超像素,并通过改进的随机样本对每个超像素进行视差面拟合共 ...

  2. 语义分割--Label Refinement Network for Coarse-to-Fine Semantic Segmentation

    Label Refinement Network for Coarse-to-Fine Semantic Segmentation https://www.arxiv.org/abs/1703.005 ...

  3. PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection (AAAI 2020)

    PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection AAAI 2020 中国科学技术大学 欢迎感兴 ...

  4. 【论文笔记】Hierarchical Paired Channel Fusion Network for Street Scene Change Detection

    论文 论文题目:Hierarchical Paired Channel Fusion Network for Street Scene Change Detection 收录:IEEE Transac ...

  5. 【论文笔记】:Enriched Feature Guided Refinement Network for Object Detection

    &Title Enriched Feature Guided Refinement Network for Object Detection 代码 中文翻译 &Summary 提出了一 ...

  6. 【论文阅读】Hierarchical Multi-modal Contextual Attention Network for Fake News Detection --- 虚假新闻检测,多模态

    本博客系本人阅读该论文后根据自己理解所写,非逐句翻译,欲深入了解该论文,请参阅原文. 论文标题:Hierarchical Multi-modal Contextual Attention Networ ...

  7. Hierarchical Attention-Based Multimodal Fusion Network for Video Emotion Recognition

    Hierarchical Attention-Based Multimodal Fusion Network for Video Emotion Recognition 基于层次注意的视频情感识别多模 ...

  8. PRN(20200816):A Hierarchical Deep Convolutional Neural Network for Incremental Learning [Tree-CNN]

    Roy D , Panda P , Roy K . Tree-CNN: A Hierarchical Deep Convolutional Neural Network for Incremental ...

  9. HD-CNN: HIERARCHICAL DEEP CONVOLUTIONAL NEURAL NETWORK FOR IMAGE CLASSIFICATION(泛读)

    一.文献名字和作者    HD-CNN: HIERARCHICAL DEEP CONVOLUTIONAL NEURAL NETWORK FOR IMAGE CLASSIFICATION, 2014 二 ...

最新文章

  1. HTML的标签描述9
  2. UVa 1339,紫书P73,词频
  3. hadoop命令帮助
  4. 金融零售业务大数据分析解决方案
  5. SQL语言之DQL语言学习(九)多表查询/链接查询 SQL99学习
  6. linux+npm+v+报错_linux – npm install会导致像npm ERR这样的错误...
  7. PHP 多维数组搜索 PHP multi dimensional array search
  8. Java多线程实现多客户端的通信
  9. 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志
  10. 微信开发之调起摄像头、本地展示图片、上传下载图片
  11. .NET、ASP.NET控件及源码大汇总 最新最全哦
  12. java 日食,如何更新Java构造函数,等于,哈希等。在日食?
  13. 硬盘写保护软件_三星T7 Touch 1TB移动固态硬盘评测:新奇又安全的加密方式普及?...
  14. [Objective-C]第一天
  15. 【Flutter核心类分析】深入理解BuildContext
  16. oracle10g dblink优化,dblink如果很慢可以用这种方式优化
  17. 行式数据和列式数据对比 存储压缩性能
  18. 1.04 docker的网络
  19. 【笨木头Unity】入门之旅005:正常人都要掌握的操作
  20. 我用50行代码居然「让天猫精灵把客厅灯开了」

热门文章

  1. CWebBrowser 中处理回车相应的问题
  2. 世嘉VR虚拟乐园即将开业,位于二次元天堂秋叶原
  3. ansys 服务器无响应,ANSYS出现的各种错误及解决方法
  4. 快速学习JS的思考方法、有用
  5. 美容院 php源代码,基于ThinkPHP+B-JUI框架开发的微信美容院SPA预约消费管理系统PHP源码...
  6. 【论文写作】LaTeX学习笔记:一文入门LaTeX(超详细)
  7. ubuntu使用 ffmpeg 转换amr格式为mp3
  8. 【仿真建模】第四课:AnyLogic入门基础课程 - 轨道交通仿真入门讲解
  9. 如何使用 ABAP 代码发送带有 PDF 附件的电子邮件
  10. opencv(python)------二值化阙值(threshold)、自适应阙值(adaptiveThreshold)