Segment Anything(论文解析)

Segment Anything

    • 摘要
    • 1.介绍
    • 2 SAM任务
    • SAM模型

摘要

我们介绍了“Segment Anything” (SA) 项目:这是一个新的任务、模型和数据集对于图像分割。使用我们高效的模型进行数据收集,我们构建了迄今为止最大的分割数据集(远远超过其他数据集),其中包含了超过10亿个掩膜,覆盖了1100万张经过许可和尊重隐私的图像。该模型被设计和训练为可提示的,因此可以实现零次学习,适用于新的图像分布和任务。我们在多个任务上评估了它的性能,并发现它的零次学习性能令人印象深刻,通常可以与先前的完全监督结果相竞争甚至更优越。我们发布了“Segment Anything Model” (SAM) 和相应的数据集(SA-1B),其中包含10亿个掩膜和1100万张图像,网址为https://segment-anything.com,旨在促进计算机视觉基础模型的研究。

1.介绍

在大规模的基于网络的数据集上预训练的大型语言模型正在通过强大的零次学习和少次学习泛化[10] 彻底改变自然语言处理领域。这些“基础模型”[8] 能够泛化到训练期间未曾见过的任务和数据分布。这一能力通常通过提示工程来实现,其中手工创建的文本用于提示语言模型生成任务所需的有效文本响应。当这些模型使用来自网络的大量文本语料库进行扩展和训练时,它们的零次学习和少次学习性能出奇地与微调模型相媲美(在某些情况下甚至匹敌)[10, 21]。经验性趋势显示,这种行为随着模型规模、数据集大小和总训练计算资源的增加而得到改进[56, 10, 21, 51]。

尽管规模较小,但基础模型在计算机视觉领域也受到了研究。也许最明显的例子是从网络中对齐文本和图像的工作。例如,CLIP [82] 和ALIGN [55] 使用对比学习来训练文本和图像编码器,以使这两种模态对齐。一旦训练完成,通过精心设计的文本提示可以实现零次泛化,用于新颖的视觉概念和数据分布。这种编码器还可以与其他模块有效地组合,以实现下游任务,如图像生成(例如DALL·E [83])。尽管在视觉与语言编码器方面取得了很大进展,但计算机视觉涵盖了许多超出此范围的问题,而对于其中许多问题,没有丰富的训练数据。

在这项工作中,我们的目标是构建一个用于图像分割的基础模型。也就是说,我们希望开发一个可提示的模型,并在广泛的数据集上进行预训练,使用一个能够进行强大泛化的任务。借助这个模型,我们的目标是使用提示工程方法解决新的数据分布上的各种下游分割问题。

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

  1. 什么任务将实现zero-shot泛化?
  2. 对应的模型架构是什么?
  3. 什么数据可以支持这一任务和模型?

这些问题相互关联,需要综合解决。我们从定义一个可提示的分割任务开始,该任务足够通用,提供了强大的预训练目标,并能够支持广泛的下游应用。这个任务需要一个支持灵活提示并能够在实时提示时输出分割掩膜的模型,以支持交互式使用。为了训练我们的模型,我们需要一个多样化、大规模的数据来源。不幸的是,目前没有用于分割的大规模Web数据源;为了解决这个问题,我们构建了一个"数据引擎",即我们在使用我们高效的模型协助数据收集和使用新收集的数据来改进模型之间进行迭代。接下来,我们将介绍每个相互关联的组件,然后介绍我们创建的数据集以及展示我们方法的有效性的实验。

任务(§2)。在自然语言处理领域,以及最近在计算机视觉领域,基础模型是一个具有潜力的发展方向,它可以通过使用“提示”技术通常执行对新数据集和任务的零样本学习和少样本学习。受到这一领域工作的启发,我们提出了可提示的分割任务,其目标是根据任何分割提示返回有效的分割掩码(见图1a)。提示简单地指定了要在图像中分割的内容,例如,提示可以包括标识对象的空间或文本信息。有效的输出掩膜要求即使在提示模糊不清且可能涉及多个对象的情况下(例如,衬衫上的一个点可能既指衬衫又指穿戴者),输出应该是至少一个对象的合理掩膜。我们将可提示的分割任务用作预训练目标,以及通过提示工程解决通用的下游分割任务。

在这里插入图片描述
图1:我们旨在通过引入三个互相关联的组件来构建一个分割的基础模型:一个可提示的分割任务,一个用于数据注释并通过提示工程实现对一系列任务的零次转移的分割模型(SAM),以及用于收集SA-1B的数据引擎,这是我们的数据集,包含超过10亿个掩膜。

模型(§3)。可提示的分割任务和实际应用目标对模型架构施加了一些约束。特别是,模型必须支持灵活的提示,需要在摊销的实时内计算掩膜以允许交互使用,并且必须具备模糊感知能力。令人惊讶的是,我们发现一个简单的设计满足了这三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后这两个信息源在一个轻量级的掩膜解码器中组合,用于预测分割掩膜。我们将这个模型称为"Segment Anything Model",或SAM(见图1b)。通过将SAM分为图像编码器和快速提示编码器/掩膜解码器,可以重复使用相同的图像嵌入(并摊销其成本)进行不同提示的操作。给定图像嵌入,提示编码器和掩膜解码器从提示中预测出一个掩码,在Web浏览器中以约50毫秒的速度进行操作。我们专注于点、框和掩码提示,并还提供了使用自由文本提示的初始结果。为了使SAM具备模糊感知能力,我们设计它可以为单个提示预测多个掩码,从而使SAM能够自然地处理模糊情况,比如衬衫与人的示例。

数据引擎(§4)。为了实现对新数据分布的强大泛化,我们发现有必要让SAM在大规模和多样化的掩码集上进行训练,超出了任何已经存在的分割数据集。对于基础模型来说,通常的方法是在线获取数据[82],但掩码并不是自然丰富的,因此我们需要一种替代策略。我们的解决方案是构建一个"数据引擎",也就是说,我们与模型在数据标注中共同开发(见图1c)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM协助标注员进行掩码标注,类似于经典的交互式分割设置。在第二阶段,SAM可以通过提示它可能的对象位置来自动生成部分对象的掩码,而标注员则专注于标注其余对象,有助于增加掩码的多样性。在最后一个阶段,我们使用前景点的常规网格提示SAM,从而平均每个图像产生约100个高质量的掩膜。

数据集(§5)。我们的最终数据集,SA-1B,包括来自1100万受许可且保护隐私的图像的超过10亿个掩码(见图2)。SA-1B是完全自动收集的,使用了我们数据引擎的最后阶段,它拥有比任何现有分割数据集[66, 44, 117, 60]多400倍的掩膜数量,而且如我们广泛验证的那样,这些掩膜质量高且多样化。除了在训练SAM以使其更强大和通用方面的用途,我们希望SA-1B成为旨在构建新的基础模型的研究的有价值的资源。

责任AI(§6)。我们研究并报告了在使用SA-1B和SAM时可能存在的公平性关切和偏见。SA-1B中的图像跨足了各种地理和经济多样化的国家,我们发现SAM在不同人群中表现相似。我们希望这将使我们的工作在实际应用中更加公平。我们在附录中提供了模型和数据集卡片。

实验(§7)。我们对SAM进行了广泛的评估。首先,使用一套多样化的23个分割数据集,我们发现SAM从单个前景点生成的掩模质量很高,通常只略低于手动注释的地面实况。其次,我们在使用提示工程的零照射转移协议下,在各种下游任务上得到了一致强大的定量和定性结果,包括边缘检测、目标提议生成、实例分割,以及对文本到掩模预测的初步探索。这些结果表明,SAM可以立即使用提示工程来解决涉及SAM培训数据之外的对象和图像分布的各种任务。然而,仍然有改进的空间,我们将在第8节中讨论。

发布.我们正在发布SA-1B数据集用于研究目的,并在https://segment-anything.com上以许可的开放许可证(Apache 2.0)提供SAM。我们还通过在线演示展示了SAM的功能。
在这里插入图片描述
图2:示例图像,上面叠加了我们新引入的数据集SA-1B的掩膜。SA-1B包含了1100万多样化的、高分辨率的、经过许可的、以及保护隐私的图像和11亿高质量的分割掩膜。这些掩膜是由SAM完全自动注释的,并经过人工评分和众多实验的验证,质量和多样性都很高。我们按每个图像的掩膜数量对图像进行分组以进行可视化(平均每个图像有大约100个掩膜)。

2 SAM任务

我们受到了自然语言处理领域的启发,那里的下一个标记预测任务被用于基础模型的预训练以及通过提示工程解决多种下游任务[10]。为了构建分割的基础模型,我们的目标是定义一个具有类似功能的任务。

任务。我们首先将从自然语言处理领域的“提示”概念转化为分割领域,其中提示可以是一组前景/背景点、粗略的框或掩模、自由文本,或者一般来说,任何指示图像中要分割的内容的信息。因此,可提示的分割任务是在给定任何提示的情况下返回有效的分割掩模。 “有效” 掩模的要求简单地意味着,即使提示有歧义并且可能涉及多个对象(例如,回想一下衬衫与人的例子,参见图3),输出应对其中至少一个对象生成一个合理的掩模。这一要求类似于期望语言模型对模糊的提示产生连贯的响应。我们选择这个任务,因为它会导致一种自然的预训练算法,以及通过提示实现零-shot迁移到下游分割任务的通用方法。

在这里插入图片描述
图3:每列显示SAM从单个模糊点提示(绿色圆圈)生成的3个有效掩码。

预训练。可提示的分割任务建议了一种自然的预训练算法,该算法模拟了每个训练样本的一系列提示(例如,点、框或掩模),并将模型的掩模预测与地面实况进行比较。我们改编了这种方法自交互式分割(interactive segmentation)[109, 70],尽管与交互式分割的目标是在获得足够用户输入后最终预测一个有效的掩模不同,我们的目标是在任何提示下始终预测一个有效的掩模,即使提示具有歧义。这确保了预训练模型在涉及歧义的使用案例中的有效性,包括我们数据引擎 §4 中所需的自动注释。我们注意到,在这个任务中表现良好是具有挑战性的,需要专门的建模和训练损失选择,这些内容我们在第3节中进行了讨论。

零次迁移。直观地说,我们的预训练任务使模型在推断时具备对任何提示做出适当响应的能力,因此可以通过设计适当的提示来解决下游任务。例如,如果有一个用于检测猫的边界框检测器,那么可以通过将检测器的边界框输出作为提示提供给我们的模型来解决猫实例分割问题。一般来说,许多实际的分割任务都可以通过提示来完成。除了用于自动数据集标记之外,在我们的实验中,我们还探索了五个不同的示例任务,具体内容在第7节中介绍。

相关任务。分割是一个广泛的领域:包括交互式分割、边缘检测、超像素生成、对象提议生成、前景分割、语义分割、实例分割、全景分割等。我们的可提示分割任务的目标是创建一个通用模型,能够通过提示工程适应许多(尽管不是所有)现有和新的分割任务。这种能力是一种任务泛化的形式。请注意,这与以前的多任务分割系统不同。在多任务系统中,单一模型执行一组固定的任务,例如联合语义、实例和全景分割,但训练和测试任务是相同的。我们工作的一个重要区别在于,通过训练可提示分割模型,该模型可以在推断时通过充当较大系统的组件来执行新的不同任务,例如,要执行实例分割,可提示分割模型与现有的对象检测器组合在一起。

讨论。提示和组合是强大的工具,使单个模型可以以可扩展的方式使用,潜在地可以执行在模型设计时不知道的任务,这与其他基础模型的使用方式类似,例如,CLIP是DALL·E图像生成系统的文本-图像对齐组件。我们预计,可组合的系统设计,借助提示工程等技术,将实现比专门针对一组固定任务训练的系统更多样的应用。此外,通过组合的角度来看,有趣的是可提示分割和交互式分割:尽管交互式分割模型是为人类用户设计的,但经过可提示分割培训的模型也可以组合到更大的算法系统中,正如我们将在示例中演示的。

SAM模型

接下来,我们将介绍用于可提示分割的Segment Anything Model(SAM)。SAM有三个组件,如图4所示:图像编码器、灵活的提示编码器和快速掩膜解码器。我们基于具有特定折衷的变压器视觉模型[14, 33, 20, 62]来实现(摊销)实时性能。我们在这里以高层次介绍这些组件,详细信息请参阅§A。

在这里插入图片描述
图 4:Segment Anything Model(SAM)概述。重量级图像编码器输出图像嵌入,然后可以通过各种输入提示进行高效查询,以以摊销的实时速度生成对象掩膜。对于与多个对象对应的模糊提示,SAM可以输出多个有效掩码和相关的置信度分数。

图像编码器。出于可伸缩性和强大的预训练方法的动机,我们使用了经MAE [47]预训练的Vision Transformer(ViT)[33],经过最小的自适应处理以处理高分辨率的输入[62]。图像编码器每张图片运行一次,并可以在提示模型之前应用。

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

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

解决模糊性。使用一个输出,如果给出模糊提示,模型将综合多个有效的掩膜。为了解决这个问题,我们修改了模型,以便为单个提示预测多个输出掩膜(参见图3)。我们发现3个掩膜输出足以处理大多数常见情况(嵌套掩码通常最多三层深:整体、部分和子部分)。在训练过程中,我们仅反向传播相对于掩膜的最小损失[15, 45, 64]。为了对掩膜进行排名,模型预测了每个掩膜的置信分数(即估计的IoU)。

效率。总体模型设计在很大程度上受效率的启发。在给定预计算的图像嵌入的情况下,提示编码器和掩码解码器在Web浏览器上以CPU方式运行,耗时约为50毫秒。这种运行时性能使我们的模型可以无缝、实时地进行交互提示。

损失和训练。我们使用在[14]中使用的焦点损失[65]和Dice损失[73]的线性组合来监督掩码预测。我们使用几何提示的混合来训练提示性分割任务(有关文本提示,请参见第7.5节)。按照[92, 37]的方法,我们通过在每个掩码的11轮中随机采样提示来模拟交互式设置,使SAM能够无缝地集成到我们的数据引擎中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/138868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络解析(二)

ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。 ICMP 相当于网络世界的侦察兵。我讲了两种类型的 ICMP 报文,一种是主动探查的查询报文,一种异常报告的差错报文; ping 使用查询报文,Traceroute 使用差错报文。 IP和…

如何修改运行中的docker容器的端口映射

一、必须先关闭docker服务 systemctl stop docker二、修改容器的hostconfig.json 文件 路径:vim /var/lib/docker/containers/容器id/hostconfig.json 修改 PortBindings 属性,如下图: 然后保存 三、修改config.v2.json 文件 路径&#…

RT-Thread学习笔记(三):线程管理

线程管理 线程管理相关概念什么是时间片轮转调度器锁线程运行机制线程的五种状态 动态和静态创建线程区别动态和静态创建线程优缺点RT-Thread动态线程管理函数动态创建线程动态删除线程 RT-Thread静态线程管理函数静态创建线程 线程其他操作线程启动线程延时获得当前执行的线程…

五、WebGPU Vertex Buffers 顶点缓冲区

五、WebGPU Vertex Buffers 顶点缓冲区 在上一篇文章中,我们将顶点数据放入存储缓冲区中,并使用内置的vertex_index对其进行索引。虽然这种技术越来越受欢迎,但向顶点着色器提供顶点数据的传统方式是通过顶点缓冲和属性。 顶点缓冲区就像任…

手写一个PrattParser基本运算解析器3: 基于Swift的PrattParser的项目概述

点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的 编译原理, 虽然内容丰富, 但是着实抽象难懂. 无意间看到B站的熊爷关于普拉特解析器相关内容, 感觉是一个非常好的切入点.所以就写了基于Swift版…

【网络安全 --- win10系统安装】win10 系统详细安装过程(提供资源)

一,资源下载 百度网盘镜像下载地址链接: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.ba…

自定义Docker镜像--Jupyterlab

概述 自定义Jupyterlab镜像,为deployment做准备 步骤 下载基础镜像:centos:7.9.2009 docker search centos:7.9.2009 docker pull centos:7.9.2009 启动容器 部署应用 # 启动容器 docker run -it --name test centos:7.9.2009 bash# 在容器内部署…

4K壁纸小程序源码 全内容自动采集

全内容自动采集 4K壁纸小程序源码,带流量主。用的都是一个接口,不过这个不知是谁改的,成了LSP版,是真色啊,专搜小姐姐。 4K壁纸,静态壁纸,头像等都有保留,界面广告位很多&#xff0c…

手机通过WiFi连接调试UR机器人

1.测试物料 1.1ur机器人 https://item.taobao.com/item.htm?spma1z10.1-c.w4004-25069442759.18.2ff56d6bmuxX0Z&id740002623764 1.2 路由器(TPLINK) https://detail.tmall.com/item.htm?abbucket7&id548610924784&ns1&spma21n57.1.…

英国人工智能公司【TitanML】完成280万美元融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于英国伦敦的人工智能公司【TitanML】近期宣布已完成280万美元种子轮融资,该公司的产品允许机器学习团队部署大型语言模型(llm)。 本轮融资由Octopus Ventures领投,还…

Linux中的主要系统调用

Linux 操作系统中就是创建进程。创建进程的系统调用叫fork。在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(C…

Redux详解(二)

1. 认识Redux Toolkit Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法。 通过传统的redux编写逻辑方式,会造成文件分离过多,逻辑抽离过于繁琐(具体可看上篇文章 Redux详解一),React官方为解决这一问题,推…