segment anything paper笔记

news2024/11/20 16:32:48

demo主页(包含paper, demo, dataset)

通过demo可以看到一个酷炫的效果,鼠标放在任何物体上都能实时分割出来。

segment anything宣传的是一个类似BERT的基础类模型,可以在下游任务中不需要再训练,直接用的效果。
而且是一种带有提示性的分割模型,
提示可以有多种:点,目标框,mask等。

为了达到像NLP那样zero-shot和few-shot的推广效果,
paper从三个方面入手
1.Task,这个task需要能提供一个强大的pretraining模型,使下游很多任务都能推广使用。
2.Model,支持多种提示信息,在互动中实时输出分割mask。
3.数据集,现有的分割数据集都不够充足。

Task

当有新的数据集时(以前没见过),通过提示信息也能做到zero-shot, few-shot。
提示就是指你要分割什么,比如通过点击图片上的一点或者给一个目标框,或者提供一个Text。
需要解决的是模糊的提示下也能给出有效的mask.
比如在一个T-shirt上给一个点,那么是要分割出T-shirt还是要分割出穿这个T-shirt的人呢。
提示性的分割task包含一个提前训练好的模型,通过提示信息解决下游任务。
在这里插入图片描述

Model:

主要是transformer.
需要一个强有力的encoder计算出image embedding.
提示信息的encoder用来embed 提示信息,
然后在mask decoder中把image和提示信息的embedding融合起来。
这个模型就叫做SAM(segment anything model).

模型中image encoder和后面的decoder是分开的,
所以计算出的image embedding可以重复使用,
在给定image embedding的条件下,仅仅用提示信息encoder和mask decoder做出后面的分割预测就会达到实时效果。
比如网页上的demo效果。
在这里插入图片描述

所以说,SAM模型并不是真的实时,只是在提前计算好image embedding的前提下才是实时

对于有歧义的提示(比如点在T-shirt上的案例,是分割T-shirt还是分割穿T-shirt的人)。一般会给出多个mask,
paper中指出一般3个mask就够了,一个是整体,一个部分,一个再部分。
在这里插入图片描述
image encoder部分需要强大的pre-training方法,paper中采用了MAE 预训练的ViT.
(MAE是2022 kaiming大牛提出的)

prompt encoder:
提示信息包含sparse信息(点,目标框,text)和dense信息(mask)。
对于点和目标框,用positional encoding, 然后和image embedding结合。
dense提示(mask)用conv层进行embed, 然后和image embedding做element-wise和。

mask decoder:
transformer decoder block的修改版。
decoder模块中用到了prompt self attention和cross attention(两个方向:提示和image embedding,反向).

损失函数
focal loss, dice loss的线性结合。

SAM Data engine

数据集标注问题,分为3个阶段。
1.SAM辅助人工标注
这一阶段以人工标注为主,通过点击前景/背景物体上的点,SAM会作分割。然后人工会用一个刷子,橡皮工具修改mask. 因为image embedding是提前计算好的,所以会实时给出mask.
对于语义并没有过多限制,按物体的突出程度顺序标注,过于复杂的mask(标注超过30s)这一阶段会跳过。

那么最开始的SAM用什么数据集训练呢,用的是公共数据集,比如COCO。当有了一定的标注数据集之后,会用新的标注数据重新训练,数据集多起来以后,会增加模型的复杂程度,比如把ViT-B换成ViT-H。
这样重新训练了6轮。由于模型不断精确,标注时间也在降低,从34s降到14s.

2.SAM半自动标注
这一阶段在于增加模型的多样性,标注次突出的物体。首先让模型标注一部分,然后人工标注没有被模型标注的部分。
人工标注时间又回到了34s, 因为大部分都被模型标出来了,剩下的是更加challenging的物体。

3.全自动标注
经过第一阶段,训练集多了,模型准确率有所提升,也有了mask的多样性。
第2阶段解决了提示信息有歧义情况下的预测。
现在,给模型提示32x32的grid,每个点都要对有效目标预测一系列的mask.
然后用IOU阈值选择confident masks. 最后用NMS滤掉多余的mask.

实验,discussion,conclusion部分跳过。
paper主体部分比较宏观,更多的细节部分在附录。
下次再写吧。

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

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

相关文章

增强领域的知识图谱

以下是一些近两年基于知识图谱做知识增强的顶会论文: "knowledge-enhanced hierarchical graph convolutional networks for intent detection" (acl 2021) "kg-bert: bert for knowledge graph completion" (emnlp 2019) "k-adapter: i…

C语言刷题--内存存储、操作符

魔王的介绍:😶‍🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍&#x1…

04-Mysql常用操作

1. DDL 常见数据库操作 # 查询所有数据库 show databases; # 查询当前数据库 select databases();# 使用数据库 use 数据库名;# 创建数据库 create database [if not exits] 数据库名; # []代表可选可不选# 删除数据库 drop database [if exits] 数据库名; 常见表操作 创建…

Nestjs实战干货-概况-中间件-Middleware

中间件 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象,以及应用程序的请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量来表示。 Nest 中间件在默认情况下等同于Express中间件。下面是来自官方 exp…

MBD—模型的回调函数

目录 前面 如何设置? 应用 简单的提示 数据的初始化 前面 常用的回调函数有三类:模型的回调函数、模块的回调函数、信号的回调函数。这里分享一下模型的回调函数。 回调函数就是CallBack. 如何设置? 打开一个模型,在空白…

【计算机网络】TCP拥塞控制、丢包重传机制与滑动窗口机制

文章目录TCP 拥塞控制原理为什么拥塞期间,发送方会收到接收方的重复确认?TCP 滑动窗口机制原理TCP 丢包重传机制TCP 拥塞控制原理 TCP拥塞控制是指在网络拥塞的情况下,TCP协议通过调整发送数据的速率来避免网络拥塞的一种机制。TCP拥塞控制的…

物料分类视图:200 和 300 分类测试记录

一、概述 测试目的:将销售订单中成品对原材料的需求,通过MRP运行,传递到生产订单中 系统版本:S4 工厂代码:1001(计划工厂) 、1008(执行工厂) 成品: CP0000535 原材料: 编码 描述 板材特性 123…

国内 中 大 型 IT 软件 外包公司 名单 汇总(2023 最新版!)

文章目录***\*1、软件外包公司名单\*******\*2、如何区分是否是外包公司\*******\*3、外包公司真是无一是处吗?\*******\*4、软件外包的几种形式\*******\*5、哪些情况可选择外包\****结语1、软件外包公司名单2、如何区分是否是外包公司3、外包公司真是无一是处吗&a…

【Transformer系列(1)】encoder(编码器)和decoder(解码器)

前言 这个专栏我们开始学习transformer,自推出以来transformer在深度学习中占有重要地位,不仅在NLP领域,在CV领域中也被广泛应用,尤其是2021年,transformer在CV领域可谓大杀四方。 在论文的学习之前,我们…

【C++】类和对象—日期类的实现

目录一、日期类的功能二、获取月的天数三、Date类中的默认成员函数构造函数析构函数拷贝构造赋值运算符重载取地址操作符重载和const取地址操作符重载四、运算符重载&#x1f312;、、-、-日期天数日期天数日期-天数日期-天数&#x1f312;、!、>、>、<、<日期-日期…

C++ :websocket 通讯下的五种 I/O 模型

目录 I/O 多路复用&#xff08;一种同步 I/O 模型&#xff09; 非阻塞与阻塞 select、poll、epoll 起因 改善 select 与 poll 的差别 I/O 模型 阻塞 I/O 模型 非阻塞 I/O 模型 I/O 多路复用模型 信号驱动 I/O 模型&#xff08;SIGIO&#xff09; 异步 I/O 模型&…

VirtualBox下Ubuntu系统磁盘扩容

1. 正确扩容虚拟硬盘&#xff1a;修改虚拟硬盘和快照的虚拟硬盘大小 打开VirtualBox所在目录&#xff0c;打开cmd&#xff0c;输入命令VBoxManage list hdds&#xff0c;这样能够列出所有的虚拟磁盘。找到你需要扩容的磁盘输入命令VBoxManage" modifyhd "D:\Pat\to\…

米尔STM32MP135核心板 又一款入门级嵌入式开发平台

自2007年意法半导体&#xff08;ST&#xff09;推出STM32首款Cortex-M内核 MCU,十几年来&#xff0c;ST在MCU领域的发展是飞速向前的。而2019年ST发布了全新的STM32MPU系列产品线&#xff0c;STM32MP1作为新一代 MPU 的典范&#xff0c;有着极富开创意义的异构系统架构兼容并蓄…

WMS智能仓储

子产品介绍篇--智能仓储 智能仓储 我们通常也称 WMS 系统。是一个实时的计算机软件系统&#xff0c;它能够按照运作的业务规则和运算法则&#xff0c;对信息、资源、行为、存货和分销运作进行更完美地管理&#xff0c;提高效率。 一. 仓储管理系统&#xff08;wms&#xff09;…

javaweb过滤器与监听器

一、过滤器程序的基本结构、web.xml文件的配置过程和过滤器的执行过程 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

MobPush创建推送

功能说明 MobPush提供遵循REST规范的HTTP接口&#xff0c;适用各开发语言环境调用。 IP绑定 工作台可以绑定服务器IP地址&#xff0c;未绑定之前所有IP均可进行REST API的调用&#xff0c;绑定后进仅绑定的IP才有调用权限。 调用地址 POSThttp://api.push.mob.com/v3/push/c…

03.vue3的计算属性

文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以&#xff0c;对于任何…

CRM系统是什么?它有什么作用?

CRM系统是什么&#xff1f; CRM是Customer Relationship Management&#xff08;客户关系管理&#xff09;的缩写&#xff0c;是一种通过对客户进行跟踪、分析和管理的方法&#xff0c;以增加企业与客户之间的互动和联系&#xff0c;提高企业与客户之间的互信&#xff0c;从而…

GoNote第一章 环境搭建

GoNote第一章 环境搭建 golang介绍 1. 语言介绍 Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发&#xff0c;后来还加入了Ian Lance Taylor, Russ Cox等人&#xff0c…

oracle远程克隆pdb

使用远程克隆的先决条件是: oracle版本是12.2以上,开启归档模式以及本地undo. 这里是想从172.16.12.250将PRODPDB1克隆到172.16.12.251下&#xff0c;命名为PRODPDB1COPY。 1 确保源端数据库开启归档模式 备注&#xff1a;进cdb里开启归档。 2 在源数据库中&#xff0c;确保…