【废话可不看】第一次有位教授给我推荐这个Model,我以为只是和往常一样,又出现一个性能稍微提升的算法模型结构,看了一眼名字“分割世间万物”,觉得是个吹水的东东,就没再往下看了。今天老板让我研究研究这个东东,作为打工人,乖乖开启了研究之旅,结果为自己的无知狠狠地打脸!
这篇文章具有划时代意义,至少代表了语义分割大模型(没有说视觉大模型,是因为还有分类和检测)的雏形,作者也很慷慨,授人以鱼且授人以渔:源码开放、模型开放、数据开放。简直太伟大!!!2023年下半年,绝对是视觉大模型的破冰之大好时机,也终于可以将处理语言类的Chat GPT智能效果转到视觉方向上来。
鉴于此,我想虚心地学习一下这篇文章,毕竟好久没有学习过了。持续记录更新。
我们介绍了 Segment Anything (SA)项目:一个基于新的任务、模型和数据集的语义分割。提出了高效的 数据收集循环 机制,建立了迄今为止最大的语义分割数据集:在1100万张经过授权的图片中标注了超过10亿个掩码图。因为设计和训练的 SAM 模型有 提示/引导 交互,因此它可以无监督学习(zero-shot)迁移到任意新的视觉任务中。我们评估了它在许多任务中的能力,发现它的无监督学习性能很棒,甚至可与之前的完全监督结果相媲美。我们在 https://segment-anything.com 上发布了模型(SAM)和包含10亿个掩码图与1100万张SA-1B的数据集,以促进对计算机视觉基础模型的研究。
在网络数据集上预训练的大型语言模型具有强大的无监督和弱监督(few-shot)泛化能力,正在彻底改变NLP。这些“基础模型”可以泛化到超越训练尺度的任务和数据分布的场景。此功能是通过一种 prompt engineering 提示引擎,即用手工制作的文本引导语言模型为当前任务生成有效的文本响应。当规使用来自网络的增量文本语料库进行训练时,这些模型的无监督和弱监督性能很棒,经验表明:随着模型规模、数据集和总训练计算量的增加,性能会有所改善。
计算机视觉领域在很小程度上也探索了基础模型,也许最突出的案例是从网络中对齐配对的文本和图像。例如,CLIP和ALIGN使用对比学习来训练文本和图像编码器,以对齐两种模态。一旦训练完成,工程化的文本提示就可以将无监督泛化到新的视觉概念和数据分布。这些编码器也可以与其他模块有效组合,以处理下游任务,例如图像生成。虽然在视觉和语言编码器方面取得了很大进展,但计算机视觉领域包含了大量超出上述尺度的问题,而最核心的问题是:不存在足够多的训练数据。
本文目标是为图像语义分割构建一个基础模型。也就是说,我们希望开发一个可提示的模型,并使用一种可以增强泛化能力的任务在广泛的数据集上对其进行预训练。在这个基础模型上,目标是使用提示工程来解决一系列具有新的数据分布的下游分割任务。
这个计划的成功取决于三个因素:task任务、model模型、data数据集。解决了关于图像分割的以下问题:
这些互相关的问题需要一个整体的解决方案。我们首先定义了一个 promptable segmentation task可提示的分割任务,该任务的通用性表现在两方面,一是可以提供强大的预训练目标,二是可以适配多种下游应用程序。这项任务需要一个支持灵活引导(supports flexible prompting)的模型,具备在交互式引导时以实时方式输出分割掩码的能力。为了训练基础模型,需要一个多样化的、规模大的数据源。很不幸,还没有用于分割的网络规模数据源;为了解决这个问题,构建了一个“data engine 数据引擎”,实现了一种迭代:即利用模型来高效协助数据收集并使用新收集的数据来优化模型。接下来首先介绍每个互关的部分,其次是如何构建的数据集,最后是演示我们方法有效性的实验。
Task任务:在NLP和最近的计算机视觉中,基础模型大有可为,可以通过使用 “prompting 引导”技术来执行对新数据集和任务的自监督和弱监督学习。受此启发,我们提出了prompted segmentation task 可引导的分割任务,其中目标是在给定任何分割引导的情况下返回有效的分割掩码(见下图1a)。
图1 我们的目标是构建分割领域的基础模型,通过三个相互关联的部分:一是引导分割任务;二是分割世间万物模型(SAM) ,通过引导工程支持数据标注并能够无监督迁移到下游任务;三是收集SA-1B的数据引擎,我们的数据集超过10亿个掩码图。
一个prompt提示只是指定图像中要分割的内容,例如,提示可以包括标识对象的空间或文本信息。有效输出掩码的要求意味着即使提示存在歧义,并且可能指向多个对象(例如,衬衫上的一个点可能表示衬衫或穿着它的人),输出应该是这些对象中至少一个的合理掩码。我们将可提示的分割任务用作预训练目标,并通过提示工程来解决一般的下游分割任务。
Model模型:引导分割任务和现实世界使用的目标对模型架构施加了约束。特别是,模型必须支持灵活引导,需要在摊销实时计算掩码以允许交互式使用,并且必须是具有歧义意识。令人惊讶的是,我们发现一个简单的设计满足了这三个约束:一个强大的图像编码器计算输入的图像;一个提示编码器用来输入引导提示;一个可以预测分割掩码的轻量级掩码解码器将两个信息源进行融合。我们将这个模型称为Segment Anything Model,或SAM(见上图1b)。通过将SAM分为图像编码器和快速引导编码器/掩码解码器,同一张输入图片(摊销成本)重复利用生成不同提示。给定输入图像,引导编码器和掩码解码器在web浏览器中预测掩码,时间约为50ms。我们专注于点、框、掩码引导,并且还提供了使用自由形式文本提示的初始结果。为了使SAM感知歧义,我们设计它针对单个引导预测多个掩码,从而使SAM能够自然地消除歧义,例如衬衫与人的例子。
Data engine 数据引擎:为了达到对新数据分布的强泛化能力,我们发现需要在大量不同的掩码上训练SAM,超出任何现有的分割数据集。尽管获取数据的典型方法是在线获取,但掩码并不具备多样性,因此我们需要另一种策略。我们的解决方案是构建了一个“数据引擎”,我们利用模型—数据标注之间迭代的方式来提升模型性能。数据引擎有三个阶段:辅助手动、半自动、全自动。展开来说:第一阶段,SAM协助标注人员标注掩码,类似于经典的交互式分割机制;第二阶段,通过引导/修正目标可能的位置,SAM可以自动为一部分对象生成掩码,标注员专注于标注剩余部分对象,以此来增加掩码多样性;第三阶段,用前景点的规则网格提示SAM,平均每幅图像产生100个高质量的掩码(这里直译是这样,我理解是用前面修正的高质量掩码去训练SAM,预测出更高质量掩码)。
Dataset 数据集:我们最终的数据集SA-1B包含来自1100万张许可和隐私保护图像的超过10亿个掩码(见下图2)。SA-1B是完全自动使用我们数据引擎的最后一个阶段收集的,是现在任何分割数据集的400多倍,并且广泛验证了掩码的高质量和多样性。除了将SA-1B用于训练SAM以变得强大和普遍之外,我们希望SA-1B成为研究新的基础模型的有价值的资源。(太伟大了!!!)
图2 这些掩码是由SAM完全自动标注的,正如我们通过人工评分和大量实验验证的那样,它们具有高质量和多样性。我们根据每个图像的掩模数量对图像进行分组,以实现可视化(平均每个图像有大约 100个掩模)。
Responsible 免责的AI:我们研究并报备案了使用SA-1B和SAM时可能存在的公平性问题和偏见。信仰有祖国,科学无国界(这段话我实在是不会翻译了,只能想到这句话来体现意境)。我们在附录中提供了模型和数据集卡。
Experiments 实验:我们广泛评估SAM。首先,使用一套新的23个多样化的分割数据集,我们发现SAM从单个前景点产生高质量的掩码,通常只是略低于手动标注的Ground Truth真值。其次,我们无监督迁移证明了在各种下游任务中可以体现出强大的定量和定性结果,包括 edge detection 边缘检测,object proposal generation对象建议生成,instance segmentation 实例分割和text-to-mask prediction文本到掩码预测的初步探索。这些结果表明,SAM可以在提示引擎下使用,以解决超出SAM的训练数据的涉及对象和图像分布的各种任务。然而,仍有改进的空间,我们在第8节中讨论。