Adabins:Transformer+单目深度估计

Adabins:Depth Estimation using Adaptive Bins

    • 摘要
    • 1.Introduction
    • 2.Related Work
    • 3.Methodology
      • 3.1 Motivation
      • 3.2 Adabins Design
      • 3.3 Architecture description
      • 3.4 Loss Function
    • 4.实验
    • 5结论
    • 6思考

论文:https://arxiv.org/abs/2011.14141
代码:https://github.com/shariqfarooq123/AdaBins

摘要

我们解决了从单个RGB输入图像估计高质量密集深度图的问题。我们从一个基线编码器-解码器卷积神经网络结构开始,提出了信息的全局处理如何帮助改进整体深度估计的问题。为此,我们提出了一种基于Transformer的结构块,它将深度范围划分为多个单元,每个单元的中心值自适应估计每幅图像。图像最终深度值估计为单元中心的线性组合。我们称这个新构造的模块为AdaBins。结果显示,在所有指标上,在几个流行的深度数据集上,与最先进的技术相比,有了决定性的改进。并且通过消融实验验证了该模型的有效性,给出了新模型的编码和相应的预训练权值。

1.Introduction

本文解决了从单一RGB输入图像中估计高质量稠密深度映射的问题。这是计算机视觉中的一个经典问题,在许多应用中都是必不可少的。在这项工作中,我们提出了一种新的建筑模块,称为Adabins,这提出了在两个最流行的室内和室外数据集NYU和KITTI上进行深度估计的SOTA模型。
我们工作的动机是推测当前的体系结构没有对输出值执行足够的全局分析。卷积层的一个缺点是,当张量在瓶颈处或瓶颈附近达到非常低的空间分辨率时,它们才处理全局信息。然而,我们相信,全局处理在以高分辨率进行时能力要强大得多。我们的总体思路是对传统编码器-解码器体系结构的输出进行全局统计分析,并使用学习的以最高分辨率运行的后处理构建块对输出进行优化。为实现这一想法,我们建议对深度值的分布进行分析和修正。
Adabins:Transformer+单目深度估计_第1张图片
对应于不同RGB输入的深度分布可以在很大程度上变化(参见图1),一些图像中的大部分对象都位于非常小的深度值范围内。例如,家具的近距离图像包含的像素大部分是靠近相机的,而其他图像的深度值可能分布在更大的范围内,例如走廊,其中深度值的范围从较小的值到网络支持的最大深度。由于问题的不适定性质,深度分布的这种变化使得端到端的深度回归成为一项更加困难的任务。最近的研究已经提出利用室内环境的假设,如平面性约束[26,22]来引导网络,这些约束可能存在或者可能不存在于现实环境,特别是在室外场景。
与强加这样的假设不同,我们研究了一种网络学习自适应聚焦深度范围内更可能出现在输入图像场景中的区域的方法。
我们的主要贡献在下面列出:

  • 我们提出了一个架构模块来执行场景信息的全局处理。我们建议将预测深度范围划分到单元格里,它的宽度随每张图片而改变,最终的深度估计是这些单元中心的线性组合。
  • 对于两种最流行的数据NYU和KITTI,我们在所有度量中都显示了有监督的单幅图像深度估计的决定性改进
  • 我们分析了我们的发现,并对所提出的AdaBins块进行了不同的修正,并研究了对深度估计精度的影响

2.Related Work

基于RGB图像的三维场景重建问题是一个不适定问题。诸如缺乏场景平均、比例模糊、半透明或反光材料等问题都会导致无法从外观获得几何图形的模糊情况。近年来,基于卷积神经网络(CNNs)的方法能够从单个RGB输入图像中实时生成合理的深度图。
单目深度估计被许多CNN方法视为对单个RGB图像密集深度映射的回归。
我们考虑BTS和DAV作为两个最重要的竞争对手,在解码阶段,BTS使用局部平面引导层将特征引导到全分辨率,而不是标准的上采样层。DAV采用了标准的编解码方案,并提出了在场景中通过注意瓶颈来挖掘物体的共面性
编码器-解码器网络在图像分割[35]、光流估计[10]和图像恢复[28]等许多视觉相关问题上做出了重要贡献。近年来,这种体系结构的使用在深度估计问题的监督和非监督设置方面都取得了巨大的成功[15,41,21,48,1]。这种方法通常使用一个或多个编码器-解码器网络作为其较大网络的子部分。在本文中,我们采用了文献[1]中使用的基线编码器-解码器网络结构。这使我们能够更明确地研究我们在管道上提出的扩展的性能属性,这通常是一个困难的任务。
Transformer网络作为一种可用的构建块,在NLP任务和计算机视觉任务中得到了越来越多的关注[32,43,2,6]。根据最近将CNN与Transformers结合起来的成功趋势[2],我们建议利用Transformer编码器作为CNN输出的非本地处理的构建块

3.Methodology

在本节中,我们将介绍这项工作的动机,提供AdaBins体系结构的细节,并且描述相应使用的损耗函数

3.1 Motivation

我们的想法可以看作是由fu等人提出的通过有序回归网络进行深度估计的一种推广。Fu等人观察到,如果将深度回归任务转化为分类任务,可以实现性能改进。他们建议将深度范围划分为固定数量的预先确定宽度的单元。我们的推广解决了初始方法的多重限制。首先,我们提出了一种根据输入场景的特征来计算动态变化的自适应箱的方法。第二,分类方法导致深度值的离散化,导致视觉质量差,深度不连续性明显。这可能仍然会在标准评估指标方面产生良好的结果,但对于下游应用(如计算摄影或三维重建)来说,这可能是一个挑战。我们建议用单元这允许我们将分类的优点与深度映射回归的优点结合起来。最后,与其他架构(如DAV[22])相比,我们在高分辨率下全局计算信息,而不是在低分辨率下主要在瓶颈部分计算信息。中心的线性组合来预测最终的深度值。

3.2 Adabins Design

在这里,我们讨论了我们所提出的架构的四种设计选择,它们对获得的结果最为重要
首先,我们采用自适应装箱策略来离散化深度区间D=(Dmin,Dmax)为N个单元。这个对于给定的数据集,间隔是固定的,由数据集规范确定或手动设置为合理范围。为了说明我们将深度间隔划分到单元中的想法,我们想将我们的最终解决方案与我们评估的其他三种可能的设计选择进行对比。

  • 用统一的单元宽度固定单元:深度间隔D被划分为相同大小的N个单元
  • 用对数标准的单元宽度固定单元:深度间隔D按对数尺度划分为N个相等的单元
  • 受训练的单元宽度:单元宽度是自适应的,并且可以从特定的数据集进行学习,尽管宽度间隔是普遍的,最终所有图片共享深度间隔D细分出来的单元。.
  • Adabins:每张图片的宽度间隔b是适应性计算出来的。
    我们推荐AdaBins作为最佳选择,我们的消融研究验证了这一选择,显示了该设计优于其他选择。图3中显示了储物箱宽度的四种设计选择。

Adabins:Transformer+单目深度估计_第2张图片
其次,将深度间隔D离散为各个单元并且将每个像素分配到单个单元中形成深度离散化伪影。因此,我们将最终深度预测为单元中心的线性组合,使模型能够估计平滑变化的深度值。第三,先前的一些架构建议在网络中的编码器块(例如,图像字幕[5,18]或对象检测[2])之后使用注意块来处理信息来执行全局处理。此外,目前最先进的深度估计也采用了这种策略[22]。这种体系结构由三个模块组成:编码器、注意力机制,然后是解码器。我们最初采用这种方法,但注意到在空间分辨率较高的张量上使用注意力可以获得更好的结果。因此,我们提出了一个建筑,也有这三个块,但排序如下跟随:编码器,解码器,最后注意力机制。
第四,我们想建立在最简单的架构上以拎出我们新提出的Adabins概念的影响。因此,我们构建了一个现代的编码器-解码器[1],使用EfficientNet B5[40]作为编码器的主干。
在下一小节中,我们将提供整个架构的描述

3.3 Architecture description

Adabins:Transformer+单目深度估计_第3张图片

图2显示了我们提出的深度估计体系结构的概述。我们的架构由两个主要组成部分组成:1) 基于预先训练的EfficientNet B5[40]编码器和标准特征上采样解码器构建的编码器-解码器块2) 我们提出的自适应单元宽度估计块称为AdaBins。第一个组件主要基于Alhashim和Wonka[1]的简单深度回归网络,并进行了一些修改。两个基本的修改是将编码器从DenseNet[20]到EfficientNet B5并且为新架构使用了不同的适当的损失函数。此外,解码器的输出是张量xd ∈ \in R(H×W×Cd),没有代表最终深度值的单通道图像。我们把这个张量称为“解码特征”。第二部分是本文的关键贡献,即Adabins模块。Adabins模块的输入是大小为(H×W×Cd)的解码特征,输出是大小为(H×W×1)的张量。由于当前gpu硬件的内存限制,我们用h= H 2 \frac{H}{2} 2H和w= W 2 \frac{W}{2} 2W以便在批量较大的情况下更好地学习。通过简单的双线性上采样到H×W×1计算得到最终的深度图。
AdaBins模块中的第一个块称为mini-ViT。图4中示出了该块的概述。它是最近提出的一种使用Transformer进行图像识别技术的简化版本[6],只需稍加修改。mini-ViT的详细信息将在下一节中解释。mini-ViT有两个输出:1)bin widths矢量,它定义了如何为输入图像划分深度区间;2)大小为h×w×C的范围注意映射,它包含了像素级深度计算的有用信息。
Adabins:Transformer+单目深度估计_第4张图片

Mini-ViT.对于给定的图像,估计深度范围内更可能出现的子层段需要同时结合局部结构信息和全局分布信息。我们建议使用全局注意来计算每个输入图像的单元宽度向量。全局注意力在内存和计算复杂性方面都是昂贵的,特别是在更高的分辨率下。然而,Transformer的最新进展提供了一些有效的替代品。在设计AdaBins的Transformer模块时,我们从Vision TransformerViT[6]中获得了灵感。由于我们的数据集较小,我们还使用了一个小得多的transformer版本,在下面的描述中将这个transformer称为mini ViT或mViT。
单元宽度.我们首先描述如何使用mViT获得单元宽度矢量。输入mVIT的是xd ∈ \in R(H×W×Cd)的解码特征张量,然而,一个Transformer需要一个固定大小的向量序列作为输入。我们首先将解码的特征通过一个命名为嵌入式卷积(Embedding Conv)的卷积块,卷积核大小为p×p,步长为p并且输出通道为E。因此,这个卷积的结果是一个大小为 h p \frac{h}{p} ph× w p \frac{w}{p} pw×E的张量(假设h,w都可以被p整除)。结果被重构成一个空间平坦的张量xp ∈ \in RS×E,S=hw/p2作为Transformer的有效序列长度。我们将这个E维序列称作补丁嵌入。
按照通常的做法[2,6],我们在将补丁嵌入到Transformer之前,将学习到的位置编码添加到补丁嵌入中。我们的变压器是一个小型变压器编码器(见表)。1)并输出输出嵌入序列x0 ∈ \in RS×E,我们在第一个输出嵌入上使用了一个MLP头(我们还使用了一个版本,该版本有一个额外的特殊标记作为第一个输入,但没有看到改进)。MLPhead使用ReLU激活并输出N维向量b′,最后,我们对向量b′进行归一化,使其总和达到1,以获得如下的单元宽度向量:
在这里插入图片描述
ϵ \epsilon ϵ=10-3,小正数 ϵ \epsilon ϵ确保每个单元的宽度都是严格正数。归一化引入了单元宽度之间的竞争,并通过预测D的感兴趣区域的较小单元宽度,从概念上强制网络聚焦D的子区间。
在下一小节中,我们将描述如何从分解的特征和Transformer输出嵌入中获得范围注意映射。
Range attention maps在这里,所述的有限元分析结果显示了高分辨率和局部像素级信息,而变压器输出嵌入有效地包含了更多的全局信息。Transfor的嵌入输出从2到C+1被用来作为一系列1×1卷积核并且与解码特征卷积(伴随着一个3×3的卷积层)来获取范围注意力图R。这相当于计算被视为“keys”的像素特征和被视为“queries”的Transformer输出嵌入之间的点积注意权值,这种使用输出嵌入作为卷积核的简单设计,使网络能够将变压器的自适应全局信息集成到分解特征的局部信息中。R和b一起使用来获得最终的深度图。
Hybrid regression范围注意图R通过1×1卷积层得到N通道,并进行softmax激活。我们定义这N个softmax得分pk,K=1,2…N,作为N个深度单元中心在每个像素处的概率,深度单元中心c(b):={c(b1),c(b2),…,c(bn)}按以下公式从单元宽度向量b计算得到
在这里插入图片描述
最后,每个像素处的最终深度值 d ˇ \check{d} dˇ从该像素的Softmax分数和深度单元中心c(b)的线性组合计算,如下所示
在这里插入图片描述
与Fu等人[11]相比,我们没有预测最可能的单元的单元中心的深度。这使我们能够预测平滑的深度图,而不必像图5所示的那样出现离散化伪影
Adabins:Transformer+单目深度估计_第5张图片

3.4 Loss Function

像素深度损失受[26]的启发,我们使用由Eigen等人引入的标度不变损耗(SI)的缩放版本。在这里插入图片描述
在这里插入图片描述
T代表具有有效地面真实值得像素数目,实验中取 λ \lambda λ=0.85, α \alpha α=10
单元中心密度损失
这个损失期鼓励单元中心的分配跟随地面真实深度值分布。我们希望鼓励单元中心接近实际的地面真相深度值,反之亦然。我们用c(b)代表一系列单元中心并且用X代表所有地面真实深度值,使用双向倒角损失作为正则化器。在这里插入图片描述
最终,定义总损失为:
在这里插入图片描述
实验中设置 β \beta β=0.1.我们用不同的损失函数进行了计算,包括RMSE损失,以及[1]所建议的SSIM[42]加上L1loss得组合损失。然而,我们能够在我们提议的损失中取得最好的结果。本文对不同损耗函数及其在消融研究中的性能进行了比较。

4.实验

Adabins:Transformer+单目深度估计_第6张图片

Adabins:Transformer+单目深度估计_第7张图片

Adabins:Transformer+单目深度估计_第8张图片
Adabins:Transformer+单目深度估计_第9张图片
Adabins:Transformer+单目深度估计_第10张图片

5结论

我们为单张图片得深度估计引入了一个新的模块称为Adabins。Adabins使NYU和KITTI这两个最受欢迎的数据集的技术水平有了决定性的提高。在未来的工作中,我们将研究高分辨率的全局信息处理是否也能提高其他任务的性能,例如分割、法线估计和多幅图像的三维重建。

6思考

看完文章主要想搞清楚,为什么transformer经过MLP head之后输出的b就是深度间隔,两者的映射关系是怎么建立的?

你可能感兴趣的:(深度估计,深度学习,pytorch,计算机视觉)