Segment Anything——论文笔记

news2025/3/1 3:09:12

home page:segment-anything.com
code:segment-anything

1. 概述

介绍:SAM是最近提出的一种通用分割大模型,其表现出了强大的零样本泛化能力,视觉感知模型的通用化又前进了一步。为了达到文章标题字面意义“segment anything”,那么就需要该算法具有强大的物体语义感知能力,在模型的设计阶段就不能对其所使用的类别进行假设,更类似于常见的交互式分割方法。像交互式分割这样的方法,在现有的大模型体系下提示的相关操作被描述为prompt。在SAM算法中就支持点、框、mask和文本四种不同的prompt,它的零样本泛化能力也是基于此。说到要训练分割大模型,一个问题便是如何获取足够且高质量的数据,对此文章也提出了一种数据生产的pipeline,并且将收集到的训练数据也做了开源segment-anything-downloads(1100万图像数据,10亿mask GT)。

先放一张SAM模型的感知结果:
在这里插入图片描述
效果真的是很惊艳,要是再搭配上对应的文本模型,这样就具备具体语义和mask信息的感知能力了。

本文博文将围绕SAM模型运行原理数据生产过程这两个关键点,依据现有公开出来的文章内容进行梳理。

2. SAM方法

2.1 数据生产

当前网络上公开的数据集量都是比较少的,对应导致其场景适应性只能展现在某些固定的领域场景下。那么要训练一个具备“通用”价值的模型,这些数据量是不足的,对此文章提出了对应的data engine去获取训练数据。其获取数据的方法可以划分为如下几个步骤:

  • Step1:使用交互式分割这样的工具在初始数据集上完成人工标注。
  • Step2:在人工标注基础上训练一个分割模型,新到的图片数据首先会经过这个模型完成预标注,之后人工在对其进行修补,可看作为半自动化标注。
  • Step3:从第二步获取到相对足够的数据之后,再迭代一个更加强大模型,之后在图像上均匀采样点的方式去构建prompt,在新数据集下获得新的mask标注。

下图展示了SAM模型进行数据迭代的流程示意图:
在这里插入图片描述
最终SAM依据上述的方法获取了1100万训练数据和10亿数量级的mask标注。这个数量级的数据展现了丰富的数据多样性,将文章获取到的数据集于其它一些常见分割数据集进行对比:
在这里插入图片描述
图像尺寸分布对比:
在这里插入图片描述
则单从数据角度看SA-1B数据集的分布更全面,涵盖的内容更加丰富,这也会使得在此基础上训练出来的模型展现出更强的泛化能力。

2.2 SAM算法

2.2.1 算法pipeline

SAM算法定位是一种具备强大泛化能力的分割模型,也就是对于那些训练数据中未见过的数据也能进行分割,对此这个算法采取了prompt的机制,也就是支持下图中间部分的四个类型的输入(mask、points、box、text)。在这里插入图片描述
同时上图也是SAM算法的原理框图,按照上面的框图可以将SAM算法划分成如下几个部分:

Image Encoder:
这里使用MAE自监督训练得到的ViT模型作为图像特征的抽取网络。

Prompt Encoder:
上文也提到了SAM算法支持的几种prompt方式,对于points、box位置编码的形式嵌入到网络中,对于mask则采用几层卷积的方式提取embedding,对于text则是采用CLIP中的文本编码器得到对应的embedding。

Mask Decoder:
这个部分负责输出具体的mask预测,这里的预测方式采用的是MaskFormer的方式,将不同的分割目标构建为不同的query,在此基础上预测mask和class。这里的mask decoder是一个轻量化的模型,它的层数为2,其结构见下图:
在这里插入图片描述
以往query只作为query只有self-attention和cross-attention操作,在上图中还会将query和image进行交换形成双向的attention操作,

Resolving ambiguity:
由于SAM所使用的数据具备细粒度的特点,这就导致了一个prompt可能会存在多个符合的mask,也就是存在歧义的情况,见下图所示:
在这里插入图片描述
对此,文章只提取3个mask来表示一个prompt需要分割的区域(3个mask为经验值,文中认为这个数量可以hold住大多数场景),也就是可以将这些mask划分为whole、part和sub-part三种情况。同时在预测mask的时候还会预测每个mask的IoU,在最后选择的时候会根据这个分数选择最后的mask输出。

Loss& Training:
对于mask分割部分采用focal+dice的形式,权重设置为20:1。SAM支持多种prompt输入,则在训练的过程也需要对这样的过程进行模拟。同时为了模拟实际使用中的交互分割过程,还为每个mask设计11轮的随机prompt采样。

2.2.2 SAM中实现的一些细节

如何使得网络输出带有多义性:
在之前的图例中展示了一个prompt在人的感官上会有多个mask与之匹配,则SAM模型应该也具备这样的能力,毕竟每个人的想法不太一样,既然众口难调,那么就给出模型认为正确的mask就好了。也就是说对于一个prompt模型设计3个mask token去预测对应的mask,这样可以避免只预测一个mask带来的输出结果收敛的情况。

那么对于多个prompt的情况,会在3个token的基础上添加一个token,且在输出的时候只输出新添加token的预测结果。

训练时prompt的生成:
这里讨论points、box和mask类型的prompt生成,对于text部分的prompt在后面内容进行讨论,对于points的采样范围是整个mask区域,对于box是在原本mask bounding box基础上添加noise。将上面两种类型prompt作为输入得到对应的mask预测,选择预测结果中IoU值预测最高的作为下一轮迭代的输入,这个迭代的输入可以为替换为mask prompt了。 则对于下一轮迭代的时候points采样会从预测mask于GT比较的error区域中再采样得到。

text prompt生成:
在训练数据中选择那些较大的mask(大于 10 0 2 100^2 1002像素数),并通过尺寸扩增之后从图像中取出对应crop。这个crop输入到CLIP模型中去获取对应的text embedding(CLIP中图像和text是paired,有了图像可以得到对应的text描述)。再用这个text embedding作为SAM的prompt,去生成对应的mask预测。这样就使得SAM具备了text语义感知能力,下图展示了从text得到分割结果的示例:
在这里插入图片描述

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

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

相关文章

chatgpt赋能python:Python下载PyQt5教程

Python下载PyQt5教程 简介 PyQt5是一款Python编程语言的GUI框架,它基于QT库,专门用于开发图形界面应用程序。PyQt5可以实现跨平台开发,可在Windows,MacOS和Linux操作系统上运行。本文将介绍如何下载PyQt5,并在Python…

14、JavaEE--Mybatis注解与Ajax技术

目录 单表注解 Param注解 基于注解的一对一关联查询(one) 一对多查询(many) Ajax的概念 Ajax 开发 Ajax的核心代码: Ajax五步使用法 步骤1 创建 XMLHttpRequest 对象 步骤2 指定异步提交的目标和提交方式 步骤3 指定 X…

IT知识百科:什么是分布式云?

在当今信息技术高速发展的时代,云计算已经成为了企业和个人的重要组成部分。而在云计算领域中,分布式云是一种重要的架构模式,它允许资源的分散部署和管理,以实现高可用性、可伸缩性和弹性的服务提供。 本文将详细介绍什么是分布…

IT公司的吉祥“树” 二叉树-(堆)C语言创建

目录 🍪前言 一、树概念及结构 ✅基本概念 ✅树的专有名词 ✅ 树的表示 🚩孩子兄弟表示法 二、二叉树概念及结构 ✅概念 😍😍现实中的二叉树(又称IT公司的吉祥物)😍😍 ✅…

Nginx常用操作说明

Nginx常用操作说明 介绍Nginx概念深入浅出Nginx环境搭建Nginx反向代理-负载均衡Nginx动静分离Nginx动静分离先在部署Nginx的机器,Nginx目录下创建一个目录static_resources将项目中所有的静态资源全部拷贝到该目录下,而后将项目中的静态资源移除重新打包…

Hexo 个人博客主题美化

anzhiyu主题文档:https://anzhiy.cn/posts/220c.html anzhiyu主题插件地址:https://github.com/anzhiyu-c/hexo-theme-anzhiyu anzhiyu 主题安装 在博客根目录里执行命令,安装 anzhiyu 主题: git clone -b main https://github.co…

sql partition by和rank的统计用法

问题背景 最近公司有个项目需要用到某种特殊的统计用法, 例如从所有的数据中找出每个账号最新的一条余额信息(根据某个关键信息进行排序并获取排序值最高的记录)。 当时用的是非常普通的语句,也就是多个子查询嵌套select出每个账…

chatgpt赋能python:Python下载jieba:优化中文分词的必备工具

Python下载jieba:优化中文分词的必备工具 在中文自然语言处理的领域中,分词是一项基础且重要的任务。jieba是一个优秀的中文分词组件,它支持三种分词模式,并且具有高效、准确、易用等优点。本文将介绍如何通过Python来下载jieba&…

chatgpt赋能python:Python中8//3**2*10的解析与运算

Python中8//3**2*10的解析与运算 Python是一种高效,多范式,解释性编程语言,广泛用于Web开发,数据科学,人工智能等领域。在Python的运算中,有一个8//3**2*10的表达式,本篇文章将对其进行解析与运…

Springboot 配置文件脱敏的实践

写作目的 数据安全这块还是挺严重的,尤其是自己专注于业务开发,不能总停留在一个地方,还要关注其他的一些问题,比如数据安全。 配置脱敏 实现配置的脱敏我使用了Java的一个加解密工具Jasypt。该工具支持对称加密和非对称加密。…

pytorch基础学习-tensorboardX

最近训练总是出问题,听取建议,在pytorch环境下引入了tensorboard 1、安装tensorboardX tensorboardX是在tensorboard前提下进行安装的,所以我们需要先安装tensorboard pip install tensorboardpip install tensorboardX2、简单使用 这里我…

应急响应-windows

win系统常见的安全事件 1.病毒,木马,蠕虫事件 2.web服务器入侵事件或第三方服务入侵事件 3.系统入侵事件,用win漏洞入侵系统,利用弱口令等。 4.网络攻击事件,如DDos,ARP欺骗等。 win系统安全事件发现的…

基于自适应反馈调节因子的阿基米德优化算法(IAOA)-附代码

基于自适应反馈调节因子的阿基米德优化算法(IAOA) 文章目录 基于自适应反馈调节因子的阿基米德优化算法(IAOA)1.阿基米德优化算法2. 改进阿基米德优化算法2.1 佳点集种群初始化2.2 自适应反馈调节因子2.3 莱维旋转变换策略 3.实验结果4.参考文献5.Matlab代码6.Python代码 摘要&…

软考A计划-试题模拟含答案解析-卷七

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Maven学习笔记(单一架构案例)22版

第一节 创建工程,引入依赖 1 架构 ①架构的概念 『架构』其实就是『项目的结构』,只是因为架构是一个更大的词,通常用来形容比较大规模事物的结构。 ②单一架构 单一架构也叫『all-in-one』结构,就是所有代码、配置文件、各种…

基于hdoop的短视频用户画像研究_kaic

基于hadoop的短视频用户画像研究 摘 要 在这个互联网迅速发展的时代,网络和信息技术都跟上了时代的潮流,在互联网中的用户数据也出现了爆炸性的增长。用户的各种日常行为都通过互联网被记录下来,对于所有的互联网企业来说,想要从…

TCP报文中序列号的作用

TCP(传输控制协议)中的序列号用于标识TCP报文段中的数据部分。每个TCP报文段都包含一个序列号字段,该字段指示了报文段中第一个字节的序号。在后续的报文段中,序列号将递增,以指示下一个字节的序号。 TCP序列号是一个…

升级Springboot2.7.11之后内嵌tomcat启动成功, 但访问任何接口都是404

背景 最近项目在升级JDK17, 但原先低版本Springboot不能识别jdk17编译的字节码, 为了能够使用JDK17的语法, 因此对SpringBoot也做了升级, 直接升级到了SpringBoot 2.7.11版本. 对一些变更修改升级完成后, 本地启动服务运行, 一切正常!!! 于是发布到公司的容器环境运行, 发布平…

queue的常见接口说明(基于c++标准库的STL)

前言 队列是一种容器适配器,专门用于先进先出(FIFO)的操作中 ,其容器从一端插入数据,从另一端取出数据。队列作为一种容器适配器实现,容器适配器即将特定的容器封装起来,queue提供一组特定的成员…

LBM-BGK计算泊肃叶流动

LBM在计算泊肃叶流动时,需要添加外力项,这部分网上没什么资料,仅有的资料也写的模糊不清,这里点名批评这个知乎博文。 有些地方字母都对不上。。。 本站上也有一篇博文,写的也比较一般,但是代码是多松弛MR…