【CVPR2023】Selective Query Recollection:增强基于查询的目标检测的训练

论文题目:Enhanced Training of Query-Based Object Detection via Selective Query Recollection

bb0ee014136f38e0770b8c07b591d2c6.png

代码:https://github.com/Fangyi-Chen/SQR

a91049c0bbe2808507427769a7d9f37c.png

作者在知乎的导读:https://zhuanlan.zhihu.com/p/610347565

导读

传统目标检测方法需要大量手工处理步骤,限制了端到端优化。这篇论文探索了一个引人注目的领域——查询式目标检测。在查询式目标检测中,模型在解码过程的不同阶段表现出不同的预测准确度。这涉及到查询式目标检测中的一个难题:在预测目标目标时,随着解码过程的深入进行,后期解码阶段出现错误的情况,而中间解码阶段则能够准确预测。

论文提出了两个关键问题:一是不同阶段的训练负担分配不均衡,二是解码器的顺序结构导致中间查询的修正会级联到后续阶段,增加了训练的难度。为了解决这些问题,本文引入了"Selective Query Recollection (SQR)"作为一种训练策略,它通过积累中间查询并有选择地将它们提供给后续阶段,以改进训练效果。这种策略成功解决了查询式目标检测中的性能问题,为实现更准确的目标检测技术提供了新思路和方法。

本文贡献

  • 定量研究问题现象:论文首次详细研究了查询式目标检测中的一个重要现象,即模型在解码过程的不同阶段出现不同的预测准确度。本文通过实验和数据分析,定量地表现了这一现象,为进一步的研究提供了基础。

  • 识别训练限制:论文指出,这一被忽视的现象源于两个训练方面的限制:不同阶段的训练负担分配不均衡,以及解码器的顺序结构导致中间查询的修正会级联到后续阶段,增加了训练的难度。

  • 提出有效的训练策略 SQR:为解决上述问题,论文提出了"Selective Query Recollection (SQR)"作为一种训练策略。SQR通过积累中间查询并有选择地将它们提供给后续阶段,改进了模型的训练效果。这种策略在不增加推理计算成本的情况下,显著提高了查询式目标检测的性能。

  • 实验验证:论文通过在多个实验设置下对不同的查询式目标检测模型进行测试,验证了SQR策略的有效性。实验结果表明,SQR显著提高了模型的性能,带来了1.4到2.8的平均精度(AP)提升。

相关工作

目标检测的训练策略: 传统的目标检测方法通常基于密集的先验信息,如锚点或锚点框,用于匹配地面真实目标目标,依赖于它们的IoU值或其他软性评分因子。多阶段模型会逐阶段地迭代地完善边界框和类别。举个例子,Cascade RCNN采用了中间阶段的输出来训练下一阶段,其中IoU阈值逐渐增加,以确保逐步完善目标检测结果。最近的DETR 则将目标检测视为一种集合预测问题,通过匹配一定数量的目标查询来训练模型,并通过多个解码阶段逐步完善查询。

查询式目标检测: 近年来,许多算法开始采用了DETR的思想,将查询式目标检测作为一种新的范式。这些方法包括Deformable DETR、Conditional DETR、Anchor-DETR、DAB-DETR、DN-DETR、Adamixer等。它们引入了不同的变体和改进,如使用可变形注意力模块、解耦查询、使用锚点等,以改善模型的性能和收敛速度。

本文方法

论文希望设计一种训练策略,满足以下期望:

  • 不均匀的监督分配,着重强调后期解码阶段,以改善最终结果。

  • 将多样的早期查询直接引入后期阶段,减轻级联错误的影响。

为此,我们设计了一种简明的训练策略,称为query recollection(QR)。与现有技术相比,它在每个阶段收集中间查询,并沿着原始路径转发它们。Dense Query Recollection (DQR)是一种基本形式,而 Selective Query Recollection (SQR) 是一种高级变体。

018685f667da7ab6ec7650a20b5acb39.png
Dense Query Recollection

符号表示:论文使用了一组查询

52b311d3ae9fa820cf10c5c81d6c2e0a.png
,其中 n 通常为 100、300 或 500,这些查询用于单个解码阶段(self-attention、cross-attention、FFN)、地面真值分配以及损失计算。

基本路径:论文引入了基本路径的概念,其中查询通过所有解码阶段进行改进。以一个包含 4 个阶段的解码器为例,我们可以表示 为最终查询,它在所有阶段中得到改进。这个基本路径的计算方式是通过级联应用每个阶段的改进,如公式 (3) 和 (4) 所示。

de2d6644d7190478ceb8271364e4c3a9.png

DQR 的形式化:DQR 密集地收集每个中间查询,并将它们独立传递给每个后续阶段。在每个阶段之后,形成一个集合 C,其中查询的数量呈几何级数增长,每个集合都包含前一阶段的查询以及当前阶段生成的一半查询。这种方式确保了每个阶段的监督信号数量成倍增长,如 (6) 所示。

eeedea7aeea9227eb83a8a010844d632.png

推断过程: 在推断阶段,仅使用基本路径,不影响推断过程。对于标准的 6 阶段解码器,推断路径是:

05a76ec2b79d76bb9e51bad2655637e6.png

DQR通过在每个阶段紧密收集中间查询(queries)并将它们独立地传递给后续阶段,从而构建了一个集合(collection),其中查询的数量呈几何级数增长。这样可以实现监督信号数量随阶段增加而成倍增长,并且确保先前的查询在后续阶段都可见。

Selective Query Recollection

作者认为 Dense Query Recollection 存在两个问题:计算成本高和跨越太多阶段的查询可能会产生负面影响。因此,Selective Query Recollection 提出了一种更为智能的查询收集方法。SQR根据具体情况选择在每个阶段引入查询,考虑了查询对目标的贡献。这样,SQR能够减少计算负担,同时提高性能。

为了找到更好的Query Recollection方案,作者在第3节中引入的TP衰减率和FP加剧率进行了详细分析。他们发现,大多数更好的替代方案都来自第4和第5阶段,这两个阶段的TP衰减率和FP加剧率分别达到了23.9%和40.8%,接近第1到5阶段的结果,而第1到3阶段仅产生了11.2%和32.4%。这表明来自相邻阶段和相邻阶段之前的查询更有可能带来积极效果。

在每个阶段 Ds 开始之前,从距离最近的两个阶段(Ds-1 和 Ds-2)中收集查询,然后将它们作为Ds 的输入。

SQR的形式化

fe15321280c3de3e9ecdcd5749b9e4c6.png

Selective Query Recollection的效果

Selective Query Recollection 仍然满足预期,监督信号的数量呈现斐波那契数列增长(1,2,3,5,8,13)。与密集查询回收相比,SQR在很大程度上减少了计算负担,并且在精度方面甚至表现出色于密集回收。这验证了作者的假设,即跳过太多阶段的查询可能对远程阶段产生噪声,掩盖了其积极效果。

Recollection 起始阶段:除了从第1阶段开始收集查询,还可以根据实际需求变化起始阶段,从而进一步减少每个集合中的总查询数量,减轻计算负担。这可以视为选择性查询回收的一个超参数。

实验

实验结果

与SOTA的比较,如表格8:

8212ab4dce56e193163b5871485f0480.png
  • 在DAB-DETR上,SQR分别在R50和SwinB下提高了+2.3和+2.6的AP

  • 在Deformable-DETR上,在12e下SQR提高了2.7的AP,在50e下提高了1.4的AP

  • 在R50上的Adamixer中,SQR在基本设置下(100个查询,12e)实现了+1.9的AP

  • 通过添加一个额外的阶段,有/无SQR之间的差距增大了+2.8 AP

消融实验
9d15b94f634bddf6371097b8aabe483f.png
  • 基线与DQR与SQR的比较:表格4显示,无论是DQR还是SQR都大幅提高了基线性能。DQR 达到了 44.2(+1.7 AP),而SQR 达到了稍高的结果 44.4(+1.9 AP)。需要注意的是,SQR远比DQR高效。表格5显示,在相同的训练设置下,SQR减少了大量的训练时间,仍然实现了相等或更高的AP。

  • SQR的起始阶段变化:作者在表格5中呈现了SQR在改变起始阶段时的性能表现。当查询回收从第1阶段开始时,获得了最佳性能,但计算成本最高。可以看到,从第2阶段开始性能类似于从第1阶段开始,但计算负担适度减少。随着回收开始得更晚,由于从早期阶段回收的查询数量减少,训练重点逐渐平衡,SQR的好处如预期的那样减少。

66bc8343a434e5ebb802fd595faba61f.png
  • 表格6用于验证应用SQR后,TP 衰减率和 FP 加剧率的减小,这是由于训练效果造成的。

结论

在这项工作中,我们研究了基于查询的目标检测器的最佳检测结果并不总是来自最后的解码阶段的现象,有时候可以来自中间解码阶段。我们首先识别了引起这个问题的两个限制,即缺乏训练重点和来自查询序列的级联错误。我们通过选择性查询回收(SQR)作为一种简单而有效的训练策略来解决这个问题。在各种训练设置下,SQR显著提高了Adamixer、DAB-DETR和Deformable-DETR的性能。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

39159e3ce23ad0c5b567de2069a23bcd.jpeg

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非目标代谢组学(untargeted metabolomics)中常用的方法学考察的方法(四)

QC样本的制备: 混合相同体积的所有待检测样本,然后按照与待测样本相同的前处理方法来处理QC样本,之后进样进行LC-MS分析。 样本检测时,通常在检测最开始运行几次QC样本,之后根据样本量的大小在每检测几个样本之后检测…

Codeforces Round 665 (Div. 2) (A-F)

A.Problem - A - Codeforces (1)题意 给你个X轴,初始A点在n这个位置,O在源点0,问你要把B放在哪才能让|AB-BO| k,最小化A需要移动多少次。 (2)思路 直接分情况套路即可。 &#xff0…

springcloud:四、nacos介绍+启动+服务分级存储模型/集群+NacosRule负载均衡

nacos介绍 nacos是阿里巴巴提供的SpringCloud的一个组件,算是eureka的替代品。 nacos启动 安装过程这里不再赘述,相关安装或启动的问题可以见我的另一篇博客: http://t.csdn.cn/tcQ76 单价模式启动命令:进入bin目录&#xff0…

SpringBoot Validation入参校验国际化

在 Spring Boot 中,可以使用 Validation 和国际化来实现对入参的校验。 常用的校验 NotNull验证字段值不能为 nullNotEmpty验证字段值不能为 null 或空字符串NotBlank验证字符串字段值不能为空、null,并且必须至少包含一个非空白字符Size验证字符串、…

【Spring】Spring 创建和使用

Spring 创建和使用 一. 创建 Spring 项目1. 创建⼀个 Maven 项目2. 添加 Spring 框架⽀持3. 添加启动类 二. 存储 Bean 对象1. 创建 Bean2. 将 Bean 注册到容器 三. 获取并使⽤ Bean 对象1. 创建 Spring 上下文2. 获取指定的 Bean 对象3. 使用 Bean Spring 就是⼀个包含了众多⼯…

SNERT预备队招新CTF体验赛-Web(SWCTF)

目录 1、F12 2、robots 3、game1-喂青蛙 4、game 2 - flap bird 5、game 3 - Clash 6、Get&Post 7、sql (1)手工注入 (2)工具注入 8、命令执行漏洞 9、文件上传漏洞 10、文件泄露 11、php反序列化漏洞 12、PHP绕…

Mac安装Ecplise产品报错:dose not contain the JNI_CreateJavaVM symbol

1. 絮絮叨叨 工作中需要借助Ecplise Memory Analyzer (MAT)分析dump文件,直接下载、安装、运行MAT报错 询问同事后,同事说可以先安装Ecplise,再以插件的形式安装MAT下载、安装好Eclipse,点击运行仍然报错,且错误信息一…

【计算机网络笔记六】应用层(三)HTTP 的 Cookie、缓存控制、代理服务、短连接和长连接

HTTP 的 Cookie HTTP 的 Cookie 机制要用到两个字段:响应头字段 Set-Cookie 和请求头字段 Cookie。 Cookie 可以设置多个 key-value 对, 响应头中可以设置多个 Set-Cookie 字段,请求头Cookie后面可以设置多个键值对,用分号隔开&a…

使用canal和openfire实现Mysql的实时数据订阅

文章目录 1、Openfire插件接收binlog数据1.1、创建用户组1.2、接口实现 2、Canal客户端开发3、Smack消息客户端实现。 mysql的binlog的实时数据订阅 (1) canal安装与客户端使用 (2) openfire 4.7.5 Web插件开发 (3&a…

ElementUI实现增删改功能以及表单验证

目录 前言 BookList.vue action.js 展示效果 前言 本篇还是在之前的基础上&#xff0c;继续完善功能。上一篇完成了数据表格的查询&#xff0c;这一篇完善增删改&#xff0c;以及表单验证。 BookList.vue <template><div class"books" style"pa…

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-CNN多特征分类预测&#xff0c;多特征输入模型&#xf…

OpenCV 实现 SIFT→SURF 算法关键点检测实现

目录 1&#xff0c;SIFT算法原理 1.1&#xff0c;基本流程 1.1.1 尺度空间极值检测 1.1.2 关键点定位 1.1.3 关键点方向确定 1.1.4 关键点描述 1.1.5 总结 1.2 SURF原理 2 代码实现 3 结果展示 4&#xff0c;你肯定会遇到报错 cv2.error: OpenCV(3.4.8) C…

想用ChatGPT写申请文书?那你肯定会被拒!

美国总统乔拜登&#xff08;Joe Biden&#xff09;、诗人TS艾略特&#xff08;T. S. Eliot&#xff09;和历史学家斯蒂芬安布罗斯&#xff08;Stephen Ambrose&#xff09;&#xff0c;他们的名字都曾与抄袭事件联系在一起。 其中&#xff0c;艾略特的抄袭行为是在他去世后才被…

AutoCAD 产品设计:图形单位

本文讲解 AutoCAD 产品的图形单位功能产品设计&#xff0c;没有任何代码实现。 使用的 AutoCAD 为 2020 版本 图形单位是什么&#xff1f; 图形单位是用于设置 一些属性数据应该用什么格式显示 的命令&#xff0c;命令标识为 un&#xff08;units&#xff09;。 举个例子。 …

uboot启动流程-涉及s_init汇编函数

一. uboot启动涉及函数 本文简单分析uboot启动流程中&#xff0c;涉及的汇编函数&#xff1a; lowlevel_init函数调用的函数&#xff1a;s_init 函数 save_boot_params_ret函数调用的函数&#xff1a; _main 函数 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a;…

“把握拐点,洞悉投资者情绪与比特币价格的未来之路!“

“本来这篇文章是昨天晚上发的&#xff0c;国庆节庆祝喝多了&#xff0c;心有余而力不足&#xff01;直接头躺马桶GG了” 标准普尔 500 指数 200 天移动平均线云是我几个月来一直分享的下行目标&#xff0c;上周正式重新测试了该目标。200 日移动平均线云表示为: 200 天指数移…

JDBC学习笔记(1)

连接数据库 下载mysql-connector-java&#xff0c;这里我是看的这个连接mysql-connector-java下载。 下载后并且导入了Idea中的lib文件下。 导入成功后&#xff0c;为了验证可以通过CTRLn来搜索Driver看看有没有添加进来。 随后在MySQL中创建一个数据库&#xff0c;我这里直…

uboot启动流程-涉及_main汇编函数

一. uboot启动流程涉及函数 本文简单分析一下 save_boot_params_ret调用的函数&#xff1a;_main汇编函数。 本文继之前文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-涉及s_init汇编函数_凌肖战的博客-CSDN博客 二. uboot启动流程涉及的 _main汇编函数 经过之…

Beats Studio Buds 连接 Windows 11 声音输出不显示设备

Beats Studio Buds 连接 Windows 11 声音输出不显示设备 Beats Studio Buds 蓝牙耳机连接Windows 11电脑后&#xff0c;无法通过耳机播放声音&#xff0c;在声音输出选项中也没有耳机选项。 问题 蓝牙耳机连接电脑。 在声音输出中查看输出设备选项。 解决方法 以管理员身…

Python中匹配模糊的字符串

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库&#xff0c;它允许我们在python中进行模糊字符串匹配。 此外&#xff0c;我们将学习如何使用process 模块&#xff0c;该模块允许我们在模糊…