AdaBins:使用自适应bins进行深度估计

news2024/11/16 9:52:18

论文:https://arxiv.org/abs/2011.14141

代码:https://github.com/open-mmlab/mmsegmentation/tree/main/projects/Adabins

0、摘要

        本文主要解决了从单个RGB输入图像估计高质量密集深度图的问题。我们从一个baseline的encoder-decoder CNN结构出发,提出一个问题:信息的全局处理如何帮助提高整体深度估计?为此,我们提出了一种基于transformer的架构块,它将深度范围划分为多个 bin,而每个bin的中心值是根据每个图像自适应估计的,最终的深度值估计为 bin 中心的线性组合。我们将这种新的构造块称为AdaBins。我们的结果显示,在所有指标上,在几个流行的深度数据集上都比现有技术有了决定性的改进。我们还通过消融研究验证了所提出的块的有效性,并提供了新的最先进模型的代码和相应的预训练权重。

1、引言

        本文解决了从单个RGB输入图像估计高质量密集深度图的问题。这是计算机视觉中的一个经典问题,对许多应用至关重要。在这项工作中,我们提出了一种新的架构构建块,称为AdaBins,它为在两个最流行的室内和室外数据集NYU和KITTI上进行深度估计带来了一种最先进的新架构。

        我们工作的动机是猜测当前的体系结构没有对输出值进行足够的全局分析。卷积层的一个缺点是,只有当张量在瓶颈处或瓶颈附近达到非常低的空间分辨率时,它们才会处理全局信息。然而,我们相信,在高分辨率下进行全局处理会更加强大。我们的总体想法是对传统编码器-解码器架构的输出执行全局统计分析,并使用以最高分辨率操作的训练过的后处理构建块来细化输出。作为这种思想的一种特殊认识,我们提出分析和修改深度值的分布。

        与不同RGB输入相对应的深度分布可以在很大范围内变化(见图1)。一些图像的大多数对象位于非常小的深度值范围内。比如,家具特写图像中包含大部分靠近相机的像素,而其他图像则具有分布在更宽范围上的深度值,比如走廊,深度值的范围从很小的值到网络支持的最大深度值。随着问题的不适定性,深度分布的这种变化使得以端到端的方式进行深度回归变得更加困难。最近的工作已经提出利用关于室内环境的假设,如平面性约束,来指导网络,这可能适用也可能不适用于真实世界的环境,尤其是室外场景。

图1:AdaBins的插图:顶部:输入RGB图像。中:我们的模型预测的深度。底部:GT的深度值直方图(蓝色)和预测的自适应深度仓中心的直方图(红色),深度值从左到右递增。注意,对于特写图像,预测的仓中心被聚焦在较小的深度值附近,但是对于具有更宽范围的深度值的图像被广泛分布。

        我们没有基于这样的假设继续研究,而是提出了一种新方法,在该方法中,网络学会自适应地关注深度范围内更可能出现在输入图像场景中的区域。

        主要贡献如下:

  • 提出了一个可以执行场景信息全局处理的构造块,提出将预测的深度范围划分为每个图像的宽度可变的bins。最终的深度估计是bin中心值的线性组合。
  • 在两个最流行的数据集NYU和KITTI的所有指标中,显示了监督单图像深度估计的决定性改进。
  • 我们分析了我们的发现,研究了对所提出的AdaBins块的不同修改,并研究了它们对深度估计准确性的影响。

2、相关工作

        从RGB图像重建三维场景的问题是一个不适定问题。缺乏场景覆盖、比例模糊、半透明或反射材质等问题都会导致无法从外观中导出几何体的模糊情况。最近,依赖卷积神经网络(CNNs)的方法能够以实时速度从单个RGB输入图像中生成合理的深度图。

        单目深度估计(Monocular depth estimation)已经被许多CNN方法认为是从单个RGB图像中的密集深度图的回归。

        我们考虑了两个最接近我们方法的工作:BTS和DAV。BTS在解码阶段使用局部平面引导层来将特征引导到全分辨率,而不是标准上采样层。DAV使用标准的编码器-解码器方案,并提出通过关注bottleneck来利用场景中对象的共面性。

        编码器-解码器网络在许多与视觉相关的问题上做出了重大贡献,如图像分割[35]、光流估计和图像恢复。近年来,这种架构的使用在深度估计问题的有监督和无监督设置中都取得了巨大成功。这种方法通常使用一个或多个编码器-解码器网络作为其较大网络的子部分。在本文中,我们采用了《High Quality Monocular Depth Estimation via Transfer Learning》使用的baseline编码器网络架构。这使我们能够更明确地研究我们提出的管道扩展的性能归因,这通常是一项困难的任务。

        transformer网络作为一种可行的构建块,在NLP任务和计算机视觉任务中的传统使用之外,正受到越来越多的关注。继最近将CNN与Transformer相结合的趋势取得成功之后,我们建议利用Transformer编码器作为CNN输出的non-local处理的构建块。

3、方法

        在本节中,我们介绍了这项工作的动机,提供了AdaBins架构的细节,并描述了相应的损失函数的使用。

3.1. 动机

        我们的想法可以被视为通过有序回归网络对深度估计的推广,如Fu等人提出的那样,他们观察到,如果将深度回归任务转换为分类任务,则可以实现性能改进,他们建议将深度范围划分为固定数量的预定宽度的bins。我们的推广解决了初始方法的多个局限性。首先,我们提出计算根据输入场景的特征动态变化的自适应bin。其次,分类方法导致深度值的离散化,这导致视觉质量差,具有明显的尖锐深度不连续性。这可能仍然会得到关于标准评估指标的较好结果,但它可能会对下游应用提出挑战,例如计算摄影或3D重建。因此,我们建议将最终深度值预测为bin中心的线性组合。这使我们能够将分类的优势与深度图回归的优势相结合。最后,与其他架构(例如DAV)相比,我们以高分辨率全局的计算信息,而不是在低分辨率的瓶颈部分计算信息。

3.2. AdaBins设计

        我们讨论了我们提出的架构的四种设计选择,这些选择对获得的结果最重要。

        首先,我们采用自适应分仓策略将深度区间D=(dmin,dmax)离散为N个bin。对于给定的数据集,此间隔是固定的,并由数据集规范确定或手动设置为合理的范围。为了说明我们将深度区间划分为区间的想法,我们想将我们的最终解决方案与我们评估的其他三种可能的设计选择进行对比:

  • 具有均匀bin宽的固定bin:深度间隔D被划分为大小相等的N个bin;
  • 具有对数刻度bin宽度的固定bin:深度间隔D按对数刻度划分为大小相等的bin;
  • 训练过的bin宽度:bin宽度是自适应的,可以针对特定的数据集进行学习。由于bin宽度是通用的,因此所有图像最终共享深度间隔D的相同bin;
  • AdaBins:为每个图像自适应地计算bin宽度;

        我们推荐AdaBins策略作为最佳选择,我们的消融研究通过显示该设计相对于其替代方案的优势来验证这一选择。bin宽度的四种设计选择如图3所示。

图3:bin宽度的选择:Uniform和Loguniform bin是预先确定的;训练bin因数据集而异;自适应bin针对每个输入图像而变化

        其次,将深度间隔D离散化为多个bin,并将每个像素分配到一个单独的bin中,这导致了深度离散化伪影。因此,我们将最终深度预测为仓中心的线性组合,从而使模型能够估计平滑变化的深度值。

        第三,一些前期工作(图像字幕、目标检测等)提出在encoder块之后使用注意力模块来进行全局处理。此外,当前的SOTA深度估计使用了这种策略,这样的体系结构由三个块组成,按顺序排列:编码器、注意力,然后是解码器。我们最初遵循了这种方法,但考虑到在空间上更高分辨率的feature map上使用注意力可以获得更好的结果。因此,我们提出了一种架构,它也有这三个块,但顺序如下:编码器、解码器,最后是注意力。

        第四,我们希望建立在尽可能简单的架构上,以强调我们新提出的AdaBins概念的影响。因此,我们在现代编码器的基础上构建编码器,使用EfficientNet B5作为编码器的主干。

        在下一小节中,我们将对整个体系结构进行描述。

3.3. 体系结构描述

        图2显示了我们提出的深度估计架构的概述。我们的架构由两个主要组件组成:1)建立在预训练的EfficientNet B5[40]编码器和标准特征上采样解码器上的编码器-解码器块;2) 我们提出的自适应bin宽度估计器块称为AdaBins。第一个组成部分主要基于Alhashim和Wonka的简单深度回归网络,并进行了一些修改。两个基本的修改是:从DenseNet改为EfficientNet B5,并为新架构使用不同的损失函数。此外,解码器的输出是张量x_d\in R^{h×w×C_d},而不是表示最终深度值的单通道图像,我们将这个张量称为“decoded features”。第二个组件是本文的一个关键贡献,AdaBins模块。AdaBins模块的输入是大小为h×w×Cd的解码特征,输出张量的大小为h x w×1。由于当前GPU硬件的内存限制,我们使用h=H/2和w=W/2来使用更大的batch size,然后通过简单的双线性上采样到H×W×1来计算最终的深度图。

图2:我们提出的网络架构概述。我们的架构由两个主要组件组成:编码器块和我们提出的自适应bin宽度估计器块AdaBins。我们网络的输入是空间维度H和W的RGB图像,输出是单通道H×W深度图像(例如,空间分辨率的一半)。

 AdaBins模块中的第一个块称为miniViT,该块的概述如图4所示。它是ViT的一个简化版,并做了微小改动。mini-ViT有两个输出:1)bin度的矢量b,它定义了如何为输入图像划分深度间隔D;2)大小为h×w×C的范围注意力映射R,它包含像素级深度计算的有用信息。

图4:mini ViT块的概述。块的输入是输入图像的多通道特征图。该块包括应用于输入的patch嵌入的Transformer编码器,用于学习估计bin宽度b,以及计算范围注意力映射R所需的一组卷积核。

        Mini-ViT: 估计深度范围D内对于给定图像更有可能发生的子区间将需要同时组合局部结构信息和全局分布信息。我们建议使用全局注意力来计算每个输入图像的bin宽度向量b。全局注意力在内存和计算复杂性方面都是昂贵的,尤其是在更高分辨率下。然而,最近transformer的快速发展提供了一些有效的替代方案。我们在设计带有transformer的AdaBins模块时,从Vision Transformer ViT中获得了灵感。我们还使用了一个小得多的transformer版本,因为我们的数据集更小,并在以下描述中将此transformer称为mini-ViT或mViT。

        Bin-widths:我们首先描述如何使用mViT来获得bin宽度向量b。mViT块的输入是解码特征的张量x_d\in R^{h×w×C_d}。然而,transformer采用一系列固定大小的矢量作为输入。我们首先将解码的特征通过卷积块,称为嵌入卷积(见图4),核大小为p×p,步长为p,输出通道数为E。因此,这个卷积的结果是大小为h/p×w/p×E的张量(假设h和w都可以被p整除)。其结果中空间维度被拉平,形成向量X_p \in R^{SXE},其中S=hw/p^2作为transformer的有效序列长度。我们将这个E维向量序列称为patch嵌入。

        根据常见操作,我们在将patch嵌入送到transformer之前,将学习的位置编码添加到patch嵌入中。我们的transformer是一个小型transformer(详见表1),并输出一系列输出嵌入X_o \in R^{SXE}。我们在第一个输出嵌入上使用了MLP头(我们还试验了一个版本,该版本有一个额外的特殊令牌作为第一个输入,但没有看到改进)。MLP头使用ReLU激活并输出N维矢量b′。最后,我们对向量b′进行归一化,使其总和为1,以获得如下的bin宽度向量b:

        式中\epsilon = 10^{-3},较小的正值可以确保每个bin宽度严格非负。归一化引入了bin宽度之间的竞争,并通过预测D的感兴趣区域的较小仓宽度,在概念上迫使网络关注D内的子区间。

        在下一小节中,我们将描述如何从解码的特征和transformer输出嵌入中获得范围注意力映射R。

        Range attention maps:在这一点上,解码的特征表示高分辨率的局部像素级信息,而transformer的输出嵌入有效地包含更多的全局信息。如图4所示,来自transformer的输出嵌入第2到C+1的部分被用作1×1卷积核,并且与解码的特征进行卷积(后接3×3卷积层)以获得范围注意力映射R。这相当于计算被视为“keys”的像素特征和被视为‘queries’的transformer输出嵌入之间的点积注意力权重。这种使用输出嵌入作为卷积核的简单设计允许网络将来自transformer的自适应全局信息集成到解码特征的局部信息中。R和b被一起使用以获得最终的深度图。

        Hybrid regression:距离-注意力映射R通过1×1卷积层获得N个通道,然后进行Softmax激活。我们将N个Softmax得分pk,k=1...N解释为根据bin宽度向量b计算的N个深度bin中心c(b):={c(b1),c(b2),…,c(bN)}上的概率。bin宽度向量为:

        最后,在每个像素处,根据该像素处的Softmax分数和深度bin中心c(b)的线性组合计算最终深度值\widetilde{d},如下所示:

        与Fu等人相比,我们没有直接将深度预测为最有可能的bin的bin中心。这使我们能够在没有离散化伪影的情况下预测平滑的深度图,如图5所示:

图5:深度间隔离散化引入的伪影演示。我们的混合回归产生更平滑的深度图。

3.4. 损失函数

        Pixel-wise depth loss:们使用了Eigen等人引入的比例不变损失(SI)的缩放版本:

其中g_i = log \widetilde{d_i} - log d_i,GT深度d_i和 T表示具有有效GT值的像素的数量。我们在所有实验中使用λ=0.85和α=10。

        Bin-center density loss: 该损失项鼓励bin中心的分布遵循GT中深度值的分布。我们希望鼓励bin中心接近GT深度值,反之亦然。我们将bin中心的集合表示为c(b),将GT图像中所有深度值的集合表示为由X,并使用双向切角损失作为正则化子:

        最终,总的损失为:

         我们为所有实验设置了β=0.1。我们对不同的损失函数进行了实验,包括RMSE损失,以及[1]提出的组合SSIM加L1损失。然而,我们能够通过我们提出的损失获得最佳结果。我们在消融研究中对不同的损失函数及其性能进行了比较。

4、实验结果

5、结论

        我们引入了一个新的架构块,称为AdaBinsfor,用于从单个RGB图像进行深度估计。AdaBins在NYU和KITTI这两个最受欢迎的数据集上,相比之前的SOTA取得了决定性的提升。在未来的工作中,我们希望研究高分辨率信息的全局处理是否也能提高其他任务的性能,如分割、法线估计和多幅图像的3D重建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sd模型测试之唐伯虎点秋香

周星驰拍过一个喜剧电影,叫《唐伯虎点秋香》。 其实唐伯虎是一个悲剧人物。 唐伯虎本名唐寅,字伯虎,后改字子畏,号六如居士、桃花庵主、鲁国唐生、逃禅仙吏等,南直隶苏州府吴县人。明代著名画家、书法家、诗人。 他…

iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING

#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…

《RT-DETR改进实战》专栏介绍 专栏目录《限时特惠中》

《RT-DETR改进实战专栏》介绍及目录 介绍:欢迎来到最新专栏《RT-DETR改进实战》!这个专栏专注于基于 YOLOv8 项目的魔改版本,而不是百度飞桨框架中的 RT-DETR。 本专栏为想通过改进 RT-DETR 算法发表论文的同学设计。每篇文章均包含完整的改…

MyBatis-Flex(一):快速开始

框架介绍 MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。 MyBatis-Flex 官方文档 说明 本文参照官方文档的【快速开始】 章节,编写 Spring Boot 项目的代码示例。 快速开始 创建数据库表 直接参照官网示…

fl studio 21.2.0.3842中文破解版2024最新V21.2完整版免费下载

fl studio 21.2.0.3842中文破解版2024最新V21完整的软件音乐制作环境或数字音频工作站(DAW)宿主软件。FL Studio,常称水果,是一款功能强大的编曲软件,集编曲,录音,剪辑,混音于一身,简单易上手&a…

一文带你彻底弄懂js事件循环(Event Loop)

JavaScript事件循环是JavaScript运行时环境中处理异步操作的机制。它允许JavaScript在执行同步代码的同时处理异步任务,以避免阻塞线程并提供更好的用户体验。 本文将在浏览器异步执行原理基础上带你彻底弄懂js的事件循环机制。 浏览器JS异步执行原理 js是单线程…

envi5.3处理高分二号影像数据辐射定标大气校正

目录 一、多光谱影像处理 1. 辐射定标 2.大气校正 1. 需要准备一些数据: 2.大气校正过程 3、正射校正 二、全色影像处理 1. 辐射定标 2. 正射校正 三、图像融合 1.几何配准 2.图像融合 高分二号处理流程 envi5.3的安装教程: ENVI5.3安装 安装完ENVI5.3后&#xff0…

陪诊系统|挂号陪护搭建二开陪诊师入驻就医小程序

我们的陪诊小程序拥有丰富多样的功能,旨在最大程度满足现代人的需求。首先,我们采用了智能排队系统,通过扫描二维码获取排号信息,让您从繁琐的排队过程中解放出来。其次,我们提供了多种支付方式,不仅可以实…

C++快餐——C++11(2)

如期待奇迹发生,那唯有不停伸手去抓紧,去把握才行。 文章目录 类成员变量缺省值default关键字delete关键字final关键字可变参数模板STL容器中empalce相关接口函数优点 lambda表达式捕获列表注意!!!底层实现 总结 类成员…

第N个斐波那契数列

第N个斐波那契数列 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int tribonacci(int n) {int a[4]{0,1,1,2};if(n<4) return a[n];int kn-3;for(int i0; i<k;i){int tmpa[3];a[3]a[1]a[2]a[3];//不是【0】开始&…

MATLAB——多层小波的重构

%% 学习目标&#xff1a;多层小波的重构 %% 程序1 clear all; close all; load noissin.mat; xnoissin; [C,L]wavedec(x,3,db1); %小波多层分解 ywaverec(C,L,db1); %重构&#xff0c;必须小波类型一致 emax(abs(x-y)) %重构的误差 %% 程序2 clear all;…

基于模拟退火算法的无人机航迹规划-附代码

基于模拟退火算法的无人机航迹规划 文章目录 基于模拟退火算法的无人机航迹规划1.模拟退火搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用模拟退火算法来优化无人机航迹规划。 …

设计模式(全23种)

1.前言 1.CUML类图 面向对象设计主要就是使用UML的类图&#xff0c;类图用于描述系统中所包含的类以及它们之间的相互关系&#xff0c;帮助人们简化对系统的理解&#xff0c;它是系统分析和设计阶段的重要产物&#xff0c;也是系统编码和测试的重要模型依据。下面基于C这门语…

Leetcode970. 强整数

Every day a Leetcode 题目来源&#xff1a;970. 强整数 解法1&#xff1a;枚举 枚举 i 和 j 所有的可能性&#xff0c;然后计算 pow(x, i) pow(y, j)&#xff0c;判断是否 < bound。若满足&#xff0c;则放入一个哈希集合&#xff0c;最后将集合转成数组返回。 第一种…

​轻量应用服务器有什么优势?如何评价亚马逊云科技轻量应用服务器?

什么是轻量应用服务器&#xff1f; 随着如今各行各业对云计算的需求越来越多&#xff0c;云服务器也被越来越多的企业所广泛采用。其中&#xff0c;轻量应用服务器是一种简单、高效、可靠的云计算服务&#xff0c;能够为开发人员、企业和个人提供轻量级的虚拟专用服务器&#…

关于c++unique后会打乱顺序

这为什么加上注释这三行输出就会多个4 5 吗 还是a已经发生了变化? 疑问? 解决: unique要求容器有序&#xff0c;而且执行完以后会把重复的放在后面 因为unique后可能无序所以要排序一下,代码如下 。 源代码 #include <iostream> #include <algorithm> #…

Jina AI 推出全球首款开源 8K 语义向量模型,比肩 OpenAI

作为多模态人工智能技术领域的翘楚&#xff0c;Jina AI 的愿景是铺平通往多模态 AI 的未来之路。今天&#xff0c;Jina AI 在向着该愿景前进的路上&#xff0c;达成了一个重要里程碑。我们正式发布了自主研发的第二代文本向量模型&#xff1a;jina-embeddings-v2&#xff0c;是…

记录一道0xGame 2023 CTF Web ez_unserialize的反序列化漏洞题目收获

ez_unserialize 考点&#xff1a; 1. PHP 的引用来绕过 __wakeup 2.命令行中执行php -r phpinfo();&#xff0c;即可获得完整的phpinfo输出 3.PHP 反序列化 POP 链的构造 源码和代码审计&#xff1a; <?phpshow_source(__FILE__);class Cache {public $key;public $value…

高等数学教材重难点题型总结(八)向量代数与空间解析几何

同期更新配套的课后题&#xff0c;这部分的题普遍容易&#xff0c;仅对计算能力有一定要求&#xff0c;理解层面没有什么难度。中学立体几何和解析几何掌握不错的同志&#xff0c;这部分只要稍加记忆是没有什么难度的。