【开放集目标检测】Grounding DINO

一、引言

论文: Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection
作者: IDEA
代码: Grounding DINO
注意: 该算法是在Swin Transformer、Deformable DETR、DINO基础上的改进,在学习该算法前,建议先掌握相关知识。
特点: 该方法融合了文本和图像两个模态的数据,实现了开放集目标检测,即给定一个文本提示,自动框出目标所在,该目标可以是训练集中没有的类别。该方法主要通过特征增强模块、语言指导查询选择模块、跨模态解码模块实现上述功能。

二、详情

如上图所示,该方法从下到上主要包括五大模块:特征提取模块(Backbone)、特征增强模块(Feature Enhancer)、语言指导查询选择模块(Language-guide Query Selection)、跨模态解码模块(Cross-Modality Decoder)、损失计算模块(Loss)。

2.1 特征提取模块

Grounding DINO需要同时使用文本和图像两个模态的数据。因此,需要对两个模态的数据分别进行特征提取并统一特征维度,从而使它们能够相互进行交叉注意力的计算。

对于文本数据,要求以点.分割不同的目标提示,提示可以是带描述的caption或者直截了当的类别,例如,如下左子图的提示可以是dog.a stick.Two dogs.,预测结果如下右子图。

为了避免不同提示间的无效交互,作者提出Sub-sentence级的注意力掩码设置方法。如下为Sentence级、Word级、Sub-sentence级的掩码设置方法:

Sentence级的特征提取将一个句子提取为一个单词,它们独立进行forward,互不干扰,会丢失一些相关信息;Word级的特征提取会用同一个forward处理所有单词,每个单词间均相互作用,会引入一些无关信息浪费计算资源;Sub-sentence级的特征提取也用同一个forward进行处理,但是由.分割的特征之间不会相互干扰,这是通过引入注意力掩码实现的,这样就实现了相关与无关信息的交互折衷。

文本特征由BERT获取。BERT输出的特征维度为768,需要经一个MLP层映射到256的维度以达到与图像特征的统一。

对于图像数据,图像特征由Swin Transformer获取。Swin Transformer输出的是多尺度特征(通道数分别为96、192、384、768),所以也要将各层特征维度统一至256。可以通过1*1的2D卷积实现,之后通过GroupNorm归一化。

两类特征都要有对应的位置编码,图像使用Sinusoidal position embedding(空间位置编码),文本使用sine position embedding(正弦位置编码)。

2.2 特征增强模块

特征增强模块相当于DETR系列方法中的解码器,如下为特征增强模块中一个解码层的结构图:

首先,文本特征经过自注意力进行特征增强,图像特征经过Deformable DETR中的可变形自注意力进行特征增强。

其次,依次通过图像-文本交叉注意力文本-图像交叉注意力进行跨模态的注意力交互实现特征融合。跨模态交叉注意力中两个模态均需要提供自己的 Q u e r y Query Query V a l u e Value Value,图中还给出了 K e y Key Key其实并不需要,所以跨模态交叉注意力中两个模态都有自己的输出

以图像-文本交叉注意力为例,具体公式如下:

其中, O O O P P P分别为自注意力输出的图像和文本特征; W ( q , I ) W^{(q,I)} W(q,I) W ( q , L ) W^{(q,L)} W(q,L)分别为加权 O O O P P P以获得 O ( q ) O^{(q)} O(q)(图像 Q u e r y Query Query)和 P ( q ) P^{(q)} P(q)(文本 Q u e r y Query Query)的全连接参数; W ( v , I ) W^{(v,I)} W(v,I) W ( v , L ) W^{(v,L)} W(v,L)分别为加权 O O O P P P以获得 O ( v ) O^{(v)} O(v)(图像 V a l u e Value Value)和 P ( v ) P^{(v)} P(v)(文本 V a l u e Value Value)的全连接参数; A t t n Attn Attn为注意力参数,相当于标准注意力的 Q K T d \frac{QK^T}{\sqrt{d}} d QKT,只是这里的 Q Q Q K K K分别为 O ( q ) O^{(q)} O(q) P ( q ) P^{(q)} P(q) O t 2 i O_{t2i} Ot2i P i 2 t P_{i2t} Pi2t分别为图像-文本交叉注意力输出的图像特征和文本特征。

O t 2 i O_{t2i} Ot2i的下标为 t e x t t o i m a g e text~to~image text to image,所以它通过 SoftMax ( A t t n ) \text{SoftMax}(Attn) SoftMax(Attn)加权 P ( v ) P^{(v)} P(v)再经全连接 W o u t , I W^{out,I} Wout,I获得。其实该计算过程与标准交叉注意力一致,Query由图像提供、Key、Value由文本提供,分别为 O ( q ) O^{(q)} O(q) P ( q ) P^{(q)} P(q) P ( v ) P^{(v)} P(v)
P i 2 t P_{i2t} Pi2t的下标为 i m a g e t o t e x t image~to~text image to text,所以它通过 SoftMax ( A t t n T ) \text{SoftMax}(Attn^{T}) SoftMax(AttnT)加权 O ( v ) O^{(v)} O(v)再经全连接 W o u t , L W^{out,L} Wout,L获得。 A t t n T Attn^{T} AttnT需要转置,因为 A t t n Attn Attn O ( v ) O^{(v)} O(v)的维度不匹配,主要原因是Key、Value中token个数相同但与Query中token个数不同。

最后,各自经过FNN(全连接+激活+Dropout+全连接+Dropout)即可的获得两个模态各自的输出。

2.3 语言指导查询选择模块

查询选择模块的结构图如下:

上图缺少很多细节。事实上,语言指导查询选择模块是以上一模块输出的图像特征memory_img和文本特征memory_txt为输入,利用文本特征指导图像特征的选择来初始化后续解码模块的查询(内容查询query_content和位置查询query_position)和参考点ref_point 详细的流程图如下:

可见,图中memory_new是获取后续内容的关键。首先,需要为memory_img中不同特征层上的所有像素点分配一个预设的建议框proposals_init(这与YOLO比较相似)。滤除其中不满足条件的建议框(例如,超界)得到proposals,再滤除与超界建议框对应的memory_img得到memory,memory经过全连接和LayerNorm即可获取memory_new(此时memory_new中token数量不确定,维度与memory_img一致)。

有了memory_new之后,我们可以结合memory_txt找出希望保留的特征索引idx_top900,获取过程如下:

可见,需要先计算memory_new(image_features)与memory_txt(text_features)的点积得到logits,它表示每个图像特征与每个文本特征间的相似度。我们希望留下与提示文本相似的图像特征作为查询,保留个数为900,于是得到idx_top900

之后,我们可以依次获取内容查询query_content、位置查询query_position、参考点ref_point

  • 对于内容查询,可以直接按照idx_top900从memory_new中抽取。

对于位置查询和参考点,我们需要先获取ref_embed,它包括两个部分:proposals和box_embed。可以理解为proposals是先给定一个初始框,然后memory_new经 MLP \text{MLP} MLP预测一个修正项,两者相加得到最终的框。再在这些框中选出得分最高的900个,即为ref_embed

  • 对于位置查询,可通过将ref_embed进行正弦位置编码,再经过 MLP \text{MLP} MLP映射获取。
  • 对于参考点,ref_embed的前两个值就是参考点,后两个值在进行可变形注意力时会加权在偏移量上,来定位用于计算注意力所需要用的像素点。

2.4 跨模态解码模块

跨模态解码模块是以特征增强模块输出的图像特征memory_img、文本特征memory_txt以及语言指导查询选择模块输出的内容查询query_content、位置查询query_position、参考点ref_point为输入,层层更新查询和参考点。其单层结构图如下:

自注意力 Q u e r y Query Query K e y Key Key V a l u e Value Value为语言指导查询选择模块输出的内容查询query_content、位置查询query_position

图像交叉注意力为Deformable DETR中的可变形交叉注意力。内容 Q u e r y Query Query为前一层的自注意力输出,位置 Q u e r y Query Query为语言指导查询选择模块输出的位置查询query_position K e y Key Key V a l u e Value Value为特征增强模块输出的图像特征memory_img,参考点为语言指导查询选择模块输出的ref_point

文本交叉注意力标准交叉注意力 Q u e r y Query Query由前一层的图像交叉注意力输出, K e y Key Key V a l u e Value Value为特征增强模块输出的文本特征memory_txt

FFN为全连接+激活+Dropout+全连接+Dropout。

跨模态解码模块每层都会输出更新后的查询,更新后的查询后跟一个 MLP \text{MLP} MLP即可获得参考点的修正量,修正量加上上一层输出的参考点即得到更新后的参考点(也可以视为该层的框预测),更新后的查询后跟一个 MLP \text{MLP} MLP即可获得该层的类别预测。

最后一层输出的更新后的查询和参考点即为最终的框和类别预测。

2.5 损失计算模块

对于框回归任务,使用L1损失GIOU损失。对于目标分类任务,使用对比损失(Contrastive loss)。对比损失就是将解码层输出查询与特征增强模块输出的所有文本特征进行点积,该相似度作为logits。这样每个文本特征的logits中都会有900个相似度值,可以计算focal损失(每一个文本特征都有一个最相似的查询),即为对比损失。

所有文本特征和所有查询两两之间都要计算上述损失构成成本矩阵,然后通过二分图匹配确定文本与查询的一一对应(每个文本都有一个查询与之对应,查询通常有空余),之后只需要对匹配好的文本-查询进行损失计算和梯度更新即可。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
文本提示检测图像任意目标(Grounding DINO) 的使用以及全网最详细源码讲解

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

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

相关文章

逆变器学习笔记(三)

DCDC电源芯片外围器件选型_dcdc的comp补偿-CSDN博客、 1.芯片的COMP引脚通常用于补偿网络: 芯片的COMP引脚通常用于补偿网络,在控制环路中发挥重要作用。COMP引脚接电容和电阻串联接地,主要是为了稳定控制环路、调整环路响应速度和滤波噪声…

java Lock接口

在 Java 中,Lock 接口的实现类ReentrantLock 类提供了比使用 synchronized 方法和代码块更广泛的锁定机制。 简单示例: import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockExampl…

关闭vue3中脑瘫的ESLine

在创建vue3的时候脑子一抽选了ESLine,然后这傻卵子ESLine老是给我报错 博主用的idea开发前端 ,纯粹是用不惯vscode 关闭idea中的ESLine,这个只是取消红色波浪线, 界面中的显示 第二步,在vue.config.js中添加 lintOnSave: false 到这里就ok了,其他的我试过了一点用没有

阿里云 OSS - 开通到使用、服务端签名直传(前后端代码 + 效果演示)

目录 开始 OSS 相关术语须知 阿里云 OSS 开通 阿里云 OSS 使用 官方文档教程 实战开发 阿里云 OSS 自动配置 环境配置 实战开发 服务端签名直传 概述 代码实现 开始 OSS 相关术语须知 中文 英文 说明 存储空间 Bucket 存储空间是您用于存储对象(Ob…

DB-GPT-PaperReading

DB-GPT: Empowering Database Interactions with Private Large Language Models 1. 基本介绍 DB-GPT 旨在理解自然语言查询,提供上下文感知响应,并生成高精度的复杂 SQL 查询,使其成为从新手到专家的用户不可或缺的工具。DB-GPT 的核心创新在于其私有 LLM 技术,该技术在…

FL Studio 2024 发布,添加 FL Cloud 插件、AI 等功能

作为今年最受期待的音乐制作 DAW 更新之一,FL Studio 2024发布引入了新功能,同时采用了新的命名方式,从现在起将把发布年份纳入其名称中。DAW 的新增功能包括在 FL Cloud 中添加插件、AI 驱动的音乐创作工具和 FL Studio 的新效果。 FL Cloud…

ThinkPHP定时任务是怎样实现的?

接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。 第一步:分析需求 先写获取设备信息,2分钟之…

力扣双指针算法题目:快乐数

目录 1.题目 2.思路解析 3.代码展示 1.题目 . - 力扣(LeetCode) 2.思路解析 题目意思是将一个正整数上面的每一位拿出来,然后分别求平方,最后将这些数字的平方求和得到一个数字,如此循环,如果在此循环中…

【做一道算一道】和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2 示例 2: 输入:nums [1,2,3],…

前端面试题8

基础知识 解释一下什么是跨域问题,以及如何解决? 跨域问题是由于浏览器的同源策略限制了从一个源加载的网页脚本访问另一个源的数据。解决方法包括使用JSONP、CORS(跨源资源共享)、设置代理服务器等。 描述一下事件冒泡和事件捕获…

Flutter-实现悬浮分组列表

在本篇博客中,我们将介绍如何使用 Flutter 实现一个带有分组列表的应用程序。我们将通过 CustomScrollView 和 Sliver 组件来实现该功能。 需求 我们需要实现一个分组列表,分组包含固定的标题和若干个列表项。具体分组如下: 水果动物职业菜…

BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

BigDecimal(double)和BigDecimal(String)的区别 double是不精确的,所以使用一个不精确的数字来创建BigDecimal,得到的数字也是不精确的。如0.1这个数字,double只能表示他的近似值。所以,当我们使用new BigDecimal(0.1)创建一个Bi…

golang验证Etherscan上的智能合约

文章目录 golang验证Etherscan上的智能合约为什么要验证智能合约如何使用golang去验证合约获取EtherscanAPI密钥Verify Source Code接口Check Source Code Verification Status接口演示示例及注意事项网络问题无法调用Etherscan接口(最重要的步骤) golan…

归并排序的实现(递归与非递归)

概念 基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使…

揭秘Conda:Python开发者必备的包管理神器

conda 简介 Conda 是一个开源的包管理系统和环境管理系统,用于安装和管理软件包以及创建和维护不同的软件环境。 它最初是为 Python 语言设计的,但现在已经支持多种编程语言,包括 R、Ruby、Lua、Scala 等。 1、Anaconda:是一个…

GPIO配置-PIN_Speed的理解

在使用STM32的GPIO 口配置时,经常会疑惑应该选用什么样的配置模式,本文谈谈对pin_speed的理解。 根据数据手册可得,STM32提供10MHz,2MHz和50MHz三种输出速度的配置,三种配置的应用场景是怎么样的?。 1.为什么要配置引…

[护网训练]原创应急响应靶机整理集合

前言 目前已经出了很多应急响应靶机了,有意愿的时间,或者正在准备国护的师傅,可以尝试着做一做已知的应急响应靶机。 关于后期: 后期的应急响应会偏向拓扑化,不再是单单一台机器,也会慢慢完善整体制度。…

论文辅助笔记:ST-LLM

1 时间嵌入 2 PFA(Partial Frozen Architecture) 3 ST_LLM 3.1 初始化 3.2 forward

强化学习中的Double DQN、Dueling DQN和PER DQN算法详解及实战

1. 深度Q网络(DQN)回顾 DQN通过神经网络近似状态-动作值函数(Q函数),在训练过程中使用经验回放(Experience Replay)和固定目标网络(Fixed Target Network)来稳定训练过程…

科大讯飞-群聊对话角色要素提取:不微调范式模拟官网评分

不微调范式模拟官网评分 step1: 模型api配置及加载测试step2: 数据加载与数据分析:测试集分析:step3: prompt设计:step4 :大模型推理:step 5: 结果评分测试:评分细则:评估指标 参考: 比赛说明: #AI夏令营 #…