原文:arXiv:2304.02643 · Kirillov et al., ICCV 2023
摘要: 我们介绍了 Segment Anything (SA) 项目:一个关于图像分割的新任务、模型和数据集。通过在数据收集循环中使用我们高效的模型,我们构建了迄今为止最大规模的分割数据集(遥遥领先),包含超过 10 亿个分割掩码和 1100 万张经过授权且注重隐私的图像。该模型被设计和训练为可提示(promptable),因此能够在无需额外训练的情况下迁移到新的图像分布和任务中。我们在众多任务上评估了其能力,发现其零样本性能非常出色——常常能够与之前的全监督结果相媲美,甚至更优。我们正在发布 Segment Anything Model (SAM) 和相应的数据集(SA-1B,包括 10 亿个分割掩码和 1100 万张图像),以促进计算机视觉领域基础模型的研究。详细信息请访问 https://segment-anything.com。
1. Introduction
NLP 中 LLM 的发展逐渐开始构建一些 “foundation model”,这些模型在经过超大量的数据训练之后,展现出强大的零样本和小样本泛化能力,并且随着模型规模、数据集规模和训练计算量的增加,这种泛化能力还会不断增强。在 CV 中,这种 foundation model 的研究还不是很多。主要的做法一般是使用 CLIP 或者 ALIGN 来对齐文本和图像两个模态,从而支持其他的下游任务。这种模式在生成式任务中很常见。
但是 CV 不止有生成式任务,还有其他很多任务超出了 CLIP 这种范式。并且对于这些问题来讲,一般不存在称得上充足的训练数据。
在这项工作中,我们的目标是为图像分割建立一个基础模型。具体来说,我们希望开发一个 可提示(promptable) 的模型,并通过一个能够支持强大泛化能力的任务,在广泛的数据集上进行预训练。通过该模型,我们希望能够通过提示工程解决基于新数据分布的各种下游分割问题。 实现这一计划的成功依赖于三个关键组件:任务、模型和数据。为此,我们提出了以下有关图像分割的问题:哪种任务 能够实现零样本泛化?对应的模型架构 是什么?哪些数据 能够支持这一任务和模型? 这些问题彼此交织,需要全面的解决方案。我们首先定义了一个可提示分割任务 (promptable segmentation task),该任务足够通用,能够提供强大的预训练目标,并支持广泛的下游应用。该任务要求模型支持灵活的提示,并在提示时能够实时输出分割掩码,以便实现交互式使用。为了训练我们的模型,我们需要一个多样化且大规模的数据来源。不幸的是,目前并不存在网络规模的分割数据源;为了解决这个问题,我们构建了一个 “数据引擎”,即在数据收集过程中使用我们的高效模型进行迭代,并用新收集的数据来改进模型。接下来,我们将介绍每个互相关联的组件,随后展示我们创建的数据集及证明我们方法有效性的实验。

Task
本文提出可提示分割任务如 Fig1 (A),目标是针对任何分割提示,返回有效的分割 mask。提示简单地指明在图像中需要分割的内容,例如,提示可以包括指定对象的空间信息或文本信息。有效输出掩码的要求意味着,即使提示存在歧义且可能指向多个对象(例如,衣服上的一个点可能指向衣服或穿衣的人),输出也应为这些对象之一提供合理的掩码。本文将可提示分割任务 同时作为预训练目标,并通过提示工程解决通用的下游分割任务。
Model
SAM 的模型总体架构如 Fig1 (B),结构比较简单,强调的是 Image Encoder 需要比较强大,而 mask decoder 是相对轻量的。

我们将这种模型称为 Segment Anything Model (SAM)。通过将 SAM 分离为图像编码器和快速提示编码器/掩码解码器,可以重复使用相同的图像嵌入(从而摊销其成本)以支持不同的提示。在已生成的图像嵌入的基础上,提示编码器和掩码解码器能够在网络浏览器中以大约 50 毫秒的速度从提示预测掩码。我们主要关注点、框和掩码提示,同时也展示了自由文本提示的初步结果。为了让 SAM 具备歧义感知能力,我们设计其可以为单个提示预测多个掩码,从而能够自然处理歧义,例如衣服与人的例子。
Data Engine
遇到的主要问题是分割任务这种标注太少了。
尽管基础模型的典型方法是从网络获取数据,但掩码并不是自然丰富的,因此我们需要一种替代策略。我们的解决方案是构建一个 “数据引擎”,即通过 “模型循环数据集标注” 共同开发我们的模型。我们的数据引擎分为三个阶段:人工辅助、半自动和全自动。在第一阶段,SAM 协助标注人员标注掩码,类似于经典的交互式分割设置。在第二阶段,通过提示可能的对象位置,SAM 可以自动生成部分对象的掩码,而标注人员专注于标注剩余的对象,从而提高掩码的多样性。在最后阶段,我们用前景点的规则网格提示 SAM,平均每张图像生成约 100 个高质量掩码。
Dataset

Responsible AI
构建的数据集足够多样化,避免偏见。做了关于 SAM 对不同人群的表现的对比。
Experiments
我们对 SAM 进行了广泛评估。首先,在一个包含 23 个新分割数据集的多样化评估套件中,我们发现 SAM 能够通过单个前景点生成高质量掩码,其性能通常仅略低于手动标注的地面实况。其次,我们发现通过零样本迁移协议结合提示工程,SAM 在包括边缘检测、对象提议生成、实例分割和文本到掩码预测初步探索在内的多种下游任务中,始终表现出强大的定量和定性结果。这些结果表明,SAM 可以通过提示工程直接应用于超出其训练数据范围的各种对象和图像分布任务。然而,仍有改进空间。
Release
我们出于研究目的发布了 SA-1B 数据集,并在 https://segment-anything.com 下以宽松的开源许可(Apache 2.0)提供 SAM。我们还通过在线演示展示了 SAM 的能力。
2. Segment Anything Task
Task

Prompt 是一组前/背景点,也可以是框、简单的 mask,文本,或者其他任何指示图像中需要分割内容的信息。
由此,可提示分割任务 (promptable segmentation task)定义为:针对任何提示返回一个有效的分割掩码。所谓 “有效” 的掩码意味着,即使提示存在歧义且可能指向多个对象(例如,回忆一下 “衣服与人” 的例子,见图 3),输出也应该为这些对象之一提供一个合理的掩码。
Pre-training
给每个样本模拟一些不同的 prompt 然后训。这种模式和之前的交互式分割有区别并且更难,需要设计更复杂的训练过程和 Loss。
Zero-shot transfer
直观上,我们的预训练任务赋予了模型在推理时对任何提示做出适当响应的能力,因此可以通过设计适当的提示来解决下游任务。例如,如果已有一个针对猫的边界框检测器,猫实例分割任务就可以通过将检测器的框输出作为提示提供给我们的模型来完成。
Related tasks
通过 prompt 可以覆盖大量不同的任务,比如交互式分割、边缘检测、super pixelization 等。跟之前的多任务框架不同的是,SAM 实际上是一个单独的模型可以作为更大系统的一部分来执行新的、不同的任务。例如,为了实现实例分割,可以把 SAM 和 object detection model 结合在一起使用。
Discussion
我们预计,通过提示工程等技术驱动的可组合系统设计,将能够支持比专门为固定任务集训练的系统更多样的应用。通过组合的视角比较可提示分割 和交互式分割 也很有趣:虽然交互式分割模型主要面向人类用户设计,训练为可提示分割 的模型同样可以被集成到更大的算法系统中,正如我们将要展示的那样。
3. Segment Anything Model

Image encoder
MAE pretrained ViT,得到 Image 就开始处理,不需要等 Prompt。
Prompt encoder
稀疏的(如点击,框等)通过位置编码和文本(通过 CLIP)类的嵌入相加,稠密的 mask 通过 conv 嵌入。
Mask decoder
采用有 dynamic mask prediction head 的修改过的 Transformer 作为 decoder。
Resolving ambiguity
如 Fig3,模型遇到有歧义的 prompt 就把所有的理解对应的 mask 全部输出,训练的时候只对 loss 最小的一种可能做反向传播。
Efficiency
整体模型设计在很大程度上以效率为目标。在预计算图像嵌入的基础上,提示编码器和掩码解码器可以在网络浏览器的 CPU 上以约 50ms 的时间运行。这一运行时性能使我们的模型能够实现无缝、实时的交互式提示。
Loss and training
使用 Focal Loss + Dice Loss 的线性组合作为 loss。
Focal Loss : ,处理类别不平衡问题;Dice Loss:,评估 segmentation 任务中重叠程度的损失函数。
4. Segment Anything Data Engine
数据引擎分为三个阶段:
1. **模型辅助的手动标注阶段**;2. **结合自动预测掩码和模型辅助标注的半自动阶段**;3. **完全自动化阶段**,模型在无需人工参与的情况下生成掩码。Assisted-manual stage
就是招人标数据,标 pixel level 的内容,一共收集了 12 万张图像的 430 万个 mask。
Semi-automatic stage
输出的内容包括模型的 mask,然后让标记人员标没标过的内容。这一阶段,收集了额外 180k 张图像的 590 万个掩码,总掩码数达到 1020 万个。每张图像的平均掩码数量从 44 增加到 72(包括自动掩码)。这一阶段模型被重新训练了 5 次。
Fully automatic stage
在最后阶段,掩码标注完全自动化。这一阶段的实现依赖于模型的两项重大改进:
- 已经收集了足够的数据,包括前一阶段的多样化掩码,显著提升了模型性能。 2. 开发了歧义感知模型,能够在提示模糊的情况下预测有效掩码。 掩码生成策略:我们使用 32×32 的规则点网格提示模型,并为每个点预测可能对应的对象掩码集。如果一个点位于某个部分或子部分上,模型会返回子部分、部分和整体对象的掩码。 掩码选择:我们利用模型的 IoU 预测模块选择高置信度掩码,同时筛选出稳定掩码 (如果在阈值 0.5−δ 和 0.5+δ 上对概率图进行二值化,掩码基本不变,则认为掩码是稳定的)。 去重:通过非极大值抑制(NMS)过滤重复的掩码。 小掩码优化:对较小的掩码,我们处理了多个重叠的放大图像裁剪以提升质量。 最终,对数据集中的 1100 万张图像应用了完全自动掩码生成,总共生成了 11 亿个高质量掩码。
5. Segment Anything Dataset
我们的数据集 SA-1B 包括 1100 万张多样化、高分辨率、经过授权且注重隐私保护的图像,以及使用数据引擎收集的 11 亿个高质量分割掩码。我们将 SA-1B 与现有数据集进行了比较,并分析了掩码的质量和属性。SA-1B 的发布旨在支持未来计算机视觉基础模型的开发。需要注意的是,SA-1B 将根据特定研究用途以友好的许可协议发布,并对研究人员提供保护。
Images
我们从一个直接与摄影师合作的提供商处获得了一组新的 1100 万张图像授权。这些图像具有高分辨率(平均为 3300×4950 像素),因此数据大小可能会带来访问和存储上的挑战。因此,我们发布了下采样版本的图像,最短边被设置为 1500 像素。即使在下采样后,我们的图像分辨率仍显著高于许多现有视觉数据集(例如,COCO 图像的分辨率约为 480×640 像素)。需要注意的是,目前大多数模型的输入分辨率远低于此。此外,发布的图像中,人脸和车牌已被模糊处理。
Masks
我们的数据引擎生成了 11 亿个掩码,其中 99.1% 是完全自动生成的。因此,自动掩码的质量至关重要。我们直接将其与专业标注进行了比较,并分析了掩码属性与其他著名分割数据集的对比。我们的主要结论是(详见以下分析和第 §7 节的实验),自动掩码具有高质量,并且在训练模型时表现出良好的效果。基于这些发现,SA-1B 仅包括自动生成的掩码。
Mask quality
为了评估掩码质量,我们随机抽取了 500 张图像(约 5 万个掩码),并要求专业标注人员使用我们的模型和像素级精确的 “画笔” 和 “橡皮擦” 工具改进所有掩码。这一过程生成了自动预测掩码和专业修正掩码的配对。我们计算了每对之间的 IoU(交并比),发现 94% 的配对 IoU 超过 90%,97% 的配对 IoU 超过 75%。作为对比,以往研究估计标注人员之间的一致性 IoU 在 85%-91% 之间 [44, 60]。第 §7 节中的实验通过人工评估确认,掩码质量相对于各种数据集较高,并且在模型训练中,使用自动掩码的效果几乎与使用数据引擎生成的所有掩码相当。
Mask quality


对象中心分布:如图 5 所示,我们绘制了 SA-1B 中对象中心的空间分布,并与现有分割数据集中分布最广的数据进行了比较。摄影师的常见偏差在所有数据集中都存在。我们观察到,SA-1B 在图像角落的覆盖范围优于 LVIS v1 和 ADE20K,这两个数据集的分布与 SA-1B 最为接近,而 COCO 和 Open Images V5 则更偏向于图像中心。 数据集大小比较:如图 6 所示,SA-1B 比第二大数据集 Open Images 的图像数量多 11 倍,掩码数量多 400 倍。平均每张图像包含的掩码数量是 Open Images 的 36 倍,而与其最接近的 ADE20K 数据集的掩码数量也比 SA-1B 少 3.5 倍。图 6 左侧显示了掩码每张图像的分布。 掩码相对大小:在图 6 中间,我们展示了掩码的图像相对大小(掩码面积平方根除以图像面积)。如预期所示,由于我们的数据集每张图像有更多掩码,因此它包含更多小型和中型相对大小的掩码。 形状复杂度:在图 6 右侧,我们分析了掩码的形状复杂度(1 减去掩码面积与其凸包面积的比值)。由于形状复杂度与掩码大小相关,我们首先从不同大小区间的掩码中进行分层采样。我们观察到,SA-1B 掩码的凹度分布与其他数据集总体相似。
6. Segment Anything RAI Analysis



之前的数据集在不同人种、性别上的表现有差异,这个数据集更加 Responsible。
7. Zero-Shot Transfer Experiments
我们设计了五个任务,其中有四个与训练 SAM 所使用的可提示分割任务 显著不同。这些实验评估了 SAM 在训练时未见过的数据集和任务上的表现(我们对 “零样本迁移” 的使用与 CLIP 的定义一致)。这些数据集可能包含新的图像分布,例如水下图像或以自我为中心的图像(如图 8 所示),这些分布据我们所知并未出现在 SA-1B 数据集中。

Implementation : 除非另有说明:1. SAM 使用了 MAE 预训练的 ViT-H 图像编码器;2. SAM 使用 SA-1B 训练,该数据集仅包含通过数据引擎最终阶段生成的自动掩码。
7.1 Zero-Shot Single Point Valid Mask Evaluation
Task
从单个前景点分割一个对象。该任务本质上是一个不适定问题,因为一个点可能对应多个对象。大多数数据集中的真实掩码未列举所有可能的掩码,因此自动评价指标可能不可靠。因此,我们补充了标准的 mIoU 指标(预测掩码与真实掩码之间 IoU 的平均值),并进行了人类研究,标注者对掩码质量评分(从 1 到 10,1 表示无意义,10 表示像素级准确)。

Datasets
我们使用了一个新编译的由 23 个数据集组成的套件,这些数据集具有多样化的图像分布(图 8 显示了每个数据集的样例,更多细节见附录表 7)。我们使用所有 23 个数据集进行 mIoU 评估。在人类研究中,由于资源限制,仅使用了图 9b 列出的子集。该子集包括 SAM 在自动指标下优于和劣于 RITM 的数据集。
Results
首先,我们在 23 个数据集上进行了自动评估,使用 mIoU 指标。图 9a 显示了 SAM 与 RITM 的每个数据集结果比较。SAM 在 23 个数据集中有 16 个数据集表现更好,IoU 提高最多达 47%。此外,我们提供了 “oracle” 结果,其中通过与真实掩码比较,选择 SAM 的三个掩码中最相关的一个,而非选择置信度最高的掩码。这揭示了歧义对自动评估的影响。在消除歧义的情况下,SAM 在所有数据集上都优于 RITM。 人类研究的结果见图 9b,误差条表示 95% 置信区间。标注者始终对 SAM 的掩码质量评分显著高于最强基线 RITM。去除了歧义感知能力的 SAM(即仅输出单个掩码)得分较低,但仍高于 RITM。SAM 的平均评分在 7 到 9 之间,这符合评分指南中的高分范围(7-9):“对象可识别,错误小且罕见(例如,缺少一个小的、严重遮挡的分离组件)。” 对于如 DRAM 和 IBD 等数据集,虽然在自动指标上 SAM 表现较差,但在人类研究中得分仍显著更高。 图 9c 显示了其他基线方法 SimpleClick 和 FocalClick 的结果,这两者的单点性能均低于 RITM 和 SAM。随着点数从 1 增加到 9,不同方法之间的差距缩小,这是预期的,因为任务难度降低。此外,SAM 并未针对非常高 IoU 情况优化。 最后,图 9d 显示当将默认的中心点采样替换为随机点采样时,SAM 与基线方法的差距进一步扩大,并且在任一采样方法下,SAM 的性能均能保持一致。
7.2. Zero-Shot Edge Detection
Approach
先生成 Mask,然后过 NMS 去除冗余,最后用 Sobel 滤波生成边缘。
Results

7.3. Zero-Shot Object Proposals
Results

与强基线 ViTDet(结合级联 Mask R-CNN 的 ViT-H 检测器)相比,SAM 在中型和大型对象以及稀有和常见对象上表现更好。对于小型对象和高频对象,SAM 表现稍差,因为 ViTDet-H 在 LVIS 上训练,可以轻松学习其特定的标注偏差,而 SAM 作为零样本方法无法利用这些偏差。 去除了歧义感知能力的 SAM(单输出)在所有 AR 指标上明显落后于完整的 SAM。
7.4. Zero-Shot Instance Segmentation
Approach
把目标检测的 anchor 作为 prompt 送给 SAM。
Results

在表 5 中,我们比较了 SAM 和 ViTDet 在 COCO 和 LVIS 数据集上的掩码预测结果。从掩码 AP(平均精度)指标来看,SAM 在两个数据集上的表现虽然略逊于 ViTDet,但差距在可接受范围内。 通过对输出的可视化,我们观察到 SAM 生成的掩码通常比 ViTDet 更加清晰(见 §D.4 和图 16)。为了验证这一观察,我们进行了额外的人类研究,要求标注者对 ViTDet 和 SAM 的掩码按照之前使用的 1 至 10 的质量评分进行评价。在图 11 中,我们发现 SAM 的评分始终优于 ViTDet。 我们推测,在 COCO 数据集上,掩码 AP 的差距较大,而地面真实值质量相对较低(从人类研究中可以看出),ViTDet 学习到了 COCO 掩码的特定偏差。而 SAM 作为零样本方法,无法利用这些(通常不理想的)偏差。 对于 LVIS 数据集,地面真实值质量较高,但仍存在一些特定的特性(例如,掩码不包含孔洞,其通过简单多边形构建),以及显性(modal)和非显性(amodal)掩码之间的偏差。同样,SAM 未经过训练以学习这些偏差,而 ViTDet 可以利用这些特性。
7.5. Zero-Shot Text-to-Mask
Approach
我们还探索了一个更高级的任务:从自由形式文本中分割对象。这一实验是对 SAM 处理文本提示能力的概念验证。 虽然在之前的所有实验中我们都使用了相同的 SAM,但在这个实验中,我们对 SAM 的训练过程进行了修改,使其能够感知文本提示,但无需新增文本注释。具体来说,对于每个手动标注且面积大于 10021002 的掩码,我们提取了 CLIP 的图像嵌入。在训练时,我们用提取的 CLIP 图像嵌入作为 SAM 的第一次交互提示。 关键观察是,CLIP 的图像嵌入经过训练可以与其文本嵌入对齐,因此我们可以用图像嵌入进行训练,但在推理时使用文本嵌入。这意味着在推理时,我们通过 CLIP 的文本编码器运行文本,并将生成的文本嵌入作为提示提供给 SAM。
Results

7.6. Ablations

- 把所有数据都用来做训练然后平衡数据效果其实更好,但是直接只用自动生成的数据掉点也不多并且更方便;
- 数据量的影响,使用 100w 张左右的图片比较合适
- 使用 ViT-H 和使用 ViT-L 相比点变化的不多,证明暂时没必要进一步扩大 Image Encoder 的特点
8. Discussion
Foundation models
自机器学习早期以来,预训练模型就被用来适配下游任务。近年来,这一范式变得越来越重要,随着规模的扩大,这类模型最近被重新定义为 “基础模型”(foundation models),即 “在广泛的数据上大规模训练,可适配多种下游任务的模型” 。我们的工作与这一定义高度相关,但我们也指出,用于图像分割的基础模型在范围上本质上是有限的,因为它代表了计算机视觉中一个重要但相对较小的子集。
Compositionality
预训练模型可以提供超出训练时设想的新能力。例如,CLIP 被用作更大系统的组件,如 DALL・E。我们的目标是通过 SAM 使这种组合变得更加简单。我们通过要求 SAM 针对各种分割提示生成有效的掩码来实现这一目标。这种设计为 SAM 和其他组件之间创建了一个可靠的接口。例如,MCC 可以轻松使用 SAM 分割感兴趣的对象,并实现对未见过对象的 3D 重建的强泛化。此外,SAM 可以通过可穿戴设备检测的注视点(gaze points)提示,支持新的应用程序。由于 SAM 能够很好地泛化到新领域(如以自我为中心的图像),此类系统无需额外训练即可工作。
Limitations
尽管 SAM 总体表现良好,但并非完美: 它可能会遗漏精细结构; 有时会出现小的、分离的 “幻觉” 组件; 其边界不像一些更耗时、局部放大的方法(那样清晰。 一般而言,当提供多个点时,我们期望专用的交互式分割方法优于 SAM。与这些方法不同,SAM 的设计重点在于通用性和广泛使用,而非高 IoU 的交互式分割。 此外,尽管 SAM 能实时处理提示,但使用较重的图像编码器时,整体性能并非实时。我们在文本到掩码任务中的探索仍处于初步阶段,还不够健壮,但我们相信可以通过更多努力加以改进。 虽然 SAM 能执行许多任务,但设计简单提示以实现语义分割和全景分割仍存在困难。最后,对于某些特定领域的工具,我们预期它们在各自领域中的表现会优于 SAM。
Conclusion
Segment Anything 项目 旨在将图像分割提升到基础模型的时代。我们的主要贡献包括一个新任务(可提示分割)、一个新模型(SAM)以及一个新数据集(SA-1B),这些都使这一跃迁成为可能。SAM 是否能达到基础模型的地位还有待社区的使用和验证。但无论如何,我们相信这项工作的视角、超过 11 亿个掩码的发布以及我们提出的可提示分割模型都将为未来的研究铺平道路。
SAM1 的工作感觉并不复杂,有点 “大力出奇迹” 的味道。不太确定在实际的下游应用中,根据一个 embdding 算多种不同 prompt 对应的 mask 这种情况常见吗?如果不常见的话,这种加速似乎只有在那个 demo 里面比较合适。数据生成还是蛮厉害的,并且这种任务的规约确实保证了可以作为一个 foundation model。