DETR系列:RT-DETR(一) 论文解析

论文:《DETRs Beat YOLOs on Real-time Object Detection》 2023.4

DETRs Beat YOLOs on Real-time Object Detection:https://arxiv.org/pdf/2304.08069.pdf

源码地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr

本文是RT0-DETR的论文解析,详细部署请查看DETR系列:RT-DETR实战部署

RT-DETR

  • 1.目标检测算法发展
  • 2.概述
  • 3.NMS分析
  • 4.RT-DETR模型结构
  • 5.性能对比
  • 6.参考资料

1.目标检测算法发展

请添加图片描述
第一行是YOLO系列算法的发展过程,第二行是DETR系列算法的发展过程。

2.概述

实时目标检测(Real-Time Object Detection )过去一直由 YOLO 系列模型主导。YOLO 检测器有个较大的待改进点是需要 NMS 后处理,其通常难以优化且不够鲁棒,因此检测器的速度存在延迟。

2020年DETR算法诞生,Detr是第一个基于transformer的端到端算法,没有anchor前处理和NMS后处理,但是Detr收敛慢,训练慢,推理也慢,尽管后续的优化算法不断加快收敛速度,提升推理速度,但仍然无法实现实时要求。

RT-DETR基于DINO检测模型进行改进,首次实现实时端到端检测。
本文的主要贡献总结如下:

本文的主要贡献总结如下

  1. 提出了第一个实时端到端对象检测器,它不仅在精度和速度方面优于当前的实时检测器,也不需要后期处理,因此它的推理速度没有延迟并且能够保持稳定。
  2. 本文详细分析了NMS对实时检测器的影响,并从后处理的角度得出了基于CNN的实时检测器的结论(即同等精度情况下,anchor-based算法速度比anchor-free的算法慢)。
  3. 本文提出的IoU-Aware query选择在我们的模型中显示出优越的性能改进,这为改进目标查询的初始化方案提供了新的思路。
  4. 本文的工作为端到端检测器的实时实现提供了一个可行的解决方案,并且所提出的检测器可以通过使用不同的解码器层来灵活地调整模型大小和推理速度,而不需要重新训练。

3.NMS分析

NMS在目标检测后处理中应用广泛,主要用来去除重叠的冗余框。NMS有2个超参数:分数阈值和IOU阈值,尤其是,分数低于阈值的检测框不论IOU阈值多大,都会被过滤,因此NMS的执行事件取决于输入的预测框数量,以及2个超参数的值。
请添加图片描述

本文利用YOLOv5和YOLOv8进行实验。首先输入相同图像,计算不同得分阈值过滤后剩余的预测框数量。分数阈值采样区间是0.001到0.25,对两个检测器的剩余预测框进行计数,并将其绘制成直方图,直观地反映了NMS易受其超参数的影响。此外,本文以YOLOv8为例,在COCO val2017数据集上评估不同NMS超参数下的模型准确性和NMS操作的执行时间,运行设备是GPU T4
请添加图片描述
从上面图2可以看出,随着分数阈值增大,剩余预测框的数量减少,对于同一个分数阈值,YOLOv5 (anchorbased)剩余框的数量大于YOLOv8 (anchor-free)。从表1可以看出,不同的阈值下推理时间和AP均会变化,超参数会影响算法性能,导致算法不够鲁棒。

4.RT-DETR模型结构

1)Backbone: 采用了经典的ResNet(便于和detr系列算法对比)和百度的HGNet-v2(速度精度由于前者)两种,backbone是可以Scaled,论文只公布ResNet-50和ResNet-101,HGNetv2-l和HGNetv2-x。不同于DINO等DETR类检测器使用最后4个stage输出,RT-DETR为了提速只需要最后3个,下面介绍一下HGNet网络。

PP-HGNet 针对 GPU 设备,对目前 GPU 友好的网络做了分析和归纳,尽可能多的使用 3x3 标准卷积(计算密度最高)。将主要的有利于 GPU 推理的改进点进行融合,从而得到一个有利于 GPU 推理的骨干网络,同样速度下,精度大幅超越其他 CNN 或者 VisionTransformer 模型。

PP-HGNet 骨干网络的整体结构如下:
请添加图片描述
PP-HGNet是由多个HG-Block组成,HG-Block的细节如下:
请添加图片描述

PP-HGNet的整体结构由一个Stem模块+四个HG Stage构成,PP-HGNet 的第一层由channel为96的Stem模块构成,目的是为了减少参数量和计算量。stem由一系列ConvBNAct(Conv+BN+Act,添加了use_lab结构,类似于resnet的分支残差),第二层到第五层由HG Stage构成,每个HG Stage主要由包含大量标准卷积的HG Block,其中PP-HGNet的第三到第五层使用了使用了可学习的下采样层(LDS Layer)。其中,可学习的下采样层(Learnable Down-Sampling Layer)是指通过学习参数来进行下采样的一种层次结构。在传统的下采样方法中(如最大池Max Pooling),下采样的过程是固定的,没有可学习的参数。而可学习的下采样层则可以根据输入数据的特征进行动态的下采样,从而提高网络的性能和准确率。PP-HGNet的激活函数为Relu,常数级操作可保证该模型在硬件上的推理速度。

2)Neck:如上图所示,本文提出HybridEncoder,包括两部分:Attention-based Intra-scale Feature Interaction (AIFI) 和 CNN-based Cross-scale Feature-fusion Module (CCFM) 。AIFI只采用了一层普通的Transformer的Encoder,包含标准的MHSA(或者Deformable Attention)和FFN,将二维的s5 特征拉成向量,然后交给AIFI模块处理,随后,再将输出调整回二维,记作 f5 ,以便去完成后续的跨尺度特征融合CCFM。AIFI由几个通道维度区分L和X两个版本,配合CCFM中RepBlock数量一起调节宽度深度实现Scaled RT-DETR。

本文通过一系列实验得出HybridEncoder的设计思路,具体如下图请添加图片描述

请添加图片描述
请添加图片描述

(a) : 将s3 、 s4 和 s5拼接在一起,不包含Encoder的,即没有自注意力机制,在Backbone之后直接接Decoder去做处理,得到最终的输出。注意,这里的拼接是先将二维的 H×W 拉平成 HW ,然后再去拼接: H1W1+ H2W2+ H3W3 。表3中(a)取得43.0 AP的结果。

(b) :在(a)基础上,加入了单尺度的Transformer Encoder(SSE),仅包含一层Encoder层,分别处理三个尺度的输出,这里三个尺度共享一个SSE,而不是为每一个尺度都设计一个独立的SSE,理论上共享SSE优于独立SSE,因为通过这一共享的操作,三个尺度的信息是可以实现一定程度的信息交互。最后将处理结果拼接在一起,交给后续的网络去处理,得到最终的输出。表3中(b)从43.0提升至44.9,表明使用共享的SSE是可以提升性能的。

© : 使用多尺度的Transformer Encoder(MSE),将三个尺度的特征拼接在一起后,交由MSE来做处理,使得三个尺度的特征同时完成“尺度内”和“跨尺度”的信息交互和融合,最后将处理结果,交给后续的网络去处理,得到最终的输出。C使用MSE来同步完成“尺度内”和“跨尺度”的特征融合,这一做法可以让不同尺度的特征之间得到更好的交互和融合, 表3中©AP指标提升至45.6,这表明MSE的做法是有效的,即“尺度内”和“跨尺度”的特征融合是必要的。但是,从速度的角度来看,Latency从7.2增加值13.3 ms,要高于B组的11.1 ms;

(d) : 先用共享的SSE分别处理每个尺度的特征,然后再使用PAN-like的特征金字塔网络去融合三个尺度的特征,最后将融合后的多尺度特征拼接在一起,交给后续的网络去处理,得到最终的输出。d是相当于解耦了c中的MSE:先使用共享的SSE分别去处理每个尺度的特征,完成“尺度内”的信息交互,然后再用一个PAN风格的跨尺度融合网络去融合不同尺度之间的特征,完成“跨尺度”的信息融合。这种做法可以有效地避免MSE中因输入的序列过长而导致的计算量增加的问题。相较于c,表3中(d)的Latency从13.3 ms降低至12.2 ms,性能也从45.6 AP提升至46.4 AP,这表明MSE的做法并不是最优的,先处理“尺度内”,再完成“跨尺度”,性能会更好;

(DS5) :用一个SSE只处理 s5 特征,随后的跨尺度特征融合和D保持一致。DS5的做法必然会提高推理速度, 表3中(DS5)Latency从12.2 ms降低至7.9 ms,同时,性能从46.4提升至46.8。由此可见,Transformer的Encoder只需要处理 s5 特征即可,不需要再加入浅层特征的信息。

(e) :使用一个SSE处理 s5 特征,即所谓的AIFI模块,随后再使用CCFM模块去完成跨尺度的特征融合,最后将融合后的多尺度特征拼接在一起,交给后续的网络去处理,得到最终的输出。CCFM其实还是PaFPN,其中的Fusion模块就是一个CSPBlock风格的模块,如下图所示
请添加图片描述
上述实验可以看出:1)以往的DETR,如Deformable DETR是将多尺度的特征都拉平成拼接在其中,构成一个序列很长的向量,尽管这可以使得多尺度之间的特征进行充分的交互,但也会造成极大的计算量和计算耗时。并且相较于较浅的s3特征和s4 特征,s5 特征拥有更深、更高级、更丰富的语义特征,这些语义特征是Transformer更加感兴趣的和需要的,对于区分不同物体的特征是更加有用的,而浅层特征因缺少较好的语义特征而起不到什么作用。实验结果也证明,Transformer的Encoder部分只需要处理s5的特征,既能大幅度削减计算量、提升计算速度,同时也不会降低性能,甚至还有所提升;2)对于多尺度特征的交互和融合,我们仍可以采用CNN架构常用的PAN网络来搭建,只需要一些细节上的调整即可。

3)Transformer: 起名为RTDETRTransformer,基于DINO Transformer中的decoder改动的不多;

4)Head和Loss: 和DINOHead基本一样,使用到了DINO的“去噪思想”来提升匹配的样本质量,加快训练的收敛速度。不过,有一个细节上的调整,那就是在assignment阶段和计算loss的阶段,classification的标签都换成了IoU-Aware查询选择,将IoU分数引入分类分支的目标函数,以实现对正样本分类和定位的一致性约束。因为按照以往情况,有可能出现“当定位还不够准确的时候,类别就已经先学好了”的“未对齐”的情况,毕竟类别的标签非0即1。但如果将预测框与GT的IoU作为类别预测的标签,那么类别的学习就要受到回归的调制,只有当回归学得也足够好的时候,类别才会学得足够好,否则,类别不会过快地先学得比回归好,因此后者显式地制约着前者。

5)Reader和训练策略:
训练测试数据:本文在COCO train2017数据集上训练,在COCO val2017数据集验证,使用单尺度图像在COCO AP矩阵验证。Reader采用的是YOLO常用的640尺度,没有DETR类检测器复杂的多尺度resize。
网络:使用ImageNet上预训练的ResNet和HGNetv2系列作为骨干网络。AIFI由1层transformer 构成,CCMF由3个RepBlocks构成。在IoU-aware查询选择中,使用encoder的top 300特征来初始化decoder的query。训练的策略和decoder的超参数与DINO一致。用AdamW优化器训练,其他参数配置为base learning rate = 0:0001,weight decay = 0:0001, global gradient clip norm =0:0001, and linear warmup steps = 2000. ema decay = 0:9999.骨干网络学习率同detr。数据增强采用的是基础的随机颜色抖动、随机翻转、裁剪和 Resize,0均值1方差的NormalizeImage大概是为了节省部署时图片前处理的耗时,没有用mosaic等trick。默认在 COCO train2017 上训练 6x ,即72个epoch。

6)模型详情
请添加图片描述
如上图所示,本文提供ResNet、HGNetv2系列2个版本。使用depth multiplier和width multiplier将Backbone和混合编码器一起缩放。因此,得到了具有不同数量的参数和FPS的RT-DETR的两个版本。对于混合编码器,通过分别调整CCFM中RepBlock的数量和编码器的嵌入维度来控制depth multiplier和width multiplier。值得注意的是,提出的不同规模的RT-DETR保持了同质解码器,这有助于使用高精度大型DETR模型对光检测器进行蒸馏。

5.性能对比

  1. yolo系列精度对比
    请添加图片描述
    相同尺度的版本下,RT-DETR速度和精度都超过yolo系列,在 COCO val2017 上的精度为 53.0% AP ,在 T4 GPU 上的 FPS 为 114,RT-DETR-X 的精度为 54.8% AP,FPS 为 74。
    并且RT-DETR只训练72个epoch,而先前精度最高的YOLOv8需要训练500个epoch,其他YOLO也基本都需要训300epoch。此外RT-DETR的HGNET版本参数量FLOPs也低于yolo系列。

  2. 对比DETR系列
    请添加图片描述
    RT-DETR-R50 在 COCO val2017 上的精度为 53.1% AP,在 T4 GPU 上的 FPS 为 108,RT-DETR-R101 的精度为 54.3% AP,FPS 为 74。总结来说,RT-DETR 比具有相同 backbone 的 DETR 系列检测器有比较显著的精度提升和速度提升。DETR类在COCO上常用的尺度都是800x1333,而RT-DETR采用640x640尺度,精度也能高于之前的DETR系列模型。

6.参考资料

https://blog.csdn.net/PaddlePaddle/article/details/130355297

https://zhuanlan.zhihu.com/p/626659049

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

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

相关文章

【Visual Studio】报错 ASSERT: “i >= 0 i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C 语言,配合 Qt 开发串口通信界面。 文…

javaweb学习2

p标签使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!--p标签定义段落 p元素自动在其前后创建一段空白--> hello&#xff0c;world &l…

设计模式之访问者模式笔记

设计模式之访问者模式笔记 说明Iterator(访问者)目录访问者模式示例类图抽象访问者角色类抽象元素角色类宠物猫类宠物狗类自己类其他人类家类测试类 说明 记录下学习设计模式-访问者模式的写法。JDK使用版本为1.8版本。 Iterator(访问者) 意图:表示一个作用于某对象结构中的…

日历组件 el-calendar 实现标记功能

需求&#xff1a;在日历组件中选择月份时&#xff0c;可以显示当月已经质检或需质检的数据 思路&#xff1a;前端每次点击日期选择器的时候调用接口&#xff0c;接口返回当月需要质检或已质检的数据&#xff0c;前端拿到数据就开始做判断然后回显。 大体样式 代码&#xff1a…

Redis7【① 概述 安装 配置】

1. Redis入门概述 1. Redis是什么 Redis全称 远程字典服务器&#xff08;Remote Dictionary Server&#xff09;&#xff0c;它是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的基于内存的Key-Value数据库&#xff0c;提供了丰富的数据结构&…

windows无法启动RemoteDesktopServices服务(位于本地计算机上)。错误126:找不到指定的模块。

win10的搜索栏输入 注册表编辑器。打开&#xff0c;找到如下路径 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters 将指定数值项ServiceDll的数值数据改成默认值&#xff1a; %SystemRoot%\System32\termsrv.dll 再重新尝试就好了。 …

Spring是什么?

目录 1、Spring的简介 2、Spring七大功能模块 3、Spring的优点 4、Spring的缺点 5、Sprig容器 6、Spring的生态圈&#xff08;重点&#xff09;***** 7、Spring中bean的生命周期 1、Spring的简介 Spring的英文翻译为春天&#xff0c;可以说是给Java程序员带来了春天&…

DAMA数据治理CDGA/CDGP认证考试备考经验分享

一&#xff0c;关于DAMA中国和CDGA/CDGP考试 国际数据管理协会&#xff08;DAMA国际&#xff09;是一个全球性的专业组织&#xff0c;由数据管理和相关的专业人士组成&#xff0c;非营利性机构&#xff0c;厂商中立。协会自1980年成立以来&#xff0c;一直致力于数据管理和数字…

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPISDK和多帧采集模式的技术背景Baumer工业相机通过BGAPISDK设置多帧采集模式功能1.引用合适的类文件2.通过BGAPISDK设置多帧采集模式功能 Baumer工业相…

Wolfram Mathematica 13.3 特别版

WOLFRAM MATHEMATICA 全球現代技術計算的權威系統 MATHEMATICA 三十年來&#xff0c;Mathematica 定義了技術計算領域的最新技術—並為全球數百萬創新者、教育工作者、學生和其他人提供了主要的計算環境。 Mathematica 以其卓越的技術和簡易實用廣受讚譽&#xff0c;提供了單…

13.RocketMQ之消息的存储与发送

1. 消息存储 1.1 消息存储 分布式队列因为有高可靠性的要求&#xff0c;所以数据要进行持久化存储。 消息生成者发送消息Broker收到消息&#xff0c;将消息进行持久化&#xff0c;在存储中新增一条记录返回ACK给生产者Broker消息给对应的消费者&#xff0c;然后等待消费者返回A…

【MOOC 作业】第5章 链接层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) 在某网络中标识为 A 到 E 的 5 个结点以星形与一台交换机连接&#xff0c;考虑在该网络环境中某个正在学习的交换机的运行情况。假定&#xff1a;该交换机表初始为空。B 向 E 发送一个帧&#xff0c;此时交换机将该数…

[内核笔记1]内核文件结构与缓存——inode和对应描述

由来&#xff1a;公司内部外网记录日志的方式现在都是通过Nginx模块收到数据发送到系统消息队列&#xff0c;然后由另外一个进程来从消息队列读取然后写回磁盘这样的操作&#xff0c;尽量的减少Nginx的阻塞。 但是由于System/V消息队列在使用前需要规定消息长度&#xff0c;且…

自动驾驶专题介绍 ———— 激光雷达标定

文章目录 介绍激光雷达与激光雷达之间的外参标定激光雷达与摄像头的标定 介绍 激光雷达在感知、定位方面发挥着重要作用。跟摄像头一样&#xff0c;激光雷达也是需要进行内外参数标定的。内参标定是指内部激光发射器坐标系与雷达自身坐标系的转换关系&#xff0c;在出厂之前就已…

预训练、微调和上下文学习

最近语言模型在自然语言理解和生成方面取得了显著进展。这些模型通过预训练、微调和上下文学习的组合来学习。在本文中将深入研究这三种主要方法&#xff0c;了解它们之间的差异&#xff0c;并探讨它们如何有助于语言模型的学习过程。 预训练 预训练&#xff08;Pre-training&…

计算机网络--网络传输基本概念

什么是IP地址&#xff1f; 在计算机出厂的时候&#xff0c;有一个唯一标识的物理地址。但是因为厂商不同等各种原因&#xff0c;用来标识一台计算机在网络中是比较麻烦的&#xff0c;于是出现了IP地址&#xff0c;IP地址是互联网协议地址的意思&#xff0c;是“Internet Protoc…

H.264帧结构和RTSP协议源码框架

目录 1、H264编码原理和基本概念 1.1、h.264编码原理 1.2、h.264编码相关的一些概念 2、H264的NAL单元详解 2.1、VCL和NAL的关系 2.2、H.264视频流分析工具 2.3、h264视频流总体分析 2.4、相关概念 3、H264的NAL单元---sps和pps 3.1、sps和pps详解 3.2、H264的profil…

InnoDB的三种行锁(提供具体sql执行案例分析)

InnoDB存储引擎有3种行锁的算法&#xff0c;其分别是&#xff1a; Record Lock&#xff08;记录锁&#xff09;&#xff1a;单个行记录上的范围 (锁住某一行记录)Gap Lock&#xff08;间隙锁&#xff09;&#xff1a;间隙锁&#xff0c;锁定一个范围&#xff0c;但不包含记录本…

人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络),实现模型的训练与预测

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络)&#xff0c;实现模型的训练与预测。孪生网络是一种用于度量学习&#xff08;Metric Learning&#xff09;和比较学习&#xff08;Compariso…

基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

功能演示 摘要&#xff1a;面部表情识别&#xff08;Facial Expression Recognition&#xff09;是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理&#xff0c;同时给出完整的Python实现代码、训练好的深度学习模型&#xff0c;并且通过Py…