SAM(2023)-分割万物

news2024/9/23 11:18:44

文章目录

  • 摘要
  • 算法
  • 数据引擎
  • 实验
    • 7.1 零样本单点生成mask
    • 7.2 零样本边缘检测
    • 7.3. 零样本目标Proposals
    • 7.4. 零样本实例分割
    • 7.5. 零样本文本生成Mask
    • 7.6. 消融实验
  • 讨论
    • 限制:
    • 结论:

论文: 《Segment Anything》
github: https://github.com/facebookresearch/segment-anything

摘要

作者构建到目前为止最大分割数据集,包括1billion mask及11M image,该模型训练过程是可提示的,所有可以进行zero-shot任务,甚至超越之前全监督结果。

算法

在这里插入图片描述

SAM结构如图4,包括:图像编码器、灵活的prompt编码器、mask解码器
Image encoder:
使用MAE预训练的ViT

Prompt encoder:
prompt分为两种:sparse (points, boxes, text) and dense (masks)。使用位置编码与可学习embedding相加表征points及boxes,使用clip中文本编码器编码text;对于稠密prompt(masks),使用卷积embedding并与image embedding逐像素相加。

Mask decoder:
映射image embedding、prompt embedding、output token至mask。Transformer decoder跟随一个动态mask预测头,decoder block使用prompt self-attention及cross-attention(prompt2img、img2prompt)更新所有embedding。两个block结束后上采样image embedding,通过MLP映射output token至动态线性分类器,计算每个像素前景概率。

Resolving ambiguity:
仅有一个输出,对于模棱两可prompt,模型将平均多个有效mask。为解决此问题,对于一个prompt,作者进行预测多个输出,如图3.分为三个层级:whole、part、subpart。训练过程中仅反向传播最小loss。为了对mask排序,模型对每个mask预测置信度得分(比如估计IoU)
在这里插入图片描述

Efficiency:
给出处理过的image embedding,在web浏览器prompt encoder及mask encoder运行在50ms内,达到实时交互。

Losses and training:
作者使用focal loss与dice loss的线性结合监督预测mask。作者使用混合prompt训练提示性分割任务,每个mask中随机采样11轮prompt来模拟交互,使 SAM能够无缝集成到数据引擎中。

数据引擎

数据引擎有三个阶段:
1、模型辅助的人工标注;
2、自动化预测mask及模型辅助标注;
3、模型生成mask,无需人工;

Assisted-manual stage
借助基于SAM的交互分割工具,人工点击前景或背景目标点进行标注mask。仅标注能够命名及描述的目标,无需收集这些文本信息,按照重要性进行顺序标定目标。
该阶段的SAM使用开源分割数据集训练,当收集足够多数据后,使用新标注数据训练。锁着数据的收集,image encoder逐渐扩大,作者训练了6次模型,每个mask标注耗时从34秒下降到14秒**。该过程收集了4.3M mask及120k image**。

Semi-automatic stage
为了增加模型分割万物的能力,让标注者关注不太重要目标,即模型未预测mask。该阶段收集5.9M mask及180k image

Fully automatic stage
该阶段标注可完全自动化,归因于模型的两个强化点:收集足够多的mask改进模型;关注模棱两可目标的模型,使用32*32个网格点,每个点预测一系列有效目标相关的mask。

实验

7.1 零样本单点生成mask

在这里插入图片描述

真值mask在所有数据集上并未全部标注,因此原始评估结果不可信,作者补充标准mIoU评估方案,其中标注者对mask质量进行打分。
在23个数据集上,使用常规评估方案mIoU,SAM与RITM结果对比如图9a,SAM在16个数据集超越RITM,如果选用最相关的3个mask,而不是置信度最高的mask,性能够将全部超越RITM,如图9a中圆点所示,说明模棱两可目标对评估方案影响。
图9b展示标注人员对mask人工评分结果
图9c展示选取目标中心点,SimpleClick、FocalClick、RITM及SAM结果。
图9d展示随机选取点生成mask效果。

7.2 零样本边缘检测

使用16*16个规则网格前景点提示SAM生成768个预测mask,通过NMS除去多余mask,利用Soble算子计算边缘map。可视化结果如图10,
在这里插入图片描述
在BSDS500数据集实验结果如表3。
在这里插入图片描述

7.3. 零样本目标Proposals

以SAM输出mask作为proposal,最大1000个进行评估,实验结果如表4,ViTDet-H整体效果最佳,但是其在LVIS数据集训练过
在这里插入图片描述

7.4. 零样本实例分割

通过目标检测器(ViTDet)生成预测框,以此提示SAM输出mask。实验结果如表5,SAM比ViTDet效果略差,但SAM未在该数据集训练
在这里插入图片描述

7.5. 零样本文本生成Mask

SAM训练过程作者进行更改使其关注文本。具体地:对于100*100以上mask,使用CLIP提取image embedding,训练过程中使其提示SAM,因此推理时可使用CLIP文本embedding进行提示SAM生成mask。【个人认为不合理,image embedding与text embedding之间存在gap,因此效果不佳】
实验结果如图12,对于一些prompt难以分割正确目标,需要增加point辅助。
在这里插入图片描述

7.6. 消融实验

在这里插入图片描述
图13左展示仅使用自动标注数据比三阶段逐步训练效果低0.5,但训练复杂度降低
图13中展示数据规模影响,使用SA-1B数据集10%数据训练与全量训练效果相当;
图13右展示图像编码器使用VIT-H改善明显。

讨论

基础模型新范式:在大规模数据集训练,自适应小规模数据集下游任务;

限制:

  1. SAM泛化性不足;
  2. 由于复杂image encoder原因SAM无法做到实时;
  3. 文本引导mask仅进行初步探索,不够鲁棒;
  4. 目前还不清楚如何设计简单提示实现语义及全景分割;

结论:

SAM是语义分割基础模型时代的一次尝试;
本文贡献主要为:

  1. 一个新任务:提示性分割;
  2. 模型:SAM
  3. 数据集:SA-1B

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

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

相关文章

java获取类结构信息

package com.hspedu.reflection;import org.junit.jupiter.api.Test;import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;/*** author 韩顺平* version 1.0* 演示如何通过反射获…

初级算法-回溯算法

主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-回溯算法 一、组合二、电话号码的字母组合三、组合总和四、组合Ⅱ五、组合Ⅲ六、分割回文串七、复原IP地址八、子集问题九、子集Ⅱ十、递增子序列十一、重新安排行程十二、全排列十三、全…

CASAIM自动化精密尺寸测量设备全尺寸检测铸件自动化检测铸件

铸造作为现代装备制造工业的基础共性技术之一,铸件产品既是工业制造产品,也是大型机械的重要组成部分,被广泛运用在航空航天、工业船舶、机械电子和交通运输等行业。 铸件形状复杂,一般的三坐标或者卡尺圆规等工具难以获取多特征…

【基础算法】八大排序算法:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序(快排),归并排序,计数排序

文章目录 ✔️前言直接插入排序希尔排序选择排序1. 选择排序基础2. 选择排序优化3. 复杂度的分析 堆排序【⭐重点掌握⭐】1. 对堆的认识和数组建堆2. 对数组进行堆排序操作3. 复杂度的分析 冒泡排序快速排序【⭐重点掌握⭐】1. 霍尔法2. 挖坑法3. 前后指针法4. 快速排序优化&am…

每日一个小技巧:1招教你提取伴奏怎么做

伴奏是指在演唱或演奏时,用来衬托或补充主唱或乐器的音乐声音。而伴奏提取是一种技术,它可以帮助我们从歌曲中将人声和乐器分离出来。当我们听到一些喜欢的歌曲时,往往会被它的旋律深深吸引,想要将其作为自己的演唱曲目&#xff0…

国考只考一门?免试入学还好毕业的在职研究生专业有哪些

读同等学力申硕的同学想要拿学位证,那么首先要过的坎就是国考。修满学分和通过校考一般都不会很难,只要按时上课、根据院校安排的课程复习即可。而国考是全国统一命题、考试,大部分专业要考2门,对于有的同学来说,备考压…

从零开始学Python第13课:常用数据结构之字典

迄今为止,我们已经为大家介绍了Python中的三种容器型数据类型,但是这些数据类型仍然不足以帮助我们解决所有的问题。例如,我们需要一个变量来保存一个人的信息,其中包含了这个人的姓名、年龄、身高、体重、家庭住址、本人手机号、…

Springboot 自定义缓存配置 CacheManager 及redis集成

目录 前言 集成 maven依赖 CacheManagerConfig配置 redis配置 使用 Springboot 集成使用缓存 Cacheable CacheEvict 前言 现有项目中经常遇到的缓存集成问题,Springboot提供了统一的接口抽象与缓存管理器,可集成多种缓存类型,如 Co…

Java阶段二Day10

Java阶段二Day10 文章目录 Java阶段二Day10DQLGROUP BY 分组按单字段分组例 按多字段分组例 按照聚合函数的结果排序例 HAVING子句问题错误原因HAVING子句的应用HAVING和WHERE的区别例 子查询 (SubQuery)概念应用场景子查询分类在DQL中使用子查询单行单列子查询例 多行单列子查…

hook函数

什么是hook函数 在计算机编程中,hook函数是指在特定的事件发生时被调用的函数,用于在事件发生前或后进行一些特定的操作。通常,hook函数作为回调函数被注册到事件处理器中,当事件发生时,事件处理器会自动调用相应的ho…

QtDAY 2

代码&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QString> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : …

【Hello Network】网络编程套接字(二)

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍网络的基础概念 网络编程套接字&#xff08;二&#xff09; 简单的TCP网络程序服务端创建套接字服务端绑定服务器监听服务端获取连接服务端处…

Qt Quick Qml-Rectangle案例

Qt Quick - Qml 1.Rectangle //组件 IShadow.qml import QtQuick import QtQuick.ControlsItem {id:rootanchors.fill: parentanchors.margins: -4property color color: "#999999"property int radius: 4Rectangle{width: root.widthheight: root.heightanchors.ce…

原型图都可以用什么软件做?分享这9款给你

设计师在进行原型设计师时&#xff0c;会使用原型图软件&#xff0c;从产生想法到向开发人员提交项目。无论是构建基本线框还是功能齐全的原型&#xff0c;原型图软件都可以为你节省大量的时间和精力。 如果你是这个领域的新手或者想更新你的原型图软件包&#xff0c;请快速看…

iOS App的生命周期

App的生命周期 App从启动到退出的过程中&#xff0c;iOS应用程序不断从系统接收各种事件&#xff0c;如&#xff1a;用户点击了屏幕、用户点击了Home键&#xff0c;并对这些事件进行响应。接受事件是UIApplication对象的工作&#xff0c;但是&#xff0c;响应事件就需要由程序…

Dubbo详解

一、基础知识 1、 RPC RPC【Remote Procedure Call】是指远程过程调用&#xff0c;是一种进程间通信方式&#xff0c;他是一种技术的思想&#xff0c;而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数&#xff0c; 而不用程序员显式编码…

【unity细节】—(Can‘t add script)脚本文件无法拖拽到对象的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐关于脚本文件无法拖拽到对象的问题⭐ 文章目录 ⭐关于脚本文件无法拖拽到对象的…

分治算法(Divide and Conquer)

本文已收录于专栏 《算法合集》 一、简单释义 1、分治算法 字面上的解释是“分而治之”&#xff0c;就是把一个复杂的问题拆分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解&#xff0c;原问题的解即子问题的…

什么是FAQ页面?如何设计一个优秀的FAQ页面?

随着互联网技术的迅猛发展&#xff0c;越来越多的企业开始将在线客户支持服务作为一种重要的业务方式&#xff0c;以提供更好的服务体验。然而&#xff0c;在线客户支持服务除了提供实时的沟通方式外&#xff0c;一个功能齐全、易于使用的FAQ页面也是必不可少的&#xff0c;这可…

Go 语言进阶与依赖管理

作者&#xff1a;非妃是公主 专栏&#xff1a;《Golang》 博客主页&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录 一、语言进阶1. 并发和并行2. 协程(Goroutine…