RT-DETR论文解读与代码

1.概述

        目前以大名鼎鼎的YOLO为代表的基于CNN的实时监测网络需要NMS进行后处理,导致不能很好的优化网络,并且网络不够健壮,从而导致检测器的推理速度出现延迟。研究者也分析了Anchor-based和Anchor-free的YOLO的性能,发现Anchor并不是影响实时监测的关键要素,而NMS后处理彩色。

        DETR很好的解决了后处理对于模型的限制,却受限于Transformer巨大的计算量,无法发挥实时监测性。

        因此,作者想要重构detr,使其具有实时性。研究者发现,虽然多尺度特征的引入有利于加速训练收敛和提高性能,但它也能显著增加输入编码器的序列的长度。因此,Transformer编码器由于计算成本高而成为模型的计算瓶颈。因此,作者设计了一种高效的混合编码器来代替原来的Transformer编码器。通过解耦多尺度特征的尺度内交互和跨尺度融合,该编码器可以有效地处理不同尺度的特征。此外,之前的工作表明,解码器的对象查询初始化方案对检测性能至关重要(Detr存在训练收敛缓慢和Query难以优化的问题)。为了进一步提高性能,作者提出了对iou进行感知的查询选择。通过在训练期间提供IoU约束,为解码器提供更高质量的初始对象查询。此外,提出的检测器支持通过使用不同的解码器层来灵活地调整推理速度,而不需要再训练,这得益于DETR架构中解码器的设计,方便了实时检测器的实际应用。

2. End-to-end Speed of Detectors

NMS的分析

        NMS是目标检测中广泛采用的一种后处理算法,用于消除检测器输出的重叠预测框。而NMS的速度容易受到预测框的个数和两个超参数的影响。

        在YOLOv5和YOLOV8进行验证,结合图和表格可以看到,置信度阈值越高,剩余的预测框的个数越少,NMS时间越短。而在同一置信度阈值的前提下,IOU阈值越高,NMS时间越长。

End-to-end Speed Benchmark

        对于需要NMS后处理的实时检测器,无锚检测器的性能优于基于锚的检测器,因为前者占用的后处理时间明显少于后者,这在以往的工作中被忽略了。造成这种现象的原因是,基于锚的探测器比无锚的探测器产生更多的预测框。

 4. The Real-time DETR

4.1. Model Overview

        RT-DETR由一个主干网、一个混合编码器和一个带有辅助预测头的Transformer解码器组成。模型架构的概述如图所示。具体来说,利用主干{S3、S4,S53}的最后三个阶段的输出特性作为编码器的输入。该混合编码器通过尺度内交互和跨尺度融合,将多尺度特征转换为一系列图像特征。随后,使用iou感知的查询选择从编码器输出序列中选择固定数量的图像特征,作为解码器的初始对象查询。最后,带有辅助预测头的解码器迭代地优化对象查询,生成预测框和置信度分数。

       

 4.2. Effificient Hybrid Encoder

        Computational bottleneck analysis. 多尺度特征会导致输入序列长度急剧增加,虽然能够加速训练的收敛性和提高性能,但是却大大提高了计算量。为了克服这一障碍,作者分析了多尺度Transformer编码器中存在的计算冗余,并设计了一组变体来证明尺度内和跨尺度特征的同时交互作用是计算效率低的。

        高级特征是从包含关于图像中对象的丰富语义信息的低级特征中提取出来的。直观地说 ,在连接的多尺度特征上执行特征交互是冗余的。为了验证这一观点,作者重新考虑了编码器的结构,并设计了一系列具有不同编码器的变体,如图5所示。 这将变量集通过将多尺度特征交互解耦为尺度内交互和跨尺度融合的两步操作,逐步提高模型精度,同时显著降低计算成本.我们首先删除DINO-R50 [40]中的多尺度变压器编码器作为基线a。接下来,插入不同形式的编码器,基于基线A产生一系列变体,阐述如下:
  • A→B:变体B插入一个单比例的Transformer编码器,它使用一层Transformer块。每个尺度的特征共享尺度内特征交互的编码器,然后将输出的多尺度特征连接起来
  • B→C:变体C引入了基于B的跨尺度特征融合,并将连接的多尺度特征输入编码器,进行特征交互。
  • C→D:变体D解耦了多尺度特征的尺度内相互作用和跨尺度融合。首先,利用单尺度变压器编码器进行尺度内交互,然后利用类似panet的结构进行跨尺度融合。
  • D→E:变体E进一步优化了基于D的多尺度特征的尺度内交互和跨尺度融合,采用了设计的高效混合编码器。

混合设计:

        在此基础上,作者重新考虑了该编码器的结构,并提出了一种新的高效混合编码器。如图3所示,所提出的编码器由两个模块组成,即基于注意的尺度内特征交互(AIFI)模块和基于cnn的跨尺度特征融合模块(CCFM)。AIFI进一步减少了基于变体D的计算冗余,它只在S5上执行尺度内交互。作者认为,将自注意操作应用于具有更丰富语义概念的高级特征,可以捕获图像中概念实体之间的联系,便于后续模块对图像中对象的检测和识别。同时,由于缺乏语义概念,存在与高级特征交互的重复和混淆的风险,低级特征的尺度内交互是不必要的。为了验证这一观点,作者只对变体D中的S5进行了尺度内交互作用,与普通的变体D相比,DS5显著降低了延迟(快了35%),但提高了准确性(AP提高了0.4%)。这一结论对于实时探测器的设计至关重要。CCFM还基于变体D进行了优化,在融合路径中插入了几个由卷积层组成的融合块。融合块的作用是将相邻的特征融合成一个新的特征,其结构如图4所示。融合块包含N个重新块,双路径输出通过元素添加进行融合。可以将这个过程表述如下:

4.3. IoU-aware Query Selection

        DETR中的对象查询是一组可学习的嵌入,它们由解码器进行优化,并由预测头映射到分类分数和边界框。然而,这些对象查询很难进行解释和优化,因为它们没有明确的物理意义。其改进方案共同点是利用分类分数从编码器中选择前K个特征来初始化对象查询(或仅选择位置查询[40])。然而,由于分类分数的不一致分布和位置信心,一些预测框高分类分数但不接近真实框,导致高分类分数和低IOU的预测框被选择,而低分类分数和高IOU的预测框被丢弃。 这就损害了探测器的性能。为了解决这个问题,作者提出了IoU感知查询选择,让模型在训练期间对高IOU的特征产生高分类分数,对低IoU的特征产生低分类分数。因此,模型根据分类评分选择的前K个编码器特征对应的预测框具有较高的分类评分和较高的IoU评分。重新制定了检测器的优化目标(引入IOU)如下:

        为了分析所提出的IoU感知查询选择的有效性,作者对IOU score和分类分数进行了可视化,如图所示。红点和蓝点分别通过应用普通查询选择和iou感知查询选择训练的模型中计算出来。根据可视化结果,我们发现最显著的特征是大量的蓝色点集中在图的右上角,而红色的点集中在右下角。这表明,用iou感知的查询选择训练的模型可以产生更多高质量的编码器特征。 

  4.4. Scaled RT-DETR     

        作者将Backbone由ResNet替换为了HGNetv2,此外,作者还使用了不同的宽度和深度对模型进行拓展。作者提出的不同尺度的RT-DETR保持了一个均匀的解码器,这便于模型蒸馏。    

5. Experiments

        

5.3. Ablation Study on Hybrid Encoder

A-E不同混合编码器变体的性能

        

 5.4. Ablation Study on IoU-aware Query Selection

5.5. Ablation Study on Decoder
不同解码器层对模型的影响

 

 

 

        

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

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

相关文章

Java多线程与并发-原理

1、synchronized 线程安全问题的主要诱因 存在共享数据(也称临界资源)。存在多条线程共同操作这些共享数据。 解决问题的根本方法: 同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进…

Django之模板层

一、模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图进行处理,而视图在经过一系列处理后必须要有返回信息给浏览器。如果我们要返回html标签、css等数据给浏览器进行渲染,我们可以在视图中这么做 from django.s…

【Spring】核心与设计思想

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

20230622作业:字符设备驱动内部实现原理及流程

1.1字符设备驱动内部实现原理 1>用户打开设备open("~/dev/mycdev",O_RDWR);("路径",打开方式)2>在内核的虚拟文件系统层会同步执行sys_open函数,实现如下操作3>根据open函数的路径,找到struct inode结构体4>在struct…

基于ASP.NET MVC的网络书店系统/书店商城

摘 要 随着书店规模的不断扩大,人流数量的急剧增加,有关书店的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有网络书店来提高书店工作的效率。通过这样的系统,我们可以做到信息的规范管理和快速查询,从而减少…

【深度学习】5-3 与学习相关的技巧 - Batch Normalization

如果为了使各层拥有适当的广度,“强制性”地调整激活值的分布会怎样呢?实际上,Batch Normalization 方法就是基于这个想法而产生的 为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点: 可以使学习快速进行(可以增大学习…

Web安全——HTML基础

HTML 一、对于前端以及后端的认识以及分析二、HTML认知1、网页的组成2、浏览器3、Web标准 三、简单的HTML页面架构四、HTML常见标签1、meta标签2、标题标签3、文本属性4、form表单5、a 标签6、锚文本7、img 标签8、table 表格9、列表标签9.1、无序列表9.2、有序列表 10、框架的…

Java性能权威指南-总结14

Java性能权威指南-总结14 堆内存最佳实践对象生命周期管理对象重用 堆内存最佳实践 对象生命周期管理 在很大程度上,Java会尽量减轻开发者投入到对象生命周期管理上的精力:开发者在需要的时候创建对象,当不再需要这些对象时,它们…

Java 被挤出前三。。

TIOBE 2023 年 06 月份的编程语言排行榜已经公布,官方的标题是:Python 还会保持第一吗?(Will Python remain number 1?) 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖,这得益于…

浅谈C++|引用篇

目录 引入 一.引用的基本使用 (1)引用的概念: (2)引用的表示方法 (3)引用注意事项 (4)引用权限 二.引用的本质 三.引用与函数 (1)引用做函数参数 (2)引用做函数返回值 四.常量引用 五.引用与指针 引入 绰号,又称外号,是人的本名以外…

【k8s系列】一分钟搭建MicroK8s Dashboard

本文基于上一篇文章的内容进行Dashboard搭建,如果没有看过上一篇的同学请先查阅上一篇文章 k8s系列】使用MicroK8s 5分钟搭建k8s集群含踩坑经验 使用MicroK8s搭建Dashboard很简单,只需要在Master节点按照以下几步操作 1.启用Dashboard插件 microk8s en…

【软件工程】软件工程期末考试复习题

软件工程期末考试试题及参考答案 一、单向选择题 1、软件的发展经历了(D)个发展阶段。 一二三四 2、需求分析的任务不包括(B)。 问题分析系统设计需求描述需求评审。 3、一个软件的宽度是指其控制的(C&#xff0…

[进阶]TCP通信综合案例:群聊

代码演示如下: 客户端: public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启!");//1.创建Socket对象,并同时请求与服务端程序的连接。Socket socket new…

新人拿到一个web项目如何使用idea发布运行

本文描述的是一个新手,拿到一个web项目,使用idea如何发布运行。项目中没有非常复杂的元素,只是试着描述应该如何配置相关内容。 内容描述前提,首先请您确认tomcat已经安装,其次确认jdk已经安装,并明确他们在…

STM32速成笔记—GPIO

文章目录 一、什么是GPIO二、GPIO的输入/输出模式三、GPIO初始化配置四、Boot引脚五、一些特殊的GPIO六、点亮LED1. 硬件电路2. 拉高/拉低GPIO3. 程序设计 七、GPIO的位带操作 一、什么是GPIO GPIO(英语:General-purpose input/output),通用型之输入输出的简称&…

Java与SpringBoot对redis的使用方式

目录 1.Java连接redis 1.1 使用Jedis1.2 使用连接池连接redis1.3 java连接redis集群模式 2.SpringBoot整合redis 2.1 StringRedisTemplate2.2 RedisTemplate 1.Java连接redis redis支持哪些语言可以操作 (去redis官网查询) 1.1 使用Jedis (1)添加jedis…

【数字图像处理】2.几何变换

目录 什么是几何变换? 为什么要对图像进行几何变换? 2.1 仿射变换(二维) 2.2 投影变换(三维) 2.3 极坐标变换 2.3.1 将笛卡尔坐标转化为极坐标 2.3.2 将极坐标转换为笛卡尔坐标 2.3.3 利用极坐标变…

汇编学习教程:寻址大总结

前言 在上篇博文中,我们主要学习了一个全新的寄存器:bp。bp 寄存器在功能和使用上与 bx 有着异曲同工之妙,只不过两人绑定的服务对象不同:bx 默认绑定的是 DS 段寄存器,而 bp 默认绑定的是 SS 段寄存器。bx 和 bp 有着…

Unity之透明度混合与ps的透明度混合计算结果不一致

一、问题 前段时间学习shader时发现了一个问题,一张纯红色透明度为128的图片叠加在一张纯绿色的图片上得出的结果与ps中的结果不一致。网上查找了ps中的透明混合的公式为 color A.rgb*A.alpha B.rgb*(1-A.alpha)。自己使用代码在unity中计算了一下结果总是不对。…

【Java基础学习打卡09】JRE与JDK

目录 前言一、JRE二、JDK三、JDK、JRE和JVM关系总结 前言 本文将介绍JRE、JDK是什么,以及JDK、JRE和JVM关系三者之间的关系。 一、JRE JRE全称为Java Runtime Environment,是Java应用程序的运行时环境。JRE包括Java虚拟机(JVM)、…