【论文精读】Segment Anything

Segment Anything

  • 前言
  • Abstract
  • 1. Introduction
  • 2. Segment Anything Task
  • 3. Segment Anything Model
  • 4. Segment Anything Data Engine
  • 5. Segment Anything Dataset
  • 6. Segment Anything RAI Analysis
  • 7. Zero-Shot Transfer Experiments
    • 7.1. Zero-Shot Single Point Valid Mask Evaluation
    • 7.2. Zero-Shot Edge Detection
    • 7.3. Zero-Shot Object Proposals
    • 7.4. Zero-Shot Instance Segmentation
    • 7.5. Zero-Shot Text-to-Mask
    • 7.6. Ablations
  • 8. Discussion
  • 阅读总结

前言

被称为CV领域的GPT-3的工作,大一统了图像分割领域,实现了可提示及时分割,并且能够实现模糊感知,此外还构建了迄今最大的图像分割数据集,在1100万张授权的隐私图像上超过了10亿个mask。该工作中稿于ICCV 2023,其方法构建、实验设计以及写作格局都值得我们学习。

Paperhttps://arxiv.org/pdf/2304.02643.pdf
Codehttps://github.com/facebookresearch/segment-anything
FromICCV 2023

image.png

Abstract

本文提出SA项目,包含图像分割领域里新的任务、模型和数据集。作者构建了迄今最大的图像分割数据集,在1100万张授权的隐私图像上超过了10亿个mask。模型被设计和训练成可提示的,因此在新的图像和任务分布上有很好的泛化性能,甚至优于监督训练的结果。

1. Introduction

NLP领域预训练的基础模型可以轻松泛化到未见的任务和数据上,在prompt加持和训练语料的堆叠下,性能甚至能超过微调的模型。CV领域也对基础模型进行了探索,CLIP等多模态模型实现了文图两种模态的对齐,可以通过文本提示对视觉概念进行泛化, 但是CV的任务更为广泛,对于其中许多问题,并不存在丰富的训练数据。
本文的目标是为图像分割任务构建基础模型,通过在通用任务的大规模数据集上进行预训练,使用Prompt工程就能够将模型泛化到未见的数据分布中。为了实现这个目标,需要关注以下三个组件:

  • 任务。什么样的任务可以实现零样本泛化?
  • 模型。相应的模型架构是什么样的?
  • 数据。什么数据可以驱动这样的任务和模型?

作者首先定义了足够通用的可提示分割任务,这就要求模型能够支持灵活提示,为了训练,那就需要大规模的数据。但是目前图像分割领域没有理想规模的数据集,因此作者构建了数据引擎,在帮助收集数据的同时又利用新数据更新模型。具体设计如下:

  • 任务:作者提出可提示分割任务,一个prompt指出需要分割出图像中的内容,比如识别对象的空或者文本信息。合法的输出即使prompt模糊不清也能够找到一个或多个对象(见图1a)。作者使用可提示分割任务作为预训练任务,并通过提示工程解决下游任务。
  • 模型:模型的关键在于支持灵活的提示,能够及时计算mask以允许交互,并且具有模糊感知。作者发现一个强大的图像编码器和一个prompt编码器,将二者的输出过一个轻量级的mask解码器(见图1b)就能够满足上面三个约束。该模型称为SAM,为了使SAM能够感知歧义,作者将其设计为预测单个Prompt的多个mask,从而让SAM自然处理歧义。
  • 数据引擎:当前领域的数据量难以支撑模型的强泛化性能,潜在的解决方法是在线获取数据,但是mask并不丰富。为此,作者构建了数据引擎,它分为三个阶段,第一阶段,SAM协助标注人员标注mask;第二阶段,SAM通过提示对象可能位置对对象子集生成mask,标注人员只需要关注剩下的对象,提高标注的多样性;最后阶段,作者采用前景点的规则网格提示SAM,为每张图像产生约100个高质量的mask。
  • 数据:本文提出的数据集,SA-1B,在1100万张图像上超过10亿个mask,全部由数据引擎生成,比现有任何分割数据集多400倍。

实验部分作者广泛评估了SAM,在23个分割数据集组合的数据集中,SAM能够生成高质量mask,通常只比手动注释略低。其次,在Prompt工程下,SAM展现出一致的强大定性和定量结果。这些实验表明SAM即插即用,具有极佳的泛化性能。
image.png

2. Segment Anything Task

可提示的分割任务受到NLP中基础模型通过自回归预训练,然后使用Prompt工程解决下游任务的启发。作者首先将Prompt的概念从NLP转化为分割,这里Prompt可以是一组前景/背景点、一个粗糙的框,自由的文本等,那么任务就是基于这些Prompt返回有效的分割,即使是模糊的对象,也需要返回一个合理的mask,如下图所示,每一列都是合理的输出。
image.png
任务提出了一种自然的预训练算法,根据每个训练样本的Prompt将模型的预测mask与真实情况进行比较,即使Prompt不够明确,也能够预测出有效的mask,这特别适用于在对下游任务零样本迁移过程。
图像分割是一个广阔的领域,包括交互式分割、边缘检测、超像素化、前景分割等任务,本文提出的可提示分割任务目标是产出一个基础模型,可以通过Prompt适用于任何分割任务,甚至是未见的任务,这种方法类似于其他基础模型的使用方式。此外,这与之前的多任务分割系统不同,多任务系统中单个模型执行一组固定的任务,并在相同的任务上进行测试,而本文的任务在下游执行不同的任务,泛化性更好。

3. Segment Anything Model

image.png
SAM模型包括三个组件:图像编码器,灵活的Prompt编码器,以及一个快速的mask解码器。

  • 图像编码器采用MAE。
  • Prompt编码器考虑了两种不同的Prompt形式:稀疏(点,锚框,文本)和密集(mask)。作者通过位置编码表示点和框,采用CLIP编码文本嵌入,密集Prompt采用卷积计算得到嵌入,并与图像的嵌入按元素求和。
  • mask解码器将图像嵌入、Prompt嵌入以及输出token映射为mask。作者受到其他工作启发,采用动态mask预测head的解码器模块,该模块使用prompt自注意力和双向跨注意力(Prompt2Image and vice-versa)。运行两个块后进行上采样,MLP将输出的token映射到动态线性分类器,用于计算mask概率。

如果输入Prompt不明确,模型将会平均多个有效的mask。为了解决这个问题,作者修改模型以预测单个Prompt的多个输出mask,一般三个足以覆盖常见情况。模型的整体设计很大程度出于效率的考虑,给定图像嵌入,Prompt编码器和mask解码器在CPU上的耗时约50ms,可以实现实时的交互提示。对于损失函数和训练,作者采用焦点损失和骰子损失的线性组合来监督mask的预测,训练时采用混合的几何提示来训练可提示的分割任务。

4. Segment Anything Data Engine

为了解决互联网中分割数据不充足问题,作者构建了一个数据引擎用于构建SA-1B。引擎拥有三个阶段,模型辅助手动标注阶段,半自动阶段,以及全自动阶段。

  • 辅助手动阶段。专业标注团队使用交互式分割工具来手动标记mask。该阶段初期,使用常见的公共分割数据集对SAM进行训练,经过足够多的数据标注,仅使用新注释的mask重新训练SAM。该阶段从12万张图像中收集了430万个mask。
  • 半自动阶段。该阶段目标是增加mask的多样性,以提高模型分割的能力。作者首先自动检测置信的mask,在由标注人员标注未被检测出来的对象。该阶段作者在180k个图像中额外收集了590万个mask,让每张图像的平均mask数量从44增加到72。
  • 全自动阶段。受益于开始阶段大量收集的mask,以及对于模糊情况下的有效预测,模型现在可以全自动标注。具体来说,作者采用32×32的规则点网格提示模型,为每个点预测一组可能有有效对象的mask。最后,模型在1100万张图片上生成了1.1B个高质量mask。

5. Segment Anything Dataset

数据集SA-1B的图片多样化,分辨率高,显著优于其他数据分割数据集如COCO。数据引擎为SA-1B自动生成了1.1B的mask,这些mask对于训练模型来说是高质量且有效的。为了评估mask的质量,作者随机采样了500张图片,并要求专业的标注人员提高标注的质量。该过程产生校准的mask,结果发现94%的mask的IoU高于90%,为了对比,之前工作的标注人员的一致性为85%-91%。
下图绘制了SA-1B中对象中心的空间分布与最大的现有分割数据集之间的比较。SA-1B对图像的覆盖更广。
image.png
从数量上看,SA-1B比第二大的Open Images多11倍,mask多400多倍,下图左边是每张图片平均mask的分布,中间图像是mask的尺寸,由于数据集中每个图像有更多的mask,因此它也包含更大比例的中小型相对尺寸mask。右图是mask凹度,可以看到各个数据集mask凹度的分布几乎一致。
image.png

6. Segment Anything RAI Analysis

接着作者调查了使用SA-1B和SAM时潜在的公平问题和偏见,对工作进行了严格的AI分析。
image.png
从地理上来看,图像最多的三个国家来自不同的地区,并且在中等收入国家中图像比例要高得多,此外,每个图像的平均mask数量在不同地区和收入之间相当一致。从公平角度,作者调查了性别表现、年龄和肤色的潜在公平问题。
image.png
可以看到,虽然在各个维度上存在微小的差异,但整体上的表现是相似的,没有显著差异。

7. Zero-Shot Transfer Experiments

作者在5个任务上(4个与预训练任务显著不同)测试SAM的零样本迁移能力。

7.1. Zero-Shot Single Point Valid Mask Evaluation

本节评估从单个前景点分割对象。测试数据集采用包含23个不同图像分布数据集的组合,如下图所示:
image.png
SAM在23个数据集中的16个上产生了更高的结果。作者还提出了一个Oracle结果,这是从SAM产生的三个mask中选择最真实的而不是最有信心的结果,这揭示了模糊性对自动评估的影响。人工评估的结果如下图b所示,SAM的质量始终高于最强baseline RRITM。图c展现了SAM优秀的单点能力,图d采用随机点采样替换默认的中心点采样,观察到SAM与baseline差距越来越大。
image.png

7.2. Zero-Shot Edge Detection

作者使用BSDS500在边缘检测任务上评估SAM。具体来说,作者采用16×16的前景点来提示SAM,生成768个mask,冗余的mask由NMS删除。
image.png
可以看到,SAM没有经过边缘检测的训练也能产生合理的边缘图。与真实值相比,SAM预测了更多边缘,明显优于之前的零样本迁移方法。
image.png

7.3. Zero-Shot Object Proposals

接下来,作者在对象提议生成的中级任务上评估SAM,为了能够生成对象提议,作者对SAM进行了修改。
image.png
虽然该领域最优的模型ViTDet-H总体表现最佳,但是SAM在几个指标上都有突出表现。

7.4. Zero-Shot Instance Segmentation

本节将SAM作为实例分割的模块。实验运行一个对象检测器,根据其输出框提示SAM。
image.png
结果如上图所示,虽然效果仍然落后于ViTDet-H,但是在mask质量上,SAM通常优于ViTDet。作者认为COCO上的mask有一定的偏差(质量较低),ViTNet学习了这种特定偏差,所以在指标上分数更高,但是实际效果不如SAM。
image.png

7.5. Zero-Shot Text-to-Mask

最后,作者考虑了更高级别的任务,即从自由文本中分割对象。作者将通过CLIP的文本得到的文本嵌入作为SAM的prompt。
image.png
上图展示了定性的结果,SAM可以根据简单的文本提示以及短语来分割对象,当无法选择正确对象时,附加点可以帮助修复预测。

7.6. Ablations

image.png
作者采用单中心点prompt对23个数据集组合进行多次消融实验。左图展示了SAM在数据引擎阶段累积数据时训练的性能。在所有三个阶段的训练中,自动mask的数量远超过手动和半自动mask的数量。为了解决这个问题,作者测试了仅使用自动mask的设置,结果仅略低于使用所有数据的性能。
上图中间研究了数据量的影响,可以看到0.1M时mIoU有较大的下降,而1M和11M的结果没有明显的区别,此时仍然包含100M个mask,这可能是比较实用的设置。
最后是图像编码器采用不同的规模的消融实验,可以看出进一步的图像编码器缩放没有明显的成效。

8. Discussion

本文工作的目标与分割领域的基础模型对齐,模型SAM展现出强大的泛化能力,在不同任务的数据集上执行零样本取得了不错的结果。虽然SAM表现优秀,但是它还是会错过精细的结构,也会出现不连贯的幻觉问题,不过SAM的初衷是通用性和广泛使用,而不是为了高IoU的交互分割。此外,SAM虽然可以实时处理prompt,但当使用重型的图像编码器时,SAM的整体性能不是实时的。
最后进一步总结,SAM项目试图将图像分割提升到基础模型时代,本文的主要贡献是提出新的分割领域大一统任务,分割模型SAM和数据集SA-1B。SAM能否成为基础模型还需要时间的检验。

阅读总结

许多科研人员都将SAM称为是CV领域的GPT-3,是具有跨时代意义的工作。从方法阐述、实验分析以及演示效果来看,SAM提出新的任务大一统了图像分割领域的大部分任务,就像NLP中自回归任务大一统NLP任务一样。SAM优秀的泛化性能让其在未见的任务上也有优异的表现。文章中作者指出SAM有三点大的贡献:新的任务,新的模型以及新的数据集,此外还指出三点在应用中的贡献:可提示,及时响应以及模糊感知,这表明SAM的初衷不只是一篇形而上的文章,而是真正能够落地的方法。
SAM工作看起来并不复杂,它真正的难点可能就在于如何将不同的分割任务大一统,而实现的过程也很简单,将这些分割任务的指示作为prompt就好了,即对不同的指示(点、锚框、文本等)统一编码成嵌入再和图像编码融合训练。剩下的工作都是工程了,所以优秀的工作并不是复杂且繁琐的,而是如何透过现象看本质,找到研究内容的共性,这才是科研的真功夫,才是优秀工作必备的条件。
当然,SAM还有一些问题,比如性能上确实比不过某个具体任务上的模型,分割时会出现幻觉,分割也不够细致,在自然语言prompt下分割不够准确等,这些都是日后可以改进的点,这并不影响SAM在分割领域里程碑式的意义。

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

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

相关文章

【开源】SpringBoot框架开发音乐平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台,包含了音乐…

【ctfshow—web】——信息搜集篇1(web1~20详解)

ctfshow—web题解 web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20 web1 题目提示 开发注释未及时删除 那就找开发注释咯,可以用F12来查看,也可以CtrlU直接查看源代码呢 就拿到flag了 web2 题目提示 j…

第3.5章:StarRocks数据导入——Broker Load

注:本篇文章阐述的是StarRocks-3.2版本的Broker Load导入机制 一、概述 Broker Load导入方式支持从HDFS类的外部存储系统(例如:HDFS、阿里OSS、腾讯COS、华为云OBS等),支持Parquet、ORC、CSV、及 JSON 四种文件格式&a…

vue里echarts的使用:画饼图和面积折线图

vue里echarts的使用,我们要先安装echarts,然后在main.js里引入: //命令安装echarts npm i echarts//main.js里引入挂载到原型上 import echarts from echarts Vue.prototype.$echarts = echarts最终我们实现的效果如下: 头部标题这里我们封装了一个全局公共组件common-he…

qt 软件发布(Windows)

1. 开发环境 QtCreator MSVC编译器 2. 源码编译 生成release或者debug版本的exe可执行文件(x64或x86) 3. windeployqt 打包 ①左下角开始菜单栏找到QT的命令交互对话框,如下图MSVC 2017 64-bit(根据第二步编译的类型选择64位或者32位)。 ②cd 切换到第二步可…

TCP/IP协议详解

文章目录 TCP/IP协议概述基于TCP/IP协议的应用工具协议协议的必要性 TCP/IP协议TCP/IP协议族协议的分层 传输方式的分类报文、帧、数据包等的区别TCP 和 UDP的区别 TCP/IP协议概述 TCP/IP(Transmission Control Protocol/Internet Protocol)是一组通信协…

《图解HTTP》笔记2:http的构成

1,查看浏览器上面一个具体的http请求 浏览器地址栏输入网址:https://news.baidu.com/ 使用浏览器的开发者工具,查看网络中发送和接受的数据。 可以看到输入一个网址,浏览器和服务器进行了很多的交互。(绿色部分&#…

python + selenium/appnium

Selenium 的自动化原理: selenium 自动化流程: 自动化程序调用Selenium 客户端库函数(比如点击按钮元素)客户端库会发送Selenium 命令 给浏览器的驱动程序浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令浏览器执行命令浏览器驱动程序获取命令执行的…

OJAC近屿智能张立赛博士揭秘GPT Store:技术创新、商业模式与未来趋势

> - [Look!👀我们的大模型商业化落地产品](https://www.airecruitas.com/aigc) >- 📖更多AI资讯请👉🏾[关注](https://mp.weixin.qq.com/s/85qwuIydaaydMQz2g0rgMA) >- [Free三天集训营助教在线为您火热答疑…

多任务爬虫(多线程和多进程)

在一台计算机中,我们可以同时打开多个软件,例如同时浏览网页、听音乐、打字等,这是再正常不过的事情。但仔细想想,为什么计算机可以同时运行这么多软件呢? 这就涉及计算机中的两个名词:多进程和多线程。 同样&#xf…

通信入门系列——锁相环、平方环、Costas环

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、锁相环 1、压控振荡…

使用k-近邻算法改进约会网站的配对效果(kNN)

目录 谷歌笔记本(可选) 准备数据:从文本文件中解析数据 编写算法:编写kNN算法 分析数据:使用Matplotlib创建散点图 准备数据:归一化数值 测试算法:作为完整程序验证分类器 使用算法&…

SpringCloud(14)之SpringCloud Consul

我们知道 Eureka 2.X 遇到困难停止开发了,所以我们需要寻找其他的替代技术替代Eureka,这一小 节我们就讲解一个新的组件Consul。 一、Consul介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

【Latex】TeXstudio编译器选项修改

1、动机 编译国科大博士毕业答辩论文latex时报错 Package ctable Error: You must load ctable after tikz. 2、方法 经过搜索发现是因为这是中文模板,编译的选项不对,需要从 PDFLaTeX 调整到 XeLaTeX。于是操作如下 1)点击选项 2&#xf…

Flask——基于python完整实现客户端和服务器后端流式请求及响应

文章目录 本地客户端Flask服务器后端客户端/服务器端流式接收[打字机]效果 看了很多相关博客,但是都没有本地客户端和服务器后端的完整代码示例,有的也只说了如何流式获取后端结果,基本没有讲两端如何同时实现流式输入输出,特此整…

8.CSS层叠继承规则总结

CSS 层叠继承规则总结 经典真题 请简述一下 CSS 中的层叠规则 CSS 中的层叠继承规则 在前面《CSS属性的计算过程》中,我们介绍了每一个元素都有都有所有的属性,每一个属性都会通过一系列的计算过程得到最终的值。 这里来回顾一下计算过程&#xff0…

Node.js中如何处理异步编程

在Node.js中,处理异步编程是至关重要的技能。由于Node.js的单线程执行模型,异步编程可以极大地提高程序的性能和响应速度。本文将介绍几种常见的异步编程处理方式,并附上示例代码,帮助您更好地理解和应用异步编程技术。 回调函数…

家政小程序开发,引领家庭服务新时代的科技革命

随着科技的飞速发展,人们的生活方式正在发生深刻的变化。其中,家政服务作为日常生活的重要组成部分,也在经历着一场由小程序技术引领的科技革命。本文将探讨家政小程序的发展趋势、功能特点以及对家庭服务的深远影响。 一、家政小程序的发展…

NFTScan Labs,一个聚焦在 NFT 领域的开发者组织

NFTScan Labs 是一个聚焦在 NFT 领域的开发者组织,成立于 2021 年 3 月份。NFTScan Labs 核心成员从 2016 年开始涉足区块链领域,有多年开发经验和前沿行业认知,对加密钱包、区块链安全、链上数据追踪、DeFi、预言机、NFT 等领域有深入的研究…