RT-DETR学习笔记(2)

news2024/12/26 2:56:27

七、IOU-aware query selection

下图是原始DETR。content query 是初始化为0的label embedding, position query 是通过nn.Embedding初始化的一个嵌入矩阵,这两部分没有任何的先验信息,导致DETR的收敛慢。

 RT-DETR则提出要给这两部分(content query & position query)都加上先验信息;

从memory中取一部分表现好的(类别预测准确 & 预测框定位准确)query作为decoder的输入


存在问题

Efficient DETR,Deformable DETR,DINO这几个方法都是使用类别置信分数从编码器中选择前K个特征,作为目标查询(或位置查询)的初始化。然而,由于检测器需要同时建模目标的类别和位置,这两者共同决定了特征的质量。当前的查询选择方法在所选特征中引入了较高的不确定性,导致解码器的初始化次优。


 解决方法

提出了最小不确定性查询选择(Uncertainty-Minimal Query Selection)方案,该方案通过显式构建和优化编码器特征的模型不确定性(epistemic uncertainty)

目的是让低IOU 的预测框有低的置信度,高IOU的预测框有高的置信度;

memory左边通过位置检测头计算出坐标的相对位置,加上在feature map平铺的anchor得到绝对位置坐标;

右边通过类别检测头得到类别信息,提取top-300(对于每一个query挑选出置信度最高的类别作为query的预测类别,然后再对所有query的预测类别置信度最高的300个query);

让左右两边预测出的坐标与类别计算损失;(损失部分详细解读)


有效性分析

  • 蓝色点---vanilla query selection ,普通的(top-k类别置信度)query选择方案;
  • 红色点---IOU-aware uery selection

越靠近右上角质量越高


代码解读

通过_get_decoder_input()函数生成decoder输入

 通过_get_decoder_input()函数,从memory中挑选出top-300的query;将挑选出来的300个query与denoising部分加噪生成的200个queryconcat在一起从而生成decoder的输入


_get_decoder_input()函数输入

  • memory:hybrid encoder的输出,如下图;

memory,spatial_shape: _get_encoder_input()返回值:


生成anchor

grid_size: 在72*72的feature map上生成的anchor高和宽的默认值是0.05(在归一化特征图尺度下锚框的宽高,剋理解为一个锚框占整个特征图的5%大小);在36*36的feature map上默认是0.05 *2 ; 18*18上默认是0.05*2*2;

通过for循环一次迭代出每一个feature map的尺寸;

 通过meshgrid生成二维网格坐标,组合成(x,y)格式;

将网格坐标加上0.5表示网格的中心位置;

除以宽高对网格坐标进行归一化;

计算每个特征层上的锚框的宽高:低层特征图(72*72)锚框更小,适用于小目标,例如lvl=0时,\wh=0.05;高层特征图(18*18)锚框更大,适用于检测大目标,例如lvl=2,wh=0.05*2*2=0.2;

然后concat  wy和wh,reshape成序列形式,注意这里的xywh都是归一化的形式

注意这部分anchor大小的理解:

S3是72*72,属于低层特征图,归一化后的wh大小是0.05,8是感受野大小,3.6是在72的特征图上anchor大小,相乘得到的28.8是一个anchor投射到原图像上的尺寸大小;

在这三个不同尺度的特征图上,anchor归一化的尺寸不同,但映射回各自的特征图上的实际wh都是一样的;

低层特征图的anchor小,用于检测小目标;

高层特征图的anchor大,用于检测大目标;


 concat 三个特征图归一化后的anchor尺寸;

valid_mask:布尔张量,anchor都在(0.01,0.99)范围内,置为1;超出这个范围被认为是无效anchor,置为0;


使用sigmoid的反函数将anchor映射回实数空间 ,避免模型的梯度会变得非常小(饱和问题),影响训练效果;

将无效anchor的位置置为无穷大;


类别检测头和预测框检测头

topk_ind:通过类别置信度排序选取的top-300在enc_outputs_class 6804 中对应的索引;‘

根据topk_ind索引在enc_outputs_coord_unact提取出对应的300个bbox坐标;

 注意target,有梯度分离操作,保证在反向传播过程中不会影响这部分梯度;

最后的返回值:

target:是denoising部分和IOU-aware部分concat的内容;

reference_points_unact:是denoising部分和IOU-aware部分concat的内容;

target和reference_points_unact是decoder的输入;

enc_topk_bboxes和enc_topk_logitstargettarget需要用来做损失计算;


 八、Decoder

bbox_head:坐标检测头,ModuleList:6,不同的layer使用不同的检测头

score_head:类别检测头,同bbox



 query_pos_head:MLP,用来将坐标位置的xywh编码为256的向量;因为要和内容部分相加,所以尺寸需要保持一致;


 每一层的输出都是下一层的输入:


创建两个列表保存每层decoder的类别输出和坐标输出


Multi-Scale Deformable Attention


DecoderLayer输出

 将decoder的输出经过一个bbox检测头,得到的结果是一个相对与ref_points_detach的偏移量;

ref_points_detach通过sigmoid反函数将值映射回原始值 再加上 bbox检测头得到的偏移量;

相加结果再经过sigmoid得到预测出的绝对位置归一化后的值

得到的这个结果会赋给下一层decoder的输入部分;即下一个decoder会将上一层decoder调整过偏移量后的坐标作为基准坐标;


 完整decoder输出

最后6层Decoder结束后,返回的是每一层的bbox和score 预测结果:

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

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

相关文章

iOS 苹果开发者账号: 查看和添加设备UUID 及设备数量

参考链接:苹果开发者账号下添加新设备UUID - 简书 如果要添加新设备到 Profiles 证书里: 1.登录开发者中心 Sign In - Apple 2.找到证书设置: Certificate,Identifiers&Profiles > Profiles > 选择对应证书 edit &g…

汽车IVI中控开发入门及进阶(47):CarPlay开发

概述: 车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。 ​ 驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,…

Oracle、ACCSEE与TDMS的区别

Oracle、ACCSEE和TDMS都是不同类型的数据管理和存储工具,它们各自有独特的用途、结构和复杂性。Oracle是一个功能强大的关系型数据库管理系统,适用于大规模企业级应用,支持复杂查询和事务管理。ACCSEE主要应用于实时数据采集和过程监控&#…

商场消防电气控制系统设计(论文+源码)

1系统的功能及方案设计 如图2.1所示为本次设计的整体框图,其中单片机部分采用ST89C52来负责协调各个模块;液晶选择LCD1602液晶屏来显示信息;温度传感器选择PT1000进行温度的检测;烟雾传检测选择MQ2烟雾传感器;CO2检测选择CCS811模…

7. petalinux 根文件系统配置(package group)

根文件系统配置(Petalinux package group) 当使能某个软件包组的时候,依赖的包也会相应被使能,解决依赖问题,在配置页面的help选项可以查看需要安装的包 每个软件包组的功能: packagegroup-petalinux-audio包含与音…

2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码

引言 本期介绍了一种基于加权平均位置概念的元启发式优化算法,称为加权平均优化算法Weighted average algorithm,WAA。该成果于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊 Knowledge-Based Systems。 在WAA算法中,加权平均位置代表当…

操作系统(23)外存的存储空间的管理

一、外存的基本概念与特点 定义:外存,也称为辅助存储器,是计算机系统中用于长期存储数据的设备,如硬盘、光盘、U盘等。与内存相比,外存的存储容量大、成本低,但访问速度相对较慢。特点:外存能够…

【202】仓库管理系统

-- 基于springboot仓库管理系统设计与实现 开发技术栈: 开发语言 : Java 开发软件 : Eclipse/MyEclipse/IDEA JDK版本 : JDK8 后端技术 : SpringBoot 前端技术 : Vue、Element、HTML、JS、CsS、JQuery 服务器 : Tomcat8/9 管理包 : Maven 数据库 : MySQL5.x/8 数据库工具 : …

iDP3复现代码数据预处理全流程(二)——vis_dataset.py

vis_dataset.py 主要作用在于点云数据的可视化,并可以做一些简单的预处理 关键参数基本都在 vis_dataset.sh 中定义了,需要改动的仅以下两点: 1. 点云图像保存位置,因为 dataset_path 被设置为了绝对路径,因此需要相…

重温设计模式--1、组合模式

文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…

精通Redis

目录 1.NoSQL 非关系型数据库 2.Redis 3.Redis的java客户端 4.Jedis 4.1Jedis快速入门 4.2Jedis连接池及使用 5.SpringDataRedis和RedisTemplate 6.SpringDataRedis快速入门 7.RedisSerializer 1.NoSQL 非关系型数据库 基础篇-02.初始Redis-认识NoSQL_哔哩哔哩_bilib…

【2024】Merry Christmas!一起用Rust绘制一颗圣诞树吧

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 一起用Rust绘制一颗圣诞树吧一、 Rust Cargo.toml配置文件二…

查询 MySQL 默认的存储引擎(SELECT @@default_storage_engine;)

要查询 MySQL 默认的存储引擎,可以使用以下 SQL 查询语句: SELECT default_storage_engine;解释: SELECT: 表示你要执行一个查询。default_storage_engine: 这是一个 MySQL 系统变量,它存储着当前 MySQL 服务器的默认存储引擎。…

两道数组有关的OJ练习题

系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

clickhouse-题库

1、clickhouse介绍以及架构 clickhouse一个分布式列式存储数据库,主要用于在线分析查询 2、列式存储和行式存储有什么区别? 行式存储: 1)、数据是按行存储的 2)、没有建立索引的查询消耗很大的IO 3)、建…

近实时”(NRT)搜索、倒排索引

近实时(Near Real-Time, NRT)搜索 近实时(NRT)搜索是 Elasticsearch 的核心特性之一,指的是数据在被写入到系统后,可以几乎立即被搜索和查询到。虽然它不像传统数据库那样完全实时,但它的延迟通…

springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic

摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…

vue2 升级为 vite 打包

VUE2 中使用 Webpack 打包、开发,每次打包时间太久,尤其是在开发的过程中,本文记录一下 VUE2 升级Vite 步骤。 安装 Vue2 Vite 依赖 dev 依赖 vitejs/plugin-vue2": "^2.3.3 vitejs/plugin-vue2-jsx": "^1.1.1 vite&…

【HarmonyOS 5.0】第十二篇-ArkUI公共属性(一)

一、公共样式类属性 ArkUI框架提供的基础组件直接或者间接的继承自 CommonMethod , CommonMethod 中定义的属性样式属于公共样式。下面就来学习这些样式 1.1.尺寸设置 宽高设置 设置组件的宽高,缺省时使用组件自身内容的宽高,比如充满父布…

数据库系统原理:数据库安全性与权限控制

2.1vue技术 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项…