Segment Anything
分割一切
摘要
我们介绍了分割一切(SA)项目:一个用于图像分割的新任务、新模型和新数据集。通过在数据收集循环中使用我们高效的模型,我们构建了迄今为止规模最大的分割数据集,在1100万张经授权且尊重隐私的图像上拥有超过10亿个掩码。该模型的设计和训练使其具有可提示性,因此能够零样本迁移到新的图像分布和任务中。我们在众多任务上评估了其能力,发现其零样本性能令人印象深刻------通常与甚至优于先前全监督方法的结果。我们已在https://segment-anything.com上发布了分割一切模型(SAM)以及对应的包含10亿个掩码和1100万张图像的SA-1B数据集,以促进计算机视觉领域基础模型的研究。
通用的图像分割模型(SAM) :可以通过"提示"来分割任何图像中的任何物体,并且不需要额外训练就能适应新任务。他们同时发布了史上最大的分割数据集,以推动计算机视觉领域的发展。
新任务:提出"可提示的分割",可以用鼠标点一下、画一个框、写一段文字,模型就能把你想要的那个物体分割出来
新模型:SAM,设计了一个高效的模型,能实时响应提示,并且能处理模糊提示
新数据集:SA-1B ,通过模型辅助人工标注,最终自动生成了超过 10 亿个掩码 ,覆盖 1100 万张 授权且隐私保护处理的图像,规模是此前最大数据集的 400 倍。
在数据收集循环中使用我们高效的模型:最初模型还比较弱,但用它辅助人工标注→得到一批高质量掩码→用这些掩码重新训练模型→模型变强→再用更强的模型去辅助人工或自动标注→得到更多、更好的掩码→再训练模型......;如此往复,模型和数据集螺旋式提升。这就是"数据收集循环"
可提示性:可以用不同的方式告诉模型"你想分割哪个东西"
SAM 支持多种"提示":
- 点:点一下物体内部 → 分割它
- 框:画一个框 → 分割框里的物体
- 文字(实验性):"一只狗" → 分割出狗
- 另一个掩码:给出一个粗略掩码 → 模型帮你精细化
零样本迁移 :不需要针对新场景重新训练。比如模型原本只在普通照片上训练,但可以直接用于医学图像、卫星图、手绘图、甚至水下摄影,效果依然很好,甚至超过一些专门为这些任务训练过的旧模型。
传统方法:如果你想让模型分割一种从未见过的数据(比如医学图像、卫星图、水下照片),你需要重新收集大量这种图像并标注,再重新训练或微调模型。
SAM 的做法:不需要 。因为它在训练时学的不是"认出某类物体",而是"理解提示并生成掩码"这个通用能力。所以:
- 训练时只用普通照片 + 点/框/掩码提示
- 测试时直接扔给它一张从未见过的类型的图像(比如水墨画、显微镜细胞图、鱼眼镜头驾驶图),并给一个提示(比如点一下某个物体),它就能输出合理的掩码。
引言
在互联网规模的数据集上预训练的大语言模型,凭借强大的零样本和少样本泛化能力,正在革新自然语言处理 10。这些"基础模型"8 能够泛化到训练时未曾见过的任务和数据分布。这种能力通常通过提示工程实现:使用手工设计的文本来提示语言模型,为当前任务生成有效的文本响应。当这些模型在来自互联网的海量文本语料上扩展并训练后,它们的零样本和少样本性能出奇地好------在某些情况下甚至能与微调后的模型相媲美 10, 21。实证趋势表明,这种能力会随着模型规模、数据集大小和总训练计算量的增加而提升 56, 10, 21, 51。
基础模型在计算机视觉领域也有所探索,尽管程度较低。最突出的例子可能是将配对的文本和图像从网络上对齐。例如,CLIP 82 和 ALIGN 55 使用对比学习来训练文本编码器和图像编码器,使两种模态对齐。一旦训练完成,通过设计的文本提示,就能实现对新颖视觉概念和数据分布的零样本泛化。这类编码器还可以与其他模块有效组合,以支持下游任务,例如图像生成(如 DALL·E 83)。尽管视觉和语言编码器已取得很大进展,但计算机视觉包含的范围远不止于此,而且其中许多问题并不存在充足的训练数据。
在这项工作中,我们的目标是构建一个用于图像分割 的基础模型。也就是说,我们试图开发一个可提示的模型,并在一个广泛的数据集上,通过能够实现强大泛化能力的任务对其进行预训练。借助这个模型,我们的目标是利用提示工程,在新数据分布上解决一系列下游分割问题。
这一计划的成功取决于三个组成部分:任务、模型和数据。为了发展它们,我们针对图像分割提出以下问题:
- 什么样的任务能够实现零样本泛化?
- 相应的模型架构是什么?
- 哪些数据能够支持这一任务和模型?
这些问题相互交织,需要一个全面的解决方案。我们首先定义了一个可提示的分割任务 ,它足够通用,既能提供一个强大的预训练目标,又能支持广泛的下游应用。这个任务需要一个支持灵活提示的模型,并且在被提示时能够实时输出分割掩码,以实现交互式使用。为了训练我们的模型,我们需要一个多样化、大规模的数据源。不幸的是,分割任务没有互联网规模的数据源可用;为了解决这个问题,我们构建了一个"数据引擎",即我们迭代地使用高效的模型来协助数据收集,然后利用新收集的数据来改进模型。接下来我们将介绍这三个相互关联的组件,随后是我们创建的数据集,以及证明我们方法有效性的实验。
任务(§2)。 在自然语言处理以及最近的计算机视觉中,基础模型是一项有前景的发展,它们通常通过使用"提示"技术,能够对新数据集和新任务进行零样本和少样本学习。受此启发,我们提出了可提示的分割任务,其目标是:给定任意分割提示,返回一个有效的分割掩码(见图1a)。提示只是指定图像中要分割的内容,例如,提示可以包含标识物体的空间信息或文本信息。有效输出掩码的要求意味着,即使提示是模糊的、可能指向多个物体(例如,衬衫上的一个点可能指向衬衫,也可能指向穿着它的人),输出也应该至少是其中某一个物体的合理掩码。我们将可提示的分割任务同时用作预训练目标,并通过提示工程来解决通用的下游分割任务。
模型(§3)。 可提示的分割任务和实际应用的目标对模型架构施加了约束。具体来说,模型必须支持灵活的提示,需要以摊销的实时速度计算掩码以允许交互使用,并且必须能够感知歧义。令人惊讶的是,我们发现一个简单的设计就满足了所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器对提示进行嵌入,然后两种信息源在一个轻量级的掩码解码器中结合,以预测分割掩码。我们将这个模型称为分割一切模型(SAM)(见图1b)。通过将SAM分离为图像编码器和快速的提示编码器/掩码解码器,相同的图像嵌入可以在不同提示下被重用(其成本被摊销)。给定一个图像嵌入,提示编码器和掩码解码器可以在网络浏览器中约50毫秒内从提示预测出掩码。我们专注于点、框和掩码提示,并展示了自由形式文本提示的初步结果。为了使SAM能够感知歧义,我们将其设计为针对单个提示预测多个掩码,从而使SAM能够自然地处理歧义,例如衬衫与人的例子。
数据引擎(§4)。 为了实现对新的数据分布有强大的泛化能力,我们发现有必要在一个庞大且多样化的掩码集合上训练SAM,这超越了任何现有的分割数据集。虽然基础模型的典型方法是直接从网上获取数据 82,但掩码本身并不丰富,因此我们需要另一种策略。我们的解决方案是构建一个"数据引擎",即我们让模型参与数据集标注的循环中,共同发展(见图1c)。我们的数据引擎包含三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM协助标注员标注掩码,类似于经典的交互式分割设置。在第二阶段,SAM可以通过在可能的物体位置处进行提示来自动生成一部分物体的掩码,而标注员则专注于标注剩余的物体,这有助于增加掩码的多样性。在最后一个阶段,我们用一个规则的前景点网格来提示SAM,平均每张图像产生约100个高质量的掩码。
数据集(§5)。 我们的最终数据集 SA-1B,包含了来自1100万张经授权且保护隐私的图像的超过10亿个掩码(见图2)。SA-1B完全使用我们数据引擎的最后一个阶段自动收集,其掩码数量是任何现有分割数据集的400倍 66, 44, 117, 60,并且我们经过广泛验证,这些掩码具有高质量和多样性。除了用于训练SAM使其健壮和通用之外,我们希望SA-1B能成为旨在构建新基础模型的研究的宝贵资源。
负责任的人工智能(§6)。 我们研究并报告了使用SA-1B和SAM时可能存在的公平性问题和偏见。SA-1B中的图像覆盖了地理和经济上多样化的国家,我们发现SAM在不同人群上的表现相似。我们希望这能使得我们的工作在现实世界的使用案例中更加公平。我们在附录中提供了模型卡和数据卡。
实验(§7)。 我们对SAM进行了广泛评估。首先,使用一个包含23个分割数据集的多样化新套件,我们发现SAM能够从一个前景点生成高质量的掩码,其质量通常仅略低于人工标注的真实掩码。其次,我们在多种下游任务上,使用提示工程进行零样本迁移协议测试,发现了一致且强劲的定量和定性结果,这些任务包括边缘检测、物体候选框生成、实例分割,以及对文本到掩码预测的初步探索。这些结果表明,SAM可以开箱即用地结合提示工程,在SAM训练数据之外的物体和图像分布上解决多种任务。尽管如此,仍存在改进空间,我们将在§8中讨论。
发布。 我们将为研究目的发布SA-1B数据集,并在https://segment-anything.com 上以宽松的开源许可(Apache 2.0)提供SAM。我们还将通过在线演示来展示SAM的能力。
理解1
这类编码器还可以与其他模块有效组合,以支持下游任务,例如图像生成(如 DALL·E 83)。
像 CLIP 或 ALIGN 这样的视觉‑语言编码器,本身并不直接完成图像生成、目标检测等具体任务,但它们输出的文本和图像特征在语义上是对齐的 ,因此可以作为"通用组件" 很方便地嵌入到其他模型中,帮助完成更复杂的任务。
以 DALL·E 为例:
- DALL·E 是一个文本生成图像的系统。
- 它内部使用了 CLIP 的文本编码器:先将用户输入的文本(如"一只穿西装的柴犬")转换成特征向量。
- 然后,DALL·E 的生成模块(另一个模型)根据这个特征向量逐步合成对应的图像。
- 如果没有 CLIP 这种现成的高质量编码器,DALL·E 就需要从头训练一个文本理解模块,成本高、数据需求大。
理解2
这一计划的成功取决于三个组成部分:任务、模型和数据。为了发展它们,我们针对图像分割提出以下问题:
- 什么样的任务能够实现零样本泛化?
- 相应的模型架构是什么?
- 哪些数据能够支持这一任务和模型?
- 任务:定义了"可提示的分割任务"------给任意提示(点、框、文字等),模型输出一个有效掩码。这个任务足够通用,既能用作预训练目标,又能直接用来解决各种下游问题(通过提示工程)。
- 模型:设计了 SAM 架构------图像编码器 + 提示编码器 + 轻量解码器,支持实时交互。
- 数据 :遇到了难题------分割任务没有现成的互联网规模的数据可用(不像自然语言文本那样到处都是)。所以他们自己造了一个"数据引擎":
- → 得到一批新数据 → 用新数据改进模型 → 再用更强的模型去标更多数据......如此循环迭代,最终得到超大规模的分割数据集(SA-1B)。
理解3
我们首先定义了一个可提示的分割任务,它足够通用,既能提供一个强大的预训练目标,又能支持广泛的下游应用。
- 作为预训练目标:在训练时,模拟各种提示(点、框等),让 SAM 学会对任何提示都能产出有效掩码。
- 作为下游任务的通用解法 :你不需要为每个新任务重新训练模型。
例如:想做"实例分割",就先用一个目标检测器给出框,然后把框作为提示喂给 SAM,它直接输出分割结果。
理解4
为了完成前面说的"可提示分割任务",模型必须满足三个要求:
- 支持灵活的提示
提示可以是点、框、文字、另一个掩码......模型都得能处理。 - 摊销实时速度
"摊销"意思是:图像编码一次性算好,之后换不同提示时不需要重新计算图像部分,只跑轻量部分。这样整体响应很快(50毫秒内),能实时交互。 - 能感知歧义
一个提示可能对应多个物体(点一下衬衫,可能是衬衫,也可能是整个人),模型不能只给一个平均结果,而要能给出多个合理的选项。
简单设计:把 SAM 分成三个模块:
- 图像编码器(重,只跑一次):把整张图变成一个"图像嵌入"(特征图)。
- 提示编码器(轻):把用户给的提示(点/框/文字)也转成嵌入向量。
- 掩码解码器(轻):结合图像嵌入和提示嵌入,快速预测出分割掩码。
50毫秒内:在浏览器里,给一个预先算好的图像嵌入,然后你点一个点,提示编码器+掩码解码器只需约 50毫秒 就能返回掩码。这足够流畅地支持人类实时交互。
如何处理模糊提示:
- 传统方法:一个提示只输出一个掩码,模糊时就会"平均"出奇怪结果。
- SAM 的做法:对一个提示,同时预测多个掩码 (默认3个)。
比如你点一下衬衫,SAM 可能输出:
① 衬衫、② 穿衬衫的人、③ 人的上半身。
然后模型还会给每个掩码一个置信度分数,让你选择。
理解5
为什么需要数据引擎?
- 像 CLIP 这样的基础模型可以直接从网上抓取图文对来训练。
- 但分割掩码不一样:网上几乎没有现成的。画一个掩码需要人工精细标注,成本高、速度慢。
- 为了训练出能"分割一切"的模型,他们需要比现有数据集大几百倍的掩码数据。所以必须自己想办法高效生产。
数据引擎的三个阶段:
第一阶段:辅助手动
- 人工标注员使用一个由 SAM 驱动的交互式工具:点几下前景/背景,SAM 实时生成掩码,标注员再修修补补。
- 模型帮助人快速度画出掩码,人则提供高质量监督信号。
- 这个阶段产出的是 人工精标 的掩码,用来训练初始版 SAM。
第二阶段:半自动
- 模型已经变强了一些。先用 SAM 自动预测出一些"有把握"的物体掩码,预填到图像上。
- 标注员不需要再标这些物体,而是集中精力去标 模型没找到或没标好的物体。
- 这样每张图能标出的物体更多、更多样(尤其是那些小物体、不显眼的物体)。
第三阶段:全自动
- 模型已经很强,并且能处理模糊提示(一个点输出多个可能的掩码)。
- 他们在图像上铺一个 规则的前景点网格(比如 32×32 个点),每个点都让 SAM 生成一组掩码。
- 然后通过置信度筛选、去重等后处理,平均每张图得到 约 100 个高质量的掩码。
- SA‑1B 数据集中 99.1% 的掩码都来自这个全自动阶段。
图一
图1:我们旨在通过引入三个相互关联的组件来构建一个分割基础模型:一个可提示式分割任务、一个能够支持数据标注并通过提示工程实现零样本迁移至多种任务的分割模型(SAM),以及一个用于收集SA-1B数据集(包含超过10亿个掩码)的数据引擎。

SAM 的内部架构:是一个 Transformer-based 的三组件设计:
- 图像编码器(image encoder):先把输入图像转换成高维特征表示,提取图像的语义和结构信息。这部分是预训练的大模型(比如 MAE 预训练的 ViT),计算量较大,但
- 提示编码器(prompt encoder):把用户输入的各种提示(点、框、文本、掩码)转换成模型能理解的特征向量,和图像特征做融合,告诉模型 "要关注图像的哪部分"。
- 轻量级掩码解码器(lightweight mask decoder):接收图像特征和提示特征,通过注意力机制快速生成最终的分割掩码。这部分是轻量级的,计算速度极快,所以用户换不同提示时,只需要重新跑解码器,就能实时得到新的分割结果,兼顾了效果和交互速度。

分割一切任务
我们从 NLP 中汲取灵感,在 NLP 中,下一个词元预测 任务被用于基础模型的预训练,并通过提示工程来解决各种下游任务 10。为了构建一个用于分割的基础模型,我们旨在定义一个具有类似能力的任务。
任务。 我们首先将 NLP 中的提示概念迁移到分割领域。在分割中,提示可以是一组前景/背景点、一个粗略的框或掩码、自由形式的文本,或者泛指任何指示图像中要分割什么的信息。那么,可提示的分割任务 就是:给定任意提示,返回一个有效的分割掩码。"有效"掩码的要求很简单:即使提示是模糊的、可能指向多个物体(例如前面提到的衬衫 vs. 人的例子,另见图 3),输出也应该至少是其中某一个物体的合理掩码。这个要求类似于期望一个语言模型在面对模糊提示时能够输出一个连贯的响应。我们选择这个任务,是因为它能导出一个自然的预训练算法,以及一种通过提示实现零样本迁移到下游分割任务的通用方法。
预训练。 可提示的分割任务提示了一种自然的预训练算法:对每个训练样本模拟一系列提示(例如点、框、掩码),并将模型的掩码预测与真实掩码进行比较。我们借鉴了交互式分割的方法 109, 70,但与之不同的是:交互式分割的目标是在足够的用户输入后最终预测出一个有效掩码,而我们的目标是对于任何提示(即使是模糊的)始终预测出一个有效掩码。这确保了预训练模型在涉及模糊性的使用场景中(包括我们的数据引擎 §4 所需的自动标注)是有效的。我们注意到,在这个任务上取得良好表现是具有挑战性的,需要专门的模型设计和训练损失选择,我们将在 §3 中讨论。
零样本迁移。 直观地说,我们的预训练任务赋予模型在推理时对任意提示做出适当响应的能力,因此下游任务可以通过设计合适的提示来解决。例如,如果你有一个猫的边界框检测器,那么只需将该检测器输出的框作为提示提供给我们的模型,就可以解决猫的实例分割问题。总的来说,大量实际的分割任务都可以被转化为提示的形式。除了自动数据集标注之外,我们还在 §7 的实验中探索了五个不同的示例任务。
相关工作。 分割是一个广阔的领域:包括交互式分割 57, 109、边缘检测 3、超像素分割 85、物体候选框生成 2、前景分割 94、语义分割 90、实例分割 66、全景分割 59 等等。我们提出的可提示分割任务的目标是,产生一个具有广泛能力的模型,能够通过提示工程适应许多(尽管不是全部)现有和新的分割任务。这种能力是任务泛化的一种形式 26。需要注意的是,这与之前关于多任务分割系统的研究不同。在多任务系统中,单个模型执行一组固定的任务(例如联合语义、实例和全景分割 114, 19, 54),其训练和测试任务是相同的。我们工作的一个重要区别在于:一个为可提示分割而训练的模型,可以在推理时通过作为更大系统的一个组件来执行一个新的、不同的任务。例如,为了实现实例分割,可以将一个可提示的分割模型与一个现有的物体检测器结合起来。
讨论。 提示和组合是强大的工具,它们使单个模型能够以可扩展的方式被使用,甚至可能完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如 CLIP 82 作为 DALL·E 83 图像生成系统中的文本-图像对齐组件。我们预计,由提示工程等技术驱动的可组合系统设计,将比那些专门为固定任务集训练的系统支持更广泛的应用。通过组合的视角来比较可提示分割和交互式分割也很有趣:交互式分割模型主要是为人类用户设计的,而一个为可提示分割训练的模型也可以被组合进一个更大的算法系统中------我们将在后文中展示这一点。
理解1
SAM 借鉴了 NLP(自然语言处理)中基础模型的成功经验,试图在图像分割领域复现类似的思路。
NLP 中的"下一个词元预测"任务:像 GPT 这样的语言模型,在预训练时做的核心任务是:给定一段话的前面部分,预测下一个词是什么(例如:"今天天气真" → 预测"好")。
预训练后怎么解决各种下游任务 :训练好的模型不需要再针对每个任务重新训练,只需要用提示来引导。例如:
- 翻译任务:提示 "Translate to English: 你好" → 模型输出 "Hello"
- 问答任务:提示 "Q: 法国的首都是哪里? A:" → 模型输出 "巴黎"
这就是 "通过提示工程解决下游任务"。
SAM 希望在图像分割 领域定义一个对应的预训练任务 ,这个任务要足够通用,让模型在大量数据上学会"分割的基本能力"。然后,当遇到新的分割任务(比如实例分割、边缘检测、物体候选框生成等)时,不需要重新训练,只要设计合适的提示(点、框、文字等),SAM 就能直接完成任务。
理解2
可提示的分割任务,为什么选这个任务?
a) 能导出自然的预训练算法:在训练时,可以模拟各种提示(随机生成点、框等),让模型预测掩码,然后和真实掩码比较,计算损失。
b) 能通过提示实现零样本迁移:预训练完成后,对于新的下游任务(比如实例分割、边缘检测),你不需要重新训练模型。
只需要设计合适的提示,SAM 就能直接完成任务。
例如:要分割所有猫,只需要有一个猫的检测器给出框,然后把框作为提示给 SAM 即可。
理解3
SAM 的预训练算法:
- 模拟一个交互过程:对每张训练图片上的每个物体,随机生成一系列"提示"(比如先点一个点,再画一个框,或者给一个粗略掩码)。
- 每次给一个提示,就让 SAM 输出一个掩码,然后把这个掩码和真实的、人工标注的掩码进行比较,计算误差(损失)。
- 通过大量这样的训练,SAM 学会了对各种提示做出反应。
因为 SAM 后面的数据引擎 需要模型能够自动标注(第三阶段全自动铺点生成掩码)。
在自动标注时,没有用户在旁边反复修正,模型必须自己处理模糊性------比如一个点同时落在"人"和"衬衫"上,模型必须输出至少其中一个的合理掩码。
所以,预训练时就必须训练模型具备这种"一次提示就要有效"的能力。
- 模糊提示 → 多个正确答案 → 模型不能只学一个平均值,而要能输出多个不同且都合理的掩码。
理解4
SAM 的"零样本迁移"能力来源于它的预训练任务 ------可提示的分割。这个任务教会了模型一个通用技能:你给我任何提示,我就给你一个有效掩码 。
因此,对于任何新的分割类任务,只要你能把该任务转换成"给出一个提示",SAM 就能直接处理。
很多实际的分割任务都可以被包装成"提示"的形式:
- 边缘检测 → 用点阵提示 SAM,然后把输出叠加成边缘图
- 物体候选框生成 → 用密集的点网格提示 SAM,输出所有可能的物体掩码
- 文本到掩码 → 用文字作为提示
理解5
SAM 自己只做"根据提示输出掩码",但它可以被组合进更大的系统(例如实例分割系统、视频追踪系统、图像编辑系统等),完成更复杂的任务。
交互式分割是为"人机交互"设计的,而可提示分割在保留人机交互能力的同时,还能成为自动化系统的一部分。
分割一切模型
接下来我们描述用于可提示分割的分割一切模型(SAM) 。SAM 包含三个组件,如图 4 所示:一个图像编码器 、一个灵活的提示编码器 ,以及一个快速的掩码解码器。我们基于 Transformer 视觉模型 14, 33, 20, 62 构建,并在(摊销)实时性能方面做了特定的权衡。我们在此对这些组件进行高层级描述,细节见 §A。
图像编码器。 出于可扩展性和强大预训练方法的考虑,我们使用了一个 MAE 47 预训练的 Vision Transformer(ViT)33,并对其做了最小程度的适配以处理高分辨率输入 62。图像编码器每张图像只运行一次,并且可以在对模型进行提示之前完成。
提示编码器。 我们考虑两类提示:稀疏 提示(点、框、文本)和稠密提示(掩码)。对于点和框,我们使用位置编码 95 加上每种提示类型对应的可学习嵌入来表示;对于自由形式的文本,我们使用一个现成的 CLIP 文本编码器 82。稠密提示(即掩码)通过卷积进行嵌入,并与图像嵌入逐元素相加。
掩码解码器。 掩码解码器将图像嵌入、提示嵌入以及一个输出词元高效地映射为一个掩码。该设计受 14, 20 启发,采用了改进的 Transformer 解码器块 103,后接一个动态掩码预测头。我们改进的解码器块使用提示自注意力和两个方向的交叉注意力(从提示到图像嵌入,以及反向)来更新所有嵌入。运行两个块之后,我们对图像嵌入进行上采样,同时一个 MLP 将输出词元映射为一个动态线性分类器,该分类器随后计算每个图像位置的掩码前景概率。
解决歧义。 如果只有一个输出,当给定一个模糊的提示时,模型会对多个有效掩码求平均。为了解决这个问题,我们修改了模型,使其针对单个提示预测多个输出掩码(见图 3)。我们发现 3 个掩码输出足以应对大多数常见情况(嵌套掩码通常最多三层:整体、部分和子部分)。在训练过程中,我们只回传这些掩码中损失最小的那一个 15, 45, 64。为了对掩码进行排序,模型会为每个掩码预测一个置信度分数(即估计的 IoU)。
效率。 整体模型设计很大程度上是出于效率考虑。给定预计算好的图像嵌入,提示编码器和掩码解码器可以在网络浏览器中、在 CPU 上、以约 50 毫秒 的时间运行。这种运行时性能实现了对模型的无缝、实时交互提示。
损失与训练。 我们使用 14 中采用的 focal loss 65 和 dice loss 73 的线性组合来监督掩码预测。我们使用混合的几何提示(文本提示见 §7.5)来训练可提示分割任务。遵循 92, 37 的方法,我们为每个掩码随机采样 11 轮提示来模拟交互式设置,从而使 SAM 能够无缝集成到我们的数据引擎中。
理解1
解码器接收三样东西:
- 图像嵌入:图像编码器提前算好的整张图的特征图(一个低分辨率、高语义的表示)。
- 提示嵌入:提示编码器把用户的点、框等提示转成的向量。
- 输出词元:一个特殊的占位符,类似于 GPT 里的"开始生成" token,用来承载最终输出的信息。
使用了改进的 Transformer 解码器块 ,,共 两个块,每个块里做了三种注意力操作:
- 提示自注意力:让不同提示之间互相"看"对方,理解它们之间的关系(比如多个点之间互相补充)。
- 提示到图像的交叉注意力:提示去"看"图像特征,找出提示对应的物体区域。
- 图像到提示的交叉注意力:图像特征去"看"提示,让图像知道提示强调了什么。
通过这两种交叉注意力,提示和图像的信息深度融合,互相更新。
生成掩码:
- 运行完两个块之后,先把图像嵌入上采样(放大分辨率),让它恢复到更精细的尺寸,便于输出高精度的掩码。
- 同时,用一个 MLP(多层感知机) 把输出词元 映射成一个动态线性分类器(简单说就是一组权重)。
- 这个动态分类器对着上采样后的图像嵌入,在每个像素位置上计算一个分数,表示"这个像素属于前景(掩码内部)的概率"。
- 最后,根据所有像素的概率,得到一个完整的分割掩码。
图三
图3:每列显示由SAM从单一模糊点提示(绿色圆圈)生成的3个有效掩模。

图四
图4:Segment Anything模型(SAM)概述。该高性能图像编码器可生成图像嵌入向量,该向量可通过多种输入提示高效查询,以平摊后的实时速度生成物体掩码。对于对应多个物体的模糊提示,SAM可输出多个有效掩码及其对应的置信度分数。

以平摊后的实时速度生成物体掩码:因为编码器的计算成本被平摊到了后续所有交互里(只算一次成本,后续每次交互几乎不花成本),所以整体能做到 "实时" 生成掩码,用户点一下就能立刻看到分割结果,不用等很久。

分割一切数据引擎
由于互联网上缺乏大量的分割掩码,我们构建了一个数据引擎 ,以支持收集包含 11 亿个掩码的数据集 SA‑1B。该数据引擎包含三个阶段:(1) 模型辅助的手动标注阶段 ,(2) 半自动阶段 (混合使用自动预测的掩码和模型辅助标注),(3) 全自动阶段(模型无需标注员输入即可生成掩码)。下面我们详细介绍每个阶段。
辅助手动阶段。 在第一阶段,类似于经典的交互式分割,一组专业标注员使用由 SAM 驱动的基于浏览器的交互式分割工具,通过点击前景/背景物体点来标注掩码。掩码可以使用像素精确的"画笔"和"橡皮擦"工具进行细化。我们的模型辅助标注直接在浏览器中实时运行(利用预计算的图像嵌入),实现了真正的交互体验。我们没有对标注物体施加语义约束,标注员可以自由标注"stuff"和"things"1。我们建议标注员标注他们能够命名或描述的物体,但没有收集这些名称或描述。标注员被要求按显著顺序标注物体,并且一旦某个掩码的标注时间超过 30 秒,就鼓励他们继续标注下一张图像。
在此阶段开始时,SAM 使用常见的公共分割数据集进行训练。当积累了足够的标注数据后,我们仅使用新标注的掩码重新训练 SAM。随着收集到的掩码越来越多,图像编码器从 ViT‑B 扩展到 ViT‑H,其他架构细节也在不断演进;我们总共重新训练了 6 次模型。随着模型改进,每个掩码的平均标注时间从 34 秒减少到 14 秒。需要注意的是,14 秒比 COCO 66 的掩码标注快 6.5 倍,仅比使用极端点的边界框标注慢 2 倍 76, 71。随着 SAM 的改进,每张图像的平均掩码数量从 20 个增加到 44 个。总体而言,我们在本阶段从 12 万张图像中收集了 430 万个掩码。
半自动阶段。 在这一阶段,我们旨在增加掩码的多样性,以提升模型"分割一切"的能力。为了让标注员专注于不那么显著的物体,我们首先自动检测出置信度高的掩码。然后,我们向标注员展示预填了这些掩码的图像,并要求他们标注所有其他未标注的物体。为了检测置信度高的掩码,我们在第一阶段的所有掩码上训练了一个边界框检测器 84,使用通用的"物体"类别。在本阶段,我们又在 18 万张图像中收集了额外的 590 万个掩码(总计 1020 万个掩码)。与第一阶段一样,我们定期使用新收集的数据重新训练模型(共 5 次)。由于这些物体更具挑战性,每个掩码的平均标注时间回升到 34 秒(不包括自动生成的掩码)。每张图像的平均掩码数量从 44 个增加到 72 个(包括自动掩码)。
全自动阶段。 在最后阶段,标注完全自动化。这得益于我们模型的两大改进。首先,在该阶段开始时,我们已经收集到足够多的掩码(包括前一阶段的多样化掩码),模型得到了极大的提升。其次,到这一阶段我们已经开发出能够感知歧义的模型 ,这使得我们即使在模糊情况下也能预测有效的掩码。具体来说,我们用一个 32×32 的规则点网格提示模型,对每个点预测一组可能对应有效物体的掩码。有了歧义感知模型,如果一个点落在某个部分或子部分上,模型将返回子部分、部分和整体物体。我们使用模型的 IoU 预测模块来选择置信度高的掩码;此外,我们仅识别并选择稳定的掩码(如果一个掩码在阈值设为 0.5‑δ 和 0.5+δ 时得到的二值掩码相似,则认为它是稳定的)。最后,在选出置信度高且稳定的掩码后,我们应用非极大值抑制(NMS)来过滤重复的掩码。为了进一步提升小掩码的质量,我们还处理了多个重叠的放大图像裁剪块。关于该阶段的更多细节,请参见 §B。我们将全自动掩码生成应用于数据集中的所有 1100 万张图像,共产生了 11 亿个高质量的掩码。接下来我们将描述并分析由此产生的数据集 SA‑1B
第一阶段:辅助手动(模型帮人标)
- 工具:标注员用浏览器里的交互工具,点几下前景/背景,SAM 实时生成掩码,还能用画笔/橡皮擦精修。
- 结果 :每张图平均标出 44 个掩码 ,每个掩码平均耗时 14 秒(比传统方法快 6.5 倍)。
- 数据量 :12 万张图,430 万个掩码。
- 迭代:模型随着数据增加从 ViT-B 升级到 ViT-H,共重训 6 次。
第二阶段:半自动(模型先标一部分,人补剩下的)
- 目的 :增加掩码的多样性,让模型学会分割更不起眼、更难的物体。
- 做法 :先用一个通用物体检测器自动标出"有把握"的掩码(预填在图上),标注员只需要去标那些没被自动标出来的物体。
- 结果 :每张图平均掩码数从 44 增加到 72 个(包括自动生成的),但人工标每个掩码的时间回升到 34 秒(因为剩下的物体更难)。
- 数据量 :18 万张图,新增 590 万个掩码,累计 1020 万个。
- 迭代:重训模型 5 次。
第三阶段:全自动(模型自己搞定一切)
- 前提 :模型已经足够强,并且具备了处理模糊提示的能力(一个点可以输出多个可能的掩码,如整体、部分、子部分)。
- 做法 :在每张图上铺一个 32×32 的规则点网格 (共 1024 个点),每个点让 SAM 生成一组掩码。然后:
- 用 IoU 预测分数筛选出高置信度的掩码
- 用"稳定性"筛选(阈值微调后掩码变化很小的才保留)
- 用 NMS 去重
- 还通过多次放大裁剪来提升小物体质量
- 结果 :平均每张图得到 约 100 个高质量掩码。
- 最终数据量 :应用于全部 1100 万张图 ,共生成 11 亿个掩码,其中 99.1% 来自这个全自动阶段。