Grounding DINO:开放集目标检测,将基于Transformer的检测器DINO与真值预训练相结合

news2025/3/10 18:52:00

在这里插入图片描述

文章目录

  • 背景知识补充
    • CLIP (Contrastive Language-Image Pre-training):打破文字和图像之间的壁垒
    • DINO(Data-INterpolating Neural Network):视觉 Transformer 的自监督学习
    • Stable Diffusion:从文本描述中生成详细的图像
    • Open-set Detector开集检测器
  • 一、Grounding DINO的创新点
  • 二、Grounding DINO的网络架构:双encoder单decoder
    • (一)特征提取与融合
    • (二)Language-Guided Query Selection:文字信息更好地指导目标检测
    • (三)Cross-Modality Decoder
    • (四) Sub-Sentence Level Text Feature
  • 三、Grounding DINO损失函数


背景知识补充

CLIP (Contrastive Language-Image Pre-training):打破文字和图像之间的壁垒

  1. CLIP是一种多模态模型,能够同时处理图像和文本,而不是独立地处理它们;
  2. CLIP的预训练阶段是在大规模的图像和文本数据集上进行的,这样模型可以学习到图像和文本之间的语义对应关系;
  3. CLIP模型经过预训练后,可以在多个领域和任务中进行迁移学习,如图像分类、目标检测、文本生成等,无需进行额外的任务特定的微调
    在这里插入图片描述

参考:基于Diffusion的典型可控图片生成模型


DINO(Data-INterpolating Neural Network):视觉 Transformer 的自监督学习

DINO是一种用于无监督学习的方法,主要思想是通过让模型学会自行对数据进行插值,从而学习出对数据有意义的表示;DINO架构的核心是不使用标签的知识提炼。它训练了一个学生网络来模仿一个更强大的教师网络的行为,所有这些都不需要在训练数据中有明确的标签。
在这里插入图片描述 DINO 训练过程的简化概述: 一张图片被裁剪成两种尺寸,然后输入学生和教师网络。 对教师的输出应用居中操作,并且两个输出都通过 softmax 层归一化整理。为了交叉熵作为损失函数为模型反向传播提供更新参数的策略。

两个 softmax 输出都传递到损失函数中,使用随机梯度下降 (SGD) 执行反向传播。在这里的反向传播是通过学生网络执行的,这时教师的权重尚未更新的原因。 为了更新教师模型,DINO 对学生权重使用指数移动平均 (EMA),将学生网络的模型参数传输到教师网络。

参考:
自监督学习经典制作:DINO


Stable Diffusion:从文本描述中生成详细的图像

  1. Stable Diffusion是一种潜在扩散模型,能够从文本描述中生成详细的图像;
  2. Stable Diffusion解决了扩散模型时间成本和经济成本都极其“昂贵”的问题;
  3. Stable Diffusion只是将潜在扩散模型应用于高分辨率图像,同时使用 CLIP 作为文本编码器。
    Stable Diffusion模型架构

以Stable Diffusion 文生图技术为例,其训练阶段和采样阶段总体框架可以划分成 3 个大模块:PART1-CLIP 模型,PART2-Unet 训练,PART3-采样器迭代

参考:
Stable Diffusion文生图技术
Stable Diffusion原理详解

Open-set Detector开集检测器

大多开集检测器都是通过将闭集检测器扩展到具有语言信息的开集场景来开发的。如下图所示,一个封闭集检测器通常有三个重要的模块:

  • 用于特征提取的主干backbone
  • 用于特征增强的颈部neck
  • 用于区域细化(或box预测)的头部head(回归和分类等)。

通过学习语言感知区域嵌入,可以将闭集检测器推广到检测新对象,使每个区域在语言感知语义空间中被划分为新的类别。

在这里插入图片描述实现这一目标的关键是:在颈部(和/或头部)输出的语言特征和区域输出 之间使用对比损失


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

一、Grounding DINO的创新点

  1. Grounding DINO支持文本的目标检测(实现方式:将language信息引入到目标的通用特征表示中);
  2. Grounding DINO实现从 close-set 到 open-set的创新(实现关键:引入 text encoder)

二、Grounding DINO的网络架构:双encoder单decoder

Grounding DINO的整体结构:

  • image backbone用于提取image feature
  • text backbone用于提取text feature
  • feature enhancer(特征增强)用于融合image和text feature
  • language-guide query selection模块用于query初始化
  • cross-modality decoder用于bbox预测(bbox预测指对目标对象的边界框进行预测)
    在这里插入图片描述

(一)特征提取与融合

  • 采用Swin Transformer作为image backbone提取图像特征,采用BERT作为text backbone提取文本特征;
  • 利用Self-Attention实现文本特征的增强,利用Deformable Self-Attention实现图像特征的增强;
  • 利用GLIP中的image-to-text 和 text-to-image cross-attention实现特征融合(图像到文本跨模态以及文本到图像跨模态,帮助对齐不同模态特征)。

在这里插入图片描述Q是词的查询向量,K是“被查”向量,V是内容向量

(二)Language-Guided Query Selection:文字信息更好地指导目标检测

  • 输入:融合更新后的文本特征和图像特征;
  • language-guide query selection模块用于筛选与输入文字特征相似更高的图像特征
  • 输出:Cross-Modality用作decoder的queries。

在这里插入图片描述
language-guided query selection方法用于初始化Head的query
为引导文本进行目标检测,作者设计language-guided query selection机制选择与文本更相关的特征作为解码器的query。算法下图所示:
在这里插入图片描述

  • 输出num_query索引,据此初始化query;
  • 每个decoder query包括两部分:content及position;
    • 位置部分公式化为dynamic anchor boxes,使用编码器输出进行初始化;
    • 内容部分训练中可学习。

(三)Cross-Modality Decoder

  1. 跨模态解码器结合图像及文本模态信息,跨模态query经过self-attention层image cross-attention层与图像特征结合,text cross-attention层与文本特征结合,以及FFN层
  2. 与DINO相比,每个解码器都有一个额外的文本cross-attention层,引入文本信息,便于对齐模态。
    在这里插入图片描述

(四) Sub-Sentence Level Text Feature

Sub-Sentence Level Text Feature是指在处理文本数据时,关注于对文本进行子句级别的特征提取。

在自然语言处理(NLP)中,通常有不同层次的文本表示,从单词级别到句子级别,再到段落和文档级别。子句级别的特征提取意味着将关注点放在句子内的更小单元上。

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

三、Grounding DINO损失函数

  • 回归 loss:类似DETR,作者使用L1损失及GIOU损失用于box regression;
  • 分类 loss:沿用GLIP,计算预测目标和文字token之间的contrastive loss用于分类。

参考:
Grounding DINO-开集目标检测论文解读
【目标检测】Grounding DINO:开集目标检测器(CVPR2023)

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

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

相关文章

系列七、Spring Security中基于Jdbc的用户认证 授权

一、Spring Security中基于Jdbc的用户认证 & 授权 1.1、概述 前面的系列文章介绍了基于内存定义用户的方式,其实Spring Security中还提供了基于Jdbc的用户认证 & 授权,再说基于Jdbc的用户认证 & 授权之前,不得不说一下Spring Se…

【Blog】记录一下如何让自己的自建网站让百度搜索收录

记录一下如何让自己的自建网站让百度搜索收录 目录 记录一下如何让自己的自建网站让百度搜索收录一、前言二、开始操作1、第一步:进入设置2、第二步:开始设置3、第三步:让百度收录我们自己的文章 三、知识点记录1、注意事项2、可能会出现的问…

暄桐写字计划 | 开始布局我们的2024

暄桐是一间传统美学教育教室,创办于2011年,林曦是创办人和授课老师,教授以书法为主的传统文化和技艺,皆在以书法为起点,亲近中国传统之美,以实践和所得,滋养当下生活。      暄桐林曦老师有…

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上&#xf…

ENNOID-BMS从控板分析-基于LTC6813的版本

LTC6813简单说明 单体电压采集部分,总共可以采集18个电芯电压,这18个电压分别交给3个16位Delta-Sigma ADC来进行采样;官方手册宣称的采样误差低于2.2mV,采样范围为0~5V,所有18个电芯采样一次只要290uS时间。电压均衡部…

C++学习笔记——友元、嵌套类、异常

目录 一、友元 一个使用友元的示例代码 输出结果 二、嵌套类 一个使用嵌套类的示例代码 输出结果 三、异常 一个使用异常处理的示例代码 输出结果 四、结论 五、使用它们的注意事项 上一篇文章链接: C中的继承和模板是非常强大和灵活的特性,它…

跟着cherno手搓游戏引擎【5】layer(层)、Glad

编写基类层: Layer.h:提供Attach链接、Detach解绑、Update刷新、Event事件、GetName方法 #pragma once #include"YOTO/Core.h" #include"YOTO/Event/Event.h" namespace YOTO {class YOTO_API Layer{public:Layer(const std::string& nam…

【c/python】用GTK实现一个带菜单的窗口

一、用python 在GTK中创建一个带菜单的窗口,可以通过使用Gtk.MenuBar、Gtk.Menu和Gtk.MenuItem组件来构建菜单。以下是一个基本的例子,展示了如何使用Python的PyGObject库创建一个简单的带菜单栏的GTK窗口。 import gi gi.require_version(Gtk, 3.0) f…

在CMake中自定义宏 add_definitions(-DDEBUG)

hehedalinux:~/Linux/loveDBTeacher-v6$ tree . ├── CMakeLists.txt └── test.c0 directories, 2 files hehedalinux:~/Linux/loveDBTeacher-v6$ test.c #include <stdio.h> #define NUMBER 3int main() {int a 10; #ifdef DEBUGprintf("我是一个程序猿,我…

物联网介绍

阅读引言&#xff1a; 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网&#xff08;Internet of Things&#xff0c;IOT&#xff1b;也称为Web of Things&#xff09;是指通过各种信息传感设 备&#xff0c;如传感器、…

docker 安装redis (亲测有效)

目录 1 安装 1 安装 1 将redis 的 tar 包 上传到服务器 上传之后tar 包&#xff0c;将他变成镜像 输入docker images,发现目前是没有镜像的&#xff0c;现在将tar 包变成镜像 docker load -i redis.tar以上就将tar 包变成镜像了 现在在宿主机找一个地方&#xff0c;存放数据…

【Maven】003-基于 IDEA 创建 Maven 工程

【Maven】003-基于 IDEA 创建 Maven 工程 文章目录 【Maven】003-基于 IDEA 创建 Maven 工程一、关于 Maven 工程的 GAVP1、GAVP 简介2、GAV 坐标规范3、Packaging 定义规则 二、基于 IDEA 创建 Maven 工程1、创建 Maven 项目2、创建结果3、项目结构说明 一、关于 Maven 工程的…

机器人技能学习-构建自己的数据集并进行训练

概要 若想训练自己的场景&#xff0c;数据集的重要性不做过多赘述&#xff0c;下面就基于 robomimic 和 robosuite 构建自己的数据集进行讲解&#xff0c;同时&#xff0c;也会附上 train 和 run 的流程&#xff0c;这样&#xff0c;就形成了闭环。 自建数据集 采集数据 采…

linux安装系统遇到的问题

这两天打算攻克下来网络编程&#xff0c;发现这也确实是很重要的一个东西&#xff0c;但我就奇了怪了&#xff0c;老师就压根没提&#xff0c;反正留在我印象的就一个tcp/ip七层网络。也说正好&#xff0c;把linux命令也熟悉熟悉&#xff0c;拿着我大一课本快速过过 连接cento…

【踩坑】flask_uploads报错cannot import name ‘secure_filename‘

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 截至目前&#xff0c;用新版的flask实现文件上传(用到flask_uploads库)&#xff0c;会出现这个问题。 问题原因 版本问题&#xff0c;新的werkzeug已经把secure_filename的位置改了。 解决方法 手动修改…

数据结构与算法(十一) 排序算法一

int nArray[] { 8,5,3,2,7 };如下一个数组&#xff0c;现对其进行从小到大排序 选择排序 选择排序&#xff1a;将小的依次放在前面 具象化如下&#xff1a; void swap(int *nSValue,int *nDValue) 交换函数 { int nTempValue 0; nTempValue *nSValue; *nSVal…

RocketMQ5-03RocketMQ-Dashboard和Java客户端访问示例

接上篇02快速部署RocketMQ5.x(手动和容器部署) 已经完成 RocketMQ5.0 环境的部署&#xff0c;就需要对这个环境进行测试&#xff0c;查看集群、写入消息、读取消息等 本篇教你如何使用和查看部署的服务&#xff1a; Docker部署 Dashboard 获取镜像并下载部署服务 客户端连接 …

ZooKeeper初探:分布式世界的守护者

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 ZooKeeper初探&#xff1a;分布式世界的守护者 前言Zookeeper的概述分布式系统中的角色和作用&#xff1a; Zookeeper的数据模型Znode的概念和层次结构&#xff1a;Znode的类型和应用场景&#xff1a;…

anoconda 安装报错

表现形式&#xff1a;Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法&#xff1a; 网址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…

【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能

方法1&#xff1a; 1.首先需要用一个数字IO的输入FPGA端口&#xff0c;并将其拖入程序框图中&#xff0c;同时创建一个循环。 2.如果想要在循环中实现累加功能&#xff0c;就可以使用移位寄存器。 数字输入的当前值和历史值进行比较&#xff0c;用于一个判断大于&#xff0c;来…