当前位置: 首页 > news >正文

Voxel mamba :基于Mamba的3D目标检测算法解析

目录

  • 1 算法简介
      • 1.1 前提补充
        • 空间填充曲线(Space-filling Curve)
        • 点云分组
  • 2 模块介绍
      • 2.1 希尔伯特输入层(Hilbert Input Layer)
      • 2.2 双尺度 SSM 模块(Dual-scale SSM Block)
      • 2.3 隐式窗口分区 (Implicit Window Partition)
      • 2.4 Voxel Mamba Backbone
      • 2.5 有效感受野 Effective Receptive Field of Voxel Mamba

github链接: https://github.com/gwenzhang/Voxel-Mamba/tree/master
参考链接: https://www.bilibili.com/read/cv35707685/

1 算法简介

  • 背景:传统的基于序列化方法的三维体素(voxel)在输入到 Transformer 前会牺牲体素的空间邻近性,这限制了模型的性能。
  • Voxel Mamba:提出了一种无组(group-free)策略,将整个体素空间序列化为单一序列,减少了空间邻近性的损失。
  • Dual-scale SSM Block:提出了一种双尺度状态空间模块,通过建立层次结构来增强模型的接收域。
  • Implicit Window Partition:隐式窗口划分通过位置编码增强空间邻近性,无需显式进行空间窗口划分。

在这里插入图片描述

1.1 前提补充

空间填充曲线(Space-filling Curve)

空间填充曲线是一系列分形曲线,可以不重复地穿过多维空间中的每个点。经典的空间填充曲线包括希尔伯特曲线、Z阶曲线和扫描曲线等。这些方法可以在保持空间拓扑和局部性的同时进行降维。许多研究人员引入了用于点云处理的空间填充曲线。 例如HilbertNet使用希尔伯特曲线将 3D 结构折叠到 2D 空间中,以减少计算量和 GPU 占用。对于 3D 对象检测,一些方法也采用窗口扫描曲线对体素特征进行分组以进行并行计算。本文采用希尔伯特曲线是因为它具有保局部性的有利特性。

点云分组

LiDAR 点云稀疏且分布不均匀,密度各异。因此,现有方法对点或体素进行分组以促进并行计算并降低复杂度。然而,分组只是计算复杂性的折衷方案,限制了信息的流动和有效的感受野。为了解决这个问题,本论文将整个体素建模为一个序列,并允许每个体素了解全局上下文信息

2 模块介绍

在这里插入图片描述

Voxel Mamba 的概述如图所示。

  • 首先,Voxel Mamba 通过体素特征编码策略将点云转换为稀疏体素。
  • 然后,使用希尔伯特输入层将整个场景的体素序列化为单个序列(与之前执行大量窗口分区和体素分组的基于 Transformer 的方法不同)。
  • 随后,提出了一种作用于体素序列的双尺度 SSM 块,它允许在全局上下文中处理体素。
    为了扩大有效感受野,DSB在前向路径中采用更细粒度的体素序列感知;
    在后向路径中对体素序列进行下采样。后向路径从低分辨率 BEV 表示中提取特征,并在更深的块中增加下采样因子。
  • 最后,为了增强序列中的空间接近度,Voxel Mamba 采用隐式窗口分区来保留提取的体素特征中的 3D 位置信息,并将其投影到 BEV 特征图。

2.1 希尔伯特输入层(Hilbert Input Layer)

希尔伯特曲线可以遍历空间中的所有元素而不重复,并保留空间拓扑
为了提高序列化中体素的接近度,文中提出希尔伯特输入层来重新排序体素序列。

  1. 将体素特征的坐标表示为 C = { ( x , y , z ) ∈ R 3 ∣ 0 ≤ x , y , z ≤ n } \begin{aligned}\mathcal{C}=\{(x,y,z)\in\mathbb{R}^3|0\leq x,y,z\leq n\}\end{aligned} C={(x,y,z)R3∣0x,y,zn}
  2. 将体素映射到其在希尔伯特曲线内的遍历位置 h h h 上。即将 ( x , y , z ) (x, y, z) (x,y,z) 转换为其具有 l o g 2 n log_{2}n log2n 位的二进制格式。例如, x x x 转换为 ( x m x m − 1 . . . x 0 ) (x_mx_{m-1}...x_0) (xmxm1...x0),其中 m = ⌊ l o g 2 n ⌋ m=\lfloor log_2n\rfloor m=log2n。然后,我们从 x m , y m , z m x_m,y_m,z_m xm,ym,zm 迭代到 x 1 , y 1 , z 1 x_1,y_1,z_1 x1,y1,z1 位,并执行交换和反转来调整位的顺序。当前位为0时进行交换;否则,进行反转。
  3. 我们将所有位连接为 ( x m y m z m x m − 1 y m − 1 z m − 1 … x 0 y 0 z 0 ) (x_my_mz_mx_{m-1}y_{m-1}z_{m-1}\ldots x_0y_0z_0) (xmymzmxm1ym1zm1x0y0z0) 并对其应用全局 3 m 3m 3m格雷解码以获得遍历位置 h。
  4. 随后,所有体素根据其遍历位置 h 被分类为单个序列。在实现过程中,记录与所有潜在体素的坐标相对应的遍历位置h。通过查询和排序体素的遍历位置来序列化体素。(该方法效率较高:对于长度为 106 的序列,序列化过程仅花费大约 0.7ms)

2.2 双尺度 SSM 模块(Dual-scale SSM Block)

我们引入双尺度 SSM 模块(DSB)来构建状态空间结构的层次结构,从而提高模型的 ERF。
DSB块被设计为具有剩余连接(residual connection)前向SSM分支后向SSM分支。它对希尔伯特输入层生成的两个序列化体素序列进行操作,从而实现整个体素序列的无缝信息流。
前向分支处理原始体素序列,保持高分辨率细节。
后向分支对源自低分辨率 BEV 表示的下采样体素序列进行操作。

这种双尺度路径允许 DSB 合并更大规模的体素特征,从而增强模型对体素之间的长依赖性进行建模的能力。具体来说,给定体素序列 F 及其对应的坐标 C,DSB 计算如下:
F f = L N ( F S S M ( H I L ( F + I W E ( C ) ) ) ) , F b = U p ( L N ( B S S M ( H I L ( D o w n ( F ) + I W E ( C ′ ) ) ) ) ) , F ~ = F f + F b + F , \begin{aligned} &\mathcal{F}_f=\mathbf{LN}(\mathbf{FSSM}(\mathbf{HIL}(\mathcal{F}+\mathbf{IWE}(\mathcal{C})))), \\ &\mathcal{F}_b=\mathbf{Up}(\mathbf{LN}(\mathbf{BSSM}(\mathbf{HIL}(\mathbf{Down}(\mathcal{F})+\mathbf{IWE}(\mathcal{C}^{'}))))), \\ &\widetilde{\mathcal{F}}=\mathcal{F}_f+\mathcal{F}_b+\mathcal{F}, \end{aligned} Ff=LN(FSSM(HIL(F+IWE(C)))),Fb=Up(LN(BSSM(HIL(Down(F)+IWE(C))))),F =Ff+Fb+F,
其中:
HIL(·)表示希尔伯特输入层,
FSSM(·)和BSSM(·)表示前向和后向SSM,
LN(·)代表层归一化,
C’ 是下采样稀疏体素的坐标,
Down(·)和Up(·)分别指下采样和上采样操作,
IWE(·)表示隐式窗口嵌入。
总体而言,DSB 将广泛采用的双向设计与分层设计相结合,建立足够的感受野来减轻邻近度的损失,而无需引入额外的参数。

2.3 隐式窗口分区 (Implicit Window Partition)

窗口分区策略中,整个场被划分为多个局部窗口,并且窗口内的体素形成一个组。因此,窗口内的体素将具有足够的接近度;然而,不同窗口中的体素的接近度最小。
与以前的方法不同,这里没有显式地将体素划分为窗口并在每个窗口内应用 Transformer 或 SSM。相反,该方法:

  • 首先计算窗口内部和窗口之间的体素坐标,
  • 然后将坐标编码为嵌入,称为隐式窗口嵌入(IWE),
    其公式为: I W E = M L P ( concat ( z , ⌊ x i w ⌋ , ⌊ y i h ⌋ , x i mod  w , y i mod  h ) ) , i = 0 , 1 \mathbf{IWE}=\mathbf{MLP}(\text{concat}(z,\lfloor\frac{x^i}w\rfloor,\lfloor\frac{y^i}h\rfloor,x^i\text{ mod }w,y^i\text{ mod }h)),i=0,1 IWE=MLP(concat(z,wxi,hyi,xi mod w,yi mod h)),i=0,1 其中
    ⌊ ⋅ ⌋ \lfloor\cdot\rfloor 是下取整函数,
    w , h w, h w,h 定义窗口形状,
    z , x i , y i z, x_i, y_i z,xi,yi 是标记的坐标。
    ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 1 , y 1 ) (x_1,y_1) (x1,y1)表示隐式窗口移位之前和之后的坐标。
    IWE 以相同的步幅在所有层之间共享。因此,它的计算成本仅来自浅层 MLP。通过 IWE,序列化 1D 曲线中的体素可以了解它们的位置,从而了解它们在 3D 空间中的接近程度。

2.4 Voxel Mamba Backbone

通过提出的希尔伯特输入层、DSB 和 IWP 策略,我们构建了一个无组且稀疏Voxel Mamba Backbone。 Voxel Mamba 的架构如图 2 所示。
它由 N 个 DSB 块组成,这些块根据下采样率被组织成不同的阶段。
SpConv用于在每个阶段沿 Z 轴逐渐降低特征图分辨率。采用 SpConv及其对应的 SpInverseConv 作为 DSB 后向分支中的下采样和上采样算子
在将稀疏token输入 BEV 主干之前,我们将它们分散为密集的 BEV 特征。

后续的实验中:

  • 在 Waymo 数据集上,论文采用来自 Centerpoint-Pillar的 BEV 主干,并采用与 DSVT 相同的设置来检测头和损失函数。
  • 在 nuScenes 数据集上,我们仅用我们的 Voxel Mamba 主干替换 DSVT 的 3D 主干。

2.5 有效感受野 Effective Receptive Field of Voxel Mamba

下图说明了基于窗口分区的方法 DSVT 、基于组的双向 Mamba 和我们提出的无组方法 Voxel Mamba 的有效感受野(ERF)。

  • 首先,为了清晰的可视化,所有模型都将pillars作为输入。基于组的双向 Mamba 中的组分区配置与 DSVT 相同。
  • 然后,从真实边界框中随机选择感兴趣的体素,并计算每个非空体素位置的 ERF。
  • 随后,通过在每个体素位置取最大值将 ERF 合并到单个图像中。激活区域越宽,ERF 越大。
    从下图中,我们看到Voxel Mamba表现出比DSVT和基于组的双向Mamba明显更大的ERF,这可以归因于无组操作的好处。较大的ERF可以覆盖更完整的局部区域并增强一维序列的空间邻近性。
    在这里插入图片描述

http://www.mrgr.cn/news/35142.html

相关文章:

  • 设计模式之备忘录
  • C++ :借助栈完成二叉树的非递归遍历
  • word怎么加密?掌握这4种加密技巧,保护你的文件安全!
  • workerman 接入文心一言的流式输出
  • PHPMailer低版本用法(实例)
  • NLP自然语言处理
  • windows使用JEnv实现一键临时或全局切换java版本
  • 一带一路区块链样题解析(上)
  • 数据结构---顺序表之单链表
  • openEuler普通用户su root时Permission denied
  • 视频生成技术分享
  • 深度学习技术在流体力学中的应用与实操培训【1/3理论课程2/3实操课程】
  • 408算法题leetcode--第14天
  • FastStone Capture屏幕长截图软件注册码
  • Paper 0 | Visual Instruction Tuning
  • 【PyCharm 安装与运用秘籍】Python 和 PyCharm 安装指引,看此篇保证学会(附带优质插件)。
  • 【秋招笔试题】多多排序
  • 基于GPU的Julia集应用程序
  • [产品管理-34]:什么是战略?什么是公司战略?什么是产品战略?什么是创新战略?什么是技术战略?什么是产品创新战略?
  • tauri开发软件中,使用tauri自带的api用浏览器打开指定的url链接