DN-DETR(CVPR 2022)

news2025/1/11 15:05:35

DN-DETR(CVPR 2022)

Accelerate DETR Training by Introducing Query DeNoising

匈牙利匹配不稳定导致了早期训练阶段的优化目标不一致

同一个图像,query在不同时期会对不同对象进行匹配

DN-DETR在真实的GT上添加噪声:xywh,label

使用了去噪技术加速网络训练,将detr训练视为两个过程:

  1. learning good anchors
  2. learning relative offsets

模型

DN:denoising

denoising只是一种training方式,不会改变模型结构,只是在输入的时候做了一些改变

把decoder embedding表示为加了noise的label, anchor表示为加了noise的bbox

对于DETR原始的匹配部分,我们可以添加一个 [Unknown] label来进行区分,anchor部分保持DETR的方式不变。

img

indicator标识embedding是不是原始300quey之中的还是加入的有噪声的GT

learnable anchors:对于正常300query,这里传入的就是embedding参数,如果是去噪GT,就是加上噪声的GT的值。
o = ( D ) ( q , F ∣ A ) ( c r o s s − a t t e n t i o n − D A B − D E T R ) o=(\mathbf{D})(\mathbf{q}, F \mid A)(cross-attention-DAB-DETR ) o=(D)(q,FA)crossattentionDABDETR
o:decoder output,D:decoder,q:query,F:encoder 输出,A:attention mask

decoder query有两部分。一个是matching part。这一部分的输入是learnable anchors,其处理方式与DETR相同。也就是说,匹配部分采用二分图匹配,并学习近似具有匹配解码器输出的GT box-label对。另一部分是denoising part。这部分的输入是noised GT box-label对,在本文的其余部分中称为GT objects。去噪部分的输出旨在重建GT对象
o = D ( q , Q , F ∣ A ) \mathbf{o}=D(\mathbf{q}, \mathbf{Q}, F \mid A) o=D(q,Q,FA)
o:decoder output,D:decoder,q:带有噪声的GT,Q:300query,F:encoder 输出,A:attention mask

Denoising

notice that denoising is only considered in training, during inference the denoising part is removed, leaving only the matching part.

噪声类型:

  1. 怎么加入?

  2. 什么时候算?

  3. For each image, we collect all GT objects and add random noises to both their bounding boxes and class labels.

  4. **box噪声:**中心坐标偏移(不超过原始GT的范围)、高宽坐标缩放(可能不会同步缩放)

    Loss: L1 loss,GIOU loss(加入的去噪的框体匈和300个query就不用匈牙利匹配算loss了,去噪矿体对应的GT是知道的(?))

  5. **label噪声:**标签的随意更改,

    Loss:focal loss

Attention Mask

加了Denoising之后模型的输入变为下图。原始DETR的匹配部分我们命名为Matching part,新加的denosing 部分命名为denoising part。需要注意的是,denoising part只需要在训练的时候加上,在inference的时候denoising part会直接移除,和原始模型一样,因此inference的时候不会增加计算量,训练的时候也只需要加入微小的计算量

img

Therefore, each query in the denoising part can be represented as q k = δ ( t m ) qk = δ(t_m) qk=δ(tm) where tm is m − t h m-th mth GT object.
q = { g 0 , g 1 , . . . . , g P − 1 } w h e r e g p 是第 p 组 d e n o i s i n g g r o u p g p = { q 0 p , q 1 p , . . . . , q M − 1 p } M = b s 中 G T 的总和 \begin{aligned}\mathbf{q}&=\{\mathbf{g_0},\mathbf{g_1},....,\mathbf{g_{P-1}}\} where g_p是第p组denoising group \\\mathbf{g_p}&=\begin{Bmatrix}q_0^p,q_1^p,....,q_{M-1}^p\end{Bmatrix}M=bs中GT的总和\end{aligned} qgp={g0,g1,....,gP1}wheregp是第pdenoisinggroup={q0p,q1p,....,qM1p}M=bsGT的总和

a i j = { 1 , if  j < P × M  and  ⌊ i M ⌋ ≠ ⌊ j M ⌋ ; 1 , if  j < P × M  and  i ≥ P × M ; 0 , otherwise. \left.a_{ij}=\left\{\begin{array}{ll}1,&\text{if }j<P\times M\text{ and }\lfloor\frac{i}{M}\rfloor\neq\lfloor\frac{j}{M}\rfloor;\\1,&\text{if }j<P\times M\text{ and }i\ge P\times M;\\0,&\text{otherwise.}\end{array}\right.\right. aij= 1,1,0,if j<P×M and Mi=Mj;if j<P×M and iP×M;otherwise.

除了加noise之外,在decoder的self attention我们需要加一个额外的attention mask防止信息泄露。因为denoising部分包含真实框和真实标签的信息,直接让matching part看到denoising part会导致信息泄漏。因此,训练的时候matching part不能看到denoising part,像原始模型一样训练。额外增加的denoising part看或者不看到matching part对结果影响不大,因为denosing部分含有最多的真实框和标签。

左边做reconstruct,右边300个query做匈牙利匹配

信息泄露:

1.matching part看到group

2.group之间

为什么attention mask不阻止group和matching?

Label Embedding(decoder embedding)

和label没有多大关系,名称上的区分

decoder embedding在模型中被指定为label embedding,以支持box去噪和label去噪
还在标签嵌入中添加了一个指示器(tensor最后一维加上标识)。如果一个查询属于去噪部分,则该指示器为1,否则为0。

消融实验

不加attention mask结果很低img

img

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

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

相关文章

OpenGLES:多纹理贴图,文字水印

一.概述 上一篇博客讲解了OpenGLES怎么实现单纹理贴图 仅仅只绘制一张图片是不过瘾的 本篇博客讲解如何通过多纹理贴图实现图片和文本水印效果 在单纹理贴图基础上&#xff0c;多纹理贴图的区别主要有两点&#xff1a; 纹理的生成、绑定等由单个变成多个文本内容先转换为B…

深度学习实战基础案例——卷积神经网络(CNN)基于Xception的猫狗识别|第2例

文章目录 一、环境准备二、数据预处理三、构建模型四、实例化模型五、训练模型5.1 构建训练函数5.2 构建测试函数5.3 开始正式训练 六、可视化精度和损失七、个体预测 我的环境&#xff1a; pytorch&#xff1a;2.0python&#xff1a;3.8jupyternotebook 一、环境准备 impor…

jmeter——接口压测和性能监测实践

一、安装JMeter 1. 在客户端机器上安装JMeter压测工具&#xff0c;我这里安装的版本是apache-jmeter-5.2.1&#xff0c;由于JMeter是JAVA语言开发的&#xff0c;所以安装JMeter压测工具前先安装JDK&#xff0c;一般安装JDK1.8及以上即可。安装完成后&#xff0c;如果客户端机器…

【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性

在工业生产中&#xff0c;事故的突发性与不可预测性常常带来巨大的损失。传统的应急演练方式往往存在场地限制、成本高、效果难以衡量等问题。然而&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的快速发展&#xff0c;VR工业事故应急救援演练应运而生&#xff0c;为…

基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................... for Num_xb Num_xb2Num_…

Elasticsearch 部署学习

文章目录 Elasticsearch 部署学习1. 单节点部署 elasticsearch1.1 部署 jdk1.2 下载 elasticsearch1.3 上传文件并修改配置文件1.4 启动1.5 问题总结1.6 浏览器验证 2. 集群部署 elasticsearch3. 常用命令4. Elasticsearch kibana安装:one: 参考部署文档:two: 下载对应版本的安…

75、SpringBoot 整合 MyBatis------使用 Mapper 作为 Dao 组件

总结&#xff1a; 添加一个User类和Mapper接口&#xff0c; 在Mapper接口这个类上面添加Mapper注解&#xff0c;就可以和数据库进行映射了&#xff0c; 然后在mapper接口写方法和sql&#xff0c; 在测试类进行测试。 pom文件就添加个mybatis-spring-boot-starter 的组件&#x…

C 语言简单入门

C 语言发展历史|标准 1972年&#xff0c;丹尼斯里奇&#xff08;Dennis Ritch&#xff09;和肯汤普逊&#xff08;Ken Tompson&#xff09;在贝尔实验室开发 UNIX 操作系统时基于 B 语言设计出 C 语言。 1987年&#xff0c;布莱恩柯林汉&#xff08;Brian Kernighan&#xff…

Java核心知识点整理大全5-笔记

书接上回Java核心知识点整理大全4-笔记_希斯奎的博客-CSDN博客 目录 3.4.1. HashMap&#xff08;数组链表红黑树&#xff09; 3.4.1.1. JAVA7 实现 3.4.1.2. JAVA8 实现 3.4.2. ConcurrentHashMap 3.4.2.1. Segment 段 3.4.2.2. 线程安全&#xff08;Segment 继承 ReentrantLo…

【C语言】联合体与结构体如何巧妙配合使用节省内存空间?

本篇文章目录 1. 联合体的特点2. 计算联合体占用内存大小3. 利用联合体的特点判断当前机器是以什么字节序顺序存储数据&#xff1f;4. 联合体什么时候使用&#xff1f; 1. 联合体的特点 联合也是一种特殊的自定义类型&#xff0c;这种类型定义的变量也包含一系列的成员&#x…

微软最热门的10款前端开源项目!

本文来盘点微软开源的十大前端项目&#xff0c;这些项目在 Github 上获得了超过 45 万 Star&#xff01; Visual Studio Code Visual Studio Code 是一款由微软开发的开源的代码编辑器。它支持多种编程语言&#xff0c;如C、C、C#、Python、JavaScript 和 TypeScript 等&…

Nginx 代理 MySQL 连接

文章目录 Nginx 代理 MySQL 连接1. 前言2. 部署 Nginx&#xff0c;MySQL3. ngx_stream_core_module 配置方式3.1 stream3.2 server3.3 listen3.4 配置示例 4. 限制访问 IP4.1 allow4.2 deny4.3 配置示例 5. 综合案例 Nginx 代理 MySQL 连接 原文地址&#xff1a;https://mp.wei…

Windows批处理文件 @echo off作用

bat批处理文件代码中有echo off 这样的语句&#xff0c;echo off是什么意思&#xff1f;在bat中扮演着什么作用呢&#xff1f; A&#xff1a; echo off的意思是在批处理运行命令的时候不会一条一条的显示执行的命令&#xff0c;与之相匹配的还有echo on。 echo off 与echo on …

机器视觉康耐视Visionpro-脚本编写标记标识:点,直线,矩形,圆

显示标记标识的重要作用就是,对NG或者OK对操作机器视觉的人去看到具体位置缺陷或者NG坐标。 一.点CogPointMarker CogPointMarker PointMarker1 = new CogPointMarker();//创建对象,点CogPointMarker //注意运行工具 PointMarker1.X = 100; PointMarker1

基于FPGA的16QAM调制verilog代码

名称&#xff1a;FPGA的16QAM调制verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 使用FPGA实现16QAM的调制&#xff0c;并进行仿真 代码下载&#xff1a;FPGA的16QAM调制verilog_Verilog/VHDL资源下载 代码网&#xff1a;hdlcode.com 部分代…

万界星空科技MES与WMS如何集成的?

传统制造业数字化转型正汹涌而来&#xff0c;要进一步提高产业发展质量&#xff0c;重塑制造业竞争优势&#xff0c;就必须加快发展数字化制造&#xff0c;加紧推动制造业的数字化转型。在这一数字化背景下&#xff0c;新一代科技技术的运用尤为重要。在具体实践中&#xff0c;…

工具及方法 - 二进制编辑软件

之前介绍过用Notepad和VSCode进行二进制文件编辑。 很多通用型的文本编辑器都会集成二进制文件编辑功能&#xff0c;或者使用插件等形式扩展此项功能。比如vi/vim等工具。 而且&#xff0c;作为文本编辑、二进制文件编辑一类的工具&#xff0c;数量众多&#xff0c;各有特色。…

msvcp140为什么会丢失?msvcp140.dll丢失的解决方法

msvcp140.dll 是一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些函数和类&#xff0c;例如全局对象、异常处理、内存管理、文件操作等。它是 Visual Studio 2015 及以上版本中的一部分&#xff0c;用于支持 C 应用程序的运行。如果 msvcp140.dll 丢失或损坏&#xff…

redis安装问题

title: “Redis安装问题” createTime: 2022-01-04T20:47:0608:00 updateTime: 2022-01-04T20:47:0608:00 draft: false author: “name” tags: [“redis”] categories: [“install”] description: “测试的” title: redis安装可能遇到的错误 createTime: 2022-01-04T20:47…

如何在pycharm专业版使用conda虚拟环境

目 录 本文背景 前提条件 操作步骤 1.查看当前虚拟环境 2.创建一个新的虚拟环境 3.查看虚拟环境 4.切换虚拟环境 5.无依赖运行pandas代码 6.终端安装依赖 7.再次运行 本文背景 在经历了之前痛苦的环境各种报错的情况下&#xff0c;我终于知道如何有序地管理环境了 那…