MobileSAMv2分割算法详解

MobileSAMv2: Faster Segment Anything to Everything --- 方法详解与代表性实验结果

论文:arXiv:2312.09579v1 cs.CV,2023.12.15

作者:Chaoning Zhang 等(Kyung Hee University / Nota Inc.)

代码:https://github.com/ChaoningZhang/MobileSAM


MobileSAMv2 提出两阶段高效分割一切(SegEvery)框架:先用类无关目标检测器生成≤320个框提示,再批量输入SAM解码器。相比原版网格撒点(4096点×3mask),提示数降为1/40,解码耗时从6400ms降至50ms,整体提速超16倍;在零样本目标提议任务中性能持平甚至更优(59.3% vs 59.2%),且无需冗余过滤。该方法兼顾速度与精度,与轻量编码器兼容,实现高效、精准的"分割一切"。

一、要解决什么问题

SAM 有两个任务:

  • SegAny (分割任意一个物体):给一个点/框提示,分割单个目标。瓶颈在图像编码器(632M 参数,约 450ms),解码器很轻(约 4ms)。→ MobileSAM(v1)用解耦知识蒸馏解决这个。
  • SegEvery (分割一切物体):分割图中所有东西。瓶颈转移到了 mask 解码器------因为要对图像做网格搜索(grid-search)撒点提示:官方 demo 用 32×32 点(解码器约 1600ms),零样本目标提议用 64×64 点(解码器约 6400ms)。

MobileSAMv2 的目标:让 SegEvery 变快。 它的思路与 v1 正交:不去动图像编码器,而是改造"提示的采样策略"。

二、核心洞察

原版 SegEvery 的流程是:先大量生成 mask(冗余),再过滤出有效的。具体做法:

  1. 在图上撒 64×64 = 4096 个前景点提示;
  2. 每个点让解码器输出 3 个不同粒度的 mask(multi-mask 模式,共 12288 个);
  3. 在高维 mask 空间做去重过滤(这一步在 GPU 上甚至比生成 mask 还慢,因为高维 mask 的内存访问和删除操作很耗时)。

作者的直觉:既然大多数提示是冗余的,为什么不让解码器只处理有效提示? 这样既省了 mask 生成时间,也完全省去了 mask 过滤步骤。

三、方法框架:两阶段流水线

复制代码
输入图像
   │
   ├── 阶段1:Object-aware Prompt Sampling(目标感知提示采样)
   │        YOLOv8 检测 → NMS 过滤重叠框 → 得到 ≤320 个有效框提示
   │
   └── 阶段2:Prompt-guided Mask Decoding(提示引导的 mask 解码)
            以"提示数"为 batch 批量送入 SAM 解码器 → 直接输出最终 mask

阶段 1:目标感知提示采样(核心创新)

① 用目标检测做"目标发现"(object discovery)

"某个区域是否有物体"这个问题,现代目标检测器已经解决得很好。作者选用 YOLOv8 (实时检测的事实标准),去掉分类头,只保留框回归能力,当作类无关(class-agnostic)的目标发现器。

为防止模型过拟合到特定领域,检测器在 SA-1B 数据集的一个子集 上训练:先用框+mask 双监督训练,再仅用框损失微调(这也便于与 prompt-free 方法公平对比)。

② NMS 预过滤

检测器会输出大量重叠框,先用标准 NMS 过滤,再取剩余框。

③ 关键点设计:用"框"而不是"中心点"做提示

过滤后的框有两种用法:取中心点作为点提示,或直接用整个框做提示。作者选择了框提示,理由有三:

  1. 中心点假设不总成立:"框中心落在物体上"大多数情况下成立但并非总是;
  2. 点提示有歧义:一个点的信息太少,SAM 需要为每个点预测 3 个输出 mask(大/中/小粒度)来解决歧义,这又重新引入了 mask 过滤的负担;
  3. 框提示信息量大、歧义小:可以关掉 multi-mask 模式(每个提示只出 1 个 mask),且实验发现框提示能"免费"带来显著的性能提升(Table 3:单 mask 模式下 59.3% vs 点提示 53.6%)。

④ 提示数量收敛于 320

消融实验(Table 7)显示:提示数从 64 增加到 320,性能持续提升;超过 320 后饱和。因此默认最大提示数设为 320------对比原版的 4096 个点 × 3 = 12288 个 mask,提示数量下降了约一个数量级。

阶段 2:批量提示引导解码

沿用 SAM 原版解码器(双流注意力交互图像 embedding 与提示 token),但 batch 的概念从"图像数"变为"提示数",把所有框提示一次性批量送入解码器。

关键区别:

  • 原版:提示多而冗余 → 需要 multi-mask + 高维 mask 过滤;
  • v2:提示全部有效 → 保留所有生成的 mask,无需任何后过滤。

1. "Without additional prior knowledge" ------ 为什么说"没有额外先验"?

回顾上下文:YOLOv8 检测器会输出大量互相重叠的框 ,必须先经过 NMS(非极大值抑制)过滤,才能当作有效提示。但 NMS 只解决了"框与框重叠"的问题------过滤后剩下的每个框,我们知道它"大概率框住了一个物体",但框内部哪个点真正落在物体上、是前景,NMS 并没有告诉我们任何信息。

也就是说,此时手里只有几何坐标信息(框的位置),没有任何关于物体形状、轮廓、像素的先验。所以要从中"推导"出一个前景点,只能做假设。

四、为什么优于 Prompt-free 路线(FastSAM)

FastSAM 用 YOLOv8-seg 的 protonet 直接生成 mask(mask 系数与 mask 原型做 32 维点积),完全绕过提示。问题在于:SAM 的解码器用双流注意力让 mask token 与图像 embedding 充分交互 后再点积,这是 mask 边界精细的关键;而 FastSAM 的系数与原型之间没有这种显式交互,导致边界质量差(Figure 2)。定量上 FastSAM 仅 49.6%,且倾向于过度分割(over-segment)。MobileSAMv2 保留了 prompt-aware 机制来保证质量,同时用目标感知采样解决速度问题。

五、代表性实验结果

1. 效率对比(Table 2,mask 解码器耗时)

采样策略 Prompt 编码 Mask 解码 总计
网格搜索 32×32(1024 点) 16ms 1600ms 1616ms
网格搜索 64×64(4096 点) 64ms 6400ms 6464ms
目标感知采样(≤320 框) 47ms 50ms 97ms

解码器整体提速至少 16 倍(6464ms → 97ms)。

2. 零样本目标提议性能(LVIS,mask AR@1000,Table 3)

方法 multi-mask all small med. large
SAM(64×64 = 4096 点) true(×3) 59.2 46.6 78.7 82.4
SAM(32×32 = 1024 点) true(×3) 57.2 42.9 79.2 83.6
SAM(16×16 = 256 点) true(×3) 40.0 19.4 71.3 79.1
MobileSAMv2(max 320 点) true(×3) 55.7 40.6 78.6 84.6
MobileSAMv2(max 320 点) false(×1) 53.6 44.0 70.4 66.6
MobileSAMv2(max 320 框) false(×1) 59.3 47.9 77.1 79.9
MobileSAMv2(max 256 框) false(×1) 58.5 46.7 77.1 79.1

用约 1/40 的计算量(320 框 ×1 mask vs 4096 点 ×3 mask)达到持平甚至更优的性能(59.3% vs 59.2%),small 物体上反超(47.9 vs 46.6)。

3. 不同 K 值下的 mask AR 对比(Table 4)

指标 SAM(4096 点,×3) MobileSAMv2(框,×1) 提升
mask AR@1000 59.2 59.3 +0.1
mask AR@100 44.8 50.6 +5.8
mask AR@10 12.6 17.6 +5.0
平均(K=10~1000) 38.9 42.5 +3.6

K 越小(指标越严格),优势越大。

4. 与蒸馏图像编码器的兼容性(Table 5)

图像编码器 All small med. large
ViT-H(原版) 59.3 47.9 77.1 79.9
TinyViT 51.1 38.9 69.9 73.4
EfficientViT-L2 56.3 44.7 74.1 78.1

EfficientViT-L2 推理约 20ms(vs ViT-H 400ms+),性能仅降 3 个百分点,仍大幅领先 FastSAM。

5. Prompt-free vs Prompt-aware(Table 6)

策略 方法 All small med. large
Prompt-free FastSAM 49.6 36.2 69.4 77.1
Prompt-aware SAM(最优设置) 59.2 46.4 78.7 82.4
Prompt-aware MobileSAMv2(ViT-H) 59.3 47.9 77.1 79.9
Prompt-aware MobileSAMv2(EfficientViT-L2) 56.3 44.7 74.1 78.1

6. 最大提示数消融(Table 7,mask AR@1000)

max # prompts all small med. large
384 59.3 47.9 77.1 79.9
320 59.3 47.9 77.1 79.9
256 58.5 46.7 77.1 79.1
192 56.6 44.2 76.0 78.8
128 53.6 40.2 74.6 77.7
64 44.8 29.2 68.3 75.4

320 之后性能饱和,故默认取 320。

六、一句话总结

MobileSAMv2 把 SegEvery 从"网格撒点 → 海量生成 → 缓慢过滤"的暴力范式,转变为"检测器先发现物体 → 框提示批量解码 → 免过滤直出结果"的精准范式,用 1/40 的解码开销做到了持平甚至更优的性能,并与 MobileSAM 的轻量编码器天然兼容,共同构成高效的 SegAny + SegEvery 统一框架。

相关推荐
java资料站7 小时前
十一、Spring AI Alibaba · 高级 · 多智能体(Multi-agent)
人工智能·spring·microsoft
2601_955662467 小时前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频
苏醒的人生7 小时前
电商品牌物料AI生图工具推荐:让品牌调性一套到底
人工智能
lank_M7 小时前
截图OCR预处理在普通屏上翻车,Retina截图却没事
图像处理·人工智能·计算机视觉·ocr
Aloudata7 小时前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
龙亘川7 小时前
AI 协同赋能城市治理:支撑政协数字化履职的技术路径探析
大数据·人工智能·智慧城市·开源软件·数据可视化
通信大模型7 小时前
IEEE TCCN | 面向低空经济网络的Agentic AI驱动多无人机轨迹优化
网络·人工智能·无人机