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

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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窗口

img
img
img

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值