SAM: 一切皆可分割
摘要
我们介绍了Segment Anything (SA) 项目:这是一个新的任务、模型和数据集,用于图像分割。通过在数据收集循环中使用我们高效的模型,我们建立了迄今为止最大的分割数据集(远远超过以往),该数据集包含超过10亿个掩码和1100万张符合版权和隐私保护要求的图像。该模型设计和训练的目标是支持提示(promptable),因此它可以zero-shot地转移到新的图像分布和任务上。我们在众多任务上评估了它的能力,发现其zero-shot性能令人印象深刻——通常与先前的完全监督学习结果相竞争,甚至在某些情况下表现更优。我们将在https://segment-anything.com上发布Segment Anything Model (SAM) 和相应的数据集(SA-1B),其中包含10亿个掩码和1100万张图像,旨在促进计算机视觉领域基础模型的研究。
1. 引言
预先训练的海量语言模型正在通过强大的zero-shot和少-shot泛化能力,彻底改变自然语言处理(NLP)领域[10]。这些“基础模型” [8] 能够泛化到训练过程中未见过的任务和数据分布。这种能力通常通过提示工程实现,其中手工设计的文本用于提示语言模型生成有效的文本响应。通过对大量来自网络的文本语料库进行训练,这些模型的zero-shot和少-shot性能与(甚至在某些情况下超过)微调模型的性能相比,表现出惊人的竞争力[10, 21]。实证趋势表明,随着模型规模、数据集大小和训练计算量的增加,这种行为得到了进一步改善。
基础模型在计算机视觉中的研究也在进行,尽管程度较轻。也许最著名的例子是配对的文本和图像学习。例如,CLIP [82] 和 ALIGN [55] 使用对比学习训练文本和图像编码器,以对齐这两种模态。训练完成后,精心设计的文本提示可以使模型实现对新视觉概念和数据分布的zero-shot泛化。这类编码器还能够与其他模块有效组合,从而实现下游任务,如图像生成(例如,DALL·E [83])。尽管在视觉和语言编码器方面取得了很大进展,计算机视觉领域仍然包括许多超出这一范围的问题,并且对于许多问题来说,充足的训练数据并不存在。
在这项工作中,我们的目标是为图像分割构建一个基础模型。也就是说,我们希望开发一个可提示的模型,并在一个广泛的数据集上进行预训练,使用一个能够实现强大泛化能力的任务。通过该模型,我们旨在通过提示工程解决一系列下游的分割问题,适用于新的数据分布。
实现这一计划的成功依赖于三个组成部分:任务、模型和数据。为了开发它们,我们解决了关于图像分割的以下问题:
- 什么任务能够实现zero-shot泛化?
- 对应的模型架构是什么?
- 什么数据能够支撑这个任务和模型?
这些问题是相互交织的,需要一个全面的解决方案。我们首先定义了一个可提示的分割任务,这个任务足够通用,可以提供强大的预训练目标,并且支持广泛的下游应用。这个任务要求模型能够支持灵活的提示,并且在提示时实时输出分割掩码,以便进行交互式使用。为了训练我们的模型,我们需要一个多样化的大规模数据源。不幸的是,目前没有适用于分割的大规模数据源;为了解决这个问题,我们构建了一个“数据引擎”,即在数据收集过程中使用我们的高效模型,并使用新收集的数据来改进模型。接下来,我们将介绍每个互相联系的组件,以及我们创建的数据集和展示我们方法有效性的实验。
任务(§2)
在NLP以及近年来计算机视觉中,基础模型是一项有前景的开发,能够通过“提示”技术进行zero-shot和少-shot学习,以应对新的数据集和任务。受到这一研究方向的启发,我们提出了可提示的分割任务,目标是在给定任何分割提示的情况下,返回一个有效的分割掩码(见图1a)。提示只是指定在图像中分割的对象,例如,提示可以包含识别物体的空间或文本信息。有效输出掩码的要求意味着,即使提示模糊且可能指代多个对象(例如,衬衫上的一点可能指的是衬衫或穿着它的人),输出仍然应该是这些对象中至少一个合理的掩码。我们将可提示的分割任务用作预训练目标,并通过提示工程解决一般的下游分割任务。
模型(§3)
可提示的分割任务和现实世界使用的目标对模型架构提出了约束。具体而言,模型必须支持灵活的提示,需要能够在实时的负担下计算掩码,以允许交互式使用,并且必须能够处理歧义。令人惊讶的是,我们发现一个简单的设计能够满足所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器对提示进行嵌入,接着两者的信息源通过一个轻量级的掩码解码器结合,预测分割掩码。我们将这个模型称为Segment Anything Model,或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能成为用于构建新基础模型的有价值的资源。
负责任的AI(§6)
我们研究并报告了使用SA-1B和SAM时可能存在的公平性问题和偏差。SA-1B中的图像涵盖了地理和经济上多样的国家,我们发现SAM在不同人群中的表现相似。我们希望这使得我们的工作在实际应用中更加公平。我们在附录中提供了模型和数据集卡片。
实验(§7)
我们广泛评估了SAM。首先,使用一套多样化的新分割数据集(共23个数据集),我们发现SAM能够从一个前景点生成高质量的掩码,通常仅略低于手动标注的地面真值。其次,我们在多种下游任务中,使用zero-shot转移协议和提示工程,发现SAM始终能够获得强劲的定量和定性结果,包括边缘检测、目标提议生成、实例分割,以及初步的文本到掩码预测探索。这些结果表明,SAM可以通过提示工程直接应用,解决涉及物体和图像分布的各种任务,超出SAM的训练数据范围。尽管如此,仍有改进空间,我们在§8中进行了讨论。
发布
我们正在发布SA-1B数据集用于研究目的,并通过开放许可(Apache 2.0)在 [https://segment-anything.com](https://segment-anything.com/
) 上提供SAM。我们还通过在线演示展示了SAM的能力。