Segment Anything: Building a Foundation Model for Image Segmentation
分割 (segmentation) 是将图像中目标的精确边界勾画出来的任务,广泛应用于照片编辑、机器人、医学影像和自动驾驶等众多场景。尽管应用普遍,分割长期缺乏一个“基础模型”——即一个单一、广泛适用并且可通过“提示 (prompt) ”驱动的模型,能够像大型语言模型那样在各种任务和领域中泛化。 Segment Anything (SA) 项目大胆地填补了这一空白。它引入了一项新任务、一种新模型架构以及一个创新的数据引擎,合力产出 Segment Anything Model (SAM) 和迄今为止最大的分割数据集: SA-1B , 包含 1100 万张图像和惊人的 11 亿个掩码。
在这篇文章中,我们将梳理使 SAM 有趣的直觉、工程实现和实验结果。我们会解释可提示分割的概念,分解 SAM 的架构,展示团队如何将数据收集扩展到十亿级掩码的数据集,以及总结那些展示 SAM 意外的零样本 (zero-shot) 能力的实验。
首先,这是作者要做的事情及各部分如何契合的整体视图。

图 1: 我们的目标是通过引入三个相互连接的组成部分来构建一个分割基础模型: 一个可提示的分割任务,一个用于数据标注且能通过提示工程实现零样本迁移的分割模型 (SAM) ,以及用于收集 SA-1B 的数据引擎。
The Core Idea: Promptable Segmentation
作者从 NLP (GPT 系列) 和视图-语言 (CLIP) 中的基础模型获得灵感,那些单一的大规模预训练模型可以通过“提示”执行多种下游任务。对于分割,他们定义了类似灵活的目标:
- 一个提示是任何告诉模型“要分割什么”的信息——例如,一个点、一个框、一个粗糙的掩码,甚至是自由形式的文本。
- 可提示分割任务是: 给定一张图像和一个提示,返回一个与提示对应的有效分割掩码。
“有效”这个术语很关键: 如果提示是模糊的 (例如在一件衬衫上的单个点可能表示衬衫、穿着它的人,或者衬衫上的标志) ,模型必须返回一个对某种有效解释来说合理的掩码。这种行为使 SAM 在交互式 (人机在环) 和作为算法管道组件 (例如将检测器框输入 SAM 以获得实例掩码) 中都很有用。
这一表述带来了两个实际好处:
- 自然的预训练目标: 在训练时为每个掩码模拟多种提示,使模型学会对任意提示做出合理响应。
- 可组合性: 下游系统可以将 SAM 作为分割组件在无需重新训练的情况下使用——通过提示工程即可实现零样本使用。
The SAM Architecture: Three Clear Parts
SAM 有意设计为模块化,包含三个主要组件: 重量级的图像编码器、轻量且灵活的提示编码器,以及非常快的掩码解码器。这种划分对实际使用至关重要: 昂贵的图像嵌入只需计算一次,而许多小的提示查询可以在其上快速运行——从而实现交互式响应时间。

图 4: Segment Anything Model (SAM) 概览。重量级图像编码器输出图像嵌入,随后可以被多种输入提示高效查询以生成对象掩码并达到摊薄的实时速度。对于对应多个对象的模糊提示, SAM 可以输出多个有效掩码及其对应的置信度分数。
下面具体拆解每个部分。
Image Encoder
- 编码器是一个 ViT (视觉变换器) ,从 MAE (masked autoencoder) 预训练初始化。实际中,作者使用了适配高分辨率输入的 ViT-H (huge) 变体 (输入分辨率 1024×1024,产生 64×64 的特征图) 。
- 图像编码器是“重的”,但只对每张图像运行一次。它的任务是产生丰富的空间特征嵌入,供提示编码器和掩码解码器查询。
为何使用变换器?变换器易于扩展,且 MAE 预训练提供了良好的表示作为起点。
Prompt Encoder
提示分为两类:
- 稀疏提示 (sparse prompts) : 点、框和文本。一个点通过位置编码表示,并附带两个学习到的嵌入之一来指示前景或背景。框通过其角点的嵌入来编码。自由形式文本则通过使用 CLIP 的文本编码器来处理。
- 稠密提示 (dense prompts) : 掩码。这些掩码被卷积降分辨率并在空间上加入到图像嵌入中。
提示编码器将用户输入 (或其他系统输出) 映射为一组令牌嵌入,供掩码解码器使用。
Lightweight Mask Decoder
掩码解码器高效地将图像嵌入和一组提示嵌入映射为像素级的掩码 logits。在架构上,它是一个小型的类变换器解码器,交替执行令牌自注意力、令牌与图像嵌入之间的交叉注意力 (双向) ,以及逐点的 MLP 更新。经过几层这样的结构后,图像嵌入被上采样,然后一个 MLP 生成动态滤波器,这些滤波器与上采样后的嵌入相乘以输出掩码。
为更清晰地展示这一流程:

图 14: 轻量掩码解码器细节。两层解码器通过交叉注意力同时更新图像嵌入和提示令牌。随后图像嵌入被上采样,更新后的输出令牌被用来动态预测掩码。 (为图示清晰未绘制: 在每个注意力层中,位置编码都会加入图像嵌入,并且整个原始提示令牌 (包括位置编码) 会被重新加入到令牌查询和键中。)
该设计带来两个重要特性:
- 高效性: 一旦计算出图像嵌入,每个提示都可以快速处理 (在网页浏览器中约 ~50 ms) 。
- 灵活性: 同一图像嵌入可在多个提示间重复使用 (对交互式 UI 和自动注释非常有利) 。
Handling Ambiguity: Multiple Outputs and Confidence
单个提示可以对应多个有效掩码。如果强制模型只输出一个掩码,常会对竞争掩码取平均,可能产生无意义的输出。 SAM 通过两种方式解决这个问题:
- 为每个提示预测多个掩码 (默认三个输出) ,训练时使用一个技巧: 损失取多个输出中的最小损失 (类似多选或竞争式损失) 。这鼓励在训练时生成多样且合理的掩码,而不需要强加任意的输出顺序。
- 学习为每个输出掩码预测一个类似 IoU 的置信度分数 , 以便对输出进行排序和筛选。
这种方法对数据引擎 (下面讨论) 尤为重要,在自动标注时需要从多个预测中选出高质量掩码。
Training Losses and Prompt Simulation
SAM 在训练时通过为每个掩码模拟交互式提示来进行可提示分割任务的训练: 它会采样一个初始提示 (点或框) ,预测一个掩码,然后从掩码错误区域采样纠正点并迭代——模拟交互式工作流。
掩码监督使用 focal loss 与 dice loss 的线性组合,比例为 20:1 (focal:dice) 。形式化地,如果 \(L_{\text{focal}}\) 和 \(L_{\text{dice}}\) 分别表示对应的损失,复合掩码损失为
\[ L_{\text{mask}} = L_{\text{focal}} + \alpha L_{\text{dice}} \quad\text{with}\quad \alpha=\frac{1}{20}. \]一个辅助的 MSE 损失用于训练 IoU 预测头。
训练细节 (简述) : ViT-H 从 MAE 初始化,使用大批量并在许多 GPU 上分布式训练。训练进行数万次迭代 (例如默认 90k) ,对每个掩码进行交互式提示模拟。
The Data Engine and SA-1B: Co-design of Model and Data
分割掩码的人工创建成本很高。没有像文本那样的网络级掩码语料库。作者通过构建一个“数据引擎”来解决这个问题,该引擎在模型改进和标注策略之间迭代,随着模型提升从模型辅助人工标注过渡到完全自动标注。
该流水线包含三个阶段:
- 辅助人工 (Assisted-manual) 。 专业标注员在交互式工具中使用 SAM 来标注掩码。 SAM 提供了良好的初始候选并支持快速纠正,显著加快了标注速度。早期 SAM 模型基于公共数据集训练,并在新注释到来时持续再训练。此阶段收集了大约 430 万个掩码,来自 12 万张图像。
- 半自动 (Semi-automatic) 。 检测器先自动生成有置信度的掩码;然后标注员被要求标注剩余的对象,重点关注欠研究或不太显著的项目。此阶段增加了约 590 万个掩码。
- 完全自动 (Fully automatic) 。 随着 SAM 的改进并具备了处理歧义的能力 (多个输出 + IoU 评分) ,作者在 1100 万张已授权、隐私保护的图像上无人工干预运行 SAM 。 他们用一个规则网格的点 (32×32) 作为提示,为每个点生成多个掩码,通过预测的 IoU 以及对小阈值扰动下的稳定性阈值选择自信且稳定的掩码,应用非极大值抑制( NMS )过滤重复,并使用放大裁剪以捕捉小物体。最终阶段产出了大规模、完全自动的 SA-1B 数据集: 1100 万张图像与 11 亿个掩码。
以下是 SA-1B 的示例 (注意多样性和密集覆盖;平均每张图像约有 ~100 个掩码) :

图 2: 我们新增数据集 SA-1B 的示例图像与覆盖掩码。 SA-1B 包含 1100 万张多样、高分辨率、已授权且保护隐私的图像,以及 11 亿个高质量分割掩码。这些掩码由 SAM 完全自动 标注,正如我们通过人工评分和大量实验验证的那样,具有高质量和多样性。为了可视化,我们按每图掩码数量分组 (平均每图约 100 个掩码) 。
质量检查显示准确率很高: 在一个留出集合上,标注员纠正自动掩码后,94% 的掩码与纠正后的版本的 IoU > 90% (97% 的掩码 > 75% IoU) 。这些数字表明自动生成的掩码在训练和各种应用中非常可用。
Zero-Shot Experiments: SAM as a Generalist Segmentation Tool
Segment Anything 项目的主要主张之一是: 以这种方式训练的可提示模型,只需通过提示工程即可在许多与分割相关的任务上实现零样本迁移。作者在多个此类任务上广泛测试了这一假设。
Single-Point Prompting: The Basic Zero-Shot Test
任务: 给 SAM 一个前景单点 (高度模糊的提示) ,让它返回一个掩码。这测试 SAM 是否能从最少输入中返回一个合理的对象。
方法: 评估包含一个新编的 23 个多样数据集的套件 (覆盖室内场景、水下环境、第一人称视角、显微医学、航拍图像、绘画等) 并采用标准化的点采样协议。基线包括专门为交互式分割训练的强交互模型,如 RITM、SimpleClick 和 FocalClick。
主要发现:
- 在 23 个数据集套件的自动 mIoU 指标上, SAM 在 23 个数据集中击败 RITM 的有 16 个,有时差距很大。
- 由于单点提示可能合法地映射到多个对象,进行“oracle”评估 (从 SAM 每个提示的三个输出中选择最佳) 显示 SAM 在所有数据集上均优于 RITM——这凸显了其多输出策略的价值。
- 人类研究 (标注员在 1–10 评分尺度上对掩码质量评分) 显著偏向 SAM : 标注员在许多数据集上持续将 SAM 的单点掩码评分置于 7–9 区间,表明即便由于内在模糊与某个特定 GT 掩码的 IoU 低,其掩码往往仍是清晰可用的。
视觉摘要:

图 9: 在 23 个数据集上的点到掩码评估。 (a) SAM 与最强的单点分割器 RITM 在 23 个数据集上的平均 IoU。因歧义单个掩码可能不匹配标注;圆圈显示 SAM 三个预测中最相关预测的“oracle”结果。 (b) 按数据集划分,标注员对掩码质量的评分比较,范围从 1 (最差) 到 10 (最好) 。所有方法均使用真实掩码中心作为提示。 (c, d) 随着点数变化的 mIoU。 SAM 在 1 个点时显著优于先前交互分割器,随着更多点数则与其他方法表现接近。单点时低绝对 mIoU 是由提示歧义造成的。
要点: SAM 在极少信息下 (单点) 就能在广泛领域中生成“有效”掩码;其面向歧义的多输出和置信度评分对评估和实际使用至关重要。
Edge Detection (Low-Level Vision)
令人惊讶的是, SAM 可通过在不同位置生成大量掩码并计算掩码概率图的图像空间梯度来适配经典的低级任务——边缘检测。
- 方法: 从 16×16 的规则网格前景点生成掩码 (每点产生三种输出) ,通过 NMS 去除冗余掩码,对未二值化的掩码概率图计算 Sobel 边缘,并做轻量化细化 (thinning) 。
- BSDS500 上的结果: SAM 达到大约 0.768 的 Optimal Dataset Scale( ODS ),与早期的学习方法如 HED (0.788) 接近。重要的是, SAM 在召回率上较高但精度较低 (它经常输出许多在 BSDS500 注释中未标注但合理的边缘) 。
| 方法 | 年份 | ODS | OIS | AP | R50 |
|---|---|---|---|---|---|
| HED [108] | 2015 | .788 | .808 | .840 | .923 |
| EDETR [79] | 2022 | .840 | .858 | .896 | .930 |
| zero-shot transfer methods: | |||||
| Sobel filter | 1968 | .539 | - | - | - |
| Canny [13] | 1986 | .600 | .640 | .580 | - |
| Felz-Hutt [35] | 2004 | .610 | .640 | .560 | - |
| SAM | 2023 | .768 | .786 | .794 | .928 |
表 3: 在 BSDS500 上的零样本边缘检测迁移结果。
这表明 SAM 是一个强劲的零样本边缘预测器,其性能显著优于先前较为陈旧的零样本迁移方法。
示例边缘输出:

图 10: 在 BSDS500 上的零样本边缘预测。 SAM 并未被训练为预测边缘图,也未在训练时访问 BSDS 图像或注释。
Object Proposals and Zero-Shot Instance Segmentation
对象候选 (Object proposals) : 运行 SAM 的自动掩码生成流水线会为每张图像产生数千个候选。在 LVIS v1 上, SAM (零样本) 在 mask AR@1000 指标上接近有竞争力的检测器 (如 ViTDet-H) ,对中等和大目标以及稀有类别表现尤其好。
| mask AR@1000 | |||||||
|---|---|---|---|---|---|---|---|
| 方法 | all | small | med. | large | frequent | common | rare |
| ViTDet-H [62] | 63.0 | 51.7 | 80.8 | 87.0 | 63.1 | 63.3 | 58.3 |
| zero-shot transfer methods: | 54.9 | 42.8 | 76.7 | 74.4 | 54.7 | 59.8 | 62.0 |
| SAM | 59.3 | 45.5 | 81.6 | 86.9 | 59.1 | 63.9 | 65.8 |
表 4: 在 LVIS v1 上的对象候选生成。 SAM 以零样本方式应用,即未为对象候选生成进行训练,也未访问 LVIS 的图像或注释。
零样本实例分割: 该任务通过将对象检测器 (之前使用的 ViTDet) 与 SAM 组合实现,将检测器输出的框作为提示传入 SAM 。 结果显示 SAM 的掩码 AP 低于完全监督的 ViTDet (可预期,因为 ViTDet 在该数据集上进行了微调) 。然而,人工评分显示 SAM 的掩码在定性上常常更好,边界更清晰。
| 方法 | AP | APS | APM | APL | AP | APS | APM | APL |
|---|---|---|---|---|---|---|---|---|
| ViTDet-H [62] | 51.0 | 32.0 | 54.3 | 68.9 | 46.6 | 35.0 | 58.0 | 66.3 |
| zero-shot transfer methods (segmentation module only): | ||||||||
| SAM | 46.5 | 30.8 | 51.0 | 61.7 | 44.7 | 32.5 | 57.6 | 65.5 |
表 5: 实例分割结果。 SAM 使用 ViTDet 的框进行零样本分割。完全监督的 ViTDet 性能优于 SAM , 但在更高质量的 LVIS 掩码上差距缩小。有趣的是,根据人工评分 SAM 优于 ViTDet (见论文中的图 11) 。
示例定性比较:

图 16: 在 LVIS v1 上的零样本实例分割。 SAM 产生比 ViTDet 更高质量的掩码。作为零样本模型, SAM 无法学习特定数据集的注释偏好;参见右上角示例,在该示例中 SAM 做出了模态预测,而 LVIS 的真实标签是模态外 (amodal) 的,因为 LVIS 的掩码注释没有孔洞。
Text-to-Mask (Proof-of-Concept)
最后, SAM 可以接受 CLIP 文本嵌入作为提示,通过一个小的训练技巧实现: 模型训练时使用经掩码化的 CLIP 图像 嵌入作为提示。在推理时可以使用 CLIP 文本嵌入,因为 CLIP 设计上使图像与文本嵌入对齐。早期的定性结果显示 SAM 可以根据简单或细微的文本短语进行分割,有时通过加入额外的点提示可提升性能。
示例:

图 12: 零样本文本到掩码。 SAM 能处理简单和细微的文本提示。当 SAM 未能做出正确预测时,额外的点提示可以提供帮助。
Ablations: Data Engine Stages, Scale, and Model Size
作者进行了若干消融研究以理解不同设计选择的影响:
- 数据引擎阶段 (Data engine stages) : 数据引擎的每个阶段 (人工 → 半自动 → 完全自动) 都会持续提升性能。有趣的是,仅使用完全自动掩码训练的结果与混合三阶段训练 (在混合训练中对人工掩码进行过采样) 几乎相当。
- 数据规模: 将训练数据从 1100 万图像减少到约 100 万 (仍包含约 1 亿个掩码) 在许多设置下能得到相当的性能。这表明在某一规模之后收益递减,并为许多实际用例提供了可行的训练替代方案。
- 模型规模: 使用 ViT-H 图像编码器表现最佳, ViT-L 也给出强结果, ViT-B 则明显弱一些。随着图像编码器规模的增加,收益趋于饱和。
图示摘要:

图 13: 我们数据引擎阶段、图像编码器扩展与训练数据规模的消融研究。 (左) 每个数据引擎阶段都在我们 23 个数据集套件上带来改进,仅使用自动数据 (我们的默认) 与使用三阶段混合数据的结果相似。 (中) 使用约 10% 的 SA-1B 与完整 SA-1B 训练 SAM 的效果可比。我们默认使用全部 1100 万张图像,但使用 100 万张图像是一个合理的实际设置。 (右) 扩展 SAM 的图像编码器带来显著但饱和的收益。不过在某些场景下可能偏好更小的图像编码器。
Responsible AI and Limitations
作者明确分析了地理分布和公平性方面的问题。 SA-1B 的图像是已授权且保护隐私的 (面部与车辆车牌被模糊处理) 。数据集在地理上具有多样性 (大多数国家拥有超过 1000 张图像) ,在欧洲与亚太地区的代表性较强,相比一些旧数据集更均衡。然而,非洲和低收入国家相对于全球人口仍然被低估。在公平性测试 (按感知性别呈现、年龄和肤色对人进行分割) 上, SAM 的单点和三点性能在许多群体上的置信区间有重叠——这是一个令人鼓舞的结果,但并非完美。
作者指出的限制包括:
- 细小结构: SAM 在非常细小的结构上并不完美;它可能遗漏小部件或偶尔出现幻觉式的微小不连通部分。
- 极端 IoU: SAM 为通用性和可提示性进行优化,而不是为了在大量交互纠正点下实现极端高的 IoU。为高精度工作流专门微调的交互式模型在提供大量点纠正时仍可能优于 SAM 。
- 文本到掩码: 文本到掩码功能仍处于探索阶段,需要进一步开发以增强鲁棒性。
- 数据集偏差: 作为零样本模型, SAM 不会学习数据集特有的注释习惯。虽然这有利于泛化,但有时会导致在编码这些偏差的基准测试 (例如 LVIS 掩码不包含孔洞) 上 AP 较低。
Why This Matters and What Comes Next
SAM 展示了一个可提示的分割模型在规模化训练并设计为可组合时,可以作为许多系统的实用且强大的组件。以下要素的组合:
- 精心设计的可提示分割任务,
- 将重量级图像编码与轻量提示条件解码分离的模块化架构,和
- 能够挖掘十亿级掩码的数据引擎
为构建一种基础级分割模型提供了实用范式。
直接收益包括:
- 在浏览器和应用中实现快速的交互分割 (图像嵌入只计算一次,多个快速提示) 。
- 大规模自动数据集创建和标注工具。
- 可重用的分割模块供各种流水线使用 (例如将对象检测器与 SAM 结合) 。
- 面向多模态扩展的有前景方向 (改进文本到掩码、基于潜在掩码的检索等) 。
超越直接分割任务, SAM 学到的表示也带来了有趣的可能性。对其潜在空间的初步探索表明,即使没有显式的语义监督,掩码嵌入通常也能捕捉语义和形状相似性,暗示这些表示在进一步数据标注或理解数据集内容等任务上的潜力。

图 17: 可视化 SAM 潜在空间中掩码嵌入相似度的阈值化。用品红色框表示查询;上排显示低阈值下的匹配,下排显示高阈值下的匹配。在同一图像中最相似的掩码嵌入常常在语义和形状上与查询掩码相似,尽管 SAM 并未用显式语义监督进行训练。
开放方向包括改进细结构恢复、增强对领域特定边界情况的鲁棒性、发展更强的文本条件机制,以及在代表性不足的地区和对敏感下游使用场景中推进负责任部署的考虑。
Quick Practical Takeaways
- 如果你需要一个快速、通用的分割组件,可以通过点、框或掩码来提示, SAM 是一个强劲的零样本工具。
- 对于需要大量交互纠正以追求极高 IoU 的工作流,专门为该用例微调的交互模型可能仍然更适合。
- SA-1B 数据集 (1100 万图像,11 亿掩码) 为预训练和数据集创建开辟了新途径——但在将数据用于敏感应用前,请注意其授权及项目的 RAI 指导。
](https://deep-paper.org/en/paper/2304.02643/images/cover.png)