文章内容:
介绍了 Segment Anything (SA) 项目:用于图像分割的新任务、模型和数据集。
我们构建了迄今为止(迄今为止)最大的分割数据集,在 11M 许可和尊重隐私的图像上拥有超过 10 亿个掩码。该模型经过设计和训练,具有可提示性,因此可以将 Zero-shot 转移到新的图像分布和任务。我们评估了它在众多任务上的能力,发现它的零镜头性能令人印象深刻——通常与之前的完全监督结果相媲美,甚至优于之前的全面监督结果。
背景:
在 Web 规模数据集上预先训练的大型语言模型正在通过强大的零样本和少样本泛化彻底改变 NLP 。这些 “基础模型” 可以推广到训练过程中所见的任务和数据分布之外。此功能通常通过提示工程实现,其中使用手工文本来提示语言模型为手头的任务生成有效的文本响应。当使用来自 Web 的大量文本语料库进行扩展和训练时,这些模型的零镜头和少镜头性能与微调模型相比(在某些情况下甚至匹配)出奇地好 [10, 21]。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算而改善 [56, 10, 21, 51]。
目的:在这项工作中,我们的目标是构建图像分割的基础模型。也就是说,我们寻求开发一个可提示的模型,并使用支持强大泛化的任务在广泛的数据集上对其进行预训练。通过这个模型,我们的目标是使用提示工程解决新数据分布上的一系列下游分割问题。
该计划的成功取决于三个组成部分:任务、模型和数据。为了开发它们,我们解决了以下有关图像分割的问题:
1. 什么任务将启用零样本泛化?2. 对应的模型架构是什么?3. 哪些数据可以为这个任务和模型提供支持?
这些问题纠缠不清,需要一个全面的解决方案。我们首先定义一个可提示的分割任务,该任务足够通用,可以提供强大的预训练目标并支持广泛的下游应用程序。(先有个提示,然后再自动分割出相应物体)。此任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码,以允许交互式使用。为了训练我们的模型,我们需要一个多样化的大规模数据源。遗憾的是,没有用于分段的 Web 规模数据源;为了解决这个问题,我们构建了一个 “数据引擎”,即我们在使用我们的高效模型来协助数据收集和使用新收集的数据来改进模型之间进行迭代。接下来,我们介绍每个相互关联的组件,然后介绍我们创建的数据集和证明我们方法有效性的实验。
任务:
在 NLP 和最近的计算机视觉中,基础模型是一项很有前途的发展,它通常可以使用“提示”技术对新的数据集和任务执行零样本和少样本学习。
我们提出了可提示的分割任务,其目标是在给定任何分割建议的情况下返回有效的分割掩码
提示只是指定要在图像中分割的内容,例如,提示可以包含标识对象的空间或文本信息。(空间位置以及一些文本信息)
MODEL:
特别是,该模型必须支持灵活的提示,需要实时摊销计算掩码以允许交互式使用,并且必须具有歧义感知能力。
令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级的掩码解码器中,以预测分割掩码。
通过将 SAM 分为图像编码器和快速提示编码器/掩码解码器,可以在不同的提示下重复使用相同的图像嵌入(并摊销其成本)。
我们重点介绍点、方框和掩码提示,并通过自由格式的文本提示提供初始结果。
DATA engine:
为了实现对新数据分布的强大泛化,我们发现有必要在大量多样的掩码上训练 SAM,而不仅仅是现有的任何分割数据集。
虽然基础模型的典型方法是在线获取数据[82],但掩码本身并不丰富,因此我们需要一种替代策略。
我们的解决方案是构建一个 “数据引擎”,即我们与模型在环数据集注释共同开发我们的模型(见图 1c)。
我们的数据引擎分为三个阶段:辅助手动、半自动和全自动。
在第一阶段,SAM 协助注释者注释掩码,类似于经典的交互式分段设置。
在第二阶段,SAM 可以通过提示对象子集可能的对象位置来自动生成掩码,而注释者则专注于注释其余对象,从而帮助增加掩码多样性。(人机交互)
在最后阶段,我们使用常规的前景点网格提示 SAM,平均每张图像产生 ∼100 个高质量蒙版。
Dataset:
SA-1B 包括来自 11M 许可和隐私保护图像的超过 1B 掩码(见图 2)
Segment Anything Model:
接下来,我们将介绍用于可提示分段的 Segment Anything Model (SAM)。SAM 有三个组件,如图 4 所示:一个图像编码器、一个灵活的提示编码器和一个快速掩码解码器。我们以 Transformer 视觉模型 [14, 33, 20, 62] 为基础,对(摊销)实时性能进行了特定的权衡。我们在这里简要描述了这些组件,详细信息在 §A 中。
图像编码器。在可扩展性和强大的预训练方法的激励下,我们使用了MAE 预训练的Vision Transformer (ViT),该模型最小程度上适用于处理高分辨率输入。图像编码器为每个图像运行一次,并且可以在提示模型之前应用。
提示编码器。我们考虑两组提示:sparse (点、框、文本) 和 dense (掩码)。我们通过位置编码 [95] 来表示点和框,并与每种提示类型的学习嵌入相加,并使用 CLIP [82] 的现成文本编码器对自由格式文本进行求和。密集提示(即掩码)使用卷积嵌入,并与图像嵌入进行元素求和。
掩码解码器。掩码解码器可以有效地将图像嵌入、提示嵌入和输出标记映射到掩码。这个设计受到 的启发,采用了 Transformer 解码器块的修改,然后是一个动态掩码预测头。我们修改后的 decoder 块在两个方向(提示到图像嵌入,反之亦然)使用提示自注意力和交叉注意力来更新所有嵌入。运行两个模块后,我们对图像嵌入进行上采样,MLP 将输出标记映射到动态线性分类器,然后计算每个图像位置的掩码前景概率。
解决歧义。对于一个输出,如果给出不明确的提示,模型将平均多个有效掩码。为了解决这个问题,我们修改了模型以预测单个提示的多个输出掩码(参见图 3)。我们发现 3 个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练期间,我们只反向传播最少的损失 [15, 45, 64]。为了对掩码进行排名,该模型预测每个掩码的置信度分数(即估计的 IoU)。
效率。整体模型设计在很大程度上是由效率驱动的。给定预先计算的图像嵌入,提示编码器和掩码解码器在 CPU 上的 Web 浏览器中运行,运行时间约为 50 毫秒。这种运行时性能支持对模型进行无缝、实时的交互式提示。
损失和训练。我们使用 [14] 中使用的焦点损失 [65] 和骰子损失 [73] 的线性组合来监督掩码预测。我们使用几何提示的混合来训练可提示的分割任务(有关文本提示,请参见 §7.5)。按照 [92, 37],我们通过在每个掩码 11 轮中随机采样提示来模拟交互式设置,从而允许 SAM 无缝集成到我们的数据引擎中。
Segment Anything 数据引擎: