【目标检测】DN-DETR

一、引言

论文: DN-DETR: Accelerate DETR Training by Introducing Query DeNoising
作者: IDEA
代码: DN-DETR
注意: 该算法是在DAB-DETR基础上的改进,在学习该算法前,建议掌握DETR、DAB-DETR等相关知识。
特点: 指出DETR收敛慢的另一个主要原因为二分图匹配的不稳定性,提出对真实目标的锚框信息和标签信息施加噪声并将其喂入解码器中,使解码器进行去噪操作的训练方式。去噪部分引入了真实目标信息且不需要二分图匹配,所以有利于原始匹配部分的稳定从而加速收敛。

二、为什么降噪能加速DETR的训练

2.1 使匈牙利匹配更加稳定

前期的优化过程通常是随机的,导致每次的预测结果可能有比较大的波动。例如,对于同一个查询,第一次预测该查询与图片中的狗🐶匹配,第二次预测该查询可能就与图片中的汽车🚗匹配了。匈牙利匹配结果的巨大变化,进一步导致优化目标的不一致,模型需要反反复复进行学习修正才能逐渐稳定,所以收敛速度自然就慢了。

所以作者引入施加了噪声的真实目标信息,包括目标的中心坐标、宽高、类别。因为它们有明确的对应目标,将它们也添加到解码器中获得的预测是不需要进行二分图匹配的,也就缓解了匈牙利匹配的不稳定性。

为描述训练前期匈牙利匹配的不稳定性,作者提出了一种指标:

其中, I ( ⋅ ) \mathbb{I}(\cdot) I()为指示函数,括号中内容成立为1,否则为0; V n i V_n^i Vni表示第 i i i个epoch的第n个查询经解码器后得到的预测目标的匹配情况,定义如下:

其中, O i = { O 0 i , O 1 i , ⋯   , O N − 1 i } \mathbf{O}^i=\{O_0^i,O_1^i,\cdots,O_{N-1}^i\} Oi={O0i,O1i,,ON1i}表示N个预测目标, T = { T 0 , T 1 , ⋯   , T M − 1 } \mathbf{T}=\{T_0,T_1,\cdots,T_{M-1}\} T={T0,T1,,TM1}表示M个真实目标。

可以看出, I S i IS^i ISi越高表明本次迭代时匈牙利匹配结果与上次的匹配结果相差越大,即不稳定性越大。

上图为DETR、DAB-DETR、DN-DETR前12个epoch的 I S IS IS变化情况,可以看出,DN-DETR的稳定性要好于另外两个方法,也就说明了降噪操作能够使匈牙利匹配更加稳定。

2.2 使搜索范围更加局部化

因为降噪训练所引入的锚框虽然施加了噪声,但是其所处位置仍然在真实目标附近,所以模型在调整预测位置时不必进行全局搜索,而是只进行局部搜索就可以了。锚框和目标框之间距离的缩短使得训练过程更加简单,收敛也就更快。

上图为DETR和DAB-DETR训练过程中锚框与目标框之间的距离,可以看出,DN-DETR的锚框与目标框之间的距离更小,所以训练难度更低,收敛速度也就更快。

三、框架

3.1 施加噪声

DN-DETR施加的噪声是在真实目标上的,包括三个部分:中心坐标 ( x , y ) (x,y) (x,y)、宽高 ( w , h ) (w,h) (w,h)、标签 l l l

对于中心坐标 ( x , y ) (x,y) (x,y),会施加随机偏移。 偏移量要满足 ∣ Δ x ∣ < λ 1 w 2 |\Delta x|<\frac{\lambda_1 w}{2} ∣Δx<2λ1w ∣ Δ y ∣ < λ 1 h 2 |\Delta y|<\frac{\lambda_1 h}{2} ∣Δy<2λ1h的限制,其中 λ 1 ∈ ( 0 , 1 ) \lambda_1\in(0,1) λ1(0,1) λ 1 \lambda_1 λ1的取值范围能够保证中心坐标的偏移不会过大,无论如何偏移,新的中心坐标仍然位于旧框之中。

对于宽高 ( w , h ) (w,h) (w,h),会施加随机缩放。 缩放后的范围在 [ ( 1 − λ 2 ) w , ( 1 + λ 2 ) w ] [(1-\lambda_2)w,(1+\lambda_2)w] [(1λ2)w,(1+λ2)w] [ ( 1 − λ 2 ) h , ( 1 + λ 2 ) h ] [(1-\lambda_2)h,(1+\lambda_2)h] [(1λ2)h,(1+λ2)h]之间,其中 λ 2 ∈ ( 0 , 1 ) \lambda_2\in(0,1) λ2(0,1)。并没有固定的缩放程度,而是在上述范围内随机取宽、高。

对于标签 l l l,会施加随机翻转。 翻转是以 γ \gamma γ的概率将标签改为另一个随机标签。

3.2 注意力掩吗

DN-DETR引入了 P P P个版本的噪声,这些噪声有差别但都满足3.1中的条件。假设一张训练图片中有 M M M个目标,施加 P P P个版本的噪声后,就会得到 P P P组带噪目标,共 M × P M\times P M×P个新的带噪目标。假设原始一张图片有N个查询,新的带噪目标会作为额外的查询与原始查询拼接到一起,于是形成 M × P + N M\times P+N M×P+N个查询。原始查询就是DAB-DETR中的300个查询。

⚠️ DN-DETR将与带噪目标相关的部分称为去噪部分,将与原始查询相关的部分称为匹配部分

虽然新的查询中被施加了噪声,但其仍然包含真实目标的信息,如果不同组之间的查询能够相互访问,那学习过程可能会异常简单。此外,如果新的查询与原始查询之间能够相互访问,那么与噪声相关的部分就无法与原始查询解耦,当进入无法获取真实目标信息的推理阶段时,整个方法就瘫痪了。所以DN-DETR引入了注意力掩码来避免这两个问题,注意力掩码矩阵如下:

图中, P = 2 , M = 3 , N = 5 P=2,M=3,N=5 P=2,M=3,N=5;匹配部分表示 N N N个原始查询;灰色部分表示对应查询不可访问,彩色部分表示可以访问。访问是单向的。

从图中可以看出,组0可以与自身、匹配部分通信。与自身不必多说,可以访问匹配部分是因为匹配部分中不包含任何与真实目标相关的信息,所以开放给组0访问也没关系。组1与组0类似,但组0与组1相互均不可访问。匹配部分要与去噪部分解耦,所以只能访问自身。

3.3 与DAB-DETR的差别

⚠️ DN-DETR只是提供了一个训练策略,在推理的时候与去噪部分相关的内容和操作都会被移除,变得与DAB-DETR完全一样。

所以,DN-DETR和DAB-DETR在结构上的差别很小。下图为DAB-DETR和DN-DETR的解码器中交叉注意力部分的结构图:

如上图所示,二者的主要差别在于查询部分Q的解码器嵌入(初始化全0)替换为了类别标签嵌入+指示项。这种替换是为了同时进行标签和锚框的去噪,否则原始输入中只有可学习锚框与中心坐标 ( x , y ) (x,y) (x,y)、宽高 ( w , h ) (w,h) (w,h)相关,没有与标签 l l l相关的部分。

对于类别标签嵌入,要先由nn.Embedding初始化一个尺寸为 ( n u m _ c l a s s e s + 1 , h i d d e n _ d i m − 1 ) (num\_classes+1,hidden\_dim-1) (num_classes+1,hidden_dim1)的矩阵。 n u m _ c l a s s e s + 1 num\_classes+1 num_classes+1 n u m _ c l a s s e s num\_classes num_classes指数据集的类别总数, + 1 +1 +1表示额外增加的未知类。 h i d d e n _ d i m hidden\_dim hidden_dim是原始查询的维度, − 1 -1 1表示减去一个维度留给指示项。对于去噪部分的 M × P M\times P M×P个查询,它们有明确的类别(施加噪声后的),所以可以直接从矩阵中索引对应的特征。对于匹配部分的 N N N个查询,它们不知道与什么类别匹配,均被假设为未知类,用矩阵的最后一个特征表达。剩下的那个维度用指示项填补,指示项用于表示当前查询属于原始的匹配部分(0)还是新增的去噪部分(1)。

对于可学习锚框,匹配部分按照DAB-DETR进行均匀分布的初始化,去噪部分直接使用施加噪声后的中心坐标和宽高。

下图为DN-DETR的结构图:

总结下来,DAB-DETR和DN-DETR仅训练时有差别,差别是:
(1) 解码器嵌入被换成了类别标签嵌入+指示项。嵌入部分由nn.Embedding初始化,匹配部分按未知类取最后一个特征,去噪部分按噪声类别取对应索引的特征。指示项为0表示匹配部分,为1表示去噪部分。
(2) 输入查询的数量从 N N N变成了 M × P + N M\times P+N M×P+N M × P M\times P M×P是该图片中 M M M个真实目标被施加了 P P P个版本的噪声后得到的锚框和标签。
(3) 为了避免通信带来的问题,引入了注意力掩码。
(4) 与原始查询拼接在一起的去噪查询也会经解码器输出框和标签预测。为实现去噪,对于框使用l1 loss和GIOU loss,对于标签使用Focal loss,三个loss合并称为重构损失(reconstruction loss)。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
DN-DETR 论文简介
DN-DETR 源码解析

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习伦敦金技术分析的具体步骤是什么?

技术分析是我们分析伦敦金市场的重要工具&#xff0c;刚入市就面对时涨时跌的市场应该如何交易呢&#xff1f;投资者如果不掌握技术分析的方法&#xff0c;恐怕对这个问题会没有头绪。入场都没有&#xff0c;盈利就更加无从谈起了。而学习技术分析&#xff0c;是有不同的阶段、…

技术周总结 2024.06.24~06.30(Python并发执行shell并发执行 Spring Bean)

文章目录 一、 06.26 周三1.1&#xff09;问题01&#xff1a;怎么在mysql的命令行中查询出来 python能使用的元祖结果集1.2&#xff09;问题02&#xff1a;python中 set()是什么&#xff0c;怎么使用 二、06.27 周四2.1&#xff09;问题01&#xff1a;shell 并发执行2.2&#x…

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…

WPF自定义模板--TreeView 实现菜单连接线

有些小伙伴说&#xff0c;在TreeView中&#xff0c;怎么每一个都加上连接线&#xff0c;进行显示连接。 代码和效果如下&#xff1a; 其实就是在原来的模板中增加一列显示线条&#xff0c;然后绘制即可 <Window x:Class"XH.TemplateLesson.TreeViewWindow"xmln…

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时&#xff0c;学校给的是Word模板&#xff0c;习惯了Latex排版和添加参考文献的便利后&#xff0c;真不想用word写东西。 之前投《机器人》期刊&#xff08;被拒了&#xff09;和准备开题的时候也是用word写的&#xff0c;当时为方便添加参考文献和定…

C++初学者指南-3.自定义类型(第一部分)-异常

C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常&#xff1f;第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏&#xff01;析构函数&#xff1a;不要让异…

labview技巧——AMC框架安装

AMC工具包的核心概念是队列&#xff0c;队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的数据结构&#xff0c;适用于处理并发和异步任务。在LabVIEW中&#xff0c;队列可以用于在不同VI之间传递数据&#xff0c;确保消息的有序处理&#xff0…

LT8668SXC 、LT8668SX-D 、LT8668SX三种芯片的相似与不同

一、LT8668SXC(支持eDP输出&#xff09; 定义:LT8668SXC配置在HDMI2.1标准下工作&#xff0c;最大数据速率为8Gbps。 LT8668SXC还可以配置为在Type-C输入或DP1.4a下工作&#xff0c;数据速率高达8.1Gbps。 eDP1.4b输出由8个数据通道组成&#xff0c;支持RBR (1.62Gbps)、HBR (2…

【应届应知应会】SQL常用知识点50道

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;借他一双眼&#xff0c;愿这盛世如先生所愿 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凌七七~❤ 友情提供 目录 数据库的概念 (什么是数据库) RDBMS NOSQL 数据库的分类 …

分布式锁——基于Redis分布式锁

单机锁 服务器只有一个&#xff0c;JVM只有一个。 用synchronized加锁&#xff0c;对lock对象加锁&#xff0c;只有线程1结束&#xff0c;线程2,3才会开始。 再用uid避免一个线程多次进来。 分布式锁 真正上线时&#xff1a; 【注&#xff1a;这些服务器连接的是一个Redis集…

FreeRTOS和UCOS操作系统使用笔记

FreeRTOS使用示例 UCOS使用示例 信号量使用 信号量访问共享资源区/ OS_SEMMY_SEM; //定义一个信号量&#xff0c;用于访问共享资源OSSemCreate ((OS_SEM* )&MY_SEM, //创建信号量&#xff0c;指向信号量(CPU_CHAR* )"MY_SEM", //信号量名字(OS_SEM_CTR )1, …

STM32入门笔记(03): ADC(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如&#xff0c;8位A/D转换器的数字输出量的变化范围为0&#xff5e;255&#xff0c;当输入电压的满刻度为5V时&#xff0c;数字量每变化…

Google Play上架防关联,打包环境是关联因素之一还是无足轻重?

在Google Play上架应用&#xff0c;对于矩阵式上架或马甲包的开发者来说&#xff0c;防关联的处理技能是必须要精通的。想象一下&#xff0c;你辛辛苦苦开发的应用&#xff0c;因为一些看似微不足道的细节&#xff0c;比如打包环境的问题&#xff0c;就可能被谷歌无情下架或封号…

力扣双指针算法题目:移动零

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同 class solution { public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key left…

信息收集---端口服务信息收集

1. 什么是端口 是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口&#xff0c;其中虚拟端口指计算机内部或交换机路由器内的端口&#xff0c;不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口&#xff0c;是可见端口&#xff0c;计算机背板的RJ45…

我在高职教STM32——时钟系统与延时控制(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

Http 实现请求body体和响应body体的双向压缩方案

目录 一、前言 二、方案一(和http header不进行关联) 二、方案二(和http header进行关联) 三、 客户端支持Accept-Encoding压缩方式,服务器就一定会进行压缩吗? 四、参考 一、前言 有时请求和响应的body体比较大,需要进行压缩,以减少传输的带宽。 二、方案一(和…

助力构建新型电力系统自主可控实时底座

近日&#xff0c;2024亚洲新型电力系统及储能展览会&#xff06;亚洲新型电力及储能论坛会在广州广交会展馆圆满落下帷幕&#xff01;科东软件携多款电力产品亮相展会,并在2024亚洲新型电力及储能论坛发表《“鸿道Intewell操作系统助力构建新型电力系统自主可控实时底座”》的主…

Unity之创建与导出PDF

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之创建与导出PDF TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; 助力快速…

2024-2025年本田维修电路图线路图接线图资料更新

此次更新了2024-2025年本田车系电路图资料&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#xff01; 汽修帮手汽…