欢迎光临
我们一直在努力

【论文精读(二十七)】SI-Mamba:给点云装上“经纬度”!谱图理论解救 Mamba 旋转焦虑,SOTA 刷榜 ScanObjectNN(CVPR 2025)

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):

  • 旋转敏感 (Rotation Sensitivity):
    • 现象:你把一只兔子模型转个 90 度,XYZ 坐标全变了,生成的序列顺序也就天翻地覆。
    • 实锤:Mamba 还没看懂形状,就被打乱的顺序搞晕了。这意味着模型学到的不是“形状”,而是“摆放姿势”。
  • 几何割裂 (Geometric Disconnect):
    • 现象:在 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=ID1W

    这个矩阵

    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 个最小非零特征值的向量(代表低频全局形状)。

  • 多重排序 (Multi-Sort):
    • 根据

      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 编码 的操作:

  • 二值化:对每个特征向量,大于均值的记为 1,小于记为 0。
  • 生成编码:把

    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=ID1W。维度

      (

      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)

    • 变化逻辑 (核心是 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)×2s1+bi(2)×2s2++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。
    • 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)下功夫。

  • 数学胜利:利用流形学习(谱图理论)的数学性质,优雅地解决了深度学习里的工程问题(旋转鲁棒性)。
  • 因地制宜:分类用 SAST(全局),分割用 HLT(局部),预训练用 TAR(位置),每个模块都直击痛点。
  • SOTA:在 ScanObjectNN 上的表现证明了,让 Mamba 顺着曲面“摸”一遍,比生硬地切片效果好得多。
  • 一句话总结: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 专栏原创内容,转载请注明出处。

    赞(0)
    未经允许不得转载:171主机测评 » 【论文精读(二十七)】SI-Mamba:给点云装上“经纬度”!谱图理论解救 Mamba 旋转焦虑,SOTA 刷榜 ScanObjectNN(CVPR 2025)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址