DepthFormer论文详解

摘要

在这里插入图片描述

本文旨在解决有监督单目深度估计的问题,我们从一项细致的试点研究开始,以证明远程相关性对于准确的深度估计至关重要。我们建议使用Transformer以有效地注意力机制对这种全局上下文进行建模。我们还采用一个额外的卷积分支来保留局部信息,因为Transformer在对局部信息进行建模时缺乏空间归纳偏差。然而,独立的分支导致特征之间的连接不足。为了弥补这一差距,我们设计了一个分层聚合和异构交互模块,通过元素交互来增强Transformer的特征,并以集合到集合的传递方式对Transformer和CNN特征之间的亲和力进行建模。
由于全局关注在高分辨率特征图上引起的不可承受的内存成本,我们引入了可变形注意力机制来降低复杂度。在KITTI,NYU的数据集上的大量实验表明,DepthFormer大大超过了最先进的单目深度估计方法。

介绍

单目深度估计在三维重建和感知中起着至关重要的作用,由于ResNet的开创性工作,CNN主导了深度估计的主要主力,设计了基于编码器-解码器的架构。尽管已经有大量的工作专注于解码器设计,但最近的研究表明编码器对于准确的深度估计更加关键。由于缺乏深度线索,充分利用长程相关性(即物体之间的距离关系)和局部信息(即同一物体的一致性)是有效编码器的关键能力。因此,当前深度估计方法的潜在瓶颈可能位于编码器中,因为卷积算子几乎无法在有限的感受野下对长程相关性进行建模
在CNN方面,已经付出了巨大的努力来克服上述限制,大致分为两类。操作卷积运算或者集成注意力机制。为了提高卷积算子的有效性,前者使用了先进的变形,包括多尺度融合、空洞卷积、特征金字塔。后者引入了注意力模块,来模拟特征图中所有像素的全局交互。还有一些通用方法,来探索这两种策略的组合,尽管性能有了显著提高,但困境仍然存在。
在CNN的替代方案中,ViT在图像识别方面取得了巨大成功,证明了作为深度估计编码器的优势。受益于注意力机制,Transformer在建模与全局感受野的远程相关性方面更加优秀。然而,我们的试点研究表明,由于对局部信息建模缺乏空间归纳偏差,ViT编码器无法产生令人满意的性能。

为了缓解这些问题,本文提出了一种新的单目深度估计框架DepthFormer。通过结合Transformer和CNN的优点,提高了模型的性能。DepthFormer的原理在于Transformer分支对长程相关性进行建模,而附加的卷积分支保留了局部信息。我们认为,这两种类型特征的集成可以帮助实现更准确的深度估计。然而,具有后期融合的独立分支导致解码器特征聚合不足。为了弥补这一差距,我们设计了分层聚合和异构交互模块来组合两个分支的最佳部分。具体来说,它由一个自注意力模块组成,通过元素之间的交互来增强Transformer分支层与层之间的特征信息,和一个交叉注意力模块以一种集合到几何的传递方式模拟异构特征之间的亲和力(Transformer和CNN特征)。由于对高分辨率特征图的全局关注导致难以承受的内存成本,我们建议使用可变形方案,它只以可学习的方式关注有限的关键采样向量集来缓解这个问题。文章的主要贡献如下:

  • 我们将Transformer作为图像编码器,利用长程相关性,并采用额外的卷积分支来保留局部信息。
  • 我们设计了HAHI通过元素交互来增强特征,并以集合到集合的传递方式对亲和力进行建模。

相关工作

从RGB图像中估计深度是一个不适定问题。缺乏线索、尺度歧义、半透明或反射材料都会导致外观无法推断空间结构的歧义情况。随着深度学习的快速发展,CNN已经成为从单个RGB输入提供合理深度图主流方法的关键组成部分。

  • 单目深度估计
    近年来,单目深度估计引起了很多关注。DPT提出利用ViT作为编码器,在大规模深度估计数据集上预训练;Adabins使用自适应bins,根据输入场景的表示,并提出以高分辨率嵌入mini-ViT;TransDepth在瓶颈处嵌入ViT,以避免Transformer丢失本地信息,并提出了一种注意力门解码器来融合多级特征。

  • 编码器解码器
    编码器解码器通常用于单目深度估计。在编码器方面,采用主流特征提取器,包括EfficientNet,ResNet,和DenseNet来学习表示。解码器通常采用连续的卷积和上采样算子,以后期融合的方式聚合编码器特征,恢复空间分辨率并估计深度。在本文中,我们采用基线解码器架构,它允许我们更明确的研究这项工作的主要贡献的性能归因,与解码器无关。

  • 颈部结构
    编码器和解码器之间的颈部结构被提出来用于增强特征,许多以前的方法只关注瓶颈特征,而忽略了较低级别(分辨率较高)的特征,限制了有效性。在这项工作中,我们提出了HAHI模块来增强所有多层次的层次特征。当另一个分支(CNN)可用时,它还可以对两个分支特征之间的亲和力进行建模,这有利于解码器聚合异构信息。

  • Transformer
    Transformer网络在计算机视觉邻域引起就更大的兴趣,随着最近应用Transformer解决计算机视觉任务的趋势的成功,我们建议利用Transformer作为编码器来模拟远程相关性。我们讨论了我们的方法和几个相关工作在单目深度估计中采用Transformer之间的差异。

方法

![[Pasted image 20240409094529.png]]

我们首先介绍了这项工作的动机,并介绍了DepthFormer的关键组件:

  • 由Transformer分支和卷积分支组成的编码器
  • 分层聚合和异构交互模块

诱因

为了表明这项工作的必要性,我们进行了一项细致的试点研究,以研究只使用纯CNN或ViT作为单目深度估计的编码器的局限性。

  • 试点研究
    我们首先在图3中的NYU数据集上展示了最先进的基于cnn的单目深度估计方法的几个失败案例。墙面上的装饰和地毯的深度结果,出乎意料的不正确。由于用于特征提取的纯卷积编码器很难对全局上下文进行建模,以及难以通过有限的感受野捕获对象之间的远程距离关系。这种大面积违反直觉的故障严重损害了模型的性能。
    为了解决上述问题,ViT可以作为一个合适的替代方案,它使用全局感受野建模长距离之间的联系。因此,我们尝试分析基于VIT和CNN的方法在KITTI数据集上的性能。基于DPT模型,我们采用VIT-Base和ResNet50作为编码器分别提取特征。发现基于VIT的模型在远距离处理上的性能更好,但是在近距离物体上效果不如ResNet网络。由于深度值表现出长尾分布,场景中物体越近,应用ViT的模型的总体结果明显较差

  • 分析
    一般来说,直接估计远处物体的深度时很困难的,得益于对长程相关性进行建模,基于ViT的模型可以通过全局上下文中的参考像素来更可靠的实现它。对象之间的距离关系的知识在远距离目标深度估计上具有更好的性能。至于近物体深度估计结果较差,有许多潜在的解释。

    • Transformer在建模局部信息时缺乏空间归纳偏差,对于深度估计,局部信息反映在详细的上下文中,这对于一致和清晰的估计结果至关重要,然而在Transformer的逐片交互过程中,这些详细的信息往往会丢失。由于出现在较近的物体具有更大的纹理质量,Transformer将在这些位置丢失更多的细节,这严重恶化了近范围内的模型性能,导致结果不理想。
    • 视觉元素的规模差异很大,一般来说U-Net形状的架构用于深度估计,其中多尺度跳跃连接对利用多级信息至关重要。由于ViT中的标记都是一个固定的尺度,连续的非层次前向传播使得多尺度属性模糊,这也可能会限制性能。

在这篇文章中,我们利用Transformer和卷积分支组成的编码器来利用远程相关性和局部信息。

  • 与直接利用ViT作为编码器的DPT不同,我们引入了一个卷积分支来弥补Transformer分支中空间归纳偏差的不足。
  • 我们将ViT替换为Swin Transformer,以便Transformer编码器可以提供分层特征,减少计算的复杂性。
  • 与以前将Transformer嵌入到CNN的方法不同,我们利用Transformer直接对图像进行编码,可以充分利用Transformer的优势并避免CNN在全局上下文建模之前丢弃关键信息。
  • 由于这两个分支的独立性,解码器的简单后期融合导致特征聚合不足,性能只能小幅度的提高。为了弥合这一差距,我们设计了HAHI模块,通过特征交互来增强特征和模型亲和力,缓解了不足,有助于结合两个分支的最佳部分。

Transformer和CNN特征提取

我们建议通过由Transformer分支和轻量级卷积分支组成的编码器提取图像特征,从而充分利用远程相关性和局部信息。

  • Tranformer分支
    Transformer分支首先通过分割模块将输入图像I分割成不重叠的补丁。每个补丁的初始特征表示倍设置为像素RGB值的串联。
    之后,应用线性嵌入层将初始特征表示投影到任意维度,并且作为第一个Transformer层的输入,记为 z 0 z_0 z0。之后利用L个Transformer层结构用于提取特征。一般来说,每一层都由一个多头自注意力 (MSA) 模块组成,然后是一个多层感知器 (MLP)。在 MSA 和 MLP 之前应用 LayerNorm (LN),每个模块使用残差连接。第l层的过程可以用如下式子进行表述。 z ^ l = M S A ( L N ( z l − 1 ) ) + z l − 1 , z l = M L P ( L N ( z ^ l ) ) + z ^ l , \begin{aligned}\hat{\mathbf{z}}^l&=\mathrm{MSA}\left(\mathrm{LN}\left(\mathbf{z}^{l-1}\right)\right)+\mathbf{z}^{l-1},\\\mathbf{z}^l&=\mathrm{MLP}\left(\mathrm{LN}\left(\hat{\mathbf{z}}^l\right)\right)+\hat{\mathbf{z}}^l,\end{aligned} z^lzl=MSA(LN(zl1))+zl1,=MLP(LN(z^l))+z^l,
    我们从N个选取的Transformer层结构中采用并且重组N个特征图作为Transformer层结构的输出,并且将它们标记为 F = f n n = 1 N F={f^n}^N_{n=1} F=fnn=1N,其中 F n ∈ R C n × H n × W n F^n\in R^{C_n\times H_n \times W_n} FnRCn×Hn×Wn

    注意到我们的框架与各种Transformer架构兼容。在本文中,我们更喜欢利用Swin Transformer来提供分层表示并降低计算复杂度。与标准Transformer层的主要区别在于局部注意力机制,移位窗口方案和补丁合并策略。

  • 卷积分支
    卷积分支包含一个标准的ResNet编码器来提取局部信息,这在深度估计网络中常用。这里只使用ResNet的第一个块来利用局部信息,避免了连续乘法清洗低级特征,大大减少了计算时间。具有 C g C_g Cg个通道的特征图被输出为 G ∈ R C g × H g × W g G∈R^{C_g ×H_g ×W_g} GRCg×Hg×Wg
    在获取Transformer特征F和卷积特征G之后,我们将它们馈送到HAKI模块以供进一步处理。与 TransDepth 相比,我们采用一个额外的卷积分支来保留局部信息。它避免了CNN丢弃关键信息,使我们能够在没有伪影的情况下预测更清晰的深度图。

HAHI模块

![[Pasted image 20240315101115.png]]

为了缓解聚合不足的局限性,我们引入了HAHI模块来增强Transformer的特征,并以集合到集合的传递方式进一步对Transformer和CNN特征的亲和力进行建模

我们考虑一组分层特征 F = { f n } n = 1 N F=\{f^n\}^N_{n=1} F={fn}n=1N作为特征增强的输入,由于我们使用Swin Transformer 层提取特征,重组的特征图将表现出不同的大小和通道。许多以前的工作必须将多级特征下采样到瓶颈结构的分辨率,并且只能通过简单的连接或者潜在内核方式来增强瓶颈结构。相反,我们的目标是在不采用可能导致信息丢失的下采样算子的情况下增强所有特征。

具体来说,我们首先利用 1 × 1 1\times1 1×1的卷积将所有层级特征投影到一个通道 C h C_h Ch,表示为 F n = { F h n } n = 1 N F_n=\{F^n_h\}^N_{n=1} Fn={Fhn}n=1N。然后我们将特征图展开(即展平和连接)为二维矩阵X,其中的每一行是一个像素在 C h C_h Ch通道中的一个通道维度上对所有不同层级的特征图相乘拼接而成的。( C h C_h Ch行,且每行的元素是一个通道上所有层级展平相连接得到的结果)然后我们通过 X X X的线性投影计算 Q , K , V Q,K,V Q,K,V的值。
Q = X P Q , K = X P K , V = X P V Q = XP_Q, K = XP_K , V = XP_V Q=XPQ,K=XPK,V=XPV
其中 P Q , P K , P V P_Q,P_K,P_V PQ,PK,PV分别代表线性投影。我们尝试应用注意力模块能增强特征,然而,巨大的特征向量会导致难以承受的内存成本。为了缓解这个问题,我们建议采用可变形机制,该机制仅以可学习的方式关注有限的关键采样向量集。这适合用于深度估计任务,因为表示场景结构的几个关键点足以用于特征增强。另 q q q v v v分别索引具有表示特征 x q ∈ Q , x v ∈ V x_q\in Q,x_v \in V xqQ,xvV的元素, p q p_q pq表示查询向量 x q x_q xq的位置,这个过程可以被表示为

DAttn ( x q , x v , p q ) = ∑ k ∈ Ω k A q k ⋅ x v ( p q + Δ p q k ) \begin{aligned}\text{DAttn}(x_q,x_v,p_q)&=\sum_{k\in\Omega_k}A_{qk}\cdot x_v\left(p_q+\Delta p_{qk}\right)\end{aligned} DAttn(xq,xv,pq)=kΩkAqkxv(pq+Δpqk)

其中第 k k k个采样点的注意力权重 A q k A_{qk} Aqk和第 k k k个采样点的采样偏移量 ∆ p q k ∆p_{qk} pqk是通过查询特征 x q x_q xq上的线性投影得到的。由于 p q p_q pq + ∆ p q k ∆p_{qk} pqk 是分数的,因此在计算 x v x_v xv ( p q p_q pq + ∆ p q k ∆p_{qk} pqk ) 时应用双线性插值,我们还添加了一个层次嵌入来识别每个查询向量所处的特征级别。将表示为 X ^ \hat X X^ 的输出折叠(即拆分和重塑)回原始分辨率以获得分层增强特征 F e n h F_{enh} Fenh,通过通道连接和1x1卷积融合 F e n h F_{enh} Fenh F F F后,我们得到输出 F O = f o n n = 1 N F_O={f^n_o}^N_{n=1} FO=fonn=1N,并实现特征增强。

当额外的卷积分支可用时,我们将特征图 G G G视为HAHI的第二个输入以进行亲和力建模。与第一个输入 F F F表示类似, G G G可以是任何其他类型的表示,我们利用 1 × 1 1\times1 1×1卷积将 G G G投影到通道维数为 C h C_h Ch G h G_h Gh,然后将 G h G_h Gh展平为二维查询矩阵 Q Q Q。将 X ^ \hat X X^ 应用为 K K K V V V,我们计算交叉注意力来模拟亲和力。同样,不可承受的内存成本仍然持续存在,我们应用可变形注意力模块缓解这种现象。其中参考点位置 p q p_q pq通过可学习的线性投影和sigmoid函数从亲和查询嵌入动态预测。在讲结果重塑为原始分辨率以形成注意力表示 G a t t G_{att} Gatt之后,我们通过通道级联和 1 × 1 1\times1 1×1卷积融合 G a t t G_{att} Gatt G G G,得到HAHI的另一个输出表示为 G o G_o Go。该过程实现了Transformer和CNN分支之间的亲和力建模和特征交互。HAHI的所有输出( F o F_o Fo G o G_o Go)被发送到基线解码器进行深度估计。

网络损失从如下公式中进行优化。 L p i x e l = α 1 T ∑ i h i 2 − λ T 2 ( ∑ i h i ) 2 , \mathcal{L}_{pixel}=\alpha\sqrt{\frac1T\sum_ih_i^2-\frac\lambda{T^2}(\sum_ih_i)^2}, Lpixel=αT1ihi2T2λ(ihi)2 ,其中 h i = l o g d i ^ − l o g d i h_i=log\hat{d_i}-log d_i hi=logdi^logdi d i d_i di是地面实况, d i ^ \hat{d_i} di^是预测深度,T表示具有有效地面实况值的像素数量,我们在实验中使用 λ = 0.85 , α = 10 \lambda=0.85, \alpha=10 λ=0.85,α=10

结论

我们提出了DepthFormer,这是一个用于精确单目深度估计的新框架,我们的方法通过由Transformer分支和CNN分支组成的编码器充分利用远程相关性和局部信息。由于具有后期融合的独立分支导致解码器特征聚合不足,我们提出了分层聚合和异构交互模块来增强多级特征并进一步对特征亲和力进行建模。在大多数流行和具有挑战性的数据集中,DepthFormer比最先进的方法取得了显著的改进。我们希望我们的研究能够鼓励更多的工作将Transformer架构应用于深度估计,并启发其他任务的框架设计。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NPU编译MultiScaleDeformableAttention

NPU对pytorch,想将检测模型在NPU上训练,存在编译MultiScaleDeformableAttention的需求。 然而,原dino模型https://github.com/IDEA-Research/DINO/tree/main/models/dino/ops/src 仅包含CPU版本和GPU版本: 是不是就真的无法解决…

2024/4/5—力扣—在排序数组中查找元素的第一个和最后一个位置

代码实现: 思路:二分法 方法一:分别查找左右侧边界 /*** Note: The returned array must be malloced, assume caller calls free().*/ int GetTargetFirstPosition(int *nums, int numsSize, int target) {int l 0, r numsSize - 1;while …

【北京迅为】《iTOP-3588开发板开发板系统编程手册》第3章 标准IO

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

蓝桥杯复习笔记

文章目录 gridflexhtml表格合并单元格 表单表单元素input类型 select h5文件上传拖拽apiweb Storage css块元素和行内元素转换positionfloat溢出显示隐藏外边距过渡和动画动画变形选择器属性选择伪类选择器 css3边框圆角边框阴影渐变text-overflow与word-wrap jsdom操作documen…

STL容器之unordered_set类

文章目录 STL容器之unordered_set类1、unordered系列关联式容器2、unordered_set2.1、unordered_set介绍2.2、unordered_set的使用2.2.1、unordered_set的常见构造2.2.2、unordered_set的迭代器2.2.3、unordered_set的容量2.2.4、unordered_set的增删查2.2.5、unordered_set的桶…

C++--this指针

this 指针是一个隐含于每一个成员函数中的特殊指针。它是指向一个正操作该成员函数的对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋予this指针,然后调用成员函数。每次成员函数存取数据成员时,C编译器将根据 this 指针所指向的…

由于找不到msvcp100.dll,无法继续执行代码要如何处理?正确的msvcp100.dll修复

由于找不到msvcp100.dll,无法继续执行代码要如何处理?其实要处理这种dll文件丢失的问题,还是比较简单的,只要我们了解清楚这个msvcp100.dll文件,那么就可以快速的解决,好了,废话不多说,我们一起…

证件照小于30kb怎么弄?这个工具三步搞定

当我们需要将照片上传到各种平台时,常常会遇到图片文件大小限制的问题。无论是社交媒体平台还是工作需求,如果照片文件过大,系统会提示上传失败或无法上传。想要解决的这个问题,可以选择将图片压缩指定大小,比如图片压…

git操作码云(gitee)创建仓库到上传到远程仓库

想必有的小伙伴在为上传到码云远程仓库而感到烦恼吧!本篇为大家详细讲解实现过程,跟着我的步伐一步一步来。 我就当大家已经注册好了码云 一、在码云上需要的操作 接下来我们需要使用到 git 了 二、git 上的操作 到了咋们的git了,开整 首…

代码浅析Point-LIO

0. 简介 对于最近出来的Point-LIO(鲁棒高带宽激光惯性里程计),本人还是非常该兴趣的,为此花了一些时间重点分析了Point-LIO的代码,并研究了它相较于Fast-LIO2的区别 1. laserMapping.cpp 第一部分就是实现对激光雷达视场角的图像分割。首先…

Python学习从0到1 day24 第二阶段 SQL ① SQL基础语法

还是会再见的 —— 24.4.10 MySQL基础及常用操作博主已整理在了两个专栏中,具体查看博主两个专栏的文章 ① Mysql数据库 ② 深入学习MySQL数据库 DDL —— 数据库管理 DDL —— 数据表管理 DML 数据操作语言 数据插入 INSERT 数据删除 DELETE 数据更新 UPDATE 注意…

短剧在线搜索PHP网站源码

源码简介 短剧在线搜索PHP网站源码,自带本地数据库500数据,共有6000短剧视频,与短剧猫一样。 搭建环境 PHP 7.3 Mysql 5.6 安装教程 1.上传源码到网站目录中 2.修改【admin.php】中, $username ‘后台登录账号’; $passwor…

Vue-Router入门

现在的前后端分离项目,后端只管数据传递,视图跳转的活交由前端来干了,vue-router就是专门来干这个活的,它可以让页面跳转到指定组件 组件是可复用的 Vue 实例, 把一些公共的模块抽取出来,然后写成单独的的工具组件或者…

tdesign坑之EnhancedTable树形结构默认展开所有行

⚠️在官方实例中,树形结构的表格提供了2种方法控制展开全部节点: 一是通过配置属性tree.defaultExpandAll为true代表默认展开全部节点(仅默认情况有效); 二是使用组件实例方法expandAll()可以自由控制树形结构的展开…

从零开始学Python(五)面向对象

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Python的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.类的定义 二.魔法方法 1.概念 2.常…

Bert基础(十二)--Bert变体之知识蒸馏原理解读

B站视频:https://www.bilibili.com/video/BV1nx4y1v7F5/ 白话知识蒸馏 在前面,我们了解了BERT的工作原理,并探讨了BERT的不同变体。我们学习了如何针对下游任务微调预训练的BERT模型,从而省去从头开始训练BERT的时间。但是&#…

物联网实验

实验1 基于ZStack光敏传感器实验 1.实验目的 我们通过上位机发指令给协调器,协调器把串口接收到的指令通过Zigbee协议无线发送给带有光敏传感器的终端节点,获取到数据以后把数据返回给上位机,实现无线获取数据的目的。 2.实验设备 硬件&a…

企业鸿蒙原生应用元服务备案实操包名公钥签名信息

一、鸿蒙应用/元服务如何查询包名? 登录 AppGallery Connect ,点击“我的应用”,输入应用名称可查询到需要备案的鸿蒙应用/元服务包名。 二、鸿蒙应用/元服务如何获取公钥和签名信息? (1)登录 AppGaller…

【IC验证】类的一些问题

1、句柄悬空 在声明句柄和创建对象以后,句柄是悬空的,在仿真没开始时内容为null。但是对于结构体和module的例化,仿真开始之前变量就给了一个不确定的值(32hxxxx) 但是对于放在initial块里面的,在仿真之前…

龙蜥社区「人人都可以参与开源」——体验开源成为“开源人“

龙蜥社区「人人都可以参与开源」体验开源——让更多的人了解开源! 龙蜥社区开源概述:龙蜥社区开源的探索过程:龙蜥社区收获总结:AtomGit评测:服务设计上:功能结构上:安全设计上: AtomGit测评总结: 龙蜥社区开源概述: 在追求技术的路上少不了…