深度精读:Segment Anything(SAM)
2026/4/28 23:52:22 网站建设 项目流程

深度精读:Segment Anything(SAM)

论文:Segment Anything
作者:Alexander Kirillov, Eric Mintun, Nikhila Ravi 等(Meta AI Research)
arXiv:2304.02643
发表:ICCV 2023


一、核心动机与问题定义

SAM 的出发点是一个宏大的类比:NLP 领域用大规模预训练(GPT、BERT)构建了"基础模型",能通过 prompt 泛化到各种下游任务。计算机视觉的分割领域能否做同样的事?

作者提出三个相互耦合的核心问题:

  1. Task:什么样的分割任务足够通用,能作为预训练目标?
  2. Model:什么样的模型架构能支持灵活的 prompt 输入并实时响应?
  3. Data:如何获得足够大规模、足够多样的分割数据?

这三个问题的答案共同构成了 SAM 的设计哲学。


二、任务设计:Promptable Segmentation

2.1 核心定义

SAM 的任务是promptable segmentation:给定任意 prompt(点、框、文本、mask),返回一个合理的分割 mask。

关键设计原则:当 prompt 存在歧义时,返回多个合理的 mask,而不是强行给出一个"错误"的答案。

例如,用户点击一件衬衫上的一个点,合理的 mask 可以是:

  • 整件衬衫
  • 上半身
  • 整个人

SAM 会同时输出这三个候选,并给出置信度分数。

2.2 与交互式分割的区别

传统交互式分割(如 GrabCut、DIOS)的目标是通过多轮交互逼近"正确"的 mask。SAM 的目标不同——它是一个零样本泛化的基础模型,单次 prompt
就要给出合理结果,而不是依赖多轮修正。


三、模型架构

SAM 由三个模块组成,设计上刻意解耦以支持实时交互:

Image → [Image Encoder] → Image Embedding Prompt → [Prompt Encoder] → Prompt Embedding Image Embedding + Prompt Embedding → [Mask Decoder] → Masks + Scores

3.1 Image Encoder:MAE 预训练的 ViT

  • 使用ViT-H(huge)作为骨干,经过 MAE(Masked Autoencoders)预训练
  • 输入图像 resize 到 1024×1024,输出 64×64 的 image embedding
  • 关键设计:Image Encoder 只运行一次,embedding 可以被多个 prompt 复用
  • 这是计算瓶颈所在(~0.15s on GPU),但只需算一次

3.2 Prompt Encoder:轻量级多模态编码

支持两类 prompt:

稀疏 prompt(Sparse)

  • 点(point):位置坐标 + 前景/背景标签 → positional encoding + learned embedding
  • 框(box):两个角点,各自编码后拼接
  • 文本(text):直接用 CLIP 的文本编码器

密集 prompt(Dense)

  • Mask:通过卷积下采样到 256×64×64,与 image embedding 逐元素相加

3.3 Mask Decoder:两层 Transformer + 上采样

这是 SAM 最精妙的设计之一:

tokens = [IoU token, mask tokens × 4, prompt tokens] image_embedding + dense prompt embedding → 2× Transformer decoder layers(双向 cross-attention) → MLP → IoU scores → Upsampling head (2× transposed conv × 2) → 256×256 masks

双向 cross-attention

  • token-to-image attention:让 mask token 关注图像特征
  • image-to-token attention:让图像特征关注 prompt token

多 mask 输出:同时预测 4 个 mask(3 个有效 + 1 个备用),训练时取 loss 最小的那个反传梯度(ambiguity-aware training)。

速度:Mask Decoder 极轻量,在 CPU 上 ~50ms,GPU 上 <1ms。


四、数据引擎:SA-1B 数据集

这是 SAM 工作中最重要的工程贡献之一。

4.1 三阶段数据收集

阶段一:辅助手动标注(Assisted-manual)

  • 标注员使用 SAM 的早期版本辅助标注(类似 Photoshop 的魔棒工具)
  • 收集了约 120K 张图像,4.3M 个 mask
  • 模型在此数据上迭代训练

阶段二:半自动标注(Semi-automatic)

  • 先用模型自动检测"置信度高"的 mask,标注员只需补充遗漏的部分
  • 鼓励标注员标注"不那么显眼"的物体,提升多样性
  • 收集了约 180K 张图像,5.9M 个 mask

阶段三:全自动标注(Fully automatic)

  • 在 32×32 的网格点上自动生成 prompt,每张图生成大量候选 mask
  • 用 NMS 过滤重叠,用置信度和稳定性过滤低质量 mask
  • 最终在 11M 张图像上生成了1.1B 个 mask

4.2 SA-1B 数据集特性

指标SA-1BCOCOADE20K
图像数11M118K20K
Mask 数1.1B1.2M150K
每图 mask 数~100~7~20
  • 图像来自授权的摄影图库,已做人脸和车牌模糊处理
  • Mask 质量评估:与专业标注员的 IoU 达到94%,与 COCO 标注质量相当

五、训练细节

5.1 训练策略

  • 模拟交互式标注:每次训练迭代随机采样 prompt 序列(1~11 轮)
  • 第一轮:随机点或框
  • 后续轮:根据上一轮预测的误差区域采样新点(前景/背景)
  • 最后一轮有 1/4 概率输入 ground truth mask 作为 dense prompt

5.2 Loss 函数

L = λ_focal × L_focal + λ_dice × L_dice + λ_iou × L_iou
  • Focal Loss + Dice Loss 用于 mask 预测
  • IoU Loss 用于监督 IoU 预测头(让模型知道自己预测得有多准)
  • 多 mask 训练:只对 loss 最小的 mask 反传

5.3 数据增强

  • 大规模随机裁剪(Large-scale jitter)
  • 水平翻转

六、零样本泛化实验

SAM 在多个下游任务上做了零样本评估,不做任何微调:

6.1 零样本单点分割

在 23 个数据集上评估,与专门训练的 RITM 对比:

  • SAM 在大多数数据集上持平或超越 RITM
  • 在部分医学图像、遥感图像上略弱(domain gap)

6.2 边缘检测

  • 用自动 mask 生成的边界做边缘检测
  • 在 BSDS500 上接近专门训练的模型

6.3 目标候选区域生成(Object Proposals)

  • 在 LVIS 上评估 AR(Average Recall)
  • 中等和大目标上超越 ViTDet,小目标略弱

6.4 实例分割

  • 用 ViTDet 的 box 作为 prompt 输入 SAM
  • 在 COCO 和 LVIS 上与专门训练的 Mask R-CNN 相当

6.5 文本到 Mask

  • 用 CLIP 提取文本特征作为 prompt
  • 定性结果良好,但作者承认这是探索性实验

七、局限性与批判性分析

7.1 论文自述的局限

  1. 细粒度结构:对毛发、细网格等精细结构的分割不够精确
  2. 文本 prompt:文本理解能力有限,不如专门的视觉语言模型
  3. 实时性:Image Encoder 较慢,不适合视频实时处理
  4. 3D/医学图像:未针对非自然图像优化

7.2 深层问题

数据偏差:SA-1B 的图像来自摄影图库,存在明显的摄影风格偏差,对医学图像、卫星图像、工业图像的泛化能力有限。

"分割什么"的歧义:SAM 的多 mask 输出虽然优雅,但在实际应用中用户往往需要明确指定语义层级,这需要额外的后处理或更丰富的 prompt。

评估指标的局限:IoU 作为主要指标无法捕捉边界质量,而边界质量在很多应用(如图像编辑)中至关重要。


八、影响与后续工作

SAM 发布后迅速成为计算机视觉领域的基础设施,催生了大量后续工作:

  • SAM 2(2024):扩展到视频分割,引入 memory bank 机制
  • MedSAM:医学图像分割微调版本
  • SAM-Track:结合目标跟踪
  • Grounded-SAM:结合 Grounding DINO,实现文本驱动的开放词汇分割
  • EfficientSAM / MobileSAM:轻量化版本,适合边缘部署

九、核心贡献总结

维度贡献
任务范式定义了 promptable segmentation,统一了分割任务的接口
模型设计解耦的三模块架构,支持实时交互
数据工程SA-1B:11M 图像、1.1B mask,最大的分割数据集
泛化能力零样本迁移到 23+ 数据集,无需微调
开源影响模型权重和数据集完全开放,推动了整个领域

十、一句话本质

SAM 的本质是:用数据飞轮(data flywheel)+ 基础模型范式,把"分割"这个视觉基本操作做成了一个可 prompt 的通用接口——就像 CLIP 对"识别"做的事情一样,但 SAM
走得更远,因为它同时解决了数据规模问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询