【论文阅读笔记】Segment Anything

1. 论文介绍

Segment Anything

分割任意物体

2023年 发表在ICCV
Paper Code demo

2.摘要

我们介绍Segment Anything(SA)项目:用于图像分割的新任务、模型和数据集。在数据收集循环中使用我们的高效模型,我们构建了迄今为止最大的分割数据集,在1100万张许可和隐私保护图像上拥有超过10亿个掩码。该模型被设计和训练为可提示的,因此它能够在没有见过的图像数据分布和任务上进行零样本学习。我们评估了它在许多任务上的能力,发现它的零样本学习能力令人印象深刻-在某些情况下具有竞争力,甚至可能优于之前的完全监督结果。我们将在https://segment-anything.com上发布Segment Anything Model(SAM)和相应的数据集(SA-1B),其中包含1B个掩码和11 M个图像,以促进对计算机视觉基础模型的研究。

Keywords: 零样本学习zero shot transfer,可提示的,大模型

zero shot transfer,零样本迁移,是指没有目标域的标签直接从源域到目标域的预测。

3. Introduction

在网络规模数据集上预训练的大型语言模型正在以强大的零样本或少样本泛化能力彻底改变NLP 。这些"基础模型"可以推广到训练过程中所见之外的任务和数据分布。这种能力通常是通过提示工程来实现的,在提示工程中,手工制作的文本用于提示语言模型为手头的任务生成有效的文本响应。当使用来自网络的大量文本语料库进行缩放和训练时,这些模型的零和少样本性能与微调模型媲美。

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

本文的目标是建立一个图像分割的基础模型。也就是说,我们寻求开发一个可扩展的模型,并使用一个能够实现强大泛化的任务在广泛的数据集上对其进行预训练。通过该模型,我们旨在使用快速工程解决新数据分布上的一系列下游分段问题。这个计划的成功取决于三个组成部分:任务、模型和数据。为了开发它们,我们解决了以下有关图像分割的问题:

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

首先定义一个可扩展的分割任务,该任务足够通用,可以提供强大的预训练目标,并支持广泛的下游应用。此任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码以允许交互式使用。为了训练我们的模型,我们需要一个多样化的、大规模的数据源,所以构建了一个"数据引擎",来帮助数据收集和使用新收集的数据来改进模型之间迭代。

Task任务

基础模型可以通过使用"提示"技术对新的数据集和任务进行零次和少次学习。受此工作的启发,我们提出了可扩展的分割任务,其目标是在给定任何分割提示的情况下返回一个有效的分割掩码 (见下图)。提示符简单地指定要在图像中分割的内容,例如,提示可以包括标识对象的空间或文本信息。有效输出掩码的要求意味着,即使提示是模糊的,并且可能引用多个对象(例如,衬衫上的一个点可能指示衬衫或穿着它的人),输出也应该是这些对象中至少一个的合理掩码。它使用可扩展分割任务作为预训练目标,并通过即时工程 解决一般下游分割任务。

Model模型

可提示的分割任务和实际应用目标对模型架构施加了限制。特别是,模型必须支持灵活的提示 ,需要在摊销的实时性 下计算掩码以允许交互使用,并且必须具有模糊感知 能力。令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:一个强大的图像编码器 计算图像嵌入,一个提示编码器 嵌入提示,然后两个信息源在一个轻量级的掩码解码器 中被组合起来,以预测分割掩码。我们将这个模型称为"分割任何东西模型",或SAM(见下图)。通过将SAM分解为图像编码器和快速提示编码器/掩码解码器,可以重复使用相同的图像嵌入(并摊销其成本)以不同的提示。给定一个图像嵌入,提示编码器和掩码解码器在Web浏览器中预测出一个提示的掩码需要约50ms。我们关注掩码 提示,并且还展示了使用自由形式文本 提示的初步结果。为了使SAM具有模糊感知能力,我们设计它以预测单个提示的多个掩码,从而使SAM可以自然地处理模糊性。

数据引擎

为了实现对新数据分布的强大泛化能力,我们发现有必要训练SAM使用大量且多样化的掩码,超出了已经存在的任何分割数据集。虽然典型的基础模型获取数据的方法是在线获取,但是掩码并不是自然丰富的,因此我们需要一种替代策略。我们的解决方案是构建一个"数据引擎",即我们与模型联动地开发模型的数据集标注(见下图)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM协助标注者标注掩码,类似于经典的交互式分割设置。在第二阶段,SAM可以通过提示可能的对象位置自动生成部分对象的掩码,标注者专注于标注剩余的对象,帮助增加掩码的多样性。在最后阶段,我们使用正常的前景点网格提示SAM,平均每张图像产生约100个高质量的掩码。

3. 分割任务的基础模型

先来解决基础大模型在分割任务中的行为逻辑问题。上面说了基础模型的组织方式,下面详解图像分割任务的。

基础模型通过学习如何预测下一个词来理解语言的结构和语义,然后通过合适的提示将这种理解应用于解决各种具体的任务,比如文本分类、机器翻译等。受NLP的启发,本文任务致力于通过学习图像的结构和语义来进行预训练,然后通过适当的提示将这种理解应用于解决各种与图像分割相关的具体任务。

Task

提示可以是一组前景/背景点粗糙的框或掩模自由形式的文本,或者一般而言,指示在图像中分割什么的任何信息。然后,可提示的分割任务是在给出任何提示的情况下返回有效的分割掩码。"有效"掩码的要求仅仅意味着即使提示是模糊的并且可能引用多个对象,输出应该是至少一个对象的合理掩码。这个要求类似于期望语言模型对一个模糊的提示输出一个连贯的响应。我们选择这个任务是因为它导致了一个自然的预训练算法和一个通用的方法,用于通过提示将零样本迁移到下游分割任务

预训练

可提示的分割任务指模拟提示序列的自然预训练算法(例如,点,框,面具),并将模型的掩膜预测与真实gt进行比较。我们从交互式分割中调整了这种方法,交互式分割的目标是在足够的用户输入后最终预测有效的掩码,我们的目标是始终预测任何提示的有效掩码,即使提示是模糊的。这确保了预先训练的模型在涉及模糊性的用例中是有效的,包括我们的数据引擎所要求的自动注释。在这项任务中表现出色是一项挑战,需要专门的建模和训练损失选择。

零样本迁移

直觉上,我们的预训练任务赋予模型在推理时对任何提示做出适当响应的能力,因此下游任务可以通过设计适当的提示来解决。例如,如果有一个猫的边界框检测器,猫实例分割可以通过将检测器的框输出作为我们模型的提示来解决。一般来说,一系列实际的分割任务可以作为提示。

4. 网络模型详解

接下来,将描述用于可解释分割的分割任意模型(SAM)。SAM有三个组件,如下图所示:图像编码器、灵活的提示编码器和快速掩码解码器。建立在Transformer视觉模型上,并对(摊销)实时性能进行了特定的权衡。

图像编码器

一般来说,图像编码器可以是任何输出C×H×W图像嵌入的网络。出于可扩展性和获得强大的预训练的动机,我们使用MAE预训练的Vision Transformer(ViT),具有最小限度的适应性来处理高分辨率输入,特别是具有14×14窗口注意力和四个等间距全局注意力块的ViT-H/16。图像编码器在每个图像上运行一次,并可在提示模型之前应用。图像编码器的输出是输入图像的16倍缩小嵌入。由于我们的运行时目标是实时处理每个提示,我们可以承受大量的图像编码器FLOP,因为它们只在每个图像上计算一次,而不是每个提示。遵循标准做法,我们使用通过重新缩放图像并填充短边获得的1024×1024的输入分辨率。因此,图像嵌入为64×64。为了减少通道维数,、我们使用1×1卷积来获得256个通道,然后使用3×3卷积也有256个通道。每个卷积之后都是层归一化[4]。

提示编码器

我们考虑两组提示:稀疏(点、框、文本)和密集(mask)。我们通过位置编码和学习到的嵌入来表示点和框,并使用CLIP 中现成的文本编码器来表示每种提示类型和自由格式文本。密集提示(即:掩模)被嵌入,并与图像嵌入一起逐元素求和。

稀疏提示映射到256维向量嵌入。一个点被表示为该点位置的位置编码和两个学习嵌入中一个的总和,这两个嵌入指示该点是在前景还是背景中。框由嵌入对表示:(1)其左上角的位置编码与表示"左上角"的学习嵌入求和,以及(2)相同的结构,但使用指示"右下角"的学习嵌入。最后,为了表示自由格式的文本,我们使用CLIP中的文本编码器(通常任何文本编码器都是可能的)。

密集提示(即:掩模)具有与图像的空间对应性。我们以比输入图像低4倍的分辨率输入掩码,然后分别使用输出通道4和16使用两个2×2,步幅-2卷积来缩小额外的4倍。最后一个1×1卷积将通道维度映射为256。每一层都由GELU激活和层归一化分开。掩膜和图像嵌入被逐元素加和。如果没有蒙版提示,则将表示"无蒙版"的学习嵌入添加到每个图像嵌入位置。

掩膜解码器(轻量级)

有效地将图像嵌入、提示嵌入和输出token映射到掩码。该设计采用了Transformer解码器块的修改,随后是动态掩码预测头。我们的改进解码器模块在两个方向上(提示到图像嵌入和相反)使用提示自注意和交叉注意来更新所有嵌入。在运行两个块之后,我们对图像嵌入进行上采样,MLP将输出令牌映射到动态线性分类器,然后计算每个图像位置的掩码前景概率。

解决歧义。对于一个输出,如果给出模糊的提示,模型将对多个有效掩码进行平均。为了解决这个问题,我们修改了模型,以预测单个提示的多个输出掩码,我们发现3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练中,我们只支持最小的loss。为了对掩模进行排名,模型预测置信度分数(即,估计的IoU)。

该模块有效地将图像嵌入和一组提示嵌入映射到输出掩码。为了联合收割机这些输入,我们修改标准的Transformer解码器。在应用我们的解码器之前,我们首先在提示嵌入集合中插入一个学习的输出标记嵌入,该标记将在解码器的输出中使用,类似于[33]中的[class]标记。为了简单起见,我们将这些嵌入(不包括图像嵌入)统称为"令牌"。我们的解码器设计如图14所示。每个解码器层执行4个步骤:(1)对标记的自关注,(2)从标记(作为查询)到图像嵌入的交叉关注,(3)逐点MLP更新每个标记,以及(4)从图像嵌入(作为查询)到标记的交叉关注。最后一步使用提示信息更新图像嵌入。在交叉注意期间,图像嵌入被视为642个256维向量的集合。每个自我/交叉注意力和MLP在训练时都有一个残差连接,层归一化和0.1的dropout 。下一个解码器层从前一层获取更新的令牌和更新的图像嵌入。我们使用两层解码器。为了确保解码器可以访问关键的几何信息,每当位置编码参与注意层时,它们都会被添加到图像嵌入中。此外,整个原始提示标记(包括它们的位置编码)在它们参与注意层时被重新添加到更新的标记中。这允许对提示标记的几何位置和类型的强烈依赖。

运行解码器后,我们使用两个转置卷积对更新后的图像嵌入进行4倍上采样,然后,tokens再次参与图像嵌入,我们将更新的输出token嵌入传递给一个小的3层MLP,该MLP输出与放大图像嵌入的通道维度匹配的向量。最后,我们预测一个面具与空间逐点产品之间的放大图像嵌入和MLP的输出。Transformer使用的嵌入维数为256。Transformer MLP块具有2048的大的内部尺寸,但是MLP仅应用于相对较少(很少大于20)的提示令牌。然而,在交叉注意层中,我们有一个64×64的图像嵌入,为了提高计算效率,我们将查询,键和值的通道维度减少了2× 128。所有注意力层使用8个头。用于放大输出图像嵌入的转置卷积是2×2,步幅2,输出通道尺寸为64和32,并且具有GELU激活。它们通过层归一化分离。

5.数据引擎

由于互联网上的分割掩码并不丰富,我们构建了一个数据引擎来收集我们的1.1B掩码数据集SA-1B。数据引擎有三个阶段:(1)模型辅助的手动注释阶段,(2)混合自动预测掩码和模型辅助注释的半自动阶段,以及(3)完全自动的阶段,其中我们的模型在没有注释者输入的情况下生成掩码。

辅助手动阶段。在第一阶段,类似于经典的交互式分割,一组专业注释人员通过使用SAM支持的基于浏览器的交互式分割工具单击前景/背景对象点来标记遮罩。蒙版可以使用pixelprecise的"画笔"和"橡皮擦"工具进行优化。我们的模型辅助注释直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互式体验。我们没有对标记对象施加语义约束,注释者可以自由地标记"stuff"和"things"。我们建议注释者标注他们可以命名或描述的对象,但没有收集这些名称或描述。注释者被要求按突出顺序标记对象,并被鼓励在一个遮罩注释时间超过30秒时继续下一个图像。

在此阶段开始时,SAM使用常见的公共分割数据集进行训练。在充分的数据注释之后,仅使用新注释的掩码重新训练SAM。随着越来越多的掩膜被收集,图像编码器从ViT-B扩展到ViT-H,其他架构细节也随之演变;我们总共重新训练了我们的模型6次。随着模型的改进,每个掩码的平均注释时间从34秒减少到14秒。我们注意到,14秒比COCO的掩码注释快6.5倍,比使用极值点的边界框标记慢2倍。随着SAM的改进,每个图像的平均掩码数量从20个增加到44个掩码。总的来说,我们在这个阶段从12万张图像中收集了430万张掩膜。

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

全自动阶段。在最后阶段,注释是全自动的。这是可行的,因为我们的模型有两个主要的改进。首先,在这个阶段开始时,我们已经收集了足够的面具,以大大改善模型,包括从上一阶段的各种面具。第二,到这个阶段,我们已经开发了模糊感知模型,它允许我们预测有效的掩码,即使在模糊的情况下。具体来说,我们用一个32×32的规则网格点来提示模型,并为每个点预测一组可能对应于有效对象的掩码。使用模糊感知模型,如果一个点位于一个部分或子部分上,我们的模型将返回子部分、部分和整个对象。我们的模型的IoU预测模块用于选择置信掩码;此外,我们只识别和选择稳定的掩码(如果将概率图阈值设置为0.5 − δ和0.5 + δ,则我们认为掩码是稳定的)。最后,在选择了可靠和稳定的掩码后,我们应用非最大抑制(NMS)来过滤重复。为了进一步提高较小掩模的质量,我们还处理了多个重叠的放大图像裁剪。我们对数据集中的所有1100万张图像应用了全自动蒙版生成,总共生成了110万张高质量蒙版。

6.数据集

数据集SA-1B由1100万个不同的、高分辨率的、许可的和隐私保护的图像和1.1B个高质量的分割掩码组成,这些图像是通过我们的数据引擎收集的。我们将SA-1B与现有的数据集进行比较,并分析了掩膜的质量和属性。我们正在发布SA-1B,以帮助未来开发计算机视觉的基础模型。我们注意到SA-1B将根据有利的许可协议发布,用于某些研究用途,并保护研究人员。

图像。从一家直接与摄影师合作的提供商那里获得了一套新的1100万张图像的许可。这些图像具有高分辨率(平均3300×4950像素),由此产生的数据大小可能会带来可访问性和存储挑战。因此,我们发布的是降采样图像,其最短边设置为1500像素。即使在下采样之后,我们的图像的分辨率也明显高于许多现有的视觉数据集(例如,COCO 图像的像素约为480×640)。请注意,目前大多数模型的输入分辨率都要低得多。在公布的图像中,人脸和车牌都被模糊了。

掩码。数据引擎生成了11亿个掩码,其中99.1%是全自动生成的。因此,自动掩模的质量至关重要。我们将它们直接与专业注释进行比较,并查看各种掩码属性与突出的分割数据集的比较情况。自动掩码对于训练模型是高质量和有效的。受这些发现的激励,SA-1B只包括自动生成的掩码。

掩码质量。为了评估掩码质量,我们随机抽取了500张图像(约50 k个蒙版),并要求我们的专业注释人员提高这些图像中所有蒙版的质量。注释器使用我们的模型和像素精确的"画笔"和"橡皮擦"编辑工具来完成此操作。这一过程产生了成对的自动预测和专业校正的掩码。我们计算了每对之间的IoU,发现94%的对具有大于90%的IoU(并且97%的对具有大于75%的IoU)。为了进行比较,之前的工作估计注释者之间的一致性为85-91% IoU。通过人工评分证实,相对于各种数据集,掩码质量较高,并且在自动掩码上训练我们的模型几乎与使用数据引擎生成的所有掩码一样好。

相关推荐
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
A-超8 小时前
vue3展示pag格式动态图
笔记
u0101526588 小时前
STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
笔记·stm32·学习
weixin_518285058 小时前
深度学习笔记10-多分类
人工智能·笔记·深度学习
丘狸尾8 小时前
ubuntu【桌面】 配置NAT模式固定IP
笔记
王俊山IT9 小时前
C++学习笔记----10、模块、头文件及各种主题(二)---- 预处理指令
开发语言·c++·笔记·学习
慕卿扬9 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
齐 飞11 小时前
MongoDB笔记02-MongoDB基本常用命令
前端·数据库·笔记·后端·mongodb
flying robot11 小时前
Go结构体(struct)
笔记