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)
希尔伯特曲线,可以遍历空间中的所有元素而不重复,并保留空间拓扑。
为了提高序列化中体素的接近度,文中提出希尔伯特输入层来重新排序体素序列。
- 将体素特征的坐标表示为 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∣0≤x,y,z≤n}。
- 将体素映射到其在希尔伯特曲线内的遍历位置 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) (xmxm−1...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时进行交换;否则,进行反转。
- 我们将所有位连接为 ( 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) (xmymzmxm−1ym−1zm−1…x0y0z0) 并对其应用全局 3 m 3m 3m 倍格雷解码以获得遍历位置 h。
- 随后,所有体素根据其遍历位置 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可以覆盖更完整的局部区域并增强一维序列的空间邻近性。