【计算机视觉 | 目标检测】Grounding DINO:开集目标检测论文解读

news2024/12/23 23:55:50

介绍一篇较新的目标检测工作:

Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection

在这里插入图片描述
论文地址为:

https://arxiv.org/pdf/2303.05499.pdf

github 地址为:

https://github.com/IDEA-Research/GroundingDINO

文章目录

  • 一、摘要
  • 二、优点
  • 三、Grounding DINO 模型
    • 3.1 Feature Extraction and Enhancer
    • 3.2 Language-Guided Query Selection
    • 3.3 Cross-Modality Decoder
    • 3.4 Sub-Sentence Level Text Feature
    • 3.5 损失函数
  • 四、一些可视化结果

一、摘要

作者展示一种开集目标检测方案:Grounding DINO,将将基于 Transformer 的检测器 DINO 与真值预训练相结合。

开集检测关键是引入 language 至闭集检测器,用于开集概念泛化。作者将闭集检测器分为三个阶段,提出一种紧密融合方案,包括 feature enhancerlanguage-guided query selectioncross-modality decoder

作者除了对新颖类别进行检测还进行特定属性目标识别。在 COCO 数据集上零样本检测达到 52.5 AP,在 COCO 数据集 finetune 后达到 63 AP

二、优点

Grounding DINO 相对于 GLIP 有以下优势:

  1. 基于 Transformer 结构与语言模型接近,易于处理跨模态特征;
  2. 基于 Transformer 的检测器有利用大规模数据集的能力;
  3. DINO 可以端到端优化,无需精细设计模块,比如:NMS

目前开集检测器由闭集检测器引入语言信息实现,如下图所示:

在这里插入图片描述

闭集检测器通过学习关注语言的区域编码,每个区域可分类为新类别,实现的关键是使用对比损失约束 neckhead 的区域输出及对应语言特征。

所以本文取得的成就为:

  1. 提出 Grounding DINO 通过多阶段跨模态融合改进开集目标检测器;
  2. 进一步在对 RECReferring Expression Comprehension,目标指代物理解)数据集进行评估;
  3. COCO, LVIS, ODinW, and RefCOCO 数据集证明其有效性。

三、Grounding DINO 模型

在这里插入图片描述

对于图片、文本对,Grounding DINO 可以输出多对目标框及对应名词短语。

Grounding DINO 采用双编码器,单解码器结构。

图像 backbone 用于提取图像特征,文本 backbone 用于提取文本特征,特征增强用于融合图像及文本特征,语言引导的 query 选择模块用于 query 初始化,跨模态解码器用于框精细化。

流程如下:

  1. 图像及文本 backbone 分别提取原始图像及文本特征;
  2. 特征强化模块用于跨模态特征融合;
  3. 通过语言引导查询选择模块从图像特征中选择与文本对应的跨模态 query
  4. 跨模态解码器从跨模态 query 中提取需要特征,更新 query
  5. 输出 query 用于预测目标框及提取对应短语。

3.1 Feature Extraction and Enhancer

Swin Transformer 用于提取图像特征,BERT 用于提取文本特征,特征强化层如上图中 block2,利用 Deformable self-attention 强化图像特征,原始的 self-attention 强化文本特征,受 GLIP 影响,增加图像到文本跨模态以及文本到图像跨模态,帮助对齐不同模态特征。

3.2 Language-Guided Query Selection

为引导文本进行目标检测,作者设计语言引导的 query 选择机制选择与文本更相关的特征作为解码器的 query

算法下图所示。输出 num_query 索引,据此初始化 query

每个 decoder query 包括两部分: contentposition

位置部分公式化为 dynamic anchor boxes,使用编码器输出进行初始化;内容部分训练中可学习。

在这里插入图片描述

"""
Input:
image_features: (bs, num_img_tokens, ndim)
text_features: (bs, num_text_tokens, ndim)
num_query: int.
Output:
topk_proposals_idx: (bs, num_query)
"""
logits = torch.einsum("bic,btc->bit",
image_features, text_features)
# bs, num_img_tokens, num_text_tokens
logits_per_img_feat = logits.max(-1)[0]
# bs, num_img_tokens
topk_proposals_idx = torch.topk(
logits_per_image_feature,
num_query, dim = 1)[1]
# bs, num_query

上面这段代码实现的功能是计算图像特征和文本特征之间的相似度得分。

具体来说,输入两个特征张量 image_featurestext_features,其中 image_features 的维度为 (bs, num_img_tokens, ndim)text_features 的维度为 (bs, num_text_tokens, ndim)bs 表示 batch sizenum_img_tokensnum_text_tokens 分别表示图像特征和文本特征的总数,ndim 则表示特征维度。

代码首先使用 torch.einsum 函数计算两个特征张量之间的得分矩阵 logits,其中 bic 表示 image_features 张量的维度(batch size x num_img_tokens x ndim),btc 表示 text_features 张量的维度(batch size x num_text_tokens x ndim),bit 表示输出得分矩阵的维度(batch size x num_img_tokens x num_text_tokens)。计算方法为将 image_features 张量的第二个维度和 text_features 张量的第二个维度进行矩阵乘法,得到 logits 张量。得分矩阵中的每个元素表示一个图像特征与一个文本特征之间的得分。

接下来,代码使用 logits.max(-1)[0] 得到 logits_per_img_feat 张量,该张量的维度为 (bs, num_img_tokens),其中每个元素表示一个图像特征与所有文本特征之间的最大得分。具体来说,logits.max(-1) 得到一个长度为 2 的元组,第一个元素是最大值张量,维度为 (bs, num_img_tokens),第二个元素是最大值索引张量,维度为 (bs, num_img_tokens)。因为我们只需要最大值张量,所以使用 [0] 表示取出最大值张量。

在下一行代码中,使用 torch.topk 函数得到每个图像特征对应的前 num_query 个文本特征的索引。具体来说,该函数用于在某个维度上寻找前k个最大值。在本例中,logits_per_image_feature 张量的每个元素表示一个图像特征与所有文本特征之间的最大得分,因此 torch.topk 函数在第二个维度上找到前 num_query 个最大值,结果保存到 topk_proposals_idx 张量中,维度为 (bs, num_query)。

3.3 Cross-Modality Decoder

跨模态解码器结合图像及文本模态信息,如上图 block3,跨模态 query 经过 self-attention 层,image cross-attention 层与图像特征结合,text cross-attention 层与文本特征结合,以及 FFN 层。与 DINO 相比,每个解码器都有一个额外的文本 cross-attention 层,引入文本信息,便于对齐模态。

3.4 Sub-Sentence Level Text Feature

之前工作中探究了两种文本 prompt,如下图。

句子层级表征将整个句子编码为一个特征,移除了单词间影响;单词级表征能够编码多个类别,但引入不必要依赖关系;为避免不相关单词相互作用,作者引入 attention mask,此为 sub-sentence 级表征,既保留每个单词特征,又消除不相关单词间相互作用。

在这里插入图片描述

3.5 损失函数

类似 DETR,作者使用 L1 损失及 GIOU 损失用于框回归;沿用 GLIP,对预测目标是否匹配文本使用对比损失约束。

四、一些可视化结果

在这里插入图片描述

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

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

相关文章

flask框架之----Flask-Mail邮件

介绍: Web应用程序经常需要向用户、客户端、管理员、运维人员等相关人员发送邮件。在Flask框架中提供了Flask-Mail邮件库来管理电子邮件的收发。 安装:flask-mail: pip3 install flask-mail配置: 服务器信息: Flask-Mail &…

ESP32学习笔记 -- ESP32-S3使用NVS存储数据

什么是NVS? 非易失性存储(Non-Volatile Storage)简称NVS,是用来保存一些设备断电后不能丢失的数据,乐鑫的ESP32-S3芯片使用了一套NVS库函数对外置的SPI FLASH进行读、写、擦除等操作。 ESP-IDF通过分区表的方式,在外部SPI FLASH里面开辟一段存储空间(也称作NVS分区),…

Vue3 基础语法

文章目录 1.创建Vue项目1.1创建项目1.2 初始项目 2.vue3 语法2.1 复杂写法2.2 简易写法2.3 reactive(对象类型)2.4 ref(简单类型)2.5 computed(计算属性)2.6 watch(监听) 3.vue3 生命周期4.vue3 组件通信4.…

程序员应该怎么自学才能入门 ?我来聊聊自己的经历

当你想成为一名程序员,如何自学入门是一个非常重要的问题。在这里我分享一下我的经验,希望能对你有所帮助。 首先,为了制定好你的学习路线,你可以在网上的培训机构网站找到一张基础路线图。这张路线图必须是跟行业对标的&#xf…

Leetcode 42 接雨水

Leetcode42接雨水 题解1:正反两扫(Simple and effect)题解2:DP题解3:单调栈(单调栈存储的是下标,满足从栈底到栈顶的下标对应height的元素呈递减)题解4:双指针&#xff0…

【CSS系列】第六章 · CSS列表、表格、背景、鼠标属性

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

【数据结构】- 链表之带头(哨兵位)双向循环链表(上)

文章目录 前言🌟一、带头双向循环链表🌟二、带头双向循环链表结构图:🌟三、带头双向循环链表代码实现:🌏3.1头插:🌏3.2头插流程图🌏3.3 尾插🌏3.4尾插流程图&…

【CSS系列】第三章 · CSS三大特性和颜色的表示

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

Swagger简单了解

Swagger 介绍 使用swagger你只需要按照它的规范去定义接口及接口相关信息,在通过swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等。 官网:https://swagger.io/ knife4j是为javaMVC…

Linux网络——Shell编程之函数

Linux网络——Shell编程之函数 一、概述二、定义函数的格式1.格式一2.格式二 三、函数的查看和删除1.查看 declare2.删除 declare 四、函数的返回值1.return 返回值2.echo 返回值 五、函数的参数传入与变量范围1.函数的传参2.函数变量的作用范围 六、函数的应用1.阶乘2.递归目录…

知识不断分叉,知怎么来,才知怎么去

知识不断分叉,知怎么来,才知怎么去 定位方法论在中国的演化和继承 趣讲大白话:知道什么来,方知怎么去 【趣讲信息科技159期】 **************************** 定位也谈不上是科学意义上的理论 而是商业实践方法 不能神话 但也要有基…

深入了解目标检测技术--从基本概念到算法入门

前言: Hello大家好,我是Dream。 众所周知,目标检测是计算机视觉领域中的重要任务之一,其目的是识别图像或视频中包含的物体实例并将其定位。实现目标检测可以帮助人们在自动驾驶、机器人导航、安防监控等领域中更好地理解和应用图…

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明IIC地址/采集通道选择/时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCPCF8591模块 五、基础知识学习与相关资料下载六、视频效果…

JavaScript的基础语法

目录 一、初识JavaScript(简称JS) 1.JavaScript 运行过程 2.JavaScript 的组成 二、JavaScript的规范与调试 1.JavaScript 的书写形式 1.1 行内式 1.2 内嵌式(建议写在之前) 1.3 外部式(建议写在之前&#xf…

基于 SpringBoot+Vue 的在线学习平台(附源码)

摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台的网络应用,在外国学习平台已经是很普遍的方式,不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台…

【Java|golang】2437. 有效时间的数目

给你一个长度为 5 的字符串 time ,表示一个电子时钟当前的时间,格式为 “hh:mm” 。最早 可能的时间是 “00:00” ,最晚 可能的时间是 “23:59” 。 在字符串 time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字…

大型数据库期末总复习【SQL server 2008 基础教程】

一、概述 1.Microsoft SQL Server系统的体系结构 Microsoft SQL Server 2008系统由4个主要部分组成。这4个部分被称为4个服务,这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用,它们的关系示意图如图所示&…

Web安全:AppScan 安装和使用.(渗透常用工具)

Web安全:AppScan 安装和使用. AppScan是一款web安全扫描工具,可以利用爬虫技术进行网站安全渗透测试,根据网站入口自动对网页链接进行安全扫描,扫描之后会提供扫描报告和修复建议等. 目录: Web安全:AppSc…

【CSS系列】第四章 · CSS字体属性

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

51单片机(八)串口通信

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…