论文阅读——DINOv

首先是关于给了提示然后做分割的一些方法的总结:

左边一列是prompt类型,右边一列是使用各个类型的prompt的模型。这些模型有分为两大类:Generic和Refer,通用分割和参考分割。Generic seg 是分割和提示语义概念一样的所有的物体,也就是提示是狮子,就把图片中所有狮子分割出来;Refer seg 是根据用户提示分割特定的物体,也就是提示是狗狗的一只耳朵,分割出来的也是狗狗的耳朵。可以看到,本文DINOv填补了视觉提示(Visual prompt)方法的空白。

DINOv可以做Generic和Refer。

Generic和Refer的例子:

这篇文章不是简单的prompt,而是in-context learning.

输入是一组图片-提示对(a set of reference image (Q) - visual prompt (A) pairs)输入的提示可以是mask、涂鸦(scribble)、框等,输出目标图片的mask。

DINOv的框架:

给一些参考图片:

相应的视觉提示:

要预测的图片,即目标图片:

视觉提示可以是masks, boxes, scribbles, points, etc.

参考图片可以和目标图片一样,这时退化为单图片视觉提示分割问题

DINOv主要由Enc、PromptEncoder、Decoder组成

Enc:vision encoder,提取图片特征

PromptEncoder:prompt encoder,结合图片特征和用户提供的提示特征来提取提示特征。

Decoder:基于分割查询和视觉提示特征产生mask和视觉概念。

输入参考图片和视觉提示,Enc提取图片特征Z,然后将Z和视觉提示输入到PromptEncoder提取参考视觉提示F(reference visual prompt F),也就是这一步是为了生成和图片特征相关的prompt。然后从F中采样出查询视觉提示特征Qp(sample the query visual prompt features Qp.)。公式表示如下:

除了觉提示特征Qp,还引入了分割查询Qs(segmentation queries Qs)作为候选提取(proposal extraction)。然后用共享解码器解码Qp和Qs,解码过程中和目标图片特征Z做了交叉注意力。公式表示:

Os是解码的分割查询特征(segmentation query features),Op是解码的目标视觉查询特征(target visual prompt features),M、B是预测的mask和box,Cg 和 Cr 是预测的通用分割和参考分割的匹配分数,这两个分数通过PromptClassifier计算Os和Op的相似性得到。

PromptClassifier:

通用分割任务的目标是将Os分类到不同的类别,当采用视觉提示的时候,差别在于Op作为类别embeddings的使用。

Np 和 Ns 分别是视觉提示和物体特征的数量。g是线性映射。相当于,得到的Cg矩阵,每一列代表一个物体特征,每一行代表一个类别,每一列都被分类到了某一行代表的那个类别。

对于参考分割任务,目标和通用分割任务不一样。参考分割任务中视觉提示用于识别目标图像中最匹配的实例,可以看做一个分类问题。(训练中目标图片和参考图片一样)

h是线性映射。

上面两个式子在实现中,对于通用分割任务是为每一个mask proposal 找到最适合的视觉提示,而参考分割任务相反,是给定一个视觉提示来匹配特定的mask proposal。也就是说,一个是给了mask proposal,然后从一堆视觉提示里找最合适的,另一个是给了视觉提示,然后从一堆mask proposal里面匹配特定,相应的。如上面DINOv框架图右边b、c图所示。

Visual Prompt Formulation:

DINOv的核心部分是视觉提示机制。

它提取与各种形式的视觉提示所指示的位置相对应的视觉特征,为了捕捉到细粒度视觉特征,使用了三层mask交叉注意力层(Mask Cross Attention Layer)。每层使用的是Enc提取的不同尺度的特征,使用视觉输入作为掩码,使用可学习的查询向量处理相应位置的特征得到视觉提示特征。

我理解的是,这应该是用的参考图片提取的不同尺度的特征提供更新prompt的特征,然后输入的prompt那个图片提供mask,再加一个可学习的提示查询通过从特征里面查询得到最终的提示。有时间再看代码查证。

Prompt Sampling

得到prompt之后做了一个采样,分别对通用分割和参考分割采用两种采样策略。

对参考分割,用“自参考”’的方法(“self-referring” approach),参考图像和目标图像相同,从一个实例中采样一个提示,并训练模型引用(生成的mask指向的)是同一个实例。好处是这种方法使我们能够利用大量的分割数据,如SA-1B,来有效地训练我们的模型。虽然训练时用的同一个实例,但是模型推理时可以泛化到使用不同目标图片,即cross-image referring。

对通用分割,训练阶段和推理阶段不太一样。训练阶段采样正负提示样本。所有图片同语义一类别的F归到一组,对每一组,随机的采样变量个数范围[1,N]的样本,然后使用一个聚合过程产生Qp。这个Qp会直接送入decoder,然后和目标图片交互融合计算一下得到最终的目标视觉提示Qp。采样的时候采用个数不确定是因为给定的一批图像可能不包括数据集中存在的所有语义类别,从而导致在训练过程中语义类别的数量可变。

上面通用分割训练过程采样伪代码如下:

对于通用分割的推理阶段采样策略,在推理阶段,以COCO数据集为例,基于训练阶段建立的所有语义类别的掩码提示,预提取相应的视觉提示特征。然后采用随机选择方法,为每个语义类别选择N(默认为16)个特征。这些选定的特征作为每个类别的代表性视觉提示功能。

简单来说应该是从训练集里面选出每个类别的视觉提示特征,然后从里面每个类别采样16个样本。

Decoder Query Formulation

分割查询也是两种类型。对于通用分割,是类似MaskDINO的可学习查询。

对于参考分割,使用和Semantic-SAM一样的交互式点查询。与Semantic-SAM类似,视觉提示(点或框)都被转换为锚框格式,然后每个视觉提示的位置将被编码为位置查询。每个位置查询都是重复的,然后与不同粒度的内容查询组合作为最终的分割查询。对于SA-1B上的训练,为了避免模型上过多的计算开销,我们选择性地将该视觉概念中包含的点的子集采样为正点查询。同时,我们从剩余区域中随机抽取一个子集作为负点。在推理阶段,我们在20×20均匀分布网格上对初始点位置查询进行采样,作为单个帧的初始点位置。

实验部分:

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

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

相关文章

LLM之Agent(二):BabyAGI的详细教程

BabyAGI是一个 AI 支持的任务管理系统(Python脚本),使用 OpenAI 和 Pinecone API 创建, 优先级排序和执行任务。该系统背后的主要思想是基于先前任务的结果和预定义的目标创建任务。脚本然后使用 OpenAI 的自然语言处理(NLP&#…

leetCode 93.复原 IP 地址 + 回溯算法 + 图解 + 笔记

93. 复原 IP 地址 - 力扣(LeetCode) 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1…

CS 2520nonono

CS 2520nonono WeChat:yj4399_​​​​​ Sina Visitor System High-level●3 Congestion Control Algorithms:○TCP Reno:■additive increase, multiplicative decrease function to adjust window size for every RTTuntil a packet loss is detected○TCP CUBI…

用java实现拼图小游戏

1、了解拼图游戏基本功能: 拼图游戏内容由若干小图像块组成的,通过鼠标点击图像块上下左右移动,完成图像的拼凑。 2、拼图游戏交互界面设计与开发: 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…

分享从零开始学习网络设备配置--任务4.3 使用动态路由RIPng实现网络连通

任务描述 某公司使用IPv6技术搭建企业网络,由于静态路由需要管理员手工配置,在网络拓扑发生变化时,也不会自动生成新的路由,因此采用IPv6动态路由协议RIPng实现网络连通,实现任意两个节点之间的通信,并降低…

基于SpringBoot学生读书笔记共享

摘 要 本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发的…

第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容

------> 课程视频同步分享在今日头条和B站 天下武功,唯快不破! 大家好,我是博哥爱运维。这节课给大家讲下云平台的弹性容器实例怎么结合其托管K8S,使用混合服务架构,带来极致扩缩容快感。 下面是全球主流云平台弹…

对抗产品团队中的认知偏误:给产品经理的专家建议

今天的产品经理面临着独特的挑战。他们不仅需要设计和构建创新功能,还必须了解这些功能将如何为客户带来价值并推进关键业务目标。如果不加以控制,认知偏差可能会导致您构建的内容与客户想要的内容或业务需求之间不一致。本文将详细阐述产品经理可以避免…

下载MySQL JDBC驱动的方法

说明 java代码通过JDBC访问MySQL数据库,需要MySQL JDBC驱动。 例如,下面这段代码,因为找不到JDBC驱动,所以执行会报异常: package com.thb;public class JDBCDemo {public static void main(String[] args) throws …

网络基础_1

目录 网络基础 协议 协议分层 OSI七层模型 网络传输的基本流程 数据包的封装和分用 IP地址和MAC地址 网络基础 网络就是不同的计算机之间可以进行通信,前面我们学了同一台计算机之间通信,其中有进程间通信,前面学过的有管道&#xff…

Redis之秒杀系统

目录 Redis 秒杀 Mysql数据库设计 Mysql秒杀实现 MysqlRedis秒杀实现 秒杀是一种高并发场景,通常指的是在短时间内(秒级别)有大量用户同时访问某个商品或服务,争相抢购的情景。在这种情况下,系统需要处理大量并发请…

Openai通用特定领域的智能语音小助手

无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来。她只能咧嘴无奈的摇摇头。水都还没有喝一口就开始“人工智能”的去回复。原本很阳光心情开始蒙上一层薄薄阴影。在这无休无止的Q&A中,就算你对工作有磐石一般强硬&#xff0…

Linux C/C++高级全栈开发(后端/游戏/嵌入式/高性能网络/存储/基础架构)

Linux C/C高级全栈开发是一个涉及到多个领域的综合性技术要求,需要对Linux系统、C/C编程语言以及各种相关的技术进行深入的理解和应用。 下面是一些涵盖的主要技术领域和技能要点: Linux系统基础:熟悉Linux操作系统的原理和常用命令&#xf…

Linux下的文件IO之系统IO

1. 知识点 读入写出,切记以我们程序为中心向文件或者别的什么东西读入写出(输入流输出流) 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

手写VUE后台管理系统5 - 整合状态管理组件pinia

整合状态管理组件 安装整合创建实例挂载使用 pinia 是一个拥有组合式 API 的 Vue 状态管理库。 pinia 官方文档:https://pinia.vuejs.org/zh/introduction.html 安装 yarn add pinia整合 所有与状态相关的文件都放置于项目 src/store 目录下,方便管理 在…

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

电子学会C/C++编程等级考试2023年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数(2023.3) 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中…

8. 队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列的尾部,而位于队列头部的人逐个离开。 如下图所示,我们将队列的头部称为“队首”,尾部称为“队尾”&#xff…

HuggingFace学习笔记--Model的使用

1--Model介绍 Transformer的 model 一般可以分为:编码器类型(自编码)、解码器类型(自回归)和编码器解码器类型(序列到序列); Model Head(任务头)是在base模型…

Rust UI开发(5):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第五篇,前四篇链接: 1、Rust UI开发(一):使用iced构建UI时…