HITNet Hierarchical Iterative Tile Refinement Network for Real-time Stereo Matching--Google(2)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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’ 公式如下

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值