【43k字】双语理解Large Vision Model:Segment Anything

本文介绍了Segment Anything项目,这是一个基于深度学习的图像分割任务、模型和数据集。研究团队构建了迄今为止最大的分割数据集SA-1B,包含1100万张图像和超过10亿个面具。模型SAM通过预训练学习对各种提示做出反应,实现了零镜头转移,能在多个分割任务中表现出色。数据引擎和自动化注释策略使得模型和数据集得以不断改进。实验结果表明,SAM在多个下游任务中展示了强大的泛化能力。
摘要由CSDN通过智能技术生成

作者:猛码Memmat

目录

在这里插入图片描述

Abstract

在这里插入图片描述
the largest segmentation dataset to date (by far)

我们介绍了Segment Anything (SA)项目:一个用于图像分割的新任务、模型和数据集。在数据收集循环中使用我们高效的模型,我们构建了迄今为止(到目前为止)最大的分割数据集,在1100万张授权和隐私尊重的图像上拥有超过10亿个面具。该模型被设计和训练为可提示的,因此它可以将zero-shot转移到新的图像分布和任务。我们评估了它在许多任务上的能力,发现它的零镜头表现令人印象深刻——经常与之前的完全监督结果竞争,甚至更好。我们在https://segment-anything.com上发布了片段任何模型(SAM)和对应的1B掩模和11M图像数据集(SA-1B),以促进对计算机视觉基础模型的研究。

在这里插入图片描述
我们的目标是通过引入三个相互连接的组件来构建一个分割的基础模型:一个提示分割任务,一个分割模型(SAM),它为数据注释提供动力,并通过提示工程实现零镜头传输到一系列任务,以及一个用于收集SA-1B的数据引擎,我们的数据集超过10亿个mask。

1. Introduction

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在网络规模的数据集上预训练的大型语言模型正在以强大的零次和少次泛化彻底改变NLP。这些“基础模型”[8]可以泛化到训练过程中看不到的任务和数据分布。这种功能通常通过提示工程实现,在提示工程中,使用手工制作的文本提示语言模型为手头的任务生成有效的文本响应。当使用来自网络的丰富文本语料库进行缩放和训练时,这些模型的零镜头和少镜头性能与相比惊人地好(甚至在某些情况下匹配)微调模型[10,21]。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算而改善[56,10,21,51]。

基础模型也在计算机视觉中进行了探索,尽管程度较轻。也许最突出的插图是对齐来自网络的配对文本和图像。例如,CLIP[82]和ALIGN[55]使用对比学习来训练对齐两种模式的文本和图像编码器。经过训练后,经过设计的文本提示可以实现对新颖视觉概念和数据分布的零概率泛化。这样的编码器还可以有效地与其他模块组合以实现下游任务,例如图像生成(例如DALL·E[83])。虽然在视觉和语言编码器方面已经取得了很大的进展,但计算机视觉包括了超出这一范围的广泛问题,并且对于其中许多问题,不存在丰富的训练数据。

在这项工作中,我们的目标是建立一个图像分割的基础模型。也就是说,我们寻求开发一个可提示的模型,并使用支持强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型,我们的目标是用快速工程解决一系列新的数据分布上的下游分割问题。

该计划的成功取决于三个组成部分:任务、模型和数据。为了开发它们,我们解决了以下关于图像分割的问题:

  1. 什么任务可以实现零射击泛化?
  2. 相应的模型架构是什么?
  3. 哪些数据可以支持这个任务和模型?

这些问题错综复杂,需要全面解决。我们首先定义一个可提示的分割任务,它足够普遍,可以提供强大的预训练目标,并支持广泛的下游应用。这项任务需要一个支持灵活提示的模型,并可以在提示时实时输出分割掩码,以允许交互式使用。为了训练我们的模型,我们需要一个多样化的、大规模的数据源。不幸的是,没有网络规模的数据源进行分割;为了解决这个问题,我们构建了一个“数据引擎”,即在使用我们的高效模型来辅助数据收集和使用新收集的数据来改进模型之间进行迭代。接下来,我们将介绍每个相互连接的组件,然后是我们创建的数据集和证明我们方法有效性的实验。

Task

在这里插入图片描述
在NLP和最近的计算机视觉中,基础模型是一个有前途的发展,它可以通过使用“提示”技术对新数据集和任务执行零次和少次学习。受此工作的启发,我们提出了可提示分割任务,其目标是在给定任何分割提示时返回有效的分割掩码(见图1a)。提示符简单地指定要在图像中分割什么,例如,提示符可以包括标识对象的空间或文本信息。有效输出掩码的要求意味着,即使提示符是模糊的,并且可能指向多个对象(例如,衬衫上的一个点可能表示衬衫或穿衬衫的人),输出也应该是这些对象中至少一个的合理掩码。我们使用提示分割任务作为预训练目标,并通过提示工程解决一般的下游分割任务。

Model

在这里插入图片描述

可提示的分割任务和实际使用的目标对模型体系结构施加了约束。特别是,该模型必须支持灵活的提示,需要实时平摊计算掩码以允许交互使用,并且必须能够识别歧义。令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级的掩码解码器中,预测分割掩码。我们把这个模型称为分段任意模型(Segment Anything model),或SAM(见图1b)。通过将SAM分离为图像编码器和快速提示编码器/掩码解码器,可以使用不同的提示重用相同的图像嵌入(及其成本摊销)。给定图像嵌入,提示编码器和掩码解码器在网络浏览器中从提示符中预测掩码,时间为~ 50ms。我们主要关注点、框和掩码提示,并使用自由形式的文本提示来呈现初始结果。为了使SAM能够识别歧义,我们将其设计为为单个提示预测多个掩码,允许SAM自然地处理歧义,例如衬衫vs.人的示例。

Data engine

在这里插入图片描述
为了实现对新数据分布的强泛化,我们发现有必要在一个大而多样的掩码集上训练SAM,而不是任何已经存在的分割数据集。虽然基础模型的典型方法是在线获取数据[82],但掩码自然并不丰富,因此我们需要一种替代策略。我们的解决方案是构建一个“数据引擎”,即我们与模型在循环数据集注释共同开发我们的模型(见图1c)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM帮助注释者注释掩码,类似于经典的交互式分割设置。在第二阶段,SAM可以自动为对象的一个子集生成掩码,方法是提示它可能的对象位置,而注释器则专注于注释剩余的对象,这有助于增加掩码的多样性。在最后阶段,我们用前景点的规则网格提示SAM,平均每张图像产生约100个高质量蒙版。

Dataset

在这里插入图片描述
我们最终的数据集SA-1B,包括来自11M个许可和隐私保护图像的超过1b个掩码(见图2)。SA-1B,使用我们的数据引擎的最后阶段完全自动收集,比任何现有的分割数据集[66,44,117,60]拥有400倍多的掩码,并且我们广泛验证,掩码具有高质量和多样性。我们希望SA-1B能够成为一种有价值的资源,用于建立新的基础模型。

Responsible AI

在这里插入图片描述
在使用SA-1B和SAM时,我们研究并报告潜在的公平性问题和偏见。SA-1B中的图像跨越了地理和经济上不同的国家,我们发现SAM在不同人群中的表现相似。总之,我们希望这将使我们的工作在现实用例中更加公平。我们在附录中提供了模型和数据集卡。

Experiments

在这里插入图片描述
我们广泛地评估SAM。首先,使用不同的23个分割数据集的新套件,我们发现SAM从单个前景点生成高质量的掩码,通常仅略低于手动注释的地面真相。其次,我们在使用提示工程的零镜头传输协议下的各种下游任务上发现了持续强大的定量和定性结果,包括边缘检测、对象建议生成、实例分割和文本到掩码预测的初步探索。这些结果表明,SAM可以在即时工程中开箱即用,解决涉及SAM训练数据之外的对象和图像分布的各种任务。然而,正如我们在§8中所讨论的,改进的空间仍然存在。

Release

在这里插入图片描述
我们将发布SA-1B数据集用于研究目的,并在https://segment-anything.com上允许开放许可证(Apache 2.0)下提供SAM。我们还通过在线演示展示了SAM的功能。
在这里插入图片描述
在这里插入图片描述
来自我们新引入的数据集SA-1B的覆盖蒙版示例图像。SA-1B包含11M个不同的、高分辨率的、授权的和隐私保护的图像和1.1个高质量的分割掩码。这些面具是由SAM自动标注的,我们通过人工评分和大量实验验证,它们是高质量和多样性的。我们根据每个图像的蒙版数量对图像进行分组,以实现可视化(平均每张图像约有100个蒙版)。

2. Segment Anything Task

在这里插入图片描述
我们从NLP中获得灵感,其中下一个令牌预测任务用于基础模型预训练,并通过提示工程[10]解决各种下游任务。为了建立一个分割的基础模型,我们的目标是定义一个具有类似功能的任务。

Task

在这里插入图片描述
我们首先将提示符的思想从NLP转换为分割,其中提示符可以是一组前景/背景点,一个粗略的框或掩码,自由形式的文本,或者通常情况下,指示图像中要分割的内容的任何信息。那么,提示分割任务是在给定任何提示时返回一个有效的分割掩码。“有效”掩码的要求仅仅意味着,即使提示符是模糊的,并且可能涉及多个对象(例如,回想一下衬衫vs.人的例子,请参见图3),输出也应该是这些对象中至少一个的合理掩码。这一需求类似于期望语言模型对模棱两可的提示符输出一致的响应。我们选择这个任务是因为它导致了一个自然的预训练算法和一个通过提示将零镜头转移到下游分割任务的通用方法。

Pre-training

在这里插入图片描述
提示分割任务提出了一种自然的预训练算法,该算法为每个训练样本模拟一系列提示(例如,点、框、掩码),并将模型的掩码预测与实际情况进行比较。我们从交互式分割[109,70]中采用了这种方法,尽管与交互式分割的目标是在足够的用户输入后最终预测有效的掩码不同,我们的目标是始终预测任何提示的有效掩码,即使提示是模糊的。这确保了预训练的模型在涉及歧义的用例中是有效的,包括我们的数据引擎§4所要求的自动注释。我们注意到,在这项任务中表现良好具有挑战性,需要专门的建模和训练损失选择,我们将在§3中讨论。

Zero-shot transfer

在这里插入图片描述
直观地说,我们的预训练任务赋予了模型在推理时对任何提示作出适当响应的能力,因此可以通过设计适当的提示来解决下游任务。例如,如果有一个猫的边界盒检测器,猫实例分割可以通过提供检测器的盒子输出作为我们的模型的提示来解决。一般来说,大量的实际分割任务都可以作为提示。除了自动数据集标记之外,我们还在§7的实验中探索了五个不同的示例任务。

Related tasks

在这里插入图片描述
分割是一个广泛的领域:有交互式分割[57,109],边缘检测[3],超像素化[85],对象建议生成[2],前景分割[94],语义分割[90],实例分割[66],泛视分割[59]等。我们的提示分割任务的目标是生产

在这里插入图片描述
每一列显示SAM从单个模糊点提示符(绿色圆圈)生成的3个有效掩码。
在这里插入图片描述
一个能力广泛的模型,可以适应许多(虽然不是全部)现有的和新的分割任务通过及时的工程。这种能力是任务泛化[26]的一种形式。注意,这与以前的多任务分割系统不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割[114,19,54],但训练和测试任务是相同的。在我们的工作中,一个重要的区别是,为提示分割训练的模型可以在推理时作为一个更大的系统中的组件执行一个新的、不同的任务,例如,为了执行实例分割,提示分割模型与现有的对象检测器相结合。

Discussion

在这里插入图片描述
提示和组合是强大的工具,可以以可扩展的方式使用单个模型,潜在地完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP[82]是DALL·E[83]图像生成系统的文本图像对齐组件。我们预计,由提示工程等技术驱动的可组合系统设计,将比专门为固定任务集训练的系统能够实现更广泛的应用程序。从组合的角度比较提示分割和交互式分割也很有趣:虽然交互式分割模型是在设计时考虑到人类用户的,但为提示分割训练的模型也可以组成一个更大的算法系统,正如我们将演示的那样。
在这里插入图片描述
分段任意模型(SAM)概述。一个重量级图像编码器输出一个图像嵌入,然后可以通过各种输入提示有效地查询,以平摊实时速度生成对象掩码。对于对应于多个对象的模糊提示,SAM可以输出多个有效掩码和相关的置信度分数。

3. Segment Anything Model

在这里插入图片描述
接下来我们描述分段任意模型(SAM)用于提示分段。SAM有三个组成部分,如图4所示:一个图像编码器,一个灵活的提示编码器和一个快速的掩码解码器。我们建立在Transformer视觉模型[14,33,20,62]的基础上,对(平摊的)实时性能进行了特定的权衡。我们在这里对这些组件进行高层次的描述,详细内容见§a。

Image encoder

在这里插入图片描述
受可扩展性和强大的预训练方法的激励,我们使用MAE[47]预训练视觉转换器(ViT)[33]最小限度地适应于处理高分辨率输入[62]。图像编码器对每张图像运行一次,可以在提示模型之前应用。

Prompt encoder

在这里插入图片描述
我们考虑两组提示:稀疏提示(点、框、文本)和密集提示(掩码)。我们通过位置编码[95]表示点和框,并对每种提示类型和自由形式的文本使用CLIP现成的文本编码器[82]进行学习嵌入。密集提示(即掩码)使用卷积嵌入,并与图像嵌入元素相加。

Mask decoder

在这里插入图片描述
掩码解码器有效地将图像嵌入、提示嵌入和输出令牌映射到掩码。该设计受到[14,20]的启发,采用了对变压器解码器块[103]的修改,然后是动态掩码预测头。我们改进的解码器块在两个方向上使用提示自注意和交叉注意(提示到图像嵌入和反之亦然)来更新所有嵌入。在运行两个块之后,我们对图像嵌入进行上采样,MLP将输出令牌映射到动态线性分类器,然后计算每个图像位置的掩码前景概率。

Resolving ambiguity

在这里插入图片描述
对于一个输出,如果给出模棱两可的提示,模型将平均多个有效掩码。为了解决这个问题,我们修改了模型,以预测单个提示符的多个输出掩码(见图3)。我们发现3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三种深度:整体、部分和子部分)。在训练中,我们只用最少的道具
在这里插入图片描述
掩码损失[15,45,64]。为了对面具进行排名,模型预测每个面具的置信度分数(即估计的IoU)。

Efficiency

在这里插入图片描述
整个模型设计很大程度上是由效率驱动的。给定预先计算的图像嵌入,提示编码器和掩码解码器在CPU上的web浏览器中运行,时间约为50毫秒。这种运行时性能使我们的模型实现了无缝、实时的交互式提示。

Losses and training

在这里插入图片描述
我们使用[14]中使用的焦点损失[65]和骰子损失[73]的线性组合来监督掩模预测。我们使用混合的几何提示(文本提示参见§7.5)来训练提示分割任务。按照[92,37],我们通过在每个掩码中随机抽取11轮提示来模拟交互式设置,允许SAM无缝集成到我们的数据引擎中。

4. Segment Anything Data Engine

在这里插入图片描述
由于分割掩码在互联网上并不丰富,我们构建了一个数据引擎来收集我们的1.1B掩码数据集SA-1B。数据引擎有三个阶段:(1)模型辅助的手动注释阶段,(2)混合了自动预测掩码和模型辅助注释的半自动阶段,以及(3)我们的模型在没有注释器输入的情况下生成掩码的全自动阶段。接下来我们将详细介绍每一个。

Assisted-manual stage

在这里插入图片描述
在第一阶段,类似于经典的交互式分割,一组专业的注释人员使用SAM支持的基于浏览器的交互式分割工具,通过单击前景/背景对象点来标记掩码。蒙版可以使用像素精确的“笔刷”和“橡皮擦”工具来细化。我们的模型辅助注释直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互式体验。我们没有对标记对象施加语义约束,注释者可以自由地标记“stuff”和“things”[1]。我们建议注释者标记他们可以命名或描述的对象,但没有收集这些名称或描述。标注者被要求按突出的顺序标注对象,并被鼓励在一个蒙版花费30秒以上的时间来标注下一个图像。
在这里插入图片描述
在这一阶段的开始,SAM使用公共分割数据集进行训练。在足够的数据标注后,仅使用新标注的掩码重新训练SAM。随着越来越多的掩模被收集,图像编码器从ViT-B缩放到ViT-H,其他架构细节也在进化;我们总共重新训练了我们的模型6次。随着模型的改进,每个掩码的平均注释时间从34秒减少到14秒。我们注意到,14秒比COCO的掩码标注快6.5倍[66],仅比极值点的边界框标注慢2倍[76,71]。随着SAM的改进,每张图像的平均掩码数量从20个增加到44个。总的来说,我们在这个阶段从12万张图片中收集了430万个面具。

Semi-automatic stage

在这里插入图片描述
在这个阶段,我们的目标是增加面具的多样性,以提高我们的模型分割任何东西的能力。为了将注释器集中在不太突出的对象上,我们首先自动检测自信掩码。然后,我们向注释者展示了预先填充了这些蒙版的图像,并要求他们注释任何其他未注释的对象。为了检测可信掩码,我们使用通用的“对象”类别在所有第一阶段掩码上训练了一个边界盒检测器[84]。在此阶段,我们在180k图像中收集了额外的590万个面具(总共1020万个面具)。与第一阶段一样,我们定期对新收集的数据重新训练我们的模型(5次)。每个掩码的平均注释时间回到了34秒(不包括自动掩码),因为这些对象的标签更具挑战性。每张图片的平均蒙版数量从44个增加到72个(包括自动蒙版)。

Fully automatic stage

在这里插入图片描述
在最后一个阶段,注释是完全自动的。这是可行的,因为我们的模型有两个主要的增强。首先,在这一阶段的开始,我们收集了足够多的面具来极大地改进模型,包括前一阶段的各种面具。第二,在这个阶段,我们已经开发了模糊感知模型,它允许我们在模糊的情况下预测有效的掩码。具体来说,我们使用32×32规则点网格来提示模型,并为每个点预测一组可能对应于有效对象的掩码。对于识别歧义的模型,如果一个点位于一个部件或子部件上,我们的模型将返回子部件、部分和整个对象。利用模型中的IoU预测模块来选择有信心的面具;此外,我们仅识别和选择了稳定的掩码(如果将概率图阈值设为0.5−δ和0.5 + δ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猛码Memmat

欢迎支持,随缘打赏 ~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值