目标检测DINO-DETR(2023)详细解读

news2025/5/26 3:47:21

文章目录

    • 对比去噪训练
    • 混合查询选择
    • look forward twice

论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection

提出了三个新的方法:

  1. 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法,通过同时添加同一个GT的正、负样本来进行对比去噪训练。在同一个GT中加入两个不同的噪声后,将具有较小噪声的框标记为正,另一个标记为负。对比去噪训练可以帮助模型避免同一目标的重复输出

  2. 其次,使用了一种类似两阶段的模型(Deformable DETR的two stage)。提出了一种混合查询选择方法,这有助于更好地初始化查询. 从encoder的输出中选择初始锚定框作为位置查询,类似于Deformable DETR.然而,让内容查询像以前一样可以学习,从而鼓励第一个解码器层关注空间先验(空间位置先验与当前的图像更加的相关)

  3. 第三,为了利用后期层的refined box信息来帮助优化相邻早期层的参数,提出了一种新的look forward twice方案,用后面的层的梯度来修正更新后的参数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DINO-DETR的整体架构如上图所示,首先通过backbone得到多尺度的特征,然后给特征加上位置编码,将他们喂给Transformer Encoder得到增强后的特征。在decoder之前,作者将原本的decoder query视作两个部分,位置query和内容query。作者提出了一种新的混合的query selection策略来初始化作为位置query的anchors,但是内容query不会初始化(仍然是可学习的使它们保持可学习性)。通过这些用初始化后的anchors(位置)和可学习的内容query, 作者使用Deformable-DETR的deformable attention来组合来自encoder输出的特征,逐层更新decoder query。最终网络通过内容query预测refined anchor boxes和分类等结果。同时作者改进了DN-DETR,提出了一个对比去噪训练的方法,在DN-DETR的基础上将困难负样本考虑在内。最后为了充分利用后层refined box的信息来优化紧邻的前一层的网络参数,作者还提出了一个look forward twice方法。下面分别详细讲讲上述提到的几个改进。

对比去噪训练

DN-detr的去噪训练帮助网络学习基于那些在gt boxes周围的anchors进行预测。但是它没有考虑去预测“no object"的情况,即那些anchors周围没有gt boxes的时候,应该预测出负例。因此作者在DN-DETR的基础上额外构造了负样本,即提出Contrastive DeNoising (CDN)。

在实现上,DINO-DETR拥有两个超参数 λ1,λ2(λ1<λ2) 用于控制正负噪声样本的生成,而DN-DETR只有一个超参数 λ ,DN-DETR控制生成的噪声不超过 λ 并期望网络可以用在gts附近的轻微噪声querys去重构出gts。

如下图右侧所示的同心正方形,DINO-DETR构造正负两种类型的CDN queries,其中positive queries在内部方形,有着比 λ1 更小的噪声scale, 用于重构出他们对应的gts;negative queries在内部方形和外部方形之间,即噪声scale在λ1,λ2(λ1<λ2)之间。作者表示可以通过更小的 λ2 构造困难负样本来提高模型性能。一个CND group可以包含多个正样本和负样本,例如一张图片有n个gts, 每个gt有一正一负两个噪声样本,那么一个CND group有2xn个queries。

该方法之所以有效,是因为它可以抑制混淆,并选择高质量的anchors(查询)来预测边界框。当多个anchors靠近一个对象时,就会发生混淆,在这种情况下,模型很难决定选择哪个锚点。这种混淆可能会导致两个问题:

  1. 第一个是重复的预测。虽然detr类的模型可以通过基于集合的损失和自我注意的帮助来抑制重复的盒子,但这种能力是有限。使用CDN查询,可以区分anchors之间的细微差别,并避免重复的预测
  2. 第二个问题是,一个远离GT并且不应该被选择的某个anchor可能会被选择上,虽然去噪训练改进了模型来选择附近的anchor。但CDN通过让模型拒绝更远的anchor,进一步提高了这种能力。

混合查询选择

如(a)所示,在DETR 、DN-DETR 和DAB-DETR 中,解码器查询是静态嵌入,而不从图像中获取任何编码器特征,它们直接从训练数据中学习位置和内容查询,并将内容查询设置为全部都是0的tensor;Deformable Detr的其中一个变体(two-stage),它从编码器最后输出中选择前K个编码器特征作为先验,以增强解码器查询。如图(b)所示,位置查询和内容查询都是通过对所选特性的线性变换生成的。此外,这些被选中的特征被输送到一个辅助检测头,以获得预测方框,并将其用于初始化参考方框。

在DINO中,只使用与所选 Top-K 特征相关的位置信息来初始化锚点框,而内容查询则保持不变,如图(c)所示(Deformable DETR 不仅利用 Top-K 特征来增强位置查询,还增强了内容查询)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内容查询保持不变的原因:由于所选特征是未经进一步完善的初步内容特征,它们可能会含糊不清并误导解码器。例如,一个选定的特征可能包含多个对象,也可能只是一个对象的一部分。与此相反,我们的混合查询选择方法只用前 K 个选定特征来增强位置查询,并保持内容查询的可学习性。这有助于模型利用更好的位置信息,从编码器中汇集更全面的内容特征。

look forward twice

传统的decoder layer每层分别优化看做look forward once模式(如Deformable DETR其中的一个变体),其中 b i − 1 b_{i−1} bi1是上一层的锚框预测,经过Layer i (Decoder的box_head的修正)后得出偏移量Δ b i b_{i} bi ,来得到新的参考点 b i ’ b_{i}’ bi,进一步得到预测值 b i p r e d b_{i}^{pred} bipred ,预测值会在辅助头进行损失计算并进行反向传播(只在本层进行梯度反向传播,梯度不会回传到前一层),当前层的预测点作为后一层的参考点(即 b i b_{i} bi的值和 b i ’ b_{i}’ bi的值是一样的),虚线表示梯度被截断,所以梯度不会回传到前一层(Deformable detr认为如果不进行隔断处理的话,会导致网络非常难以学习)。

作者认为来自后一层的改进box的信息可以帮助校准其相邻的前一层的预测结果。所以他相当于让每层预测的结果往后多传递了一层,也就是 b i − 1 p r e d b_{i−1}^{pred} bi1pred 是根据前一层的参考点 b i − 1 ’ b_{i−1}’ bi1和Δ b i b_{i} bi得到的(如图b),这样预测进行反向传播的时候,梯度会传回到前一层。(这样做的原因:因为最终取得的结果是最后一层的prediction,所以希望前面的层在优化的时候也会考虑一下后面的层,通过试验得到forward两次效果最好)

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

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

相关文章

SGlang 推理模型优化(PD架构分离)

一、技术背景 随着大型语言模型&#xff08;LLM&#xff09;广泛应用于搜索、内容生成、AI助手等领域&#xff0c;对模型推理服务的并发能力、响应延迟和资源利用效率提出了前所未有的高要求。与模型训练相比&#xff0c;推理是一个持续进行、资源消耗巨大的任务&#xff0c;尤…

Vue语法【2】

1.插值表达式&#xff1a; 语法规则&#xff1a; {{Vue实例中data的变量名}}使用场景&#xff1a; 插值表达式一般使用在文本内容中&#xff0c;如果是元素的属性内容中则无法使用&#xff1b; 案例&#xff1a; <!DOCTYPE html> <html lang"en"> &l…

2.2.1 05年T2

引言 本文将从一预习、二自习、三学习、四复习等四个阶段来分析2005年考研英语阅读第二篇文章。为了便于后续阅读&#xff0c;我将第四部分复习放在了首位。 四、复习 方法&#xff1a;错误思路分析总结考点文章梳理 4.1 错题分析 题目&#xff1a;26&#xff08;细节题&…

Linux虚拟文件系统(2)

2.3 目录项-dentry 目录项&#xff0c;即 dentry&#xff0c;用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项&#xff0c;就构成了文件系统的目录结构。和上一章中超级块和索引节点不同&#xff0c;目录项并不是实际存在于磁盘上的&#xff0c…

【数据结构】栈和队列(上)

目录 一、栈&#xff08;先进后出、后进先出的线性表&#xff09; 1、栈的概念及结构 2、栈的底层结构分析 二、代码实现 1、定义一个栈 2、栈的初始化 3、入栈 3、增容 4、出栈 5、取栈顶 6、销毁栈 一、栈&#xff08;先进后出、后进先出的线性表&#xff09; 1、…

科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!

聚焦行业痛点&#xff0c;共话长效未来&#xff01;5月16日&#xff0c;由无忧树主办的主题为“科技赋能长效治理”的建筑修缮渗漏水长效治理技术交流会在上海圆满举行。来自全国的建筑企业代表、专家学者、技术精英齐聚一堂&#xff0c;共探渗漏治理前沿技术&#xff0c;见证科…

【闲聊篇】java好丰富!

1、在学习mybatis-plus的文档时&#xff0c;发现引入了solon依赖&#xff0c;才发现这是一个对标spring生态的框架&#xff0c;有意思&#xff01; 还有若依框架&#xff0c;真的好丰富~~~~~~~ 2、今天面试官问我&#xff0c;他说很少遇到用redission做延迟队列的。后面我就反…

6.3.2图的深度优先遍历

知识总览&#xff1a; 树的先根遍历&#xff1a; 采用递归一直找某个节点的子树直到找不到从上往下找 访问根节点1&#xff0c;1的子树有2、3、4,访问2&#xff0c;2节点子树有5访问5,5没有子树&#xff0c;退回到2,2还有子树6访问6,6没有子树再退回到2,2的子树都被访问了再退…

畅游Diffusion数字人(30):情绪化数字人视频生成

畅游Diffusion数字人(0):专栏文章导航 前言:仅从音频生成此类运动极具挑战性,因为它在音频和运动之间存在一对多的相关性。运动视频的情绪是多元化的选择,之前的工作很少考虑情绪化的数字人生成。今天解读一个最新的工作FLOAT,可以生成制定情绪化的数字人视频。 目录 贡献…

UE5 Va Res发送请求、处理请求、json使用

文章目录 介绍发送一个Get请求发送Post请求设置请求头请求体带添json发送请求完整的发送蓝图 处理收到的数据常用的json处理节点 介绍 UE5 自带的Http插件&#xff0c;插件内自带json解析功能 发送一个Get请求 只能写在事件图表里 发送Post请求 只能写在事件图表里 设置…

【读代码】BAGEL:统一多模态理解与生成的模型

一、项目概览 1.1 核心定位 BAGEL是字节跳动推出的开源多模态基础模型,具有70亿激活参数(140亿总参数)。该模型在统一架构下实现了三大核心能力: 多模态理解:在MME、MMBench等9大评测基准中超越Qwen2.5-VL等主流模型文本生成图像:生成质量媲美SD3等专业生成模型智能图像…

隧道自动化监测解决方案

行业现状 隧道作为一种重要的交通运输通道&#xff0c;不管是缓解交通压力&#xff0c;还是让路网结构更趋于完善&#xff0c;它都有着不可估量的作用。隧道在运营过程中&#xff0c;由于受到材料退化、地震、人为因素等影响会发生隧道主体结构的损坏和劣化。若不及时检修和维护…

游戏引擎学习第307天:排序组可视化

简短谈谈直播编程的一些好处。 上次结束后&#xff0c;很多人都指出代码中存在一个拼写错误&#xff0c;因此这次我们一开始就知道有一个 bug 等待修复&#xff0c;省去了调试寻找错误的时间。 今天的任务就是修复这个已知 bug&#xff0c;然后继续排查其他潜在的问题。如果短…

java接口自动化初识

简介 了解什么是接口和为什么要做接口测试。并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程。 一、什么是接口 在这里我举了一个比较生活化的例子&#xff0c;比如我们有一台笔记本&#xff0c;在笔记本的两端有很多插口。例如&#xff1a;USB插口。那…

NVM安装使用及问题解决

目录 一、前言 二、NVM安装 三、配置下载源 四、nvm使用 五、安装nvm list available没有的版本 六、问题解决 一、前言 如果你开发 Node.js 项目&#xff0c;可能会遇到这些问题&#xff1a; ①新项目需要 Node.js 18&#xff0c;但老项目只能用 Node.js 14&#xff0c;…

C++学习之STL学习:string类使用

在之前的学习中&#xff0c;我们初步了解到了STL的概念&#xff0c;接下来我们将深入学习STL中的string类的使用&#xff0c;后续还会结合他们的功能进行模拟实验 目录 为什么要学习string类&#xff1f; 标准库中的string类 string类&#xff08;了解&#xff09; auto和范围…

5月24日day35打卡

模型可视化与推理 知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#x…

Linux(7)——进程(概念篇)

目录 一、基本概念 二、描述进程——PCB 1.task_struct——PCB的一种 2.task_struct的内容分类 三、查看进程 1.通过系统目录查看 2.通过ps命令查看 四、通过系统调用获取进程的PID和PPID 五、通过系统调用创建进程 1.fork函数创建子进程 2.使用if来引出问题 六、L…

前端流行框架Vue3教程:24.动态组件

24.动态组件 有些场景会需要在两个组件间来回切换&#xff0c;比如 Tab 界面 我们准备好A B两个组件ComponentA ComponentA App.vue代码如下&#xff1a; <script> import ComponentA from "./components/ComponentA.vue" import ComponentB from "./…

Unity3D仿星露谷物语开发48之显示树桩效果

1、目标 砍完橡树之后会露出树桩&#xff0c;然后树桩可以用斧头收割&#xff0c;并将创建一个新的砍树桩的粒子效果。 这里有&#xff1a;一种作物收获后创造另一种作物的逻辑。 2、分析 在SO_CropDetailsList中&#xff0c;Harvested Transform Item Code可以指定收获后生…