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

在这里插入图片描述

文章目录

  • 背景知识补充
    • 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.mzph.cn/news/620900.shtml

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

相关文章

分布式事务2PC、3PC

1、概念 分布式事务的二阶段提交(Two-Phase Commit, 2PC)和三阶段提交(Three-Phase Commit, 3PC)是用于处理分布式系统中事务一致性的两种不同的协议。这两种协议的主要区别在于其阶段数和容错性。 二阶段提交(2PC&am…

Vue生成图片并下载

一、安装 html2canvas 在项目安装库 html2canvas npm i html2canvas 二、生成图片 在页面局部加载 html2canvas 库&#xff0c;调用方法生成 <template><div class"page-box"><div class"text-box">文本转图片</div></div>…

【教3妹学编程-算法题】最大频率元素计数

2哥 : 3妹&#xff0c;最近有个电视剧《繁花》非常火&#x1f525;&#xff0c;你听说了吗&#xff1f; 3妹&#xff1a;没有&#xff0c;最近一直在忙着找工作&#xff0c;哪有时间看电视啊 2哥 : 啊&#xff1f;大周末还不休息一下啊&#xff0c;这么辛苦。 3妹&#xff1a;当…

Video接口介绍

屏库 https://m.panelook.cn/index_cn.php Open LDI, open lvds display interface OpenLDI and LVDS是兼容的&#xff0c; 是一种电平 https://www.ti2k.com/178597.html MIPI DSI/Camera crosLink FPD-LINK(Flat panel display link)是National(TI) LVDS技术&#xff0c; …

如何在线生成App:将网页封装成APP

在数字化时代&#xff0c;App已成为我们日常生活中不可或缺的一部分。然而&#xff0c;对于众多企业和个人开发者来说&#xff0c;开发一个原生App既耗时又耗资&#xff0c;尤其当他们已经拥有一个功能完备的网站时。幸运的是&#xff0c;现在有一种方法可以将现有的网页封装成…

k8s node节点加入集群,token过期

1、master01节点执行 kubeadm token create --print-join-command 2、执行命令 kubeadm join 192.168.0.236:16443 --token qucd8q.hsfq4a1afluzaky3 --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195 3、查看node02…

银行家算法/Banker‘s Algorithm

银行家算法&#xff08;Bankers Algorithm&#xff09;是一个避免死锁&#xff08;Deadlock&#xff09;的著名算法&#xff0c;由艾兹格迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础&#xff0c;判断并保证系统的安全运行。…

【含完整代码】Java定时任务之xxl-job[超详细]

前言 个人博客&#xff1a;www.wdcdbd.com 在Java中使用定时任务是一件很常见的事情&#xff0c;比如使用定时任务在什么时间&#xff0c;什么时候&#xff0c;去发布一些信息&#xff0c;或者去查询一些日志等相关的代码。这时&#xff0c;我们就要开发定时任务这中功能来实现…

PyGWalker,一款超级强大的数据分析和数据可视化的工具库

PyGWalker可以有效简化Jupyter笔记本的数据分析和数据可视化工作流程&#xff0c;方法是将panda数据帧转换为Tableau风格的用户界面进行可视化探索。 PyGWalker被命名为“Graphic Walker的Python绑定”的缩写。它集成了Jupyter笔记本&#xff08;或其他基于Jupyter的笔记本&am…

LeetCode83. Remove Duplicates from Sorted List

文章目录 一、题目二、题解 一、题目 Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well. Example 1: Input: head [1,1,2] Output: [1,2] Example 2: Input: head [1,1…

跳跃游戏【贪心】

Problem: 55. 跳跃游戏 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 简单模拟一下就行。 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution:def canJump(self, nums: List[int]) -> bool:jump_max 1for i, num…

Linux之静态库和动态库

目录 一、前言 二、对于库的理解 三、静态库 四、动态库 五、动静态库的加载 一、前言 在之前&#xff0c;我们讲了静态库和动态库&#xff0c;详情请跳转&#xff1a;静态库和动态库 下面我们将从工程师的角度&#xff0c;去了解静态库和动态库的形成过程&#xff0c;以…

vue3 使用 jsoneditor

vue3 使用 jsoneditor 在main.js中引入 样式文件 import jsoneditor/dist/jsoneditor.css复制代码放到文件中就能用了 jsoneditor.vue <template><div ref"jsonDom" style"width: 100%; height: 460px"></div> </template> <…

什么是uni.request()?如何使用它?

uni.request()是uni-app提供的一个用于发起网络请求的API。 使用uni.request()的步骤如下&#xff1a; 在需要发起网络请求的页面中引入uni.request()方法。 调用uni.request()方法&#xff0c;并传入相应的参数&#xff0c;包括请求地址、请求方法、请求头部和请求数据等。 …

【Linux操作】国产Linux服务管理操作

【Linux操作】国产Linux服务管理操作 前言SAMBA配置服务器端1. 安装相关包2. 配置/etc/samba/smb.conf&#xff0c;在此文件末尾添加如下内容&#xff0c;并保存退出。3. 创建/home/share并更改权限4. 启动samba服务 客户端• Windows客户端• 麒麟客户端 Telnet1、telnet语法2…

Flink State 状态管理

文章目录 前言一、状态分类二、keyed代码示例ListStateMapState 总结 前言 状态在Flink中叫做State&#xff0c;用来保存中间计算结果或者缓存数据。要做到比较好的状态管理&#xff0c;需要考虑以下几点内容&#xff1a; 状态数据的存储和访问 在Task内部&#xff0c;如何高…

Golang对比Java、python为什么要保留指针

为什么要用指针&#xff1f; 平时我们在Golang使用指针一般是为了以下的情况&#xff1a; 方法直接修改原来对象保证参数传递的自由&#xff0c;可以在传递重量级对象时使用指针 但Go 保留指针不仅仅是为了解决传递参数的问题&#xff0c;还跟它的语言特性有密不可分的联系。…

JOSEF约瑟端子排中间继电器 DZY-204 DC110V 导轨安装,板前接线

DZY系列端子排中间继电器 系列型号&#xff1a; DZY-101端子排中间继电器 DZY-104端子排中间继电器 DZY-105端子排中间继电器 DZY-301端子排中间继电器 DZY-106端子排中间继电器 DZY-401端子排中间继电器 DZY-204端子排中间继电器 一、 概述 DZY-204端子排中间继电器用于各种…

unity C#什么时候用“可空类型”

文章目录 例子1. **声明一个可空类型变量&#xff1a;**2. **给可空类型变量赋值&#xff1a;**3. **检查可空类型变量是否有值&#xff1a;**4. **转换与比较&#xff1a;**5. **使用null合并运算符&#xff1a;** 可空类型的重要意义1. **表示缺失或未知的值&#xff1a;**2.…

每日一博 - 使用APIFOX调测 @RequestBody标注的对象

文章目录 概述发送 post 请求步骤1.新建接口&#xff0c;设置为 post 请求2. 填写 URL 和参数3.发送请求 实战 RequestBody 概述 APIFOX&#xff08;类似Postman&#xff09;提供了丰富的功能来支持用户发送包含各种信息的 POST 请求&#xff0c;如文本数据、JSON 或 XML 数据…