Bahri, A., Yazdanpanah, M., et al. (2025). Spectral Informed Mamba for Robust Point Cloud Processing. CVPR.
1. 背景与痛点:Mamba 的“旋转眩晕症”

图 1: SI-Mamba 核心流程概览 上方 (a-d):展示了从点云到构建近邻图,再到基于谱特征的 SAST 排序过程。 中间 (e-f):展示了针对分割的 HLT 策略和针对预训练的 TAR 策略。 下方 (g-i):不同任务分支的流水线。
在 Mamba 杀入 3D 点云领域后(PointMamba, PCM 等),虽然速度起飞了,但大家隐隐觉得哪里不对劲:Mamba 是序列模型,它太依赖“顺序”了。
现有的方法大多简单粗暴地用 XYZ 坐标或者 Z-order 曲线把点云“拉直”成 1D 序列。作者敏锐地指出了这种做法在 3D 空间里的 致命缺陷 (Critical Flaws):
- 现象:你把一只兔子模型转个 90 度,XYZ 坐标全变了,生成的序列顺序也就天翻地覆。
- 实锤:Mamba 还没看懂形状,就被打乱的顺序搞晕了。这意味着模型学到的不是“形状”,而是“摆放姿势”。
- 现象:在 3D 空间里挨得很近的两个点(比如兔子的左耳尖和右耳尖),如果按 Z-order 排序,在序列里可能隔着十万八千里。
- 痛点:Mamba 的状态传递虽然长,但这种人为的割裂让局部特征难以聚合。
SI-Mamba 的核心思路:
- Spectra-based(谱图理论):拒绝 XYZ 坐标排序!引入 拉普拉斯矩阵的特征向量 作为排序依据。因为特征向量是 等距同构不变 (Isometry-Invariant) 的,不管你怎么转,谱信息是不变的!
- Task-Specific Traversing:分类任务用 SAST(多视角全局扫描),分割任务用 HLT(分层局部聚类)。
- TAR Strategy:针对 MAE 预训练,把 Mask 掉的 Token 填回原位,治好了 Mamba 的“位置健忘症”。
2. 前置知识:什么是“谱信息”?(硬核科普)
要读懂本文的核心 SAST,必须复习一下流形学习里的 拉普拉斯特征映射。这不是玄学,是物理!
2.1 什么是拉普拉斯矩阵?
我们把点云看作一个图
G
=
(
V
,
E
)
G=(V, E)
G=(V,E)。
-
W
W
W (邻接矩阵):记录点与点之间的亲密度。如果两个点在空间上很近(KNN),W
i
j
W_{ij}
Wij 就很大(通常用高斯核计算距离)。 -
D
D
D (度矩阵):记录每个点“人缘”有多好,是W
W
W 每一行的和的对角矩阵。 -
L
r
w
L_{rw}
Lrw (随机游走拉普拉斯矩阵):L
r
w
=
I
−
D
−
1
W
L_{rw} = I – D^{-1}W
Lrw=I−D−1W
这个矩阵
L
L
L 描述了什么?它描述了图上的 “能量流动” 或 “扩散趋势”。解方程
L
v
=
λ
v
Lv = \\lambda v
Lv=λv,我们就是在找这个图的**“自然振动模式”**。
2.2 为什么特征向量 (
v
v
v) 可以代表方向?
这就涉及到了著名的 Courant’s Nodal Line Theorem(库朗节点线定理)。 特征值
λ
\\lambda
λ 从小到大排列 (
λ
1
≤
λ
2
≤
…
\\lambda_1 \\le \\lambda_2 \\le \\dots
λ1≤λ2≤…),对应的特征向量
v
(
k
)
v^{(k)}
v(k) 描述了频率从低到高的振动:
-
v
(
0
)
v^{(0)}
v(0) (常数向量):对应λ
0
=
0
\\lambda_0=0
λ0=0,所有值都一样,代表整个连通图,没啥用。 -
v
(
1
)
v^{(1)}
v(1) (Fiedler Vector):这是最小非零特征值对应的向量。它代表了把图切成两半所需能量最小的切法。- 直观理解:对于一个长条形的物体(比如站立的人或兔子),“最长”的方向就是“连接最松散”的方向。所以
v
(
1
)
v^{(1)}
v(1) 的数值分布通常会沿着主轴(比如从头到脚)平滑变化。
- 直观理解:对于一个长条形的物体(比如站立的人或兔子),“最长”的方向就是“连接最松散”的方向。所以
-
v
(
2
)
v^{(2)}
v(2):它是与v
(
1
)
v^{(1)}
v(1) 正交的次低频振动。如果v
(
1
)
v^{(1)}
v(1) 捕捉了纵向(头到脚),v
(
2
)
v^{(2)}
v(2) 往往就会捕捉横向(比如从左手到右手)。
结论:
v
(
k
)
v^{(k)}
v(k) 提供了一个完全依赖于物体拓扑结构的“内在坐标系”。不管你怎么旋转这只兔子,
v
(
1
)
v^{(1)}
v(1) 永远是从它的头指向脚!
3. 核心模块详解:硬核解法
3.1 模块一:SAST —— 给分类任务开“全图挂”
痛点:单一视角的遍历(如只按 X 轴扫)会丢失结构信息。 SI-Mamba 解法:Surface-Aware Spectral Traversing。
结构非常巧妙:
s
s
s 个特征向量:通常取前 4 个最小非零特征值的向量(代表低频全局形状)。
- 根据
v
(
1
)
v^{(1)}
v(1) 的值从小到大排,生成序列 A。 - 根据
v
(
2
)
v^{(2)}
v(2) 的值从小到大排,生成序列 B。 - …以此类推。
s
s
s 种排序下的序列都喂给 Mamba。相当于让 Mamba 沿着曲面的纹理,从头扫到脚、从左扫到右、从前扫到后。
- 结果:彻底解决了旋转问题,模型真正学到了“流形结构”。
3.2 模块二:HLT —— 分割任务的“分层聚类”
痛点:分类看大概,分割看细节。SAST 这种全局排序容易把邻居拆散。 SI-Mamba 解法:Hierarchical Local Traversing。
这是一个类似 Hash 编码 的操作:
s
s
s 个特征向量的 0/1 组合成一个二进制码(比如 0101)。
- 原理:编码相同的点,意味着它们在
s
s
s 个特征向量定义的“谱空间”里是邻居。 - 效果:这样排出来的序列,物理空间上相邻的块,在序列里也是紧挨着的。Mamba 狂喜!
3.3 模块三:TAR —— 拯救 MAE 预训练
痛点:Transformer 做 MAE 预训练时,Mask Token 随便扔在最后都行(双向注意力)。但 Mamba 是单向的,如果你把空缺扔到最后,它就不知道这个空缺原本在哪了。 SI-Mamba 解法:Traverse-Aware Repositioning。
- Encoder:只看可见点(Visible Tokens),提取特征。
- Reposition (重定位):在进 Decoder 之前,拿一张完整的画布,把 Encoder 提取的特征填回它原本的索引位置,空缺的地方填 Mask Token。
- Decoder:对着这个位置正确的序列进行重构。
- 这就像做完形填空,必须把词填在原来的横线上,而不是写在试卷末尾。
3.4 [进阶] 数据维度 (Shape) 与变换逻辑 (Data Flow)
这篇论文本质上是在玩 序列重排(Reordering) 和 索引映射(Indexing)。
我们假设一个标准的 Batch 输入配置如下:
- Batch Size:
B
B
B - 点云点数:
N
=
1024
N = 1024
N=1024 (或其他数) - 坐标维度:
3
3
3(
x
,
y
,
z
)
(x, y, z)
(x,y,z)
预处理:从“点”到“Token” (Patchification)
功能:把一堆散点变成 Mamba 能吃的“词向量”。
- 输入 (Input): 原始点云
(
B
,
N
,
3
)
(B, N, 3)
(B,N,3) - 操作 (Process):
- FPS (最远点采样): 选出
M
M
M 个中心点(论文中叫N
c
N_c
Nc)。假设M
=
64
M=64
M=64。 - KNN (近邻搜索): 每个中心点找
K
K
K 个邻居(论文中叫N
n
N_n
Nn)。假设K
=
32
K=32
K=32。 - 归一化: 把邻居点的坐标减去中心点坐标,变成局部坐标。
- MLP (Mini-PointNet): 用一个小的神经网络把每个 Patch 的
(
K
,
3
)
(K, 3)
(K,3) 信息压缩成一个特征向量D
D
D。假设D
=
384
D=384
D=384。 - 输出 (Output): Patch Embeddings
(
B
,
M
,
D
)
(B, M, D)
(B,M,D)
Note: 这就是我们的“牌堆”,现在的顺序是 FPS 采样出来的随机顺序。
核心引擎:谱信息的计算 (Spectral Calculation)
功能:算出每张牌的“身份证号”,用于后续排序。
- 输入 (Input): Patch 中心点坐标
(
B
,
M
,
3
)
(B, M, 3)
(B,M,3) - 操作 (Process):
- 构图: 计算
M
×
M
M \\times M
M×M 的距离矩阵,转成邻接矩阵W
W
W。 - 拉普拉斯矩阵:
L
=
I
−
D
−
1
W
L = I – D^{-1}W
L=I−D−1W。维度(
B
,
M
,
M
)
(B, M, M)
(B,M,M)。 - 特征分解: 解方程
L
v
=
λ
v
Lv = \\lambda v
Lv=λv。取前s
s
s 个最小非零特征值的特征向量。 - 输出 (Output): 特征向量矩阵
(
B
,
M
,
s
)
(B, M, s)
(B,M,s)
Note:
s
s
s 是超参数(论文推荐
s
=
4
s=4
s=4)。
v
(
k
)
v^{(k)}
v(k) (维度
M
M
M) 就是第
k
k
k 个排序依据。
模块一:SAST (Surface-Aware Spectral Traversing)
功能:用
s
s
s 种不同的视角“扫描”点云,专用于分类。
- 输入 (Input):
- Token 特征:
X
X
X(
B
,
M
,
D
)
(B, M, D)
(B,M,D) - 特征向量:
V
V
V(
B
,
M
,
s
)
(B, M, s)
(B,M,s)
- Token 特征:
- 变化逻辑 (核心是 argsort):
- 获取索引: 对
V
V
V 的每一列k
k
k 进行排序,得到索引 idx_k = argsort(v^{(k)})。 - 重排 (Gather): 根据 idx_k 对
X
X
X 进行重排。- 正向序列:
S
e
q
k
+
=
X
[
i
d
x
_
k
]
Seq_{k+} = X[idx\\_k]
Seqk+=X[idx_k] - 反向序列:
S
e
q
k
−
=
X
[
flip
(
i
d
x
_
k
)
]
Seq_{k-} = X[\\text{flip}(idx\\_k)]
Seqk−=X[flip(idx_k)]
- 正向序列:
- Mamba 扫描: 现在你有
2
s
2s
2s 个不同的序列,每个维度都是(
B
,
M
,
D
)
(B, M, D)
(B,M,D)。将它们分别喂给 Mamba Block(或者并行喂进去)。 - 融合 (Fusion): 扫描完后,得到
2
s
2s
2s 个输出特征。- 拼接序列方式: 维度变成
(
B
,
2
s
×
M
,
D
)
(B, 2s \\times M, D)
(B,2s×M,D)。 - 多头扫描方式: 维度保持
(
B
,
M
,
D
′
)
(B, M, D')
(B,M,D′),在内部融合不同方向信息。
- 拼接序列方式: 维度变成
- 输出 (Output): 增强后的特征
(
B
,
M
,
D
)
(B, M, D)
(B,M,D)(最终经过 Pooling 变成(
B
,
D
)
(B, D)
(B,D) 做分类)。
模块二:HLT (Hierarchical Local Traversing)
功能:生成唯一的一个排序,保证局部性,专用于分割。
- 输入 (Input): 特征向量
V
V
V(
B
,
M
,
s
)
(B, M, s)
(B,M,s) - 变化逻辑 (核心是生成 Hash Code):
- 二值化: 对每个
v
(
k
)
v^{(k)}
v(k),大于均值的记为 1,小于记为 0。 - 编码生成: Patch
i
i
i 的编码计算如下(把二叉树路径转成整数):C
o
d
e
i
=
b
i
(
1
)
×
2
s
−
1
+
b
i
(
2
)
×
2
s
−
2
+
⋯
+
b
i
(
s
)
×
2
0
Code_i = b_i^{(1)} \\times 2^{s-1} + b_i^{(2)} \\times 2^{s-2} + \\dots + b_i^{(s)} \\times 2^0
Codei=bi(1)×2s−1+bi(2)×2s−2+⋯+bi(s)×20 - 排序: 计算 idx = argsort(Code)。
- 重排: X_new = X[idx]。
- 输出 (Output): 重新排序后的序列
(
B
,
M
,
D
)
(B, M, D)
(B,M,D) - 原理: 编码相同的 Patch 在几何上被切分在同一个小区域,它们在序列里会紧挨着。
模块三:TAR (Traverse-Aware Repositioning)
功能:玩“填空题”时,记住空位原本在哪里。
- 输入 (Input): 完整的序列
X
X
X(
B
,
M
,
D
)
(B, M, D)
(B,M,D) - 操作 (Process):
- Masking: 随机选
N
m
N_m
Nm 个索引作为 mask_idx,剩下N
v
N_v
Nv 个作为 visible_idx。(M
=
N
m
+
N
v
M = N_m + N_v
M=Nm+Nv)。 - 提取: 取出可见部分
X
v
i
s
=
X
[
v
i
s
i
b
l
e
_
i
d
x
]
X_{vis} = X[visible\\_idx]
Xvis=X[visible_idx]。维度变成(
B
,
N
v
,
D
)
(B, N_v, D)
(B,Nv,D)。 - Encoder: Mamba Encoder 只能看到
X
v
i
s
X_{vis}
Xvis。它输出Y
v
i
s
Y_{vis}
Yvis(
B
,
N
v
,
D
)
(B, N_v, D)
(B,Nv,D)。 - 关键一步 (Reposition):
- 创建一个全零(或全 Mask Token)的容器 Canvas
(
B
,
M
,
D
)
(B, M, D)
(B,M,D)。 - 填回去: Canvas[visible_idx] = Y_vis。
- 补 Mask: Canvas[mask_idx] = Mask_Token。
- 创建一个全零(或全 Mask Token)的容器 Canvas
- Decoder: 现在序列长度恢复到了
M
M
M,Mamba Decoder 对着这个完整的序列去猜 Mask 掉的部分。 - 输出 (Output): 重构的点云 Patch
(
B
,
M
,
D
)
(B, M, D)
(B,M,D)→
\\to
→ 解码回坐标点。
4. 实验:性能与鲁棒性的双重碾压 📊
4.1 精度对比 (SOTA)
- ScanObjectNN (OBJ-BG):这是最难的设定(带背景)。
- Point-MAE: 92.77%
- PointMamba: 93.29%
- SI-Mamba (Ours): 94.32% 🚀
- 结论:在最考验几何理解的任务上,引入谱信息直接刷到了 SOTA。
4.2 鲁棒性对比 (Robustness)
作者专门做了一个旋转增强的实验(这才是这篇论文的杀手锏):
- 当测试数据发生旋转时,基于 XYZ 排序的方法(如 PointMamba)性能大幅下降。
- SI-Mamba 依然稳如泰山。
- 这就是 Isometry Invariance 的含金量!
4.3 消融实验:特征向量用几个?
图 4 (Left) 告诉我们:
- 用 4 个 特征向量效果最好。
- 用太少(2个)捕捉不到复杂形状。
- 用太多(>4)会引入高频噪声,反而干扰 Mamba。
5. 总结
SI-Mamba 给我们提供了一个非常好的思路:与其魔改 Mamba 的网络结构,不如在数据输入端(Ordering)下功夫。
一句话总结:SI-Mamba = 谱图排序 + Mamba = 旋转不变的 3D 序列建模新范式。
📚 参考文献
[1] Bahri, A., Yazdanpanah, M., et al. (2025). Spectral Informed Mamba for Robust Point Cloud Processing. CVPR.
💬 互动话题:
- 关于计算量:计算拉普拉斯矩阵的特征分解(Eigen Decomposition)会不会太慢?在大场景(如 SemanticKITTI)下这套方法还能跑得动吗?
- 关于应用:这种基于“谱”的排序,能不能用到 Transformer 或者 CNN 里?
📚 附录:Mamba 点云系列导航
🔥 欢迎订阅专栏:【点云特征分析_顶会论文代码硬核拆解】
本文为 CSDN 专栏原创内容,转载请注明出处。




