Segment Anything阅读笔记

news/2024/12/3 1:58:11/

Segment Anything

摘要

体验地址
论文地址
代码地址
这篇文章最近有点火,已经有1万多star了
在这里插入图片描述

  • 大规模数据集(超过10亿个mask)
  • 可以做zero-shot任务

引言

作者问了三个问题:
图像分割成功取决于三个组成部分:任务、模型和数据。本文解决了以下关于图像分割的问题:

  1. 什么任务可以实现零zero-shot泛化?
  2. 相应的模型架构是什么?
  3. 什么样的数据可以支持这个任务和模型
    在这里插入图片描述

任务

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

模型

可提示的分割任务和实际使用的目标对模型体系结构施加了约束。特别是,该模型必须支持灵活的提示,需要实时平摊计算掩码以允许交互使用,并且必须能够识别歧义。令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级的掩码解码器中,预测分割掩码。我们把这个模型称为分割任意模型(Segment Anything model),或SAM(见图b)。通过将SAM分离为图像编码器和快速提示编码器/掩码解码器,可以使用不同的提示重用相同的图像嵌入(及其成本摊销)。

给定图像嵌入,提示编码器和掩码解码器在网络浏览器中从提示符中预测掩码,时间为~ 50ms。我们主要关注点、框和掩码提示,并使用自由形式的文本提示来呈现初始结果。为了使SAM能够识别歧义,我们将其设计为为单个提示预测多个掩码,允许SAM自然地处理歧义,例如衬衫vs.人的示例。

Data engine

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

分割任务

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

任务
我们首先将提示符的思想从NLP转换为分割,其中提示符可以是一组前景/背景点,一个粗略的框或掩码,自由形式的文本,或者通常情况下,指示图像中要分割的内容的任何信息。那么,提示分割任务是在给定任何提示时返回一个有效的分割掩码。“有效”掩码的要求仅仅意味着,即使提示符是模糊的,并且可能涉及多个对象(例如,回想一下衬衫vs.人的例子,请参见图3),输出也应该是这些对象中至少一个的合理掩码。这一需求类似于期望语言模型对模棱两可的提示符输出一致的响应。我们选择这个任务是因为它导致了一个自然的预训练算法和一个通过提示将zero-shot转移到下游分割任务的通用方法。
Pre-training
提示分割任务提出了一种自然的预训练算法,该算法为每个训练样本模拟一系列提示(例如,点、框、掩码),并将模型的掩码预测与实际情况进行比较。我们从交互式分割、中采用了这种方法,尽管与交互式分割的目标是在足够的用户输入后最终预测有效的掩码不同,我们的目标是始终预测任何提示的有效掩码,即使提示是模糊的。这确保了预训练的模型在涉及歧义的用例中是有效的,包括我们的数据引擎所要求的自动注释。我们注意到,在这项任务中表现良好具有挑战性,需要专门的建模和训练损失选择
Zero-shot transfer
直观地说,我们的预训练任务赋予了模型在推理时对任何提示作出适当响应的能力,因此可以通过设计适当的提示来解决下游任务。例如,如果有一个猫的边界盒检测器,猫实例分割可以通过提供检测器的盒子输出作为我们的模型的提示来解决。一般来说,大量的实际分割任务都可以作为提示。除了自动数据集标记之外,我们还在实验中探索了五个不同的示例任务。
相关的任务
分割是一个广泛的领域:有交互式分割,边缘检测,超像素化,对象建议生成,前景分割,语义分割,实例分割,全景分割等。
我们的提示分割任务的目标是生产一个能力广泛的模型,可以适应许多(虽然不是全部)现有的和新的分割任务通过及时的工程。这种能力是任务泛化的一种形式。注意,这与以前的多任务分割系统不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割,但训练和测试任务是相同的。在我们的工作中,一个重要的区别是,为提示分割训练的模型可以在推理时作为一个更大的系统中的组件执行一个新的、不同的任务,例如,为了执行实例分割,提示分割模型与现有的对象检测器相结合。
讨论

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

分割模型

在这里插入图片描述
SAM有三个组成部分,如图4所示:一个图像编码器,一个灵活的提示编码器和一个快速的掩码解码器。我们建立在Transformer视觉模型的基础上,对实时性能进行了特定的权衡。

  • 图像编码器使用MAE
  • prompt编码器:稀疏提示(点、框、文本)和密集提示(掩码)。通过位置编码表示点和框,并对每种提示类型和自由形式的文本使用CLIP现成的文本编码器进行学习嵌入。密集提示(即掩码)使用卷积嵌入,并与图像嵌入元素相加。
  • MASK解码器:Transformer decoder block接着动态mask预测头,在两个方向上使用提示自我注意和交叉注意(提示到图像嵌入和反之亦然)来更新所有嵌入,在运行两个块之后,对图像嵌入进行上采样,MLP将输出令牌映射到动态线性分类器,然后计算每个图像位置的掩码前景概率。
  • 解决歧义:模型预测每个mask的置信度分数(即估计的IoU)
  • 损失函数:dice loss和focal loss

Segment Anything Data Engine

Assisted-manual阶段
在第一阶段,类似于经典的交互式分割,一组专业的注释人员使用SAM支持的基于浏览器的交互式分割工具,通过单击前景/背景对象点来标记掩码。蒙版可以使用像素精确的“笔刷”和“橡皮擦”工具来细化。我们的模型辅助注释直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互式体验。我们没有对标记对象施加语义约束,注释者可以自由地标记“stuff”和“things”。我们建议注释者标记他们可以命名或描述的对象,但没有收集这些名称或描述。标注者被要求按突出的顺序标注对象,并被鼓励在一个MASK花费30秒以上的时间来标注下一个图像。
在这一阶段的开始,SAM使用公共分割数据集进行训练。在足够的数据标注后,仅使用新标注的MASK重新训练SAM。随着越来越多的MASK被收集,图像编码器从ViT-B缩放到ViT-H,其他架构细节也在进化;我们总共重新训练了我们的模型6次。随着模型的改进,每个MASK的平均注释时间从34秒减少到14秒。我们注意到,14秒比COCO的掩码标注快6.5倍,仅比极值点的边界框标注慢2倍。随着SAM的改进,每张图像的平均掩码数量从20个增加到44个。总的来说,我们在这个阶段从12万张图片中收集了430万个面具。
半自动阶段
在这个阶段,我们的目标是增加MASK的多样性,以提高我们的模型分割任何东西的能力。为了将注释器集中在不太突出的对象上,我们首先自动检测自信掩码。然后,我们向注释者展示了预先填充了这些蒙版的图像,并要求他们注释任何其他未注释的对象。为了检测可信掩码,我们使用通用的“对象”类别在所有第一阶段掩码上训练了一个边界盒检测器。在此阶段,我们在180k图像中收集了额外的590万个面具(总共1020万个面具)。与第一阶段一样,我们定期对新收集的数据重新训练我们的模型(5次)。每个掩码的平均注释时间回到了34秒(不包括自动掩码),因为这些对象的标签更具挑战性。每张图片的平均蒙版数量从44个增加到72个(包括自动蒙版)。
全自动阶段
在最后阶段,注释是完全自动的。这是可行的,因为我们的模型有两个主要的增强。首先,在这一阶段的开始,我们收集了足够多的面具来极大地改进模型,包括前一阶段的各种面具。第二,在这个阶段,我们已经开发了模糊感知模型,它允许我们在模糊的情况下预测有效的掩码。具体来说,我们使用32×32规则点网格来提示模型,并为每个点预测一组可能对应于有效对象的掩码。对于识别歧义的模型,如果一个点位于一个部件或子部件上,我们的模型将返回子部件、部分和整个对象。利用模型中的IoU预测模块来选择有信心的面具;此外,我们仅识别和选择了稳定的掩码(如果将概率图阈值设为0.5−δ和0.5 + δ会产生相似的掩码,则我们认为掩码是稳定的)。最后,在选择自信和稳定的掩码后,应用非最大抑制(non- maximum suppression, NMS)对重复数据进行过滤。为了进一步提高较小蒙版的质量,我们还处理了多个重叠的放大图像剪裁。

消融实验

在这里插入图片描述


http://www.ppmy.cn/news/40392.html

相关文章

全国青少年电子信息智能创新大赛(决赛)python·模拟四卷,含答案解析

全国青少年电子信息智能创新大赛(决赛) python 模拟四卷 一、程序题 第一题:描述 科技小组分 2 个小队搜集到西红柿生长的数据信息。2 个小队将数据进行了从小 到大排序: a = [1,3,4,6,7,13,17,21] b = [2,5,6,8,10,12,14,16,18] 请明明将这 2 个小队的数据进行合并,生成为…

UEFI Protocol

一、概述 二、Protocol的定义 1、Protocol是服务器端和客户端之间的一种约定,在软件编程上称为接口,服务器端和客户端通过这个约定信息的互通。 2、服务器端和客户端在UEFI中都是可执行的二进制文件。 3、为了实现这些二进制文件之间的互通,…

远程管理服务器 用户组创建 1(运维笔记)

远程管理服务器 用户组创建 1(运维笔记) 修改跳板机名称: [rootRKUN18 ~]# vim /etc/sysconfig/network [rootRKUN18 ~]# cat /etc/sysconfig/network # Created by anaconda HOSTNAMEjumper-server修改跳板机网络模式为仅主机模式,ssh连接…

动力节点王鹤SpringBoot3笔记——第七章 视图技术Thymeleaf

目录 第七章 视图技术Thymeleaf 前言 7.1 表达式 7.2 if-for 第七章 视图技术Thymeleaf 前言 Thymeleaf 是一个表现层的模板引擎, 一般被使用在 Web 环境中,它可以处理 HTML, XML、 JS 等文档,简单来说,它可以将 JSP 作…

蓝牙耳机哪个品牌好用又便宜?2023便宜耐用的蓝牙耳机推荐

随着蓝牙耳机的受欢迎程度越来越高,其更迭速度也越来越快,各种品牌的蓝牙耳机出现在大众视野。下面,我来给大家分享几款便宜耐用的蓝牙耳机,都极具性价比,一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机 参考价&#xf…

thinkphp之超级无限分类 10行代码

效果图 代码 static public $treeList array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList array(); 清空/*** 无限级分类* access public * param Array $data //数据库里获取的结果集 * param Int $pid * param Int $count …

Vue3通透教程【十】跨级组件通讯—依赖注入

文章目录🌟 写在前面🌟 provide函数🌟 inject 函数🌟 跨组件通讯🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相…

区块链 -> 区块链简介

文章目录区块链结合去中心化后组成的数据库有什么特点?区块链能干什么?区块链实际是一种数据库。 不同于我们的MySQL数据库,区块链是一种分布式数据库。 腾讯:Tencent Distributed SQL,简称 TDSQL。阿里:PolarDB PostgreSQL,简称PolarDB-PG。 区块链…