Segment Anything文章要点

news2025/7/13 18:05:04

核心方法:

1. 数据

Unfortunately, there is no web-scale data source for segmentation; to address this, we build a “data engine”
没有大规模的数据源用于分割; 为了解决这个问题,我们构建了一个“数据引擎”

We iterate between using our efficient model to assist in data collection and using the newly collected data to improve the model.
在使用我们的高效模型来辅助数据收集和使用新收集的数据来改进模型之间进行迭代

Inspired by this line of work, we propose the promptable segmentation task, where the goal is to return a valid segmentation mask given any segmentation prompt. A prompt simply specifies what to segment in an image, e.g., a prompt can include spatial or text information identifying an object.

2. 任务

我们提出了可提示分割任务,其目标是在给定任何分割提示时返回有效的分割掩码。prompt示例:

在这里插入图片描述

We use the promptable segmentation task as both a pre-training objective and to solve general downstream segmentation tasks via prompt engineering.
我们使用提示分割任务作为预训练目标,并通过提示工程解决一般的下游分割任务。

3. 模型

a powerful image encoder computes an image embedding, a prompt encoder embeds prompts, and then the two information sources are combined in a lightweight mask decoder that predicts segmentation masks.
一个图像编码器,一个提示编码器,然后将两个信息源组合在一个轻量级的掩码解码器中,预测分割掩码。我们把这个模型称为分段任意模型(Segment Anything model),或SAM
在这里插入图片描述
We focus on point, box, and mask prompts, and also present initial results with free-form text prompts. To make SAM ambiguity-aware, we design it to predict multiple masks for a single prompt allowing SAM to naturally handle ambiguity, such as the shirt vs. person example.
我们主要关注点、框和掩码提示,并使用自由形式的文本提示来呈现初始结果。为了使SAM能够识别歧义,我们将其设计为为单个提示预测多个掩码,允许SAM自然地处理歧义,例如衬衫vs.人的示例。

4. 数据引擎

在这里插入图片描述

为了实现对新数据分布的强泛化,我们发现有必要在一个大而多样的掩码集上训练SAM,而不是任何已经存在的分割数据集。虽然基础模型的典型方法是在线获取数据,但掩码自然并不丰富,因此我们需要一种替代策略。我们的解决方案是构建一个“数据引擎”,即 we co-develop our model with model-in-the-loop dataset annotation。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM帮助标注员标注掩码,类似于经典的交互式分割设置。在第二阶段,SAM可以自动为对象的一个子集生成掩码,方法是提示它可能的对象位置,而标注员则专注于标注剩余的对象,这有助于增加掩码的多样性。在最后阶段,我们用前景点的规则网格提示SAM,平均每张图像产生约100个高质量蒙版。

5. 最终的SA-1B数据集

11M个图像的超过1B个掩码。使用data engine最后阶段完全自动收集,比任何现有的分割数据集拥有多400倍的掩码。

6. SAM

We take inspiration from NLP, where the next token prediction task is used for foundation model pre-training and to solve diverse downstream tasks via prompt engineering. To build a foundation model for segmentation, we aim to define a task with analogous capabilities.

收到NLP启发, 即next token prediction任务被当成一个预训练任务,然后通过prompt engineering来解决下游的其他任务。为了建立一个分割的基础模型,我们的目标是定义一个具有类似功能的任务。

We start by translating the idea of a prompt from NLP to segmentation, where a prompt can be a set of foreground / background points, a rough box or mask, free-form text, or, in general, any information indicating what to segment in an image. The promptable segmentation task, then, is to return a valid segmentation mask given any prompt. The requirement of a “valid” mask simply means that even when a prompt is ambiguous and could refer to multiple objects (e.g., recall the shirt vs. person example, and see Fig. 3), the output should be a reasonable mask for at least one of those objects. This requirement is similar to expecting a language model to output a coherent response to an ambiguous prompt. We choose this task because it leads to a natural pre-training algorithm and a general method for zero-shot transfer to downstream segmentation tasks via prompting.

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

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

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

分割是一个广泛的领域:有交互式分割(interactive segmentation),边缘检测(edge detection),超像素化(super pixelization), 目标建议生成(object proposal generation),前景分割(foreground segmentation ),语义分割(semantic segmentation),实例分割(instance segmentation ), 全景分割(panoptic segmentation)等。

我们的提示分割任务的目标是产生一个泛化模型,可以适应许多(虽然不是全部)现有的和新的分割任务通过提示工程。这种能力是任务泛化的一种形式。注意,这与以前的多任务分割系统不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割,但训练和测试任务是相同的。在我们的工作中,一个重要的区别是,为prompt segmentation训练的模型通过作为一个更大的系统组件可以在推理时执行一个新的、不同的任务,例如,为了执行实例分割,prompt segmentation模型与现有的object detector相结合。

提示和组合是强大的工具,可以以可扩展的方式使用单个模型,潜在地完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP[82]是DALL•E[83]图像生成系统的文本图像对齐组件。我们预计,由提示工程等技术驱动的可组合系统设计,将比专门为固定任务集训练的系统能够实现更广泛的应用程序。从组合的角度比较提示分割和交互式分割也很有趣:虽然交互式分割模型是在设计时考虑到人类用户的,但为提示分割训练的模型也可以组成一个更大的算法系统,正如我们将演示的那样。

模型结构:

在这里插入图片描述

6.1 Image Encoder

其中Image Encoder使用MAE预训练的ViT模型。

6.2 Prompt Encoder

prompt encoder分为两种:

  • sparse prompt: points, boxes, text, We represent points and boxes by positional encodings summed with learned embeddings for each prompt type and free-form text with an off-the-shelf text encoder from CLIP. 我们通过位置编码来表示点和框,并对每种提示类型和自由形式的文本使用CLIP现成的文本编码器进行学习嵌入。

  • dense prompt: mask, Dense prompts (i.e., masks) are embedded using convolutions and summed element-wise with the image embedding. 密集提示(即掩码)使用卷积嵌入,并与图像嵌入元素相加。

6.3 Decoder

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

6.4 Resolving ambiguity

对于一个output token, 如果给出模棱两可的提示,模型将平均多个valid mask. 为了解决这个问题,我们修改了模型,以预测单个prompt的多个mask。我们发现3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三种深度:整体、部分和子部分)。训练时,我们只反向传播loss最小的mask。为了对mask进行排名,模型预测每个mask的置信度分数(即估计的IoU)。

6.5 Loss and Training

使用Focal Loss和Dice Loss的线性组合。我们使用混合的几何提示来训练提示分割任务。按照[92,37],我们通过在每个掩码中随机抽取11轮提示来模拟交互式设置,允许SAM无缝集成到我们的数据引擎中。

7. Data Engine

7.1 stage 1: Assisted-manual stage

在第一阶段,类似于经典的交互式分割,一组专业的注释人员使用SAM支持的基于浏览器的交互式分割工具,通过单击前景/背景对象点来标记mask。mask可以使用像素精确的“笔刷”和“橡皮擦”工具来细化。我们的模型辅助注释直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互式体验。我们没有对标记对象施加语义约束,标注员可以自由地标记“stuff”和“things”[1]。我们建议标注员标记他们可以命名或描述的对象,但没有收集这些名称或描述。标注员被要求按显著性顺序标注对象,如果一个mask上花费了超过30秒,标注员就可以标注下一个图像。

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

7.2 stage 2: Semi-automatic stage

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

7.3 stage 3: Fully automatic stage

在最后阶段,注释是完全自动的。这是可行的,因为我们的模型有两个主要的增强。首先,在这一阶段的开始,我们收集了足够多的mask来极大地改进模型,包括前一阶段的各种mask。第二,在这个阶段,我们已经开发了模糊感知模型(ambiguity-aware),它允许我们在模糊的情况下预测有效的mask。

Specifically, we prompted the model with a 32×32 regular grid of points and for each point predicted a set of masks that may correspond to valid objects.

具体来说,我们使用32×32规则点网格来提示模型,并为每个点预测一组可能对应于有效对象的掩码。对于识别歧义的模型,如果一个点位于一个部件或子部件上,我们的模型将返回子部件、部分和整个对象。利用模型中的IoU预测模块来选择有信心的面具;此外,我们仅识别和选择了稳定的掩码(如果将概率图阈值设为0.5−δ和0.5 + δ会产生相似的掩码,则我们认为掩码是稳定的)。最后,在选择自信和稳定的掩码后,应用非最大抑制(non- maximum suppression, NMS)对重复数据进行过滤。为了进一步提高较小mask的质量,我们还处理了多个重叠的放大图像的crop。关于这一阶段的更多细节,请参见§B。我们对数据集中的所有11M张图像应用了全自动mask生成,总共生成了1.1亿个高质量的mask。接下来,我们描述并分析结果数据集SA-1B。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot整合MongoDB

参考链接 https://www.mongodb.org.cn/ 文章目录一、前言1.1 NoSQL介绍1.1.1 NoSQL 数据库分类1.1.2 NoSQL的优点/缺点1.1.3 BASE1.2 MongoDB介绍1.2.1 MongoDB和SQL对比1.2.2 数据库1.2.3 元数据1.2.4 MongoDB 数据类型二、SpringBoot整合MongDB2.1 环境配置2.2 MongoTemplate…

chatGPT如何助力devops

随着软件开发行业的不断发展,DevOps已成为软件开发的主流方法。DevOps是一种将开发和运维工作结合起来的实践,旨在提高软件交付速度和质量,以及优化整个软件开发过程。最近,聊天机器人技术的崛起为DevOps带来了全新的变革&#xf…

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原

文章目录服务器,数据库,表关系MySQL 数据存储逻辑SQL 分类存储引擎库的操作查看数据库创建数据库查看创建语句删除数据库选择(切换)数据库查看当前选择的数据库修改数据库字符集和排序规则表的操作创建表查询表查询表结构插入数据…

2、Git使用不完全指南:Git客户端的使用及使用Token认证方式提交代码详解(详细图文)

本篇介绍如何在Windows、Linux下安装Git客户端以及从远程代码仓库拉取代码。以及介绍2023如何从GitHub上获取Token令牌、使用Pycharm通过Token令牌从本地push上传仓库的方法,用来解决推送代码报Push failed The requested URL returned error:403的错误问题。 安装…

通讯录的实现(初级版本)

思维导图: 目录 思维导图: ​编辑 一,实现通讯录的第一步——实现逻辑 二,头文件内实现的内容 三,contect.c文件内的函数定义 3.1初始化通讯录:void InitContect(cotect*pc) 3.2:实现通讯录内容的增加&#xff…

投稿指南【NO.14】SCI期刊推荐(mdpi旗下)

写在前面:SCI论文发表是我国高校机构与基地评估、成果评奖、项目立项、人才培养等方面的重要考核指标,更不要要说关系到我们个人的毕业、晋升和前途。SCI含金量之高,要是读研读博科研工作期间能发表,将对直博、找工作、国奖申请、…

04 | 连接池:别让连接池帮了倒忙

04 | 连接池:别让连接池帮了倒忙 连接池一般对外提供获得连接、归还连接的接口给客户端使用,并暴露最小空闲连接数、最大连接数等可配置参数,在内部则实现连接建立、连接心跳保持、连接管理、空闲连接回收、连接可用性检测等功能。 注意鉴…

MySQL 主从同步及延迟原因分析

主从同步的基本原理 MySQL主从同步步骤详见 MySQL binlog模式及主备的基本原理 谈到主备的并行复制能力,我们要关注的是图中黑色的两个箭头。一个箭头代表了客户端写入主库,另一箭头代表的是从库上sql_thread执行中转日志(relay log&#xff…

《Squeeze-and-Excitation Networks》

Squeeze-and-Excitation Networks1. 摘要2. 介绍3. 网络设计4. 代码实现1. 摘要 卷积操作可以使网络通过在每层的局部感受野内融合空间和通道级信息以构建信息特征;空间信息尝试通过加强CNN整个特征层次的空间编码质量以加强CNN的表示能力;本文主要聚焦…

【计算机网络-应用层】万维网

文章目录1 统一资源定位符 URL2 万维网文档2.1 超文本标记语言 HTML2.2 层叠样式表 CSS2.3 JavaScript3 超文本传输协议 HTTP3.1 HTTP 报文格式3.1.1 HTTP 请求报文3.1.2 HTTP 响应报文3.2 HTTP 的工作过程3.2.1 HTTP/1.03.2.2 HTTP/1.13.2.3 相关例题4 Cookie1 统一资源定位符…

如何从根本上防止服务器被攻击

随着互联网的发展,服务器成为了企业和个人网络应用的重要基础设施。但是,随之而来的网络安全威胁也在不断增加,服务器安全问题也成为了影响企业信息安全的重要因素。针对这种情况,服务器安全防御变得尤为重要。   服务器安全防御…

6.Swagger的实战使用

六.Swagger的实战使用 1.什么是swagger 2.swagger的基本使用 3.swagger实战使用 六.Swagger的实战使用 1.什么是swagger swagger是后端接口文档的生成并且提供ui界面进行测试过去用postman测试 缺点:需要自己写地址,如果项目变了需要自己更改 2.sw…

CF区间DP作业题解

1. Recovering BST 由于互质关系不是传递的,所以尽量挂在树的最下面,刚好构成二叉树 f[i][j][0]f[i][j][0]f[i][j][0] 表示区间 [i,j][i,j][i,j] 以 iii 为根,是否可以构成一棵树。 f[i][j][1]f[i][j][1]f[i][j][1] 表示区间 [i,j][i,j][i,j…

Spring理论学习

1、什么是IOC IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,…

阿里通义千问、ChatGPT和文心一言有何区别,在哪里能使用?

目前,聊天机器人技术在人工智能领域的发展越来越成熟了。现在已经有几款备受关注的聊天机器人产品问世,例如ChatGPT、阿里的通义千问和百度的文心一言。它们有什么区别,怎么使用呢? 其实,我也挺好奇的,毕竟…

人人拥有ChatGPT的时代来临了,这次微软很大方!

技术迭代的在一段时间内是均匀发展甚至止步不前的,但在某段时间内会指数级别的爆发。 ChatGPT背后的GPT 3.5训练据说花了几百万美金外加几个月的时间,参数大概有1700多亿。 这对于绝大多数的个人或企业来说绝对是太过昂贵的。 然而,微软&am…

月薪过 3w 的 软件测试工程师 都是怎么做到的?

对任何职业而言,薪资始终都会是众多追求的重要部分。前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。 当然,我说的是最基础的功能测试的岗…

如何使用双轴XY平台绘制正弦曲线

1. 功能说明 本文示例将实现双轴XY平台绘制正弦曲线的功能。 2. 电子硬件 在这个示例中,采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno) 扩展板 Bigfish2.1扩展板 SH-ST步进电机扩展板 电池11.1V动…

跟着原子学I2C

I2C通讯 1、IIC总线介绍 集成电路总线,是一种同步串行半双工通信总线。 总线or协议?! 总线是数据传输通道,协议是数据传输规则。 1、1介绍 a、由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空…

UDP套接字

大家好,又见面了,🎉🎉🎉🌸🌸🌸 今天为大家带来UDP套接字的相关知识 文章目录认识socketUDP和TCP认识UDPAPI有关方法基于UDP实现回显服务器UDP的方法基于UDP实现回显程序认识socket UDP和TCP 认识UDPAPI有…