当前位置: 首页 > news >正文

【论文阅读】视觉分割新SOTA: Segment Anything(SAM)

导言

随着基于对比文本—图像对的预训练(CLIP)方法或者模型、聊天生成预训练转换器(ChatGPT)、生成预训练转换器-4(GPT-4)等基础大模型的出现,通用人工智能( AGI)的研究得到快速发展。AGI旨在为人工智能系统赋予更强大的执行能力,使其能够自主学习、不断进化,解决各种问题和处理不同的任务,从而在多个领域得到广泛应用。这些基础模型在大规模数据集上进行训练后,能够成功应对多样的下游任务。在这一背景下,Meta公司提出的分割一切模型(segment anything model,SAM)于2023年取得重要突破,在图像分割领域获得了优异的性能,以至于被称为图像分割终结者。

论文简介

论文题目:
Segment Anything

研究领域:
Computer Vision and Pattern Recognition; Artificial Intelligence; Machine Learning

论文作者:
Alexander Kirillov等

论文链接:
https://arxiv.org/abs/2304.02643v1

主要方法

在这里插入图片描述
本文借鉴大型语言模型的思想,提出了一种名为SAM的提示分割模型。该模型在大型数据集上进行预训练,具有较强的泛化能力,可以通过提示工程解决模型在新数据分布上的泛化问题。

模型的输入由两部分组成:一部分是分割提示,包括点、目标框、掩码和文本提示;另一部分是需要进行分割的图像。模型的目标是,根据用户提供的分割提示,生成一个有效的掩码。
此处“有效掩码”是指,即使提示不明确或涉及多个对象,模型的输出也应该是这些对象中一个合理的掩码。
在这里插入图片描述
SAM主要构成:图像编码器、提示编码器和掩码解码器。

1、图像编码器:图像编码器在SAM中的作用是将输入图像映射到特征空间,这一过程主要依赖于预训练好的ViT(vision Transformer)模型,该模型基于 MAE(masked auto encoder)方法进行训练。

2、提示编码器:该部分的任务是将用户输入的提示映射至特征空间,从而得到提示的特征嵌入。这些提示主要分为两类,一类是密集提示(上次迭代中预测的粗略掩码、用户标注的掩码);另一类是离散提示(如点、目标框、文本提示)。其中,密集提示通过卷积层进行处理,而离散提示则通过提示编码器进行处理。

3、掩码解码器:该部分主要有两个功能
1)将图像编码器和提示编码器输出的两个嵌入层进行整合;
2)通过整合后的信息解码出最终有效的掩码。值得注意的是,掩码解码器会根据置信度输出3种掩码,分别是选中物体的整体掩码、部分掩码和子部分掩码。
上图所示,当输入的提示点位于剪刀的刀柄部位时,模型则会输出以下3种掩码:
1)将整把剪刀进行分割;
2)将剪刀的两个刀柄分别进行分割;
3)将选中的这一个刀柄进行分割。
模型将这3种掩码按照各自的置信度大小进行排序输出,以准确地满足用户的需求。

论文针对的问题

在图像分割领域,由于缺乏大规模的数据集来训练一个基础模型,本文通过数据引擎实现了对数据集的构建和对模型的训练。数据引擎的工作流程分为3个阶段,从辅助手动阶段到半自动阶段,最后是完全自动阶段。

1、在辅助手动阶段:数据标注员借助交互标注工具,与SAM一起进行手动标注。这一阶段共收集了430万个掩码和12万幅图像;

2、半自动阶段:本文利用SAM输出的高置信度掩码对图像进行预标注。然后,再对图像中剩余未标注的部分进行交互式标注。这一阶段结束时,每幅图像平均提供了72个掩码;

3、完全自动阶段:进行SAM的最终训练和分割一切SA-1B数据集的获取。最终,SA-1B数据集包含1,100万幅图像和11亿个掩码。其中,99.1%的掩码是自动生成的。
并且数据集完全开放获取(10TB)

论文创新点

1、与 ChatGPT 的启发思想一样,采用 Prompt-based learning 的可提示学习范式,提高学习效率;
2、建立了迄今为止最大的分割数据集 Segment Anything 1-Billion(SA-1B),含 1100 万张图像,超过 10 亿个掩码,比任何现有的分割数据集多400 倍;
3、建立了通用的,全自动的分割模型,零样本灵活转化新任务,新领域,结果甚至优于之前的监督结果。

总结

SAM模型的出现推动了计算机视觉领域对于视觉基础模型的进一步研究,但仍需克服一些关
键技术挑战。未来的工作可以提高SAM的推理速度和精度,特别是在处理大规模数据时,应集中在优化模型结构、推理算法和硬件加速等方面的性能提升。其次,SAM对大量标注数据的依赖成本高昂,限制了其在下游任务上的广泛应用。未来研究可以关注半监督或自监督学习方法,减轻数据标注负担,提高模型泛化能力。

相关文章:

【论文阅读】视觉分割新SOTA: Segment Anything(SAM)

导言 随着基于对比文本—图像对的预训练(CLIP)方法或者模型、聊天生成预训练转换器(ChatGPT)、生成预训练转换器-4(GPT-4)等基础大模型的出现,通用人工智能( AGI)的研究…...

redis之list核心命令演示与细节探索

redis之list核心命令演示与细节探索 BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout summary: Pop an element from a list, push it to another list and return it; or block until one is available since: 6.2.0 BLPOP key [key …] timeout summary: Remove …...

[数据集][目标检测]智慧农业草莓叶子病虫害检测数据集VOC+YOLO格式4040张9类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4040 标注数量(xml文件个数):4040 标注数量(txt文件个数):4040 标注…...

Lua 与 C#交互

Lua 与C#交互 前提 Lua是一种嵌入式脚本语言,Lua的解释器是用C编写的,因此可以方便的与C/C进行相互调用。轻量级 Lua语言的官方版本只包括一个精简的核心和最基本的库,这使得Lua体积小、启动速度快,也适合嵌入在别的程序里。 交…...

【办公类】大组工会学习(文心一言+Python批量)

背景需求: 每学期要写一份工会的大组政治学习读后感(9月-1月,共5次) 学习内容 9月、10月、11月、12月、1月的学习内容文字稿 在班级里,我擅长电脑工作,所以这种写的工作都包了。 中2班三位老师一共写3篇&…...

项目管理工作流是什么?项目管理工作流管理实战技巧!

项目管理工作流是指在协作过程中通过限制任务状态的流转进行流程控制的一种方式。项目从启动到完成所经历的一系列有序、可控的步骤和流程,它详细描述了项目执行过程中各项任务和活动的顺序、依赖关系、责任人以及完成标准等,是项目成功执行的重要保障。…...

leveldb源码剖析(二)——LSM Tree

LSM Tree LSM Tree:Log-Structured Merge Tree,日志结构合并树。是一种频繁写性能很高的数据结构。 LSM Tree将写入操作与合并操作分离,数据首先写入磁盘中的日志文件(WAL),随后写入内存缓存,…...

三十六、Gin注册功能-检查账号是否存在

一、初始化 1、在cms.go中添加数据库连接方法 func connDB(app *CmsApp) {mysqlDB, err : gorm.Open(mysql.Open("root:rootroottcp(localhost:3306)/?charsetutf8mb4&parseTimeTrue&locLocal"))if err ! nil {panic(err)}db, err : mysqlDB.DB()if err !…...

什么是期权对冲?

今天期权懂带你了解什么是期权对冲?期权对冲的选择取决于投资者的市场预期和风险承受能力,通过合理使用期权对冲策略,可以有效减少风险并优化投资组合的表现。 期权对冲是什么? 期权是一种支持双向交易的投资产品,期…...

什么是数据库课程设计?

文章目录 前言一、课程设计目的二、课程设计流程三、设计要点四、示例项目总结 前言 数据库课程设计是一个综合性的实践过程,旨在通过实际项目的设计与实现,加深学生对数据库理论知识的理解和应用能力。 以下是一个关于数据库课程设计的基本框架和要点&…...

走进低代码报表开发(二):高效报表设计新利器

在前面的文章中,我们已经详细介绍了勤研低代码开发平台的报表数据源可视化设计,接下来,让我们一起来继续了解勤研低代码平台的报表设计,在当今数字化快速发展的时代,高效便捷的开发工具对于企业和开发者来说至关重要。…...

校园水电费管理|基于java的校园水电费管理小程序系统 (源码+数据库+文档)

校园水电费管理 目录 基于java的校园水电费管理小程序系统 一、前言 二、系统设计 三、系统功能设计 小程序端 后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕…...

java设计模式 桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们都可以独立地变化。桥接模式通过将继承改为组合,实现了在不修改现有类的情况下,动态地切换和扩展抽象类与其具体实现…...

如何利用大数据技术来识别和预防网络赌博行为?

1.构建赌博账户识别模型:通过大数据分析和机器学习技术,建立智能风险防控体系,对账户进行全生命周期管理,精准打击和切断不法分子的资金链条 。 2.分析资金流动:利用大数据技术监测和分析异常资金流动,识别…...

N-152基于java贪吃蛇游戏5

开发工具eclipse,jdk1.8 文档截图: N-152基于java贪吃蛇游戏5...

从线段中搜寻提取闭合轮廓(三)

1.前言 做底层和数据的调试问题也是个麻烦事,如果没有方便的可视化工具辅助,那将令人感到痛苦,借助可视化的工具可以让我们高效、省心,进而心情舒畅,重要的是可以提高调试效率。 当然可视化工具也分不同层次的…...

最全面的递归算法详解,一篇足矣(高手必备)

在编程中,递归和循环是两种常用的控制结构,各有其独特的优缺点。理解这两者的特点和应用场景,对于编写高效、可读的代码至关重要。 什么是递归? 递归是一种强大的编程技术,允许函数在其定义中调用自身。递归通常涉及…...

数据结构(2)单向链表排序和双向链表操作

一单向链表的插入排序 void insertion_sort_link(link_t* plink) { // 如果链表头为空,直接返回 if(NULL plink->phead) { return; } // 初始化指针,p指向当前已排序部分的最后一个节点 node_t* p plink->phead; // ptemp指向待插入的…...

OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 拟合一条直线到2D或3D点集。 fitLine 函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑i​ρ(ri​)来拟合一条直线到2D或3D点集&#xff0c…...

Mysql基础练习题 1757.可回收且低脂的产品(力扣)

编写解决方案找出既是低脂又是可回收的产品编号。 题目链接: https://leetcode.cn/problems/recyclable-and-low-fat-products/description/ 建表插入数据: Create table If Not Exists Products (product_id int, low_fats ENUM(Y, N), recyclable …...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...