【目标检测】DN-DETR

news2024/10/5 23:27:58

一、引言

论文: 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 源码解析

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

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

相关文章

缺少msvcp140一键修复方法,快速解决msvcp140.dll丢失问题

日常中电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是电脑运行软件时提示找不到msvcp140.dll。这个问题会导致软件无法启动运行&#xff0c;但只要我们了解其原因并采取相应的解…

antd DatePicker日期选择框限制最多选择一年

实现效果 实现逻辑 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

【使用sudo apt-get出现报错】——无法获得锁 /var/lib/dpkg/lock-open(11:资 源暂时不可用) ,是否有其他进程正占用它?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ubuntu中进程正在被占用1. 问题描述2. 原因分析3. 解决 总结 前言 一、ubuntu中进程正在被占用 1. 问题描述 在Ubuntu中&#xff0c;使用终端时输入带有…

【C++】宏定义

严格来说&#xff0c;这个题目起名为C是不合适的&#xff0c;因为宏定义是C语言的遗留特性。CleanCode并不推荐C中使用宏定义。我当时还在公司做过宏定义为什么应该被取代的报告。但是适当使用宏定义对代码是有好处的。坏处也有一些。 无参宏定义 最常见的一种宏定义&#xf…

怎么监控公司文件?高效省力的7个办法,企业都在用

公司文件监控方法主要包括以下几个方面&#xff0c;以确保数据安全和防止文件泄密&#xff1a; 使用专业监控软件&#xff1a;如安企神等专业的企业级监控软件&#xff0c;可以详细记录员工的电脑操作&#xff0c;包括文件访问、修改、删除、复制等行为&#xff0c;以及外设使用…

CLAY或许是今年最值得期待的3D生成模型,号称质量最好+布线最好+支持的输入模态最多+支持材质生成。

CLAY是一种大规模可控生成模型,用于创建高质量的3D资产,它结合了多分辨率变分自编码器和简化的潜在扩散变压器,通过多种输入形式生成详细的3D几何结构和物理渲染材质。 CLAY或许是今年最值得期待的3D生成模型,号称质量最好+布线最好+支持的输入模态最多+支持材质生成。 相…

1、音视频解封装流程---解复用

对于一个视频文件(mp4格式/flv格式)&#xff0c;audio_pkt或者video_pkt是其最基本的数据单元&#xff0c;即视频文件是由独立的视频编码包或者音频编码包组成的。 解复用就是从视频文件中把视频包/音频包单独读取出来保存成独立文件&#xff0c;那么如何得知packet是视频包还是…

【高考】人生规划指南

作为一个正处在这个选择的十字路口的高考考生&#xff0c;我认为在选择专业和学校时&#xff0c;要根据自己的具体情况和个人目标来权衡。首先&#xff0c;我认为专业是首要考虑因素。因为专业是直接决定未来职业发展方向的&#xff0c;如果不喜欢或者不适合的专业选择&#xf…

Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

文章目录 前言单节点模式开启认证生成节点证书修改ES配置文件为内置账号添加密码Kibana修改配置验证 ES集群开启认证验证 前言 ES安装完成并运行&#xff0c;默认情况下是允许任何用户访问的&#xff0c;这样并不安全&#xff0c;可以为ES开启认证&#xff0c;设置账号密码。 …

51单片机学习——LED功能一系列实现

目录 一、开发前准备 二、点亮LED 三、LED闪烁 四、LED流水灯 五、LED流水灯plus 一、开发前准备 开发工具软件 烧录软件 其次还需要一块51单片机学习开发板及原理图 keil创造project文件及开启生成.hex文件 二、点亮LED 看二位进制对照原理图&#xff1b; #include <…

面试突击:HashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 采用 数组和链表 结合的数据结构。如下图&#xff1a; HashMap 将 key 的 hashCode 经过扰动函数处理过后得到 hash 值&#…

Echarts地图实现:杭州市困难人数分布【动画滚动播放】

Echarts地图实现&#xff1a;杭州市困难人数分布 实现功能 杭州市地区以及散点图分布结合的形式数据展示动画轮播可进去杭州市下级地区可返回杭州市地图展示 效果预览 实现思路 使用ECharts的地图和散点图功能结合实现地区分布通过动画轮播展示数据变化实现下级地区数据的展…

VTK学习日志:基于VTK9.3.0+Visual Studio c++实现DICOM影像MPR多平面重建+V R体绘制4个视图展示功能的实现(二)

前段时间对VTK9.3.0进行了编译&#xff0c;开发了MPRVR实现的demo,显示效果不是很理想&#xff0c;正好趁着周末有时间&#xff0c;再度对之前的程序进行优化和完善&#xff0c;先展示下效果&#xff1a; VTK实现MPRVR四视图 再次讲解下基于VTK的MPRVR实现的简单项目创建过程&a…

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;它通过在HTTP协议之上加入SSL/TLS协议来实现数据加密传输&#xff0c;确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。 HTTPS 的工作原理 客户端发起HTTPS请求&…

第三天:LINK3D核心原理讲解【第1部分】

第三天:LINK3D核心原理讲解 LINK3D学习笔记 目标 了解LINK3D velodyne64线激光雷达LINK3D质心点提取效果: 分布在车道与墙体的交界处。 课程内容 LINK3D论文精讲LINK3D聚合关键点提取代码讲解LINK3D描述子匹配代码讲解除了ALOAM的线特征、面特征,还有其他点云特征吗,是…

【项目】论坛系统项目自动化测试

论坛系统项目自动化测试 前述一、脑图二、代码编写1.公共类InitAndEnd1.登录页面测试ForumLoginTest正常登录&#xff1a;异常登录&#xff1a; 3.注册页面测试ForumRegisterTest注册成功&#xff1a;注册失败&#xff1a; 4论坛列表页面测试ForumListTest登录状态下&#xff1…

<电力行业> - 《第10课:变电》

1 变电 变电环节&#xff0c;顾名思义就是改变电压的环节&#xff0c;主要是在变电站和变电所完成的。变电站和变电所主要区别在于&#xff1a;变电站比变电所更大。 发电厂的变压器和配电变压器也属于“变电”&#xff0c;但我们在说电网环节时&#xff0c;变电特指电网公司…

python基础:设置代码格式

随着编写的程序越来越长&#xff0c;有必要了解一些代码格式的约定&#xff0c;让你的代码尽可以能易于阅读。 python代码编写规范为PEP8&#xff0c;有兴趣的朋友可以下载观看&#xff0c;这里仅作简要说明。 1、缩进 PEP8建议每级缩进都使用4个空格。多数情况下编程语言的…

无人机智能追踪反制系统技术详解

随着无人机技术的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛。然而&#xff0c;无人机的无序飞行和非法使用也带来了一系列安全隐患和威胁。因此&#xff0c;无人机智能追踪反制系统应运而生&#xff0c;成为维护公共安全和防止无人机滥用的重要工具。本文将详细介…