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

HITNet

论文:https://arxiv.org/pdf/2007.12140.pdf

代码:  google-research/hitnet at master · google-research/google-research · GitHub

https://github.com/ibaiGorordo/HITNET-Stereo-Depth-estimation

注: 本文一个核心概念是tile ,英文原意为 n. 瓦片,瓷砖;空心砖;麻将牌。 可以理解为一个小矩形薄板,厚度可以忽略,表面理想平面的东西。  本文将tile翻译为贴片。

 实时立体匹配的分层迭代贴片细化网络:HITNet

Abstract

        本文提出了一种用于实时立体匹配的新型神经网络结构:HITNet。与最近的许多神经网络方法通过完全的代价立方体并依赖三维卷积相反,我们的方法没有明确地构建(代价)立方体,而是依赖于一种快速多分辨率初始化步骤,可微的二维几何传播和变形机制来推断视差假设。为了达到高精度水平,我们的网络不仅从几何上推理视差,还推断出假设的倾斜平面,允许更准确地执行几何变形和上采样操作。我们的体系结构本质上是多分辨率的,允许在不同级别上传播信息。多个实验证明所提出的方法是有效的,而只需要最先进的方法计算量的一小部分。写作的时候,HITNet在ETH3D网站上双视图立体所有发表指标排名中位列第1~第3,在Middlebury-v3所有端到端学习方法中大多数指标排名第一,在流行KITTI 2012和2015基准中已发表的方法中速度超过100ms的排名第一。

1. Introduction

        近年来对立体匹配深度的研究主要集中在开发精确但计算成本高的深度学习方法上。大型卷积神经网络(CNNs)通常需要使用一秒甚至更多的时间来处理一对图像对,推断出视差图像。对于主动操作端如移动机器人或自动驾驶汽车等,如此高的延迟是无法接受的,需要能够在毫秒内完成图像对处理的方法。尽管如此,在KITTI2012排行榜上发布的前100个方法中,耗时少于100ms的只有4个。

        基于端到端学习的计算型立体(匹配)方法中,一种常见的模式是利用一个CNN,它在很大程度上注意不到立体匹配问题的几何特性。事实上,最初的端到端网络是基于一个通用的U-Net架构[38]。随后的工作指出,包含显式的编码每个像素对应视差代价的匹配代价立方体,结合三维卷积在精度方面提供了显著的改进,但代价是显著增加计算量[24]。后续工作[25]表明,降采样代价立方体可以在速度和准确性之间提供合理的折中。然而,对成本量的降采样是以牺牲准确性为代价的。

        最近的多种立体匹配方法 [52,12,28] 在保持高精度的同时,提高了主动立体视差估计的效率。这些方法主要建立在三种直觉上:首先,利用紧凑/稀疏特征进行快速高分辨率匹配代价计算;其次,非常有效的视差优化方案;第三,利用倾斜平面迭代图像变形,通过最小化图像差异来实现较高的精度。所有这些设计选择都没有明确地使用一个完整的3D代价立方体。通过这样做,这些方法实现了非常快速和准确的主动立体结果,但由于缺乏使用强大的机器学习系统,它们并没有直接推广到被动立体。因此,这提出了一个问题,这些机制是否可以集成到基于神经网络的立体匹配系统中,以实现高效和准确的结果,开启在延迟性关键应用中使用基于被动立体深度感知的可能性。

        我们提出了HITNet,一种基于神经网络的深度估计框架,通过在网络构架中继承图像变形、空间传播和快速高分辨率初始化步骤,克服了在3D立方体上操作的计算型缺点,同时通过允许特性通过网络来流动,来保持学习表示的灵活性。我们的方法的主要思想是将图像 tiles (贴片)表示为平面小块,它包含一个学习紧凑的特征描述符。我们的方法的基本原理是利用空间传播来融合来自高分辨率初始化和当前假设的信息。空间传播通过一个卷积神经网络模块来实现,该模块更新了平面小块及其关联特征的估计。为了使网络迭代地提高视差预测的精度,我们利用网络内图像变形,给网络提供了平面小块周围小范围(±1视差)的局部代价立方体,使网络可以把图像差异最小化。为了重建细节,同时也捕获大的无纹理区域,我们从低分辨率开始,并分层上样本预测到更高的分辨率。我们的体系结构的一个关键特性是,在每个分辨率下,都提供了来自初始化模块的匹配,以方便恢复低分辨率无法表示的薄细结构。图1展示了 我们方法的示例输出,我们的网络是如何恢复非常精确的边界、细节和薄细结构的。

综上所述,我们的主要贡献是:

       \bullet  一种快速的多分辨率初始化步骤,使用学习到的特征计算高分辨率匹配。

       \bullet  一种利用具有学习描述符的倾斜支持窗口的有效2D视差传播。

       \bullet  与流行基准最先进的方法相比,只使用很少一部分计算量。

2. Related Work

        立体匹配是几十年来一直是一个活跃的研究领域[37,44,19]。传统的方法利用人工设计的体系寻找局部对应[57,22,4,21],和空间信息的全局优化[14,26,27]。这些方法的运行时效率大多与视差空间的大小相关,从而不利于实时的应用。有效的算法[31,35,5,3] 使用patchmatch [1]和超像素[31] 避免了搜索全部视差空间。一系列基于机器学习的方法,使用随机森林和决策树,能够快速建立对应关系[10,11,12,13]。然而,这些方法要么需要相机特定的学习或后处理。最近,深度学习为立体匹配带来了巨大的改进。早期的工作训练 Siamese Network(孪生网络) 提取逐patch-wise特征或预测匹配代价[36,60,58,59]。端到端网络已被提出联合学习所有步骤,得到更准确的结果[47,38,41,48]。

 

### HDMNet: Hierarchical Dense Correlation Distillation for Few-Shot Segmentation HDMNet 是一种针对少样本分割任务提出的创新框架,旨在通过分层密集关联蒸馏来提升模型的表现。该方法特别适用于图像分割领域,在仅有少量标记样本的情况下仍能保持较高的准确性。 #### 方法概述 HDMNet 的核心在于引入了一种新颖的分层机制,能够有效地捕捉不同尺度下的特征表示,并利用教师-学生网络结构进行知识迁移。具体来说: 1. **多尺度特征提取**:为了更好地适应目标对象的变化形态,HDMNet 设计了一个可以处理多种分辨率输入的支持向量机(SVM),从而获得更加鲁棒和支持性的特征描述子[^1]。 2. **跨层注意力模块**:借鉴于层次注意原型网络(HAPN)[^3]的设计理念,HDMNet 中加入了跨层注意力机制(Cross-Level Attention Module, CLA),它允许低级别到高级别的逐层交互学习,增强了局部细节与全局上下文之间的联系。 3. **稠密对应关系建模**:不同于传统的一对一匹配方式,HDMNet 提出了稠密对应的策略(Dense Correspondence Modeling, DCM),即在整个支持集中寻找最相似区域并建立一对一或多对多的关系映射表,以此指导查询图片中相应位置像素标签预测过程。 4. **渐进式蒸馏损失函数**:考虑到直接优化整个网络可能会遇到梯度消失等问题,因此采用了自底向上逐步精细化调整的方式定义了渐进式的蒸馏损失(Progressive Distillation Loss, PDL)。这不仅有助于稳定训练过程,而且促进了从简单模式到复杂场景的有效过渡。 ```python import torch.nn as nn class HDMDistiller(nn.Module): def __init__(self, student_net, teacher_net): super().__init__() self.student = student_net self.teacher = teacher_net def forward(self, support_set, query_image): # Extract features from both networks s_features = self.student(support_set) t_features = self.teacher(support_set) # Compute dense correspondence between layers corr_matrix = compute_correspondences(s_features, t_features) # Apply cross-level attention mechanism attended_sfeat = apply_attention(corr_matrix, s_features) # Predict segmentation mask using distilled knowledge pred_mask = predict_segmentation(attended_sfeat, query_image) return pred_mask def progressive_distill_loss(student_output, teacher_output): loss = 0. for level in range(len(student_output)): l2_diff = F.mse_loss(student_output[level], teacher_output[level]) kl_divergence = F.kl_div( F.log_softmax(student_output[level]/T), F.softmax(teacher_output[level]/T)) loss += alpha * l2_diff + beta * kl_divergence return loss ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小心点

你的鼓励是我创造的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值