引言

视觉Transformer(ViT)尽管在各类视觉任务中取得了显著成功,但其自注意力机制的计算复杂度随序列长度呈二次方增长,这给高分辨率图像处理带来了沉重的计算负担。Mamba通过选择性状态空间模型(Selective State Space Model, SSM)实现了线性时间复杂度的序列建模,在视觉领域展现出巨大潜力。

然而,现有视觉Mamba方法面临两个关键瓶颈:

  1. 因果性约束:Mamba的单向扫描机制限制了patch间的双向信息交互
  2. GPU并行效率低:短序列场景下GPU线程利用率不足,导致推理速度慢

SF-Mamba(Spatial-Frequency Mamba)由Sony集团的研究者提出,从数据流计算效率两个维度重新思考视觉SSM设计,是对视觉Mamba模型的重要改进,实现了优于现有方法的精度-吞吐量权衡。1

核心创新

SF-Mamba提出两项核心技术:

创新点目标方法
辅助Patch交换双向信息流引入两个辅助token实现未来→过去的信息路由
批量折叠GPU并行优化合并batch和sequence维度,周期性重置状态

辅助Patch交换机制

问题背景

图像patch之间不存在严格的因果顺序,限制Mamba块为单向扫描会阻碍信息流动:

┌─────────────────────────────────────────────────────────────┐
│ 单向扫描的信息限制                                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   图像:                    单向扫描顺序:                    │
│   ┌───┬───┬───┐          1 → 2 → 3 → 4 → 5 → 6 → 7 → 8   │
│   │ 1 │ 2 │ 3 │ 4                                               │
│   ├───┼───┼───┤          问题: 早期patch无法直接访问           │
│   │ 5 │ 6 │ 7 │ 8        后期patch的信息                       │
│   └───┴───┴───┘                                              │
│                                                             │
│   例如: patch 1 无法直接获取 patch 8 的信息                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

现有方法通过多方向扫描(如双向扫描、十字扫描)解决此问题,但存在显著开销:

  • 数据重排开销:token重排占推理时间的5-8%
  • 并行扫描开销:多方向并行处理占推理时间的28-42%
  • 2D/1D格式切换:VMamba等方法需在二维和一维格式间频繁转换

方法原理

SF-Mamba提出**辅助patch交换(Auxiliary Patch Swapping)**机制,仅用两个额外token实现双向信息流:

┌─────────────────────────────────────────────────────────────┐
│ 辅助Patch交换机制                                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   输入序列:    [x_aux_head, x₁, x₂, ..., xₜ, x_aux_tail]   │
│                                                             │
│   单向扫描处理:                                             │
│   [x_aux_head] → [x₁] → [x₂] → ... → [xₜ] → [x_aux_tail] │
│        ↓              ↓        ↓             ↓             │
│       h₀            h₁       h₂            hₜ₊₁           │
│                                                             │
│   核心洞察:                                                  │
│   - x_aux_tail 能从所有patch中提取全局信息                   │
│   - 通过交换,x_aux_tail 的信息传递给下一个block的head       │
│                                                             │
│   交换操作(第i层到第i+1层):                               │
│   x_aux,i+1^head = y_aux,i^tail                              │
│   x_aux,i+1^tail = y_aux,i^head                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

数学推导

设输入序列为 ,在第一层Mamba block前添加两个辅助token:

经过第 层Mamba块处理后,两个辅助token的输出分别为 ,其中:

  • 包含了从 的全局信息
  • 通过交换,下一层的patch序列可以”看到”全局信息

交换公式为:

与多方向扫描的对比

扫描方式token交换复杂度额外计算精度提升
双向扫描(全序列翻转)2× SSM计算
十字扫描(四方向重排)4× SSM计算
辅助交换2个token相当

有效感受野分析

通过有效感受野(Effective Receptive Field, ERF)分析验证双向信息流的有效性:

┌─────────────────────────────────────────────────────────────┐
│ 有效感受野对比                                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   MambaVision (单向扫描):                                   │
│   - 仅能通过卷积获取局部上下文                               │
│   - patch 1 对图像下半部分响应弱                            │
│                                                             │
│   SF-Mamba (辅助交换):                                      │
│   - 通过辅助token实现全局信息传递                            │
│   - patch 1 对整幅图像响应均匀                              │
│                                                             │
│   ERF可视化显示: SF-Mamba在浅层即实现全局感受野              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

批量折叠与周期性状态重置

问题背景

Mamba采用CUDA warp-scan函数实现并行扫描,该函数以32线程为一组进行处理。在视觉任务中,序列长度通常较短(如MambaVision Stage 3为196,Stage 4为49),导致GPU线程利用率低下。

┌─────────────────────────────────────────────────────────────┐
│ 序列长度与线程利用率                                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   GPU warp (32 threads):                                    │
│   ┌─────────────────────────────────────────────────────┐ │
│   │ [T0][T1][T2]...[T30][T31]                          │ │
│   └─────────────────────────────────────────────────────┘ │
│        ↓                                                   │
│   序列长度T=196时: 32线程/warp,利用率 = 196/32 = 6.1 warp │
│   序列长度T=49时:  32线程/warp,利用率 = 49/32  = 1.5 warp │
│                                                             │
│   问题: 大量线程处于空闲状态                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

方法原理

SF-Mamba提出**批量折叠(Batch Folding)**策略,将batch维度和sequence维度合并:

设原始输入张量为 ,其中 为batch大小, 为维度, 为序列长度。折叠操作定义为:

┌─────────────────────────────────────────────────────────────┐
│ 批量折叠操作                                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   原始:                                                     │
│   Z ∈ ℝ^(B × D × T)                                        │
│   ┌────────────────────────────────────────────────────┐   │
│   │ seq 1: [t₀, t₁, ..., tₜ]                          │   │
│   │ seq 2: [t₀, t₁, ..., tₜ]                          │   │
│   │ ...                                                │   │
│   │ seq B: [t₀, t₁, ..., tₜ]                          │   │
│   └────────────────────────────────────────────────────┘   │
│                                                             │
│   折叠后:                                                   │
│   Z' ∈ ℝ^(B₁ × D × (B₂·T))                               │
│   ┌────────────────────────────────────────────────────┐   │
│   │ [seq1_t₀, seq1_t₁, ..., seq1_tₜ, seq2_t₀, ...]    │   │
│   └────────────────────────────────────────────────────┘   │
│   ↑                                                        │
│   B₂个短序列拼接成一个长序列                                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

周期性状态重置

折叠操作会混合不同序列的隐藏状态,导致信息泄露。为解决此问题,SF-Mamba采用周期性状态重置(Periodic State Reset)

时,设置 ,这相当于重置隐藏状态:

由于 仅作用于当前输入和隐藏状态,无需重置。该操作仅需重置 ,计算开销极小。

┌─────────────────────────────────────────────────────────────┐
│ 周期性状态重置                                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   折叠序列中的处理:                                          │
│   [seq₁_t₀][seq₁_t₁]...[seq₁_tₜ]|[seq₂_t₀][seq₂_t₁]...    │
│   ↑         ↑              ↑          ↑                    │
│   A=0      A≠0           A=0       A=0  ← 状态重置点       │
│   (reset)                        (reset)                   │
│                                                             │
│   结果: 折叠后的输出等价于未折叠的输出                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

自适应B₁选择

折叠比例 的最优值由多种因素决定(batch大小、序列长度、维度、状态维度等)。SF-Mamba采用预计算的4维查找表(LUT):

其中 返回 的约数中最接近 的值。

1D深度可分离卷积适配

批量折叠后,需要适配Mamba块中的1D深度可分离卷积。实现要点:

  • 在每段序列边界处进行隐式填充
  • 确保卷积不会跨越不同序列的边界
  • 使用Triton CUDA kernel优化交换操作,约提升40 img/s(tiny模型)

架构设计

SF-Mamba采用MambaVision作为宏观架构基础,结合Mamba和Transformer的混合设计。

四阶段层级结构

┌─────────────────────────────────────────────────────────────┐
│ SF-Mamba 宏观架构                                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   输入图像 I ∈ ℝ^(H×W×3)                                    │
│       ↓                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │ Stage 1: Conv Stem + ConvBlock × N₁                │   │
│   │ 输出: H/4 × W/4 × D                                 │   │
│   └─────────────────────────────────────────────────────┘   │
│       ↓                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │ Stage 2: Downsample + ConvBlock × N₂               │   │
│   │ 输出: H/8 × W/8 × 2D                                │   │
│   └─────────────────────────────────────────────────────┘   │
│       ↓                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │ Stage 3: Downsample + MambaBlock×(N₃/2) +         │   │
│   │           AttenBlock×(N₃/2)                         │   │
│   │ 输出: H/16 × W/16 × 4D  [含辅助token交换]          │   │
│   └─────────────────────────────────────────────────────┘   │
│       ↓                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │ Stage 4: Downsample + MambaBlock×(N₄/2) +         │   │
│   │           AttenBlock×(N₄/2)                         │   │
│   │ 输出: H/32 × W/32 × 8D  [含辅助token交换]          │   │
│   └─────────────────────────────────────────────────────┘   │
│       ↓                                                     │
│   Global AvgPool + Linear → 类别预测                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

MambaVision Mixer

SF-Mamba的Mamba块采用MambaVision Mixer结构,包含两个并行分支:

其中 为SiLU激活函数,Conv为1D深度可分离卷积。

辅助token初始化与丢弃

方面设计选择
初始化数据依赖型(全局平均池化),优于可学习型
丢弃时机第一个Attention层之后
计算开销仅增加2个token,几乎可忽略

实验结果

图像分类(ImageNet-1K)

模型参数量GFLOPs吞吐量 (img/s)Top-1 Acc
Swin-T29M4.5G286381.3%
VMamba-T30M4.9G168482.6%
Spatial-Mamba-T27M4.5G143083.5%
MambaVision-T32M4.4G666282.3%
SF-Mamba-T32M4.5G760082.5%
MambaVision-S50M7.5G493383.3%
SF-Mamba-S50M7.6G563983.5%
SF-Mamba-B98M15.1G353484.4%

关键发现

  • SF-Mamba在所有规模下均实现更高的吞吐量
  • 精度与MambaVision相当甚至更好
  • 在精度-吞吐量权衡曲线上处于Pareto前沿

语义分割(ADE20K + UperNet)

模型参数量mIoUFPS
Swin-T60M44.5%40.0
MambaVision-T62M46.0%45.0
SF-Mamba-T62M47.2%47.9
MambaVision-B130M49.1%37.3
SF-Mamba-B130M50.1%42.6

目标检测与实例分割(COCO + Cascade Mask R-CNN)

模型box APmask APFPS
Swin-T50.4%47.3%-
MambaVision-T51.1%47.9%19.4
SF-Mamba-T51.0%48.0%27.8
SF-Mamba♣-T50.9%47.7%28.3

注:SF-Mamba♣ 使用窗口注意力以降低计算量

消融实验

辅助token交换的效果

配置IN1K AccADE20K mIoU吞吐量
无交换,仅添加可学习token82.1%46.2%7613
交换+数据依赖初始化82.5%47.2%7600
无交换82.2%46.0%7645

结论:性能提升来自双向信息流而非额外token的灵活性。

批量折叠的效果

配置吞吐量提升
MambaVision-T基线-
+实现优化+5%
+批量折叠+14%
+自适应B₁+2%
+1D卷积适配+2%
总计+14%

与相关工作的对比

多方向扫描的开销分析

方法token重排开销并行路径开销
Vim-S5.4%28.0%
VMamba-T7.8%42.3%
SF-Mamba-T<1%-

与其他视觉Mamba变体的对比

变体特点局限性
Vim双向SSM扫描需要2×计算量
VMamba十字4方向扫描2D/1D格式切换开销
MambaVisionMamba+Attention混合浅层缺乏未来信息
SF-Mamba辅助token交换+批量折叠兼容性问题(含2D卷积的架构)

技术细节

实现优化

  1. 移除未使用的row-dimension chunking:减少中间变量的内存访问
  2. 推理时抑制隐藏状态输出:减少不必要的内存写入
  3. 用1D逐点卷积替代线性层:减少张量重排
  4. Triton CUDA kernel优化:加速token交换操作

适用性分析

SF-Mamba的两项技术可应用于:

  • MambaVision架构:直接适用
  • Vim架构:性能大幅提升
  • 含2D卷积的架构(如VMamba):需要每层恢复2D格式,速度提升有限

在Vim-S上的应用效果:

配置参数量GFLOPs吞吐量Top-1 Acc
Vim-S (双向)26M5.3G107980.3%
Vim-S (单向)26M4.9G163979.3%
+交换26M5.0G161480.1%
+交换+折叠26M5.0G202280.1%

结论

SF-Mamba从两个新视角重新思考视觉状态空间模型:

  1. 数据流视角:辅助patch交换机制以的token交换开销实现双向信息流,弥补了单向扫描的局限性
  2. 计算效率视角:批量折叠通过合并batch和sequence维度最大化GPU利用率,周期性状态重置确保计算正确性

在ImageNet分类、COCO目标检测和ADE20K语义分割任务上,SF-Mamba均实现了精度和吞吐量的双重提升,为构建真正高效的视觉Mamba骨干网络提供了新思路。

Footnotes

  1. SF-Mamba: Rethinking State Space Model for Vision. Masakazu Yoshimura, Teruaki Hayashi, Yuki Hoshino, Wei-Yao Wang, Takeshi Ohashi. Sony Group Corporation, 2026.