不用"自注意力"的视觉 AI:高分辨率图片终于不被显存吃光了

  • 关联论文:2401.09417

你有没有想过——为什么手机拍一张 1200 万像素的照片,AI 想"看懂"它就要花掉好几 G 显存?

2024 年 1 月的一篇论文(Vision Mamba / Vim,arXiv 2401.09417)给出了一个反直觉的答案:别用"自注意力"了

听起来很反常识——过去 5 年,视觉 AI 的主流路线就是 Transformer + 自注意力(Self-Attention),从 GPT 到 ViT 全靠它。这篇论文做的事情是:把一种叫"状态空间模型(SSM)"的替代结构硬塞进视觉骨干网络,结果在 ImageNet 分类、COCO 检测、ADE20K 分割上一举跑赢同等规模的 DeiT——而且在高分辨率(1248×1248)推理时快了 2.8 倍,省掉 86.8% 显存

一句话故事

他们把"双向 SSM + 位置嵌入"塞进 ViT 的宏观骨架,首次让纯 SSM 类结构在视觉通用骨干上正面打平甚至超越同等规模 Transformer——意味着"视觉表征学习不一定需要 Self-Attention"。

这件事最实际的意义不在榜单,而在你的 GPU:当你处理一张遥感图、一张病理切片、一段工业质检的高分辨率图时,Vim 几乎是直接可换的替代方案——只换 backbone,下游检测/分割 head 全兼容。

为什么这件事值得大众关注

你手机里几乎所有"AI 看图"的体验,背后都在跑 ViT / Swin / DeiT 这类 Transformer 视觉骨干:

  • 📸 手机相册分类:本地 AI 给照片打标签、人物聚类、场景识别
  • 🩺 医疗影像:CT、病理切片、眼底图——分辨率常常 2048×2048 以上
  • 🚗 自动驾驶:路面、行人、标线,每帧都是高分辨率多目标
  • 🛰️ 遥感:卫星图一张就好几 GB,普通 ViT 直接 OOM
  • 🏭 工业质检:微小缺陷检测需要看高分辨率细节
  • 🎬 视频理解:把视频拆成 patch 序列,token 数随帧数秒级爆炸

这些场景的共同点是"图很大"。而 ViT 这类基于自注意力的骨干有个致命问题——自注意力的计算复杂度是 O(N²),N 是图像切成的 patch 数。分辨率翻一倍,patch 数翻 4 倍,显存直接吃光

Vim 的解法是绕过自注意力,改用一个叫"双向状态空间模型"的结构:每个 patch 只看前后两个方向的"上下文",计算复杂度变成近线性 O(N)——分辨率翻一倍,计算量只翻一倍。

现有做法的两个痛点

过去 5 年,主流视觉骨干(ViT / Swin / DeiT / BeiT 等)都基于自注意力,有两个公认痛点:

  1. 显存爆炸:自注意力要算"每两个 patch 之间的关系",N 个 patch 就是 N² 次计算。1248×1248 的图切成 patch 后 N 接近 6000,N² 就是 3600 万次。batch 大一点显存直接 OOM。
  2. 速度塌方:同样的 N²,让 1248×1248 的推理时间相比 224×224 暴涨几十倍。

业界过去几年一直在"打补丁"——Swin 用窗口注意力限制 N² 范围、ViT 用分层降采样减少 token 数——但根本问题没解决:自注意力本身的 N² 复杂度还在。

Vim 的解法:把"序列模型 Mamba"搬到视觉里

2023 年底,Mamba(一种叫"选择性状态空间模型"的新结构)在语言任务上对 Transformer 构成了实质性挑战——它能用接近线性的复杂度处理长序列。Vim 想回答的问题是:Mamba 这一套能不能搬到视觉上?

技术挑战有两个:

  1. Mamba 是单向的:语言有"从前到后"的天然因果顺序,视觉 patch 序列没有。
  2. 视觉严重依赖位置:哪个像素在图的哪里至关重要。

Vim 的改动极简:

  • 双向 SSM:每个 block 里同时跑"前向扫描 + 反向扫描"两条路径,每个 patch 同时融合左右上下文。
  • 显式位置嵌入:给每个 patch 加一个"我在图的哪儿"的可学习向量。

就这么两个改动,结果 Vim-Ti 在 ImageNet 上 81.8%(DeiT-Ti 是 74.5%,差距 7.3%)、Vim-Small 83.6%(DeiT-Small 82.0%)、Vim-Base 83.2%(DeiT-Base 82.5%)——三个规模全赢

最硬核的数据是高分辨率推理:1248×1248、A100 单卡、batch=32 时,Vim-Small 比 DeiT-S 快 2.8 倍,省 86.8% 显存。这是面向实际部署的硬指标。

一个常被忽视的边界

论文没告诉你的(Jay 在"工程落地与核查"里专门指出):

"2.8 倍快、省 86.8% 显存"是有严格条件的——它只在 1248×1248 这种"图非常大"的场景下显著。如果你做的是标准 224×224 分类,双向 SSM 两次扫描带来的额外常数开销会让 Vim 和 DeiT 速度几乎一样

也就是说:不是"换 Vim 就一定更快",而是"当你的图大到让 ViT 显存吃不下时,Vim 才有戏剧性优势"——这恰好是遥感、病理、工业质检的痛点。

三个值得记住的事实

  1. 双向 SSM ≠ 取代 ViT。标准分辨率下 Vim 没有显著优势,原文 Fig.4 明确画出了 224 下 Vim-Small 与 DeiT-S 速度相近。
  2. 生产部署的工程门槛高于 ViT。NVIDIA 官方 TensorRT / cuDNN 至今仍未原生支持选择性 SSM 算子,落地需要自定义 CUDA kernel 或依赖 mamba-ssm 库的 Triton 实现——和"直接用 ViT"不是一个工程量级。
  3. 下游 head 兼容性良好。Vim 作为 backbone 和主流检测器(RetinaNet、Mask R-CNN)、分割器(UperNet、Mask2Former)即插即用,因为下游 head 不依赖自注意力,只需替换 backbone

对普通人的意义

  • 手机相册 / 本地 AI:短期不会立刻变快(标准分辨率收益小),但中长期会受益——因为厂商终于有了一条"高分辨率看图不爆显存"的工程路线。
  • 医疗、遥感、工业质检这是真正能立刻吃到红利的领域——一张原本要拆成多块推理的病理切片,现在可以一次性喂进 Vim,显存还更省。
  • AI for Science:显微镜图、天文图、气象图——任何"图特别大"的科学计算都可能受益。

一个开放问题

"SSM 视觉骨干能不能进入多模态大模型(VLM)?"

目前主流 VLM(LLaVA、Qwen-VL、InternVL)几乎全用 ViT 作为视觉塔。SSM 视觉骨干还没大规模打进去,主要障碍是:① 大规模 CLIP 风格对比预训练在 SSM 上的效果验证不充分;② vLLM / TensorRT-LLM 等 LLM 推理引擎对 SSM 算子支持有限。

如果哪天有 VLM 把视觉塔换成 Vim,那才是"自注意力被线性结构真正动摇"的时刻——目前 Vim 只是证明"这条路能走通",还没证明"这条路能替代主流"

一句话总结

Vim 用"双向 SSM + 位置嵌入"把纯 SSM 类结构搬进视觉骨干,在 ImageNet / COCO / ADE20K 上正面打平甚至超越同等规模 DeiT,并在高分辨率推理上快 2.8 倍、省 86.8% 显存——但它的优势集中在"图非常大"的场景,标准分辨率下并没有显著速度提升,且生产部署的工程门槛高于 ViT。

引用时建议明确:"同等参数量下" + "高分辨率场景下" + "双向 SSM 是 Mamba 视觉化的代表工作"——避免笼统宣称"超越 ViT"。


标题变体(推广用)

  1. 「别再用自注意力看图了」——2401.09417 Vim 用线性结构把 ViT 显存打掉 86.8%
  2. AI 看图终于不爆显存了:Vision Mamba 把 1248×1248 推理速度拉到 2.8×
  3. 「视觉骨干不一定需要 Transformer」——Mamba 系列在 ViT 老地盘上拿到了第一滴血

小红书风格卡片

🔥 一张高分辨率图,AI 看完要吃 8G 显存?

2024 年 1 月这篇 Vision Mamba(arXiv 2401.09417)说:不用自注意力也能看图

✨ 它把一种叫"双向状态空间模型"的结构搬进视觉骨干,结果在 ImageNet、COCO、ADE20K 三个榜上正面打平甚至超越同等规模 DeiT。

💡 最硬核的数据:1248×1248 高分辨率推理,比 ViT 快 2.8 倍,省 86.8% 显存——遥感图、病理切片、工业质检终于不用拆块了。

⚠️ 但是!这优势只在"图特别大"时才显著,标准 224×224 分类下 Vim 和 ViT 速度几乎一样。生产落地还要重写 CUDA kernel(TensorRT 不支持 SSM)。

📌 适合谁读:做高分辨率视觉、AI for Science、医疗影像、自动驾驶感知的工程师与研究者。

AI论文 #VisionMamba #Mamba #深度学习 #视觉骨干 #Transformer替代