Skip to Content

论文链接:https://arxiv.org/pdf/2304.02643 

代码链接:https://github.com/facebookresearch/segment-anything 

摘要

我们推出 Segment Anything (SA) 项目:一个全新的图像分割任务、模型和数据集。我们利用高效的模型,在一个数据采集循环中构建了迄今为止最大的分割数据集(远超其他项目),其中包含超过 10 亿个掩码,覆盖1100万张已授权且尊重隐私的图像。该模型经过精心设计和训练,具有良好的可提示性,能够从零样本学习迁移到新的图像分布和任务。我们在众多任务上评估了该模型的性能,发现其零样本学习性能令人印象深刻——通常能够与之前的全监督学习结果相媲美,甚至更胜一筹。我们将在 https://segment-anything.com  发布“Segment Anything Model (SAM)”及其对应的包含10亿个掩码和1100万张图像的数据集(SA-1B),以促进计算机视觉基础模型的研究。

1.介绍

在网络规模数据集上预训练的大语言模型凭借其强大的零样本和小样本泛化能力,正在革新自然语言处理(NLP)领域。这些“基础模型” 能够泛化到训练过程中未曾遇到的任务和数据分布。这种能力通常通过提示工程来实现,即使用手工编写的文本来提示语言模型,使其为当前任务生成有效的文本响应。当使用来自网络的大量文本语料库进行扩展和训练时,这些模型的零样本和小样本性能与经过微调的模型相比,表现出奇地好(在某些情况下甚至不相上下)。经验趋势表明,这种性能会随着模型规模、数据集大小和总训练计算量的增加而提升。

基础模型在计算机视觉领域也有所探索,尽管程度较轻。其中最突出的例子或许是对齐来自网络的文本和图像对。例如,CLIP 和 ALIGN 使用对比学习来训练文本和图像编码器,从而对齐这两种模态。训练完成后,通过精心设计的文本提示,即可实现对新的视觉概念和数据分布的零样本泛化。此类编码器还可以与其他模块有效组合,以支持下游任务,例如图像生成(例如,DALL·E)。尽管视觉和语言编码器已取得长足进步,但计算机视觉涵盖的问题范围远不止于此,而且对于其中许多问题,缺乏充足的训练数据。

本文旨在构建图像分割的基础模型。具体而言,我们致力于开发一种可提示的模型,并使用能够实现强大泛化能力的任务,在广泛的数据集上对其进行预训练。借助该模型,我们计划利用提示工程技术,解决新数据分布上的一系列下游分割问题。

该方案的成功取决于三个要素:任务、模型和数据。为了构建这三个要素,我们探讨了以下关于图像分割的问题:

  1. 什么任务能够实现零样本泛化?
  2. 对应的模型架构是什么?
  3. 哪些数据可以为这项任务和模型提供支持?

这些问题相互交织,需要一个全面的解决方案。我们首先定义一个可提示的分割任务,该任务足够通用,能够提供强大的预训练目标,并支持广泛的下游应用。该任务需要一个支持灵活提示的模型,该模型能够在提示时实时输出分割掩码,从而实现交互式使用。为了训练我们的模型,我们需要一个多样化的大规模数据源。遗憾的是,目前尚无网络规模的分割数据源;为了解决这个问题,我们构建了一个“数据引擎”,即在利用我们高效的模型辅助数据收集和利用新收集的数据改进模型之间进行迭代。接下来,我们将介绍每个相互关联的组件,以及我们创建的数据集和验证我们方法有效性的实验。

Task (§2)。在自然语言处理(NLP)以及近年来兴起的计算机视觉领域,基础模型(Foundation Models)是一项极具前景的发展方向,它能够针对新的数据集和任务进行零样本和小样本学习,通常采用“提示”技术。受此启发,我们提出了可提示分割任务,其目标是在给定任意分割提示的情况下返回一个有效的分割掩码(见图 1a)。提示只需简单地指定图像中需要分割的内容,例如,提示可以包含用于识别对象的空间或文本信息。有效输出掩码的要求意味着,即使提示存在歧义,可能指向多个对象(例如,衬衫上的一个点可能指代衬衫本身,也可能指代穿着衬衫的人),输出也应该至少是其中一个对象的合理掩码。我们将可提示分割任务用作预训练目标,并通过提示工程来解决下游的通用分割任务。

Model (§3)。可提示分割任务及其在实际应用中的目标对模型架构提出了限制。具体而言,该模型必须支持灵活的提示,需要以摊销的实时性计算掩码以实现交互式使用,并且必须能够感知歧义。出乎意料的是,我们发现一个简单的设计即可满足所有三个限制:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将这两个信息源组合到一个轻量级的 MASK 解码器中,该解码器用于预测分割掩码。我们将此模型称为 Segment Anything Model,简称SAM(参见图1b)。通过将 SAM 拆分为图像编码器和快速提示编码器/mask 解码器,同一个图像嵌入可以复用(并摊销其成本)用于不同的提示。给定一个图像嵌入,提示编码器和mask 解码器可以在大约50毫秒内根据提示在Web浏览器中预测掩码。我们重点关注点、框和掩码提示,并展示了使用自由文本提示的初步结果。为了使 SAM 能够感知歧义,我们将其设计为针对单个提示预测多个掩码,从而使 SAM 能够自然地处理歧义,例如衬衫与人的例子。

Data engine (§4)。为了实现对新数据分布的强泛化能力,我们发现有必要在现有分割数据集之外的大型且多样化的掩码集上训练 SAM。虽然基础模型的典型方法是在线获取数据,但掩码并非自然丰富,因此我们需要一种替代策略。我们的解决方案是构建一个“数据引擎”,即我们与模型在数据集标注协同开发模型(见图 1c)。我们的数据引擎分为三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM 辅助标注者标注掩码,类似于经典的交互式分割设置。在第二阶段,通过提示可能的物体位置,SAM 可以自动为一部分物体生成掩码,而标注者则专注于标注剩余的物体,从而有助于增加掩码的多样性。在最后阶段,我们向 SAM 提供前景点的规则网格,平均每张图像生成约 100 个高质量掩码。

Dataset (§5)。我们最终的数据集 SA-1B 包含来自 1100 万张已获授权且保护隐私的图像的超过 10 亿个掩码(见图 2)。SA-1B 由我们数据引擎的最后阶段全自动采集,其掩码数量是任何现有分割数据集的 400 倍,并且经过我们大量的验证,这些掩码质量高且种类丰富。除了用于训练 SAM 以提高其鲁棒性和通用性之外,我们希望 SA-1B 还能成为构建新型基础模型的宝贵研究资源。

Responsible AI (§6)。我们研究并报告了使用 SA-1B 和 SAM 时可能存在的公平性问题和偏差。SA-1B 中的图像涵盖了地理和经济状况各异的国家,我们发现 SAM 在不同人群中的表现相似。我们希望这能使我们的工作在实际应用场景中更加公平。附录中提供了模型和数据集卡片。

Experiments (§7)。我们对SAM进行了全面的评估。首先,我们使用一套包含23个分割数据集的全新数据集,发现SAM能够从单个前景点生成高质量的掩码,其质量通常仅略低于人工标注的真实值。其次,我们采用零样本迁移协议,并结合提示工程,在各种下游任务中均取得了始终如一的优异定量和定性结果,这些任务包括边缘检测、目标候选区域生成、实例分割以及文本到掩码预测的初步探索。这些结果表明,SAM可以开箱即用,并结合提示工程,解决超出其训练数据范围的各种涉及目标和图像分布的任务。然而,正如我们在第8节中所讨论的,SAM仍有改进空间。

Release。我们发布 SA-1B 数据集用于研究目的,并以宽松的开源许可证(Apache 2.0)在 https://segment-anything.com  上提供 SAM。我们还通过在线演示展示了 SAM 的功能。

2.Segment Anything Task

我们从自然语言处理(NLP)中汲取灵感,在NLP中,下一个 token 预测任务用于基础模型的预训练,并通过提示工程解决各种下游任务。为了构建分割的基础模型,我们旨在定义一个具有类似能力的任务。

Task。我们首先将自然语言处理(NLP)中的提示工程移植到图像分割领域。提示可以是前景/背景点集、粗略的框或掩码、自由文本,或者更一般地说,任何提示图像分割目标的信息。因此,promptable segmentation task的目标是:给定任何提示,返回一个有效的分割掩码。“有效”掩码的要求意味着,即使提示含义模糊,可能指代多个对象(例如,衬衫与人的例子,参见图 3),输出也应该至少包含其中一个对象的合理掩码。这一要求类似于期望语言模型对含义模糊的提示做出连贯的回应。我们选择这项任务是因为它能够自然地导出预训练算法,并提供一种通过提示进行零样本迁移到下游分割任务的通用方法。

Pre-training。提示分割任务提出了一种自然的预训练算法,该算法为每个训练样本模拟一系列提示(例如,点、框、掩码),并将模型的掩码预测结果与真实值进行比较。我们从交互式分割中借鉴了这种方法,但与交互式分割旨在通过足够的用户输入最终预测出有效掩码不同,我们的目标是始终针对任何提示预测出有效的掩码,即使提示本身存在歧义。这确保了预训练模型在涉及歧义的应用场景中也能有效工作,包括我们数据引擎第4节要求的自动标注。我们注意到,要在此任务中取得好成绩极具挑战性,需要专门的建模和训练损失选择,我们将在第3节中讨论这些内容。

Zero-shot transfer。直观地说,我们的预训练任务赋予模型在推理时对任何提示做出适当响应的能力,因此可以通过设计合适的提示来解决下游任务。例如,如果有一个用于检测猫的边界框检测器,那么可以通过将该检测器的边界框输出作为提示提供给我们的模型来解决猫实例分割问题。一般来说,各种实际的分割任务都可以转化为提示。除了自动数据集标注之外,我们在第7节的实验中还探索了五个不同的示例任务。

Related tasks。分割是一个涵盖广泛的领域:包括交互式分割、边缘检测、超像素化[85]、目标候选区域生成、前景分割、语义分割、实例分割、全景分割等等。我们提出的可提示分割任务的目标是生成一个功能全面的模型,该模型能够通过提示工程适应许多(但并非所有)现有和新的分割任务。这种能力是一种任务泛化能力。需要注意的是,这与以往的多任务分割系统有所不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义分割、实例分割和全景分割,但训练任务和测试任务是相同的。我们工作的一个重要区别在于,为可提示分割训练的模型可以在推理时作为更大系统中的一个组件来执行新的、不同的任务,例如,为了执行实例分割,将可提示分割模型与现有的目标检测器相结合。

Discussion。提示和组合是强大的工具,它们使得单个模型能够以可扩展的方式使用,甚至能够完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如,CLIP 是 DALL·E 图像生成系统中的文本-图像对齐组件。我们预期,借助提示工程等技术实现的可组合系统设计,将比专门针对一组固定任务训练的系统支持更广泛的应用。从组合的角度比较提示式分割和交互式分割也很有意义:虽然交互式分割模型的设计以用户为中心,但正如我们将要展示的,为提示式分割训练的模型也可以组合成更大的算法系统。

3.Segment Anything Model

接下来,我们将介绍用于提示式分割的 Segment Anything Model (SAM)。SAM 由三个组件构成,如图 4 所示:图像编码器、灵活的提示编码器和快速 mask 解码器。我们基于 Transformer 视觉模型构建,并针对(摊销后的)实时性能进行了特定的权衡。此处我们将概述这些组件,详细信息请参见 §A。

Image encoder。出于可扩展性和强大预训练方法的考虑,我们使用了一个经过最小程度调整以处理高分辨率输入的 MAE 预训练的 Vision Transformer (ViT)。图像编码器对每张图像运行一次,并且可以在启动模型之前应用。

Prompt encoder。我们考虑两类提示:稀疏提示(点、框、文本)和稠密提示(掩码)。点和框通过位置编码表示,并与每种提示类型的学习嵌入相加;自由文本则使用CLIP提供的现成文本编码器表示。稠密提示(即掩码)使用卷积进行嵌入,并与图像嵌入逐元素相加。

Mask decoder。MASK 解码器能够高效地将图像嵌入、提示嵌入和输出 token 映射到掩码。该设计受 [14, 20] 启发,采用了改进的 Transformer 解码器模块,并连接了一个动态 MASK 预测头。我们改进的解码器模块利用提示自注意力机制和双向交叉注意力机制(提示到图像嵌入以及图像到提示嵌入)来更新所有嵌入。运行两个模块后,我们对图像嵌入进行上采样,并使用多层感知器(MLP)将输出 token 映射到动态线性分类器,该分类器随后计算每个图像位置的 MASK 概率。

Resolving ambiguity。如果输入的提示信息含糊不清,模型会使用单个输出对多个有效掩码进行平均。为了解决这个问题,我们修改了模型,使其能够针对单个提示预测多个输出掩码(见图 3)。我们发现 3 个掩码输出足以应对大多数常见情况(嵌套掩码通常最多三层:整体、部分和子部分)。在训练过程中,我们仅对掩码进行反向传播,以找到损失最小的掩码。为了对掩码进行排序,模型会预测每个掩码的置信度得分(即估计的 IoU)。

Efficiency。整体模型设计主要以效率为导向。给定预先计算的图像嵌入,提示编码器和 MASK 解码器可在网页浏览器中使用 CPU 运行,耗时约 50 毫秒。这种运行速度使得我们的模型能够实现无缝的实时交互式提示。

Losses and training。我们使用文献 [14] 中使用的 focal Loss 和 dice loss 的线性组合来监督掩码预测。我们使用几何提示的混合模型(文本提示见§7.5)来训练可提示分割任务。参考文献[92, 37],我们通过对每个掩码进行 11 轮随机采样来模拟交互式设置,从而使 SAM 能够无缝集成到我们的数据引擎中。

4.Segment Anything Data Engine

由于互联网上分割掩码资源有限,我们构建了一个数据引擎,用于收集我们包含 11 亿个掩码的数据集 SA-1B。该数据引擎分为三个阶段:(1)模型辅助人工标注阶段;(2)半自动阶段,结合了自动预测的掩码和模型辅助标注;(3)全自动阶段,在此阶段,我们的模型无需标注员输入即可生成掩码。接下来我们将详细介绍每个阶段。

Assisted-manual stage。在第一阶段,类似于经典的交互式分割,一组专业标注员使用基于浏览器的交互式分割工具(由SAM提供支持)通过点击前景/背景对象点来标注 mask。可以使用像素级精确的“画笔”和“橡皮擦”工具来细化掩膜。我们的模型辅助标注直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互式体验。我们没有对标注对象施加语义约束,标注员可以自由地标注“东西”和“事物”。我们建议标注员标注他们可以命名或描述的对象,但并未收集这些名称或描述。标注员被要求按重要性顺序标注对象,并且如果标注一个掩膜耗时超过30秒,则鼓励他们继续标注下一张图像。

在本阶段初期,我们使用常见的公开分割数据集训练了 SAM 模型。在获得足够的数据标注后,我们仅使用新标注的掩码对SAM模型进行了重新训练。随着收集到更多掩码,图像编码器从 ViT-B 升级到 ViT-H,其他架构细节也进行了改进;我们总共对模型进行了6次重新训练。随着模型性能的提升,每个掩码的平均标注时间从34秒减少到14秒。值得注意的是,14秒比COCO数据集的掩码标注速度快6.5倍,仅比使用极值点进行边界框标注的速度慢2倍。随着SAM模型的改进,每张图像的平均掩码数量从 20 个增加到 44 个。在本阶段,我们从12万张图像中收集了430万个掩码。

Semi-automatic stage。在此阶段,我们的目标是增加掩码的多样性,以提高模型分割任意对象的能力。为了让标注者将注意力集中在不太显眼的物体上,我们首先自动检测出置信度较高的掩码。然后,我们向标注者展示预先填充了这些掩码的图像,并要求他们标注任何其他未标注的物体。为了检测置信度较高的掩码,我们使用通用的“物体”类别,在第一阶段的所有掩码上训练了一个边界框检测器。在此阶段,我们在18万张图像中额外收集了590万个掩码(总计1020万个掩码)。与第一阶段一样,我们定期使用新收集的数据重新训练模型(共5次)。由于这些物体的标注难度更大,每个掩码的平均标注时间回升至34秒(不包括自动生成的掩码)。每张图像的平均掩码数量从44个增加到72个(包括自动生成的掩码)。

Fully automatic stage。在最后阶段,标注完全自动化。这得益于我们对模型的两项重大改进。首先,在本阶段开始时,我们收集了足够多的掩码,包括来自前一阶段的各种掩码,从而极大地改进了模型。其次,到本阶段,我们开发了模糊感知模型,即使在存在歧义的情况下也能预测有效的掩码。具体来说,我们使用一个 32×32 的规则网格点来输入模型,并为每个点预测一组可能对应于有效对象的掩码。借助模糊感知模型,如果一个点位于某个部分或子部分上,我们的模型将分别返回该子部分、部分或整个对象。我们使用模型的 IoU 预测模块来选择置信度高的掩码;此外,我们仅识别并选择了稳定的掩码(如果将概率图的阈值分别设为 0.5 − δ 和 0.5 + δ 时得到的掩码相似,则我们认为该掩码是稳定的)。最后,在选择置信度高且稳定的掩码后,我们应用了非极大值抑制 (NMS) 来过滤重复项。为了进一步提高小尺寸 mask 的质量,我们还处理了多个重叠的放大图像裁剪区域。有关此阶段的更多详细信息,请参见§B。我们对数据集中的所有1100万张图像应用了全自动 mask 生成方法,共生成了11亿个高质量 mask。接下来,我们将描述和分析由此产生的数据集SA-1B。

5.Segment Anything Dataset

我们的数据集 SA-1B 包含 1100 万张多样化、高分辨率、已获授权且保护隐私的图像,以及 11 亿个使用我们数据引擎收集的高质量分割掩码。我们将 SA-1B 与现有数据集进行比较,并分析掩码的质量和特性。我们发布 SA-1B 旨在帮助未来开发计算机视觉基础模型。需要说明的是,SA-1B 将根据优惠的许可协议发布,用于特定的研究用途,并保护研究人员的权益。

Last updated on