Segment Anything论文详解(SAM)

论文名称:Segment Anything

论文地址:https://arxiv.org/abs/2304.02643

开源地址:https://github.com/facebookresearch/segment-anything

demo地址:Segment Anything | Meta AI

主要贡献:开发一个可提示的图像分割的基础模型,在一个广泛的数据集上预训练,解决新数据分布上的一系列下游分割问题

1. Introduction

1.1 任务

通过使用‘prompt’技术对新的数据集和任务执行zero shot和few shot学习受到启发,提出可交互式图像分割模型,目标是在给定任何分割提示下返回一个有效的分割掩码(见图1a)。提示只是指定要在图像中分割的内容,可以有效的输出,即使提示是模棱两可的,可以指多个对象,输出应该是一个合理的至少一个对象的mask。使用提示分割任务作为训练前的目标,并通过提示工程来解决一般的下游分割任务。

1.2 模型

提示词编码器嵌入提示+图像编码器计算图像嵌入+轻量级掩码解码器中来预测分割掩码=Segment Anything,SAM(见图1b)。通过将SAM分离为一个图像编码器和一个快速提示编码器/掩码解码器,相同的图像嵌入可以用不同的提示被重用。给定一个图像嵌入,提示编码器和掩码解码器在web浏览器中以50毫秒的提示预测掩码。关注点、框和掩码提示,并使用自由形式的文本提示显示初始结果。

1.3 数据

数据用于模型训练,模型检测未知数据,构建一个“数据引擎”。在第一阶段,SAM协助注释器对掩码进行注释,类似于经典的交互式分割设置。在第二阶段,SAM可以通过提示可能的对象位置来为对象子集自动生成掩码,注释器专注于对其余对象的注释,帮助增加掩码的多样性。在最后一个阶段,我们用一个规则的前景点网格提示SAM,平均每张图像产生100个高质量的掩模。最终得到1100万张授权的图片上有超过10亿个尊重隐私的掩码数据。

2. Segment Anything Task

2.1 任务
首先将提示的想法从 NLP 转换为分割,其中提示可以是一组前景/背景点、粗略框或掩码、自由形式的文本,或者任何指示图像中分割什么的信息。根据提示返回一个有效的分割掩码。“有效”意味着,即使提示模棱两可,可以引用多个对象(例如衬衫与人的例子),输出也至少是其中一个合理的掩码。类似于期望一个语言模型对一个模糊的提示输出一个一致的响应。该任务导向了一种自然的预训练算法和一种通过提示将zero shot 转移到下游分割任务的通用方法。

2.2 预训练

可提示的分割任务提出了一种自然的预训练算法,该算法模拟每个训练样本的一系列提示(例如,点、框、掩码),并将模型的掩码预测与基本事实进行比较。我们采用交互分割的方法,与旨在最终在足够的用户输入后预测有效掩码的交互分割不同,我们的目标是始终为任何提示预测有效的掩码,即使提示不明确。这确保了预训练模型在涉及歧义的用例中是有效的,包括数据引擎所需的自动注释。

2.3 zero shot transfer

预训练任务赋予模型在推理时对任何提示做出适当反应的能力,因此下游任务可以通过工程适当的提示来解决。例如,如果一个有猫的目标检测器,则可以通过提供检测框输出作为我们模型的提示来解决猫实例分割。一般来说,广泛的实用分割任务可以被视为提示。

2.4 相关任务

分割是一个广泛的领域:交互式分割,边缘检测,超像素化,目标区域生成,前景分割,语义分割,实例分割,全景分割等。我们的可提示分割任务的目标是建立一种能力广泛的模型,可以通过提示工程适应许多(尽管不是全部)现有和新的分割任务该能力是任务泛化的一种形式。不同于多任务系统(单个模型执行一组固定的任务,如联合语义、实例和全光分割,训练和测试任务相同),我们的可提示分割的模型,可以作为一个更大的系统中的一个组件,在推理时执行一个新的、不同的任务,例如,执行实例分割,一个可提示分割模型与现有的目标检测器相结合。

2.5讨论
提示和组合是一种强大的工具,它使单个模型能够以可扩展的方式使用,并有可能完成在模型设计时未知的任务。类似于其他基础模型的使用方式,例如,CLIP如何使DALL·E图像生成系统的文本-图像对齐组件。

3. Segment Anything Model

SAM有三个组件,如图4所示:图像encoder、灵活的提示encoder和快速掩码decoder。我们建立在Vision Transformer上,对实时性能进行特定的权衡。如图

3.1 图像编码器

基于可扩展和强大的预训练方法,我们使用MAE预训练的ViT,最小限度地适用于处理高分辨率输入。图像编码器对每张图像运行一次,在提示模型之前进行应用。

3.2 提示编码器

考虑两组提示:稀疏(点、框、文本)和密集(掩码)。通过位置编码来表示点和框,并将对每个提示类型的学习嵌入和自由形式的文本与CLIP中的现成文本编码相加。密集的提示(即掩码)使用卷积进行嵌入,并通过图像嵌入进行元素求和。

3.3 掩码解码器

掩码解码器有效地将图像嵌入、提示嵌入和输出token映射到掩码。该设计的灵感来自于DETR,采用了对(带有动态掩模预测头的)Transformer decoder模块的修改。

3.4 解决歧义

对于一个输出,如果给出一个模糊的提示,该模型将平均多个有效的掩码。为了解决这个问题,我们修改了模型,以预测单个提示的多个输出掩码(见下图,绿色点为输入的提示点)。我们发现3个掩模输出足以解决大多数常见的情况(嵌套掩模通常最多有三个深度:整体、部分和子部分)。在训练期间,我们只支持mask上的最小损失[匈牙利损失]。为了对掩码进行排名,该模型预测了每个掩码的置信度分数(即估计的IoU)

4. SAM Data engine

4.1 模型辅助手动注释阶段

4.2 包含自动预测掩码和模型辅助注释的半自动化阶段

4.3全自动阶段

5. 数据集

1100万张新图产生了1.1B个mask

7. Zero-Shot Transfer Experiments(熟悉的名称他来了)

7.1 zero shot 单点有效掩模评估

任务:评估从单个前景点分割一个对象,因为一个点可以指代多个对象。大多数数据集中的标签掩码不会枚举所有可能的掩码,这可能会使自动度量不可靠。因此,我们补充了标准mIoU度量(即预测和标签掩模之间的所有IoU的平均值),在该研究中,注释者将掩码质量从1(无意义)评级到10(像素完美)。

数据集:使用一套新编译的23个具有不同图像分布的数据集,来进行mIoU评估

7.2 zero shot 目标 proposal

接下来,我们评估了SAM在对象提案生成的中级任务上的作用。这项任务在目标检测研究中发挥了重要的作用,作为开创性系统的中间步骤。为了生成对象建议,我们运行一个稍微修改的自动掩码生成管道的版本,并将掩码输出为提案。
我们计算了LVIS v1 上的标准平均召回率(AR)度量。我们关注LVIS,因为它的大量类别是一个具有挑战性的测试。我们与作为ViTDet 检测器(带有级联掩模R-CNN ViT-H)实现的强基线进行了比较。

SAM在中型和大型物体以及稀有和普通物体上都优于ViTDet-H,在小对象和频繁对象上的表现低于ViTDet-H,其中ViTDet-H可以很容易地学习LVIS特定的注释偏差,因为它是在LVIS上训练的。我们还比较了消融的模糊模糊版本的SAM,它在所有AR指标上的表现都明显低于SAM。

7.3 zero shot 文本到掩码

最后,我们考虑一个更高层次的任务:从自由形式的文本中分割对象。这个实验证明了SAM处理文本提示的能力。SAM的训练过程被修改以使其能够感知文本,但其方式不需要新的文本注释。具体来说,对于每个手动收集的面积大于1002的掩模,我们提取了CLIP图像嵌入。然后,在训练过程中,我们将提取的CLIP图像嵌入作为第一次交互,提示SAM。这里的关键观察结果是,由于CLIP的图像嵌入被训练成与文本嵌入对齐,所以我们可以使用图像嵌入进行训练,但要使用文本嵌入进行推理。也就是说,在推理时,我们通过CLIP的文本编码器运行文本,然后将生成的文本嵌入作为提示符提供给SAM。当SAM不能仅从文本提示中选择正确的对象时,一个额外的点提示可以提供帮助。

 8.总结

目标检测and分割什么的已经到顶了,研究点别的吧哈哈哈



 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图片存储方案-七牛云存储

1.引语 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的服务器 分服务器处理的目的是让服务器各司其职…

设计模式简述

设计模式(简述) 设计模式的分类 ​ 根据目的可以分为创建型、结构性和行为型三类: 创建型模型:创建对象结构性模型:处理类或对象的组合行为型模式:用于描述对类或对象怎样交互和怎么分派职责 ​ 根据范围可以分为类模式和对象…

nvm-windows的安装使用及踩坑指南

nvm是node的一款版本管理工具,可以简单操作node版本的切换、安装、查看。常规来说,开发中安装一个node版本就够了,但是最近在开发中有的老项目或者一些特定的项目需要来回切换node的版本,不可能手动去卸载掉之前的node版本&#x…

013:Mapbox GL添加marker

第013个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加marker。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhu…

算法时间复杂度计算

目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题 1.时间复杂度计算 首先,我们需要了解时间复杂度是什么:算法的时间复杂度是指算法在编写成可执行程序后,运行时需要耗费…

使用 Floyd Warshall 检测负循环

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

Linux中的read/write和recv/send的区别,并使用recv/send实现简单的聊天功能

Linux中的read/write和recv/send的区别 r e a d / w r i t e read/write read/write的用法 r e c v / s e n d recv/send recv/send的用法 L i n u x Linux Linux中的 r e a d / w r i t e read/write read/write和 r e c v / s e n d recv/send recv/send的区别下面是一个使用…

Three.js教程:第一个3D场景

推荐:将 NSDT场景编辑器加入你3D工具链 其他工具系列: NSDT简石数字孪生 下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使…

基于SpringBoot的私人健身和教练的预约管理系统源码数据库论文

目 录 第一章 概述 1.1研究背景 1.2开发意义 1.3研究现状 1.4研究内容 1.5论文结构 第二章 开发技术介绍 2.1系统开发平台 2.2平台开发相关技术 2.2.1 Javar技术 2.2.2 Mysql数据库介绍 2.2.3 Mysql环境配置 2.2.4 B/S架构 2.2.5 Springboot框架 …

设计模式-结构型模式之外观模式

4. 外观模式 4.1. 模式定义 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个 高层接口,这个接口使得这一子系统更加容易使用。外观模…

socket 到底是个啥

哈喽大家好,我是咸鱼 我相信大家在面试过程中或多或少都会被问到这样一个问题:你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显:socket 也叫套接字,用来负责不同主机程序之间的网络通信连接,socket 的表现…

使用树状图可视化聚类

一般情况下,我们都是使用散点图进行聚类可视化,但是某些的聚类算法可视化时散点图并不理想,所以在这篇文章中,我们介绍如何使用树状图(Dendrograms)对我们的聚类结果进行可视化。 树状图 树状图是显示对象…

大模型混战,阿里百度华为谁将成就AI时代的“新地基”?

从算力基础到用户生态,群雄逐鹿大模型 自2022年stable diffusion模型的进步推动AIGC的快速发展后,年底,ChatGPT以“破圈者”的姿态,快速“吸粉”亿万,在全球范围内掀起了一股AI浪潮,也促使了众多海外巨头竞…

微信为什么使用 SQLite 保存聊天记录

SQLite “只是”一个库,它不是传统意义上的服务器。因此,在某些场合下,它确实不合适。但是,在相当多的其他场合,它却是最合适的选择。SQLite 号称是部署和使用最广泛的数据库引擎。我认为这很有可能,因为 S…

10个镜像网站工具箱供你使用,不注册ChatGPT也能免费使用ChatGPT

ChatGPT已经成为了人工智能技术中备受瞩目的一员,它可以为我们带来更加智能化、个性化的交互体验。对于没有ChatGPT账号或者不想注册账号的人来说,他们可能会错过这种神奇的体验。 而本篇文章就帮大家解决这个问题,不用登录ChatGPT账号&…

Doris(9):删除数据(Delete)

Delete不同于其他导入方式,它是一个同步过程。和Insert into相似,所有的Delete操作在Doris中是一个独立的导入作业,一般Delete语句需要指定表和分区以及删除的条件来筛选要删除的数据。 Doris 目前可以通过两种方式删除数据: DE…

使用Schrödinger Python API系列教程 -- 介绍 (一)

使用Schrdinger Python API系列教程 – 介绍 (一) 本文档可从Schrdinger网站www.schrodinger.com/pythonapi访问。 从Python文档字符串生成的完整API文档可以在这里访问 介绍 在最高级别上,Schrdinger Python API提供了一个基本的分子结构类,并允许与…

【JavaEE】关于synchronized总结-Callable用法及JUC的常见问题

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶synchronized原理是什么?synchronized到底有什么特点,synchronized的锁策略是什么,是怎么变化的呢?本篇文章总结出, Synchronized 具有以下特性…

HyperWorks2021软件安装教程

下载软件 https://www.xsoftnet.com/share/a0004MWyQAg9r.html产品介绍: HyperWorks一款功能强大的开放式架构仿真软件。拥有先进的技术以及高性能、高效和创新的产品,为用户提供了设计、仿真和制造等服务。支持电磁分析设计、材料建模制造、多物理场分…

【数据结构】二叉树链式结构

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…