【论文精读】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.mfbz.cn/a/406322.html

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

相关文章

深度学习基础(二)卷积神经网络(CNN)

之前的章节我们初步介绍了深度学习相关基础知识和训练神经网络: 深度学习基础(一)神经网络基本原理-CSDN博客文章浏览阅读924次,点赞13次,收藏19次。在如今的科技浪潮中,神经网络作为人工智能的核心技术之…

【微服务】国内微服务生态标准-SpringCloud Alibaba

现在已经是21世纪的二十年代,在未来的很长时间,以互联网、IOT物联网为代表的分布式应用必将越来越多,大量的软件企业对掌握微服务与高可用、高性能、高并发的架构人才也必定趋之若鹜。我们可以看看现阶段针对软件架构师的招聘需求和薪资&…

【元宵佳节】砖一祝您节日快乐!

元宵节的由来 相传,汉文帝(前179-前157年)为庆祝周勃于正月十五勘平诸吕之乱,每逢此夜,必出言游玩,与民同乐,在古代,夜同宵,正月又称元月,汉文帝就将正月十五定为元宵节&#xff0c…

算法打卡day1|数组篇|Leetcode 704.二分查找、27.移除元素

数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,可以方便的通过下标索引的方式获取到下标下对应的数据。 1.数组下标都是从0开始的。 2.数组内存空间的地址是连续的。 正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添…

LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…

免费的数据恢复软件哪个好?这10个数据恢复软件可以试试

遇到电脑、硬盘或U盘等设备中数据丢失,不用着急,数据恢复软件来帮你。 在遇到数据丢失的问题时,很多朋友都会很着急也不知道该怎么办。作为数据恢复小白,我们可以选择使用数据恢复软件进行扫描恢复。现在市面上的数据恢复软件很多…

AI技术那些事儿:揭开潜伏在你生活中的高科技小能手

你有没有发现,现在的生活里有些“看不见”的聪明家伙,它们时时刻刻在帮咱们忙活呢?从早上用语音命令打开窗帘、播报新闻,到晚上喊一声关灯睡觉,这些都离不开人工智能(简称AI)的助攻。今天咱就掰…

C++笔记:二叉搜索树(Binary Search Tree)

文章目录 二叉搜索树的概念二叉搜索树操作1. 框架搭建2. 遍历3. 查找迭代实现递归实现 4. 插入迭代实现递归实现 5. 删除迭代实现递归实现 6. 析构与销毁7. 拷贝构造与赋值重载 二叉搜索树的应用二叉搜索树的性能分析二叉搜索树模拟实现源码 二叉搜索树的概念 二叉搜索树又称二…

泛微e-office系统敏感信息泄露漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任 1、系统简介 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软…

gitlab升级

查看当前版本 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION12.9.3-ee 备份数据 gitlab-rake gitlab:backup:create备份默认位置在 /var/opt/gitlab/backups/ 备份配置数据(git配置目录) tar -zcvf gitlab12.9.3-ee.tar.gz /etc/gitlab备…

01VScode开发stm32环境搭建

title: VScode开发stm32环境搭建 tags: STM32vscode 1.准备工作 1.下载并安装VSCODE 在百度上搜索vscode记住一定要是官方的 不然你自己就是在给自己下毒2345全来了 打红圈一定要有不然就是在垃圾网站上下的 VSCode下载链接 选一个适合你的      安装正常流程走就行不再…

达尔克仪器设备邀您观摩2024生物发酵产品与技术装备展

参展企业介绍 达尔克本着“诚信、求精、协作、创新”的企业精神,以专业的技术、优良的品质和完善的服务,与广大客户共创辉煌未来。 我们的产品——包括水质分析、压力、温度、流量、物位等工业在线过程控制仪表、其他类型传感器以及自动化控制方案——全…

docker运行onlyoffice,并配置https访问【参考仅用】

官方说明: Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICEhttps://helpcenter.onlyoffice.com/installation/docs-developer-install-docker.aspx 一、容器端口、目录卷映射 sudo docker run --name容器名称 --restartalways -i -t -d -p…

论文阅读——SimpleClick

SimpleClick: Interactive Image Segmentation with Simple Vision Transformers 模型直接在VIT上增加交互是分割 用VIT MAE方法训练的预训练权重 用交互式分割方法微调,微调流程: 1、在当前分割自动模拟点击,没有人为提供的点击 受到RITM启发…

python[6]

类和对象 面向对象编程–说白就是让对象干活 创建类:class 类名: 创建类对象 对象名 类名() 构造方法 1、构造方法的名称是__init__ 2、构造方法的作用? 构建类对象的时候会自动运行 构建类对象的传参会传递给构造…

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频,在这个文章做一些笔记和心得,本篇文章就写了一些基础算法…

普中51单片机学习(红外通信)

红外通信 红外线系统的组成 外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由…

C++的stack容器->基本概念、常见接口

#include<iostream> using namespace std; #include <stack> //栈stack容器常用接口 void test01() { //创建栈容器 栈容器必须符合先进后出 stack<int> s; //向栈中添加元素&#xff0c;叫做 压栈 入栈 s.push(10); s.push(20); s…

Windows+Yolo3-darknet训练自己数据集并测试

WindowsYolo3-darknet训练自己的数据集并测试 一、首要条件 Windows 7下配置好VS2015OPENCV3.4.2YOLO3CUDA10.0CUDNN7.5生成darknet.exe。具体配置可参考我的博客&#xff1a;https://blog.csdn.net/wszswllnzn_/article/details/100760477 二.制作数据集 1、方法1 使用软件la…

flutter插件开发基础教程

前言 虽然现在已经有很多插件了&#xff0c;但是有时候还是需要自己开发一个插件。因此打算学习一下如何开发一个插件。这里只考虑安卓&#xff0c;安卓使用kotlin&#xff0c;kotlin不会也没事&#xff0c;我也不会。 参考项目&#xff1a;https://github.com/TBoyLi/flutte…
最新文章