Segment Anything
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!
Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023
Abstract
我们介绍了Segment Anything (SA)项目:一种用于图像分割的新任务、模型和数据集。在数据收集循环中使用我们的高效模型,我们构建了迄今为止最大的分割数据集,在1100万张许可和尊重隐私的图像上拥有超过10亿个掩码。该模型被设计和训练为可提示的,因此它可以将零样本迁移到新的图像分布和任务。我们对其在许多任务中的能力进行了评估,发现其零样本性能令人印象深刻——通常与之前完全监督的结果相竞争,甚至优于之前的结果。我们将在https://segment-anything.com发布Segment Anything Model (SAM)和包含1B掩码与11M图像的相应数据集(SA-1B),以促进对计算机视觉基础模型的研究。
1. Introduction
在网络级数据集上预训练的大语言模型正在以强大的零样本和小样本泛化彻底改变NLP [10]。这些"基础模型"[8]可以推广到训练过程中看到的任务和数据分布之外。这种功能通常通过提示词工程来实现,其中手工制作的文本用于提示语言模型为手头的任务生成有效的文本响应。当使用来自网络的丰富文本语料库进行缩放和训练时,这些模型的零样本和小样本性能与微调模型(在某些情况下甚至匹配)相比出奇地好[10, 21]。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算的增加而改善[56, 10, 21, 51]。
基础模型也在计算机视觉中进行了探索,尽管程度较低。也许最突出的示例将来自网络的成对文本和图像对齐。例如,CLIP [82]和ALIGN [55]使用对比学习来训练对齐两种模态的文本和图像编码器。经过训练,经过设计的文本提示词使零样本能够泛化为新颖的视觉概念和数据分布。这种编码器还与其他模块有效组合,以实现下游任务,如图像生成(例如,DALL·E [83])。虽然在视觉和语言编码器方面已经取得了很大进展,但计算机视觉包括了超出这一范围的广泛问题,其中许多问题还不存在丰富的训练数据。
在这项工作中,我们的目标是建立一个图像分割的基础模型。也就是说,我们寻求开发一个可提示的模型,并使用能够实现强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型,我们的目标是使用提示词工程解决新数据分布上的一系列下游分割问题。
这个计划的成功取决于三个部分:任务、模型和数据。为了开发它们,我们解决了以下关于图像分割的问题:
- 什么任务将启用零样本泛化?
- 相应的模型架构是什么?
- 什么数据可以支持此任务和模型?
这些问题错综复杂,需要全面解决。我们首先定义一个可提示的分割任务,该任务足够通用,可以提供强大的预训练目标,并实现广泛的下游应用。此任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码,以允许交互式使用。为了训练我们的模型,我们需要一个多样化的大规模数据源。不幸的是,没有用于分割的网络规模的数据源;为了解决这个问题,我们构建了一个"数据引擎",即我们在使用高效模型来帮助数据收集和使用新收集的数据来改进模型之间进行迭代。接下来,我们介绍每个互连的组件,然后是我们创建的数据集和证明我们方法有效性的实验。
任务(§2)。在NLP和最近的计算机视觉中,基础模型是一个很有前途的发展,可以通过使用"提示"技术对新的数据集和任务执行零样本和小样本。受这项工作的启发,我们提出了可提示的分割任务,其中的目标是在给定任何分割提示词的情况下返回有效的分割掩码(见图1a)。提示词只是指定在图像中分割什么,例如,提示词可以包括标识目标的空间或文本信息。有效输出掩码的要求意味着,即使提示词不明确并且可能涉及多个目标(例如,衬衫上的一个点可能指示衬衫或穿着它的人),输出也应该是这些目标中至少一个的合理掩码。我们使用可提示的分割任务作为预训练目标,并通过提示词工程解决一般的下游分割任务。
模型(§3)。可提示的分割任务和真实世界使用的目标对模型架构施加了约束。特别是,该模型必须支持灵活的提示词,需要实时计算掩码以允许交互式使用,并且必须具有模糊性意识。令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:强大的图像编码器计算图像嵌入,提示词编码器嵌入提示词,然后将这两个信息源组合在预测分割掩码的轻量级掩码解码器中。我们将此模型称为分割任意模型或SAM(见图1b)。通过将SAM分离为图像编码器和快速提示词编码器/掩码解码器,可以在不同提示词下复用相同的图像嵌入(并分摊其成本)。给定图像嵌入,提示词编码器和掩码解码器在网络浏览器中从提示词预测掩码,时间为~50ms。我们专注于点、框和掩码提示词,还使用自由格式的文本提示词显示初始结果。为了让SAM意识到模糊性,我们将其设计为预测单个提示词的多个掩码,使SAM能够自然地处理模糊性,例如衬衫与人的示例。
数据引擎(§4)。为了实现对新数据分布的强泛化,我们发现有必要在一组庞大且多样的掩码上训练SAM,超越现有的分割任意数据集。虽然基础模型的一种典型方法是在线获取数据[82],但掩码并不自然丰富,因此我们需要一种替代策略。我们的解决方案是建立一个"数据引擎",即我们与模型在环数据集注释共同开发我们的模型(见图1c)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM帮助注释器注释掩码,类似于经典的交互式分割设置。在第二阶段,SAM可以通过提示可能的目标位置自动为目标子集生成掩码,注释器专注于注释其余目标,有助于增加掩码的多样性。在最后阶段,我们用规则的前景点网格提示SAM,平均每张图像产生约100个高质量掩码。
数据集(§5)。我们的最终数据集(SA-1B)包括来自11M个图像(许可和隐私保护)的超过1B个掩码(见图2)。SA-1B是使用我们的数据引擎的最后阶段完全自动收集的,其掩码比任何现有的分割数据集都多400倍[66, 44, 117, 60],正如我们广泛验证的那样,掩码具有高质量和多样性。除了将其用于训练SAM以使其鲁棒和通用之外,我们希望SA-1B成为旨在建立新基础模型的研究的宝贵资源。
负责任的AI (§6)。我们研究并报告了使用SA-1B和SAM时潜在的公平问题和偏差。SA-1B中的图像跨越了地理和经济上不同的国家,我们发现SAM在不同人群中表现相似。我们希望这将使我们的工作在现实世界的用例中更加公平。我们在附录中提供了模型和数据集卡。
实验(§7)。我们对SAM进行了广泛的评估。首先,使用一套由23个分割数据集组成的新数据集,我们发现SAM从单个前景点生成高质量的掩模,通常仅略低于手动注释的真正事实。其次,我们使用提示词工程在零样本迁移协议下的各种下游任务上发现了一致的强定量和定性结果,包括边缘检测、目标建议生成、实例分割和文本到任务预测的初步探索。这些结果表明,SAM可以通过提示词工程开箱即用,以解决涉及SAM训练数据之外的目标和图像分布的各种任务。尽管如此,正如我们在第8节中所讨论的,仍有改进的空间。
发布。我们发布SA-1B数据集用于研究目的,并在允许的开放许可证(Apache 2.0)下提供SAM (https://segment-anything.com),我们还通过在线演示展示SAM的能力。
2. Segment Anything Task
我们从NLP中获得了灵感,其中下一个token预测任务用于基础模型预训练,并通过提示词工程解决各种下游任务[10]。为了建立分割的基础模型,我们的目标是定义具有类似功能的任务。
任务。我们首先将提示词的概念从NLP转换为分割,其中提示词可以是一组前景/背景点、粗略框或掩码、自由格式文本,或者通常是指示在图像中分割什么的任何信息。那么,可提示的分割任务是在给定任何提示词的情况下返回有效的分割掩码。"有效"掩码的要求只是意味着,即使提示词不明确,并且可能涉及多个目标(例如,回忆衬衫与人的例子,见图3),输出也应该是其中至少一个目标的合理掩码。这一要求类似于期望语言模型对模棱两可的提示词输出连贯的响应。我们选择这个任务是因为它产生了一种自然的预训练算法和一种通过提示将零样本迁移到下游分割任务的通用方法。
预训练。可提示分割任务提出了一种自然的预训练算法,该算法模拟每个训练样本的提示词序列(例如,点、框、掩码),并将模型的掩码预测与基本事实进行比较。我们将这种方法从交互式分割中进行了调整[109, 70],尽管与交互式分割不同,交互式分割的目标是在足够的用户输入后最终预测有效的掩码,但我们的目标是始终预测任何提示词的有效掩码,即使提示词不明确。这确保了预训练的模型在涉及歧义的用例中是有效的,包括我们的数据引擎§4要求的自动注释。我们注意到,在这项任务中表现出色是一项挑战,需要专门的建模和训练损失选择,我们将在§3中对此进行讨论。
零样本迁移。直观地说,我们的预训练任务赋予了模型在推理时对任何提示词做出适当响应的能力,因此下游任务可以通过设计适当的提示词来解决。例如,如果有一个猫的边界框检测器,则可以通过向我们的模型提供检测器的框输出作为提示词来解决猫实例分割问题。一般来说,一系列实用的分割任务可以作为提示词。除了自动数据集标记外,我们还在§7中的实验中探索了五个不同的示例任务。
相关任务。分割是一个广泛的领域:有交互式分割[57, 109]、边缘检测[3]、超级像素化[85]、目标建议生成[2]、前景分割[94]、语义分割[90]、实例分割[66]、全景分割[59]等。我们的可提示分割任务的目标是通过提示词工程生成一个功能广泛的模型,该模型可以适应许多(尽管不是所有)现有和新的分割任务。这种能力是任务泛化的一种形式[26]。请注意,这与之前关于多任务分割系统的工作不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割[114, 19, 54],但训练和测试任务是相同的。我们工作中的一个重要区别是,为可提示分割训练的模型可以在推理时通过充当更大系统中的组件来执行新的不同任务,例如,为了执行实例分割,将可提示分割模型与现有的目标检测器相结合。
讨论。提示和组合是功能强大的工具,使单个模型能够以可扩展的方式使用,有可能完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP [82]是DALL·E [83]图像生成系统的文本-图像对齐组件。我们预计,与专门为固定任务集训练的系统相比,由提示词工程等技术提供动力的可组合系统设计将实现更广泛的应用程序。从合成的角度比较可提示分割和交互式分割也很有趣:虽然交互式分割模型是在考虑人类用户的情况下设计的,但为可提示分割训练的模型也可以组成一个更大的算法系统,正如我们将要演示的那样。
3. Segment Anything Model
接下来,我们将描述可提示分割的Segment Anything Model (SAM)。SAM有三个组件,如图4所示:图像编码器、灵活提示词编码器和快速掩码解码器。我们建立在Transformer视觉模型[14, 33, 20, 62]的基础上,对(摊销)实时性能进行了特定的权衡。我们在这里对这些组件进行了高层描述,详细信息见§A。
图像编码器。受可扩展性和强大的预训练方法的启发,我们使用了MAE [47]预训练的视觉Transformer (ViT) [33],至少适用于处理高分辨率输入[62]。图像编码器每个图像运行一次,并且可以在提示模型之前应用。
提示词编码器。我们考虑两组提示词:稀疏(点、框、文本)和密集(掩码)。我们通过位置编码[95]来表示点和框,这些位置编码与每个提示词类型学到的嵌入相加,并使用CLIP [82]的现成文本编码器来表示自由格式文本。密集提示词(即掩码)使用卷积嵌入,并与图像嵌入逐元素求和。
掩码解码器。掩码解码器有效地将图像嵌入、提示嵌入和输出token映射到掩码。该设计受到[14, 20]的启发,采用了对Transformer解码器块[103]的修改,然后是动态掩码预测头。我们修改的解码器块在两个方向上使用提示自注意力和交叉注意力(提示词到图像的嵌入,反之亦然)来更新所有嵌入。在运行两个块之后,我们对图像嵌入进行上采样,MLP将输出token映射到动态线性分类器,然后该分类器计算每个图像位置的掩码前景概率。
解决歧义。对于一个输出,如果给出不明确的提示词,模型将平均多个有效掩码。为了解决这一问题,我们修改了模型,以预测单个提示词的多个输出掩码(见图3)。我们发现,3个掩码输出足以解决最常见的情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练过程中,我们只在掩码上反向传播最小的损失[15, 45, 64]。为了对掩码进行排序,该模型预测每个掩码的置信度分数(即估计的IoU)。
效率。整体模型设计在很大程度上是以效率为动力的。给定预先计算的图像嵌入,提示词编码器和掩码解码器在网络浏览器中运行,在CPU上,大约50ms。这种运行时性能使我们的模型能够无缝且实时地进行交互式提示。
损失和训练。我们使用[14]中使用的焦点损失(focal loss)[65]和骰子损失(dice loss)[73]的线性组合来监督掩模预测。我们使用几何提示词的混合来训练可提示的分割任务(文本提示词见§7.5)。在[92, 37]之后,我们通过在每个掩码的11轮中随机采样提示词来模拟交互式设置,允许SAM无缝集成到我们的数据引擎中。
4. Segment Anything Data Engine
由于互联网上的分割掩码并不丰富,我们建立了一个数据引擎来收集我们的1.1亿掩码数据集,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个。总的来说,我们在这一阶段从120k张图像中收集了430万个掩码。
半自动阶段。在这个阶段,我们的目标是增加掩码的多样性,以提高我们的模型分割任何东西的能力。为了将注释器集中在不太突出的目标上,我们首先自动检测到自信的掩码。然后,我们向注释器展示了预先填充了这些掩码的图像,并要求他们注释任何其他未注释的目标。为了检测有信心的掩码,我们使用通用的"object"类别在所有第一阶段掩码上训练了一个边界框检测器[84]。在此阶段,我们在180k张图像中额外收集了590万个掩码(总共1020万个掩码)。与第一阶段一样,我们定期根据新收集的数据对模型进行再训练(5次)。每个掩码的平均注释时间回到了34秒(不包括自动掩码),因为这些目标更难标记。每张图像的平均掩码数量从44个增加到72个(包括自动掩码)。
全自动阶段。在最后阶段,注释是完全自动的。这是可行的,因为我们的模型有两个主要的增强。首先,在这个阶段开始时,我们收集了足够的掩码来大大改进模型,包括前一阶段的各种掩码。其次,到了这个阶段,我们已经开发了模糊感知模型,它使我们能够预测有效的掩码,即使在模糊的情况下也是如此。具体来说,我们用32×32的规则网格提示模型,并为每个点预测一组可能对应于有效目标的掩码。使用模糊感知模型,如果一个点位于部分或子部分上,我们的模型将返回子部分、部分和整个目标。我们模型的IoU预测模块用于选择置信掩码;此外,我们只识别和选择了稳定的掩码(如果在0.5 - δ和0.5 + δ处对概率图进行阈值处理会产生类似的掩码,则我们认为掩码是稳定的)。最后,在选择了置信且稳定的掩码后,我们应用非最大抑制(NMS)来过滤重复。为了进一步提高较小掩码的质量,我们还处理了多个重叠的放大图像裁剪。有关此阶段的更多详细信息,请参见§B。我们将全自动掩码生成应用于数据集中的所有1100万张图像,总共生成了11亿个高质量掩码。接下来,我们将描述并分析生成的数据集SA-1B。
5. Segment Anything Dataset
我们的数据集SA-1B由11M多样、高分辨率、授权和隐私保护的图像和使用我们的数据引擎收集的1.1B高质量分割掩码组成。我们将SA-1B与现有数据集进行了比较,并分析了掩码质量和特性。我们正在发布SA-1B,以帮助未来开发计算机视觉的基础模型。我们注意到,SA-1B将在某些研究用途的有利许可协议下发布,并为研究人员提供保护。
图像。我们从一家直接与摄影师合作的供应商那里获得了1100万张新照片的许可。这些图像具有高分辨率(平均3300×4950像素),由此产生的数据大小可能会带来可访问性和存储方面的挑战。因此,我们发布了最短边设置为1500像素的下采样图像。即使在下采样后,我们的图像的分辨率也明显高于许多现有的视觉数据集(例如,COCO [66]图像的分辨率为~480×640像素)。请注意,目前大多数模型都使用分辨率低得多的输入。在公布的图像中,人脸和车牌被模糊了。
掩码质量。为了估计掩码质量,我们随机采样了500张图像(~50k个掩码),并要求我们的专业注释人员提高这些图像中所有掩码的质量。注释人员使用我们的模型和像素精确的“画笔”和“橡皮擦”编辑工具来完成这项工作。这一过程产生了一对自动预测和专业校正的掩码。我们计算了每对之间的IoU,发现94%的对的IoU大于90% (97%的对的IoU大于75%)。为了进行比较,先前的工作估计注释器之间的一致性为85-91%IoU [44, 60]。我们在§7中的实验通过人工评分证实,相对于各种数据集,掩码质量很高,在自动掩码上训练我们的模型几乎与使用数据引擎产生的所有掩码一样好。
掩码属性。在图5中,与现有最大的分割数据集相比,我们绘制了SA-1B中目标中心的空间分布。所有数据集中都存在常见的摄影师偏见。我们观察到,与分布最相似的两个数据集LVIS v1 [44]和ADE20K [117]相比,SA-1B具有更大的图像角覆盖范围,而COCO [66]和Open Images V5 [60]具有更显著的中心偏差。在图6(图例)中,我们按大小比较了这些数据集。SA-1B比第二大的Open images多了11倍的图像和400倍的掩码。平均而言,它的每张图像的掩码是Open Images的36倍。在这方面最接近的数据集ADE20K,每张图像的掩码仍然减少了3.5倍。图6(左)绘制了掩码的周边图像分布。接下来,我们看看图6(中间)中的图像相对掩码大小(掩码面积除以图像面积的平方根)。正如预期的那样,由于我们的数据集每幅图像有更多的掩码,因此它也倾向于包括更大比例的中小型相对大小掩码。最后,为了分析形状复杂性,我们观察图6(右)中的掩码凹度(1减去掩码面积除以掩码凸包的面积)。由于形状复杂度与掩码大小相关,我们通过首先从装桶掩码大小执行分层采样来控制数据集的掩码大小分布。我们观察到,我们的掩码的凹陷分布与其他数据集的凹陷分布大致相似。
6. Segment Anything RAI Analysis
7. Zero-Shot Transfer Experiments
7.2. Zero-Shot Edge Detection
7.3. Zero-Shot Object Proposals
7.4. Zero-Shot Instance Segmentation
7.5. Zero-Shot Text-to-Mask
7.6. Ablations
8. Discussion
基础模型。自机器学习的早期[99]以来,预先训练的模型已经适应了下游任务。近年来,随着对规模的日益重视,这种范式变得越来越重要,这类模型最近被(重新)称为"基础模型":即"在大规模的广泛数据上训练并适应广泛下游任务的"模型[8]。我们的工作与这一定义密切相关,尽管我们注意到图像分割的基础模型本质上是有限的,因为它代表了计算机视觉的一个重要但部分的子集。我们还将我们的方法的一个方面与[8]进行了对比,后者强调了自监督学习在基础模型中的作用。虽然我们的模型是用自监督技术(MAE [47])初始化的,但其绝大多数能力来自大规模的监督训练。在数据引擎可以扩展可用注释(如我们的注释)的情况下,监督训练提供了有效的解决方案。
组合性。经过预训练的模型可以提供新的能力,甚至超出训练时的想象。一个突出的例子是CLIP [82]如何在更大的系统中用作组件,如DALL·E [83]。我们的目标是使用SAM使这种合成变得简单。我们的目标通过要求SAM预测各种分割提示词的有效掩码来实现这一点。其效果是在SAM和其他组件之间创建一个可靠的接口。例如,MCC [106]可以很容易地使用SAM来分割感兴趣的目标,并实现对看不见的目标的强泛化,以便从单个RGB-D图像进行3D重建。在另一个例子中,SAM可以通过可穿戴设备检测到的注视点来提示,从而启用新的应用程序。由于SAM能够推广到以自我为中心的图像等新领域,因此此类系统无需额外训练即可工作。
局限性。虽然SAM总体表现良好,但并不完美。它可能会错过精细的结构,有时会产生小的断开连接的组件的幻觉,并且不会像"放大"的计算密集型方法那样清晰地产生边界,例如[18]。通常,当提供许多点时,我们期望专用的交互式分割方法优于SAM,例如[67]。与这些方法不同,SAM是为通用性和使用广度而设计的,而不是高IoU交互式分割。此外,SAM可以实时处理提示词,但当使用重型图像编码器时,SAM的总体性能不是实时的。我们对文本到掩码任务的尝试是探索性的,并不完全稳健,尽管我们相信可以通过更多的努力来改进。虽然SAM可以执行许多任务,但尚不清楚如何设计实现语义和全景分割的简单提示词。最后,还有一些特定于领域的工具,如[7],我们希望它们在各自的领域中优于SAM。
结论。Segment Anything项目试图将图像分割提升到基础模型时代。我们的主要贡献是一项新任务(可提示分割)、模型(SAM)和数据集(SA-1B),使这一飞跃成为可能。SAM是否达到基础模型的地位还有待于它在社区中的使用方式,但无论我们对这项工作的前景如何,超过1B个掩码的发布和我们可推广的细分模型都将有助于为未来铺平道路。
Appendix
A. Segment Anything Model and Task Details
B. Automatic Mask Generation Details
C. RAI Additional Details
D. Experiment Implementation Details
D.1. Zero-Shot Single Point Valid Mask Evaluation
D.2. Zero-Shot Edge Detection
D.3. Zero-Shot Object Proposals
D.4. Zero-Shot Instance Segmentation
D.5. Zero-Shot Text-to-Mask
D.6. Probing the Latent Space of SAM
E. Human Study Experimental Design
F. Dataset, Annotation, and Model Cards
F.1. Dataset Card for SA-1B
F.2. Data Annotation Card
G. Annotation Guidelines
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)