【AIGC】15、Grounding DINO | 将 DINO 扩展到开集目标检测

news2025/1/24 17:48:49

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 特征抽取和加强
      • 2.2 Language-Guided Query Selection
      • 2.3 Cross-Modality Decoder
      • 2.4 Sub-sentence level text feature
      • 2.5 Loss Function
    • 3、效果
      • 3.1 zero-shot transfer of grounding DINO
      • 3.2 Referring Object detection
      • 3.3 Ablations
      • 3.4 从 DINO 到 Grounding DINO

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

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

出处:清华、IDEA

时间:2023.03.20

贡献:

  • 本文提出了一种 open-set 的目标检测器,Grounding DINO,将 Transformer based 检测器 DINO 和 grounded pre-training 结合起来,能够根据任何输入(如类别或其他形容词)来输出任意类别目标的检测框
  • 本文提出了将 open-set object detection 的测评扩展到 REC(表示根据输入描述提取出一个目标)数据集上,能够帮助测评模型在 free-form 文本输入情况下的表现

一、背景

在这里插入图片描述

理解视觉新概念是视觉模型应该具有的基本能力,基于此,作者提测了一个强大的检测器 open-set object detection,能够检测任意的能用人类语言描述的目标

而且该任务也能和其他模型结合使用,有很大的潜力,如图 1b 所示,和生成模型结合起来就能进行图像编辑

open-set 目标检测的关键点在于将语言模型引入到 closed-set 目标检测器中,来实现 open-set 的泛化,能够认识没有见过的目标

如 GLIP 将目标检测定义为一个 phrase groundig task,并使用对比训练来训练目标区域和语言短语,在各种各样的数据集上都获得了很好的效果,包括 closed-set 和 open-set 检测

由于 closed-set 和 open-set 检测很类似,所以肯定能将两者联系起来来做一个更好的 open-set 检测器

本文基于 DINO[58] 提出了一个 open-set detector,且在目标检测上获得了很好的效果

Grounding DINO 相比 GLIP 的优势:

  • 基于 Transformer 结构,能同时适用于图像和语言数据
  • Transformer 结构能从大型数据集上获得更多的信息
  • DINO 可以端到端的优化模型,不需要使用后处理等(如 NMS)

现有的一些 open-set 检测器是怎么做的:

  • 使用语言模型的信息来将 closed-set 检测器扩展到 open-set 检测器

closed-set 检测器的三个重要模块:

  • backbone:抽取图像特征
  • neck:特征增强
  • head:回归和分类等

如何使用语言模型将 closed-set 检测器扩展到 open-set 检测器:

  • 学习 language-aware regiong embedding
  • 这样就可以将每个目标区域划分到语言语义信息对应的空间去
  • 其关键在于 neck 或 head 输出的地方,在 region output 和 language features 之间使用对比学习,来帮助模型学习如何对齐这两种多模态信息
  • 如图 2 展示了三个不同的阶段进行特征融合的示例,neck(A)、query initialization(B)、head(C)

在这里插入图片描述

到底什么时候来进行特征融合比较好呢:

  • 一般认为,在整个 pipeline 中进行特征的融合的效果会更好
  • 类似于 CLIP 形式的检索结构为了高效,只需要对最后的特征来进行对比即可
  • 但是对于 open-set detection,模型的输入是 image 和 text,所以 tight(and early)fusion 的效果更好,也就是更多的融合效果更好
  • 但是以前的检测器(如 Faster RCNN)很难在这三个阶段都将语言特征引入来进行融合,但 图像 Transformer 结构和 language 的结构很类似,所以本文作者设计了三个特征融合器,分别在 neck、query initialization、head 阶段进行融合

Neck 结构:

  • stacking self-attention
  • text-to-image cross-attention
  • image-to-text cross attention

Head:

  • query 的初始化:使用 language-guided query 选择方式来初始化
  • 如何提高 query 特征表达:对 image 和 text 进行 cross-attention ,来作为 cross-modality decoder

很多现有的 open-set 目标检测器都会在新类别上来测试其效果,如图 1b 所示

但作者认为,只要是能描述的对象,都应该被考虑其中

本文将这个任务命名为 Referring Expression Comprehension(REC),即参照表示理解

作者在图 1b 的右侧展示了一些 REC 的例子

作者在下面三种数据集上进行了实验:

  • closed-set
  • open-set
  • referring
    在这里插入图片描述

二、方法

Grounding DINO 会在给定一个输入 (image, text) 的基础上输出多个 [object boxes, noun phrases] pairs

如图 3 所示,模型会根据输入的图像和文字描述 ‘cat’ 和 ’table’ 来框出输入图像中的 cat 和 table

目标检测和 REC 任务都可以使用这个 pipeline 来对齐,类似于 GLIP:

  • 如何实现目标检测:将所有类别的名字作为输入 text 来
  • 如何实现 REC:对每个输入 text,REC 只需要返回一个 bbox 即可, 所以作者使用输出目标的最大得分作为 REC 的输出

Grounding DINO 的结构:dual-encoder-single-decoder 的结构,整体结构如图 3 所示

  • 一个 image backbone 来抽取图像信息
  • 一个 text backbone 来抽取文本信息
  • 一个 feature enhancer 来对图像和文本信息进行融合
  • 一个 language-guided query 选择模块来进行 query 初始化
  • 一个 cross-modality decoder 来进行 box 的修正

对每个(image, text)pair 的操作过程如下:

  • 首先,使用 image backbone 和 text backbone 来抽取原始的图像特征和文本特征
  • 然后,将这两组特征输入 feature enhancer 模块来进行跨模态特征融合,得到跨模态融合特征
  • 接着,使用 language-guided query selection 模型来从 image feature 中选择跨模态特征的 query,并输入跨模态 decoder 来从这两个模态的特征中提前需要的特征并且更新 query
  • 最后,最后一层 decoder 的输出 query 被用于预测 object box 并且提取对应的 phrases

在这里插入图片描述

2.1 特征抽取和加强

给定(Image,Text)pair,从类似 Swin Transformer 的结构中抽取多级图像特征,从类似 BERT 的结构中抽取文本特征

然后使用 DETR-like 的 detectors,来输出检测结果

抽取特征之后,将两组特征输入 enhancer 中来进行跨模态的特征融合,enhancer 结构包括多个 enhancer layers,其中一个如图 3 block2 所示。

使用 Deformable self-attention 来增强图像特征,使用普通的 self-attention 来增强文本特征

和 GLIP 一样,本文也使用了两个 cross-attention 来进行特征融合:

  • image-to-text
  • text-to-image

2.2 Language-Guided Query Selection

Grounding DINO 为了更好的利用 input text 来指导目标检测,设计了 language-guided query selection 模型,来选择和 input text 相关性更大的 features 来作为 decoder queries,pytorch 伪代码如 Algorithm 1 所示:

  • num_query:decoder 中的 queries 数量,实际使用时设定为 900
  • bs:batch size
  • ndim:feature dimension
  • num_img_tokens:image token 的数量
  • num_text_tokens:text token 的数量

在这里插入图片描述

language-guided query selection module 的输出:

  • num_query 索引,可以根据这个输出的索引来来初始化 queries

2.3 Cross-Modality Decoder

如图 3 block3 所示,作者使用 cross-modality decoder 来将 image 和 text 的特征进行结合

在这里插入图片描述

2.4 Sub-sentence level text feature

前面的 work 可以获得两种 text prompt,如图 4 所示

  • sentence level representation:如图 4a,将整个句子的特征编码为一个特征,如果一个句子有多个短语,则会抽取这些短语,忽略其他 word
  • word level representation:如图 4b,会对一个句子中的所有 word 进行关联性编码,会引入不必要的依赖关系,一些并不相关的单词也会被关联起来

基于上面两种编码方式的问题,作者提出了 sub-sentence level 表达的方式,就是只对 sub-sentence 内的 word 进行关联学习,不会引入不必要的联系
在这里插入图片描述

2.5 Loss Function

  • 回归 loss:L1 loss 和 GIoU loss
  • 分类 loss:对比学习 loss(预测的和 language token 之间的对比)

3、效果

作者在三种不同设置上进行了实验:

  • 闭集: COCO 检测数据集
  • 开集:zero-shot COCO、LVIS、ODinW
  • Referring detection:RefCOCO/+/g

设置细节:

  • 作者训练了两个模型变体:
    • Grounding-DINO-T(swin-T)
    • Grounding-DINO-L(swin-L)
  • text backbone 为 BERT-base(from Hugging Face)

3.1 zero-shot transfer of grounding DINO

1、COCO Benchmark:

在这里插入图片描述

2、LVIS Benchmark

在这里插入图片描述

3、ODinW Benchmark

在这里插入图片描述

3.2 Referring Object detection

在这里插入图片描述

3.3 Ablations

因为作者提出了 tight fusion 模式,为了验证该方式是否有用,作者移除了一些 fusion block,结果见图 6

所有模型都是使用 Swin-L 基于 O365 训练的,结果证明更紧密的 fusion 能够提升最终的效果

在这里插入图片描述

3.4 从 DINO 到 Grounding DINO

如果直接从头开始训练 Grounding DINO 的话,费时费力,所有作者尝试使用了训练好的 DINO 权重,冻结了两个模型共用的部分权重,微调其他部分的参数,结果见表 7。

结果表明,使用 DINO 预训练好的权重,只训练 text 和 fusion block, 就可以达到和重新训练一样的效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

java springboot工程整合JUnit测试

好啦从此文开始 我们开始学习整合第三方技术的知识 后续 我们会整合一下第三方技术 后续也还会用到很多 但大家要学的是思想 而不是某某技术怎么去整合 当你会任何一种技术 你都能自如的整合到项目中 你才算掌握了整合技术 好 那么开始先整合 JUnit 我们打开idea 打开我们的 …

VC6创建工程的各种类型

各个工程类型的含义是什么? ATL COM AppWizard 用ATL技术制作COM程序,例如:WORD里面用的公式编辑器 ATL: Active Template Library活动模板库。ATL是COM的开发工具。 COM: 1993年Microsoft首次公布了COM技术. Wizard:向导 什么是ATL? &…

十分钟,零基础使用uniCloud完成后端管理系统搭建二

上一节我们已经成功搭建基础版的后端管理系统,这一节我们将利用uniCloud给我们提供的schema2code自动生成代码,快速完成:列表、增加和修改页面创建。 上一节: 十分钟,零基础使用uniCloud完成后端管理系统搭建一_szii…

图论算法 --Dijkstra

当谈到计算机科学时,算法是一个重要的话题,因为它们能帮助解决很多问题。而有些算法,其高效性和惊人表现,令人感到惊艳。一起来分享一下你认为令人惊艳的高效算法吧! Dijkstra算法 一、你在工作和学习中用到过哪些惊艳…

半导体器件基础(期末模电速成)

目录 1、半导体分类 2、PN结 3、二极管 4、稳压二极管 5、三极管 6、场效应管 1、半导体分类 2、PN结 3、二极管 伏安特性: 我们第七版模电书上给的正向导通压降分别约为0.7和0.2V,且硅的单向导电性更好 如何确定二极管状态? 阳极电压…

C++ 输出格式控制

C 输出格式控制 需包含头文件: 浮点数精度、域宽、填充 操作符功能right-alignedright-alignedsetprecision(int n)设置以n表示的数值精度setw(int n)设置以n表示的域宽setfill(char c)设置以c表示的填充字符 输出格式 操作符功能oct以八进制格式输出数据dec以…

事件循环机制

基本概念 聊一下事件循环机制,在开始这篇文章之前,先明确一个概念,js本身是没有事件循环这个定义的。是js被嵌入相应的执行环境(浏览器 / Nodejs),配合当前事件循环的组成部分,具体来说分下面两…

【基于容器的部署、扩展和管理】3.4 灰度发布和A/B测试

往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 第三章:【3.2 基于容器的应用程序部署和升级】 第三章:【3.3 自动…

【C++】引用和右值引用

目录 1. 引用 1.1 引用的概念 1.2 引用的特性 1.3 引用的使用场景 1.3.1 作为参数 1.3.2 作为返回值 1.4 常量引用 1.5 引用和指针的区别 2. 左值和右值 3. 右值引用 3.1 右值引用的概念 3.2 左值持久;右值短暂 3.3 变量是左值 3.4 标准库move函数 1.…

docker使用与服务器上的可视化(ROS rviz等)

1.安装docker 安装docker:官网教程,按照官网命令一步步来即可。 添加当前用户到docker用户组: 【docker】添加用户到docker组,这样后面运行docker的时候前面不需要加sudo命令,否则运行docker的时候一直需要在前面加su…

开发人员必备的万能工具箱:He3

目录 1.简介2.安装3.详细功能清单4.常用快捷键5.使用示例5.1 测试正则表达式5.2 文本比较 He3官网: https://he3.app/zh/ 1.简介 今天,给大家推荐一款开发人员必备的万能工具箱:He3,这是一款免费的开发者工具箱,截至…

十分钟,零基础使用uniCloud完成后端管理系统搭建一

本文主要是通过uniCloud搭建后端管理系统,适合小白开发者、个人开发者,零后端基础,快速、低成本完成后端管理系统搭建。 还未创建uniCloud服务空间的开发者可以查看我的文章:Dcloud开发者注册,uniCloud服务空间创建。…

电脑显示屏不亮但是主机已开机?5种原因以及解决方案

电脑与我们的日常生活和工作密切相关,缺了它我们工作就很难正常展开。电脑使用久了,难免出现一些小问题,比如:电脑显示屏不亮但是主机已开机,这是什么原因造成的?我们应该怎么处理? 可能很多人…

随机数发生器设计(四)

随机数发生器设计(四)- DRNG 概述1 内部状态2 初始化函数3 SM3派生函数4 其他部分 概述 本示例DRNG设计参考了GM/T 0105 ,基于SM3算法实现,内部功能接口包括初始化函数、重播种函数、输出函数和已知答案自测试函数,同…

正点原子STM32(基于HAL库)5

目录 SRAM 实验存储器简介SRAM 方案简介硬件设计程序设计程序流程图程序解析 下载验证 内存管理实验内存管理简介硬件设计程序设计程序流程图程序解析 下载验证 SD 卡实验SD 卡简介SD 物理结构命令和响应卡模式数据模式 SDIO 接口简介SDIO 主要功能及框图SDIO 的时钟SDIO 的命令…

《程序员必备品质》——沉稳1

目录 前言: 一.言论有分寸 1.1不抱怨不指责 1.2谈话时不触及别人的短 1.3学会装聋作哑 二.沉心静气 2.1先稳定情绪再解决问题 2.2急于求成则遇速不达 三.结尾 前言: 这周,我细细的读了一本书,还没精读完,不过…

华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】

一、题目描述 有 N 条线段&#xff0c;长度分别为 a[1]-a[n]。 现要求你计算这 N 条线段最多可以组合成几个直角三角形&#xff0c;每条线段只能使用一次&#xff0c;每个三角形包含三条线段。 二、输入描述 第一行输入一个正整数 T (1< T< 100) &#xff0c;表示有…

开源WebRTC库放大器模式在采集桌面图像时遇到的DPI缩放与内存泄漏问题排查

目录 1、在非100%的显示比例下放大器采集到的桌面图像不全问题 1.1、通过manifest文件禁止系统对软件进行缩放 1.2、调用SetThreadDpiAwarenessContext函数&#xff0c;禁止系统对目标线程中的窗口进行缩放 1.3、使用winver命令查看Windows的年月版本 2、使用放大器模式遇…

4年经验去面试21k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——4年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;4年测试经验起码能要个21K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;自信满满去面试&#…

Highcharts for Python crack

Highcharts for Python crack   Aligned the API with Highcharts Core v11.1. In particular, this includes:   Added AccessibilityPoint.description_format property.   Added support for .legend_symbol to plot options and series options.   Added .border_…