【开放集目标检测】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}} dQKT,只是这里的 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) 的使用以及全网最详细源码讲解
相关文章:
【开放集目标检测】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基础上…...
东莞酷得 PMS134应广8位OTP单片机
1、特性 通用 OTP 系列 不建议使用于 AC 阻容降压供电或有高 EFT 要求的应用。应广不对使用于此类应用而不达安规要求负责 工作温度范围:-20C~70C 1.2.系统特性 一个硬件 16位计数器 两个8位硬件 PWM生成器 三个11 位硬件 PWM生成器(PWMG0,PWMG1…...
[终端安全]-7 后量子密码算法
本文参考资料来源:NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…...
uniapp 支付宝小程序 芝麻免押 免押金
orderStr参数如下: my.tradePay({orderStr:res, // 完整的支付参数拼接成的字符串,从 alipay.fund.auth.order.app.freeze 接口获取success: (res) > {console.log(免押成功);console.log(JSON.stringify(res),不是JOSN);console.log(JSON.stringify…...
Python爬虫教程第一篇
一、爬虫基础概念 1. 什么是爬虫 爬虫(Spider,又称网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说,爬虫通过程序模拟浏览器请求站点的行为,把站点返…...
AI时代:探索个人潜能的新视角
文章目录 Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉 1.5.2 局限二:Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 3 人工智能发…...
【Python学习笔记】Optuna + Transformer B站视频实践
【Python学习笔记】Optuna Transformer 实践 背景前摇(省流可不看): 之前以泰坦尼克号数据集为案例,学习了Optuna的基本操作,为了进一步巩固知识和便于包装简历,决定找个唬人一点的项目练练手。 ————…...
【自动驾驶/机器人面试C++八股精选】专栏介绍
目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…...
Unity中一键生成具有身体感知的虚拟人物动作
在虚拟现实(VR)和增强现实(AR)的浪潮中,如何让虚拟人物的动作更加自然、真实,已经成为一个重要课题。AI4Animation项目,一个由 Sebastian Starke 主导的开源框架,为Unity开发者提供了强大的工具集,以实现这一目标。本文…...
谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集
文章目录 一,拆分配置集二,配置文件中配置多配置集1,引用多配置集2,验证 三,多配置集总结1,使用场景2,优先级 这一节介绍如何加载多个配置集。 大多数情况下,我们把配置全部放在一个…...
UART编程
Q:为什么使用串口前要先在电脑上安装CH340驱动? 中断的作用? 环形buffer的作用? static和valitate的作用 三种编程方式简介 也可以通过DMA方式减小CPU资源的消耗 直接把数据在SRAM内存和UART模块进行传输 ,流程: …...
C++:右值引用
右值与左值 在讲解右值引用之前,我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式,我们可以获取它的地址并且对其赋值,左值可以出现在赋值操作符的左边,但是右值不能。 int i 0; int* p &i; do…...
(算法)硬币问题
问题:有1元,5元,10元,50元,100元,500元的硬币各有C1,C5,C10.C50,C100,C500个。 现在要用这些硬币来支付A元,最小需要多少枚硬币? 该题使用递归算法,利用局部最优解来推导…...
如何隐藏 Ubuntu 顶部状态栏
如何隐藏 Ubuntu 顶部状态栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏Chapter2 Ubuntu增大屏幕可用面积之——自动隐藏顶部状态栏Chapter3 Ubuntu18.04隐藏顶栏与侧栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏 https://www.sysgeek.cn/hide-top-bar-ubuntu/ 准备工作:安…...
【C++】入门基础(引用、inline、nullptr)
目录 一.引用 1.引用的定义 2.引用的特性 3.引用的使用场景 4.const引用 5.引用和指针的区别 二.inline 三.nullptr 一.引用 1.引用的定义 引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会给引用变量开辟内存空间,…...
24/07/10数据结构(5.1213)链表OJ
继续练习题: 7.判断链表是不是回文结构 对于一个链表,设计一个时间复杂度O(n)空间复杂度O(1)的算法,判断是否为回文结果 给定一个链表的头指针A,返回一个bool值代表其是否为回文结构. 测试样例:1->2->2->1 返回:ture bool chkPalindrome(ListNode* A){ …...
C++ 入门基础:开启编程之旅
引言 C 是一种高效、灵活且功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统、科学计算等多个领域。作为 C 语言的扩展,C 不仅继承了 C 语言的过程化编程特性,还增加了面向对象编程(OOP)的支持ÿ…...
据传 OpenAI秘密研发“Strawberry”项目
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
简单的SQL字符型注入
目录 注入类型 判断字段数 确定回显点 查找数据库名 查找数据库表名 查询字段名 获取想要的数据 以sqli-labs靶场上的简单SQL注入为例 注入类型 判断是数字类型还是字符类型 常见的闭合方式 ?id1、?id1"、?id1)、?id1")等,大多都是单引号…...
HttpClient调用SpringBoot项目的文件上传接口实现文件上传
1.导入httpclient的jar包 这里导入了httpclient、httpmime11 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
