超越YOLO! RT-DETR 实时目标检测技术介绍

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【车辆检测追踪与流量计数系统】
49.【行人检测追踪与双向流量计数系统】50.【基于YOLOv8深度学习的反光衣检测与预警系统】
51.【危险区域人员闯入检测与报警系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

引言

img

在实时目标检测上,RT-DETR击败了YOLO。其核心改进如下:

  • 实时设计模型(RT-DETR)基于两个步骤提出:专注于在提高速度的同时保持精度,然后在提高精度的同时保持速度。
  • 高效的混合编码器旨在通过解耦尺度内相互作用和跨尺度融合来快速处理多尺度特征,以提高速度。
  • 然后,提出不确定性最小查询选择,为解码器提供高质量的初始查询,从而提高精度;

1. YOLO存在的问题

img

  • 非极大值抑制NMS的执行时间主要取决于检测框数和两个阈值。
  • 随着置信度阈值的增加,更多的预测框被过滤掉,需要计算IoU的剩余框数减少,从而减少了NMS的执行时间。
  • 另一个观察结果是,无锚探测器的性能优于基于锚的探测器,其精度与YOLO探测器相当,因为前者比后者需要更少的NMS时间。

2. RT-DETR介绍

2.1. 概述

img

  • 主干 {S3,S4,S5} 最后三级的特征被输送到编码器中。
  • 高效的混合编码器通过尺度内特征交互AIFI跨尺度特征融合CCFF,将多尺度特征转化为一系列图像特征。
  • 随后,采用不确定性最小查询选择来选择固定数量的编码器特征作为解码器的初始对象查询。
  • 最后,带有辅助检测头的解码器迭代优化对象查询以生成类别和框。

2.2. 高效混合编码器

img

  • 编码器占 GFLOP 的 49%,但在可变形 DETR 中仅贡献 11% 的 AP。需要优化的编码器设计。
  • A:DINO-Deformable-R50具有更小尺寸的数据编码器和更轻的解码器。
  • A → B:变体 B 将单尺度 Transformer 编码器插入 A,该编码器使用一层 Transformer 模块。多尺度要素共享编码器以进行尺度内特征交互,然后连接作为输出。
  • B → C:变体 C 引入了基于 B 的跨尺度特征融合,并将串联的特征输送到多尺度 Transformer 编码器中,以同时执行尺度内和跨尺度特征交互。
  • C → D:变体 D 通过前者使用单尺度 Transformer 编码器和后者使用 PANet 式结构,将尺度内相互作用和跨尺度融合解耦。

D → E:变体 E 采用了作者设计的高效混合编码器,增强了基于 D 的尺度内交互和跨尺度融合。

  • 提出了基于注意力的尺度内特征交互(AIFI)和基于CNN的跨尺度特征融合(CCFF)2个组成部分

2.2.1. AIFI尺度内特征交互

具体而言,AIFI通过仅在S5上与单尺度Transformer编码器执行尺度内交互,进一步降低了基于变体D的计算成本。

  • 在 S5 上使用 D 不仅可以显著降低延迟(提高 35%),还可以提高准确性(AP 提高 0.4%)。

2.2.2. CCFF跨尺度特征融合

img

  • 融合块的作用是将两个相邻的尺度特征融合成一个新特征,如上所述。
  • 使用两个 1 × 1 卷积来调整通道数,使用 N 个由 RepConv (RepVGG) 组成的 RepBlock 进行特征融合,并通过逐元加法融合双路径输出。
  • 混合编码器的配方如下:

img

2.3. 不确定性最小查询选择

  • 基于DETR的先前工作使用置信度分数来选择查询的前K个特征,这导致所选特征具有相当大的不确定性,导致解码器的初始化次优。

特征不确定性 U 定义为定位 P 与分类 C 的预测分布之间的差异,并添加到损失函数中。

img

img

  • 紫色和绿色点分别表示使用不确定性最小查询选择和普通查询选择训练的模型中的选定特征。

紫色的点集中在图的右上角,而绿色的点集中在右下角。这表明不确定性最小查询选择会产生更高质量的编码器特征。

2.4. 缩放的RT-DETR

  • 具体来说,对于混合编码器,宽度通过调整嵌入尺寸和通道数来控制,深度通过调整 Transformer 层数和 RepBlock 来控制。
  • 解码器的宽度和深度可以通过操作对象查询和解码器层的数量来控制。
  • 此外,RT-DETR的速度支持通过调整解码器层数进行灵活调整。

3. 实验结果

3.1. SOTA比较

img

  • 与YOLOv5-L / PP-YOLOE-L / YOLOv6-L相比,RT-DETR-R50将精度提高了4.1%/1.7%/0.3% AP,FPS提高了100.0%/14.9%/9.1%,参数数量减少了8.7%/19.2%/28.8%。
  • 与YOLOv5-X / PP-YOLOE-X相比,RT-DETR-R101的准确率提高了3.6%/2.0%,FPS提高了72.1%/23.3%,参数数量减少了11.6%/22.4%。
  • 与YOLOv7-L / YOLOv8-L相比,RT-DETR-R50将准确度提高了1.9%/0.2% AP,并将FPS提高了96.4%/52.1%。
  • 与YOLOv7-X / YOLOv8-X相比,RT-DETR-R101将准确度提高了1.4%/0.4% AP,并将FPS提高了64.4%/48.0%。

这表明所提出的RT-DETR实现了最先进的实时检测性能。

  • 与 DINO-Deformable-DETR-R50 相比,RT-DETR-R50 将精度提高了 2.2% AP,将速度提高了 21 倍(108 FPS 对 5 FPS),两者都得到了显着提高。

RT-DETR 在速度和精度方面都优于所有具有相同主干的 DETRs。

3.2. 消融研究

编码器变体

img

所提出的混合编码器在速度和精度之间实现了更好的权衡。

img

  • 通过不确定性最小查询选择选择的编码器特征不仅增加了高分类分数的比例(0.82% vs 0.35%),而且提供了更高质量的特征(0.67% vs 0.30%)。

不确定性最小查询选择实现了 0.8% AP 的改进(48.7% AP vs 47.9% AP)。

img

RT-DETR支持灵活的速度微调,无需重新训练即可调整解码器层数,从而提高其实用性。


关注文末名片G-Z-H:【阿旭算法与机器学习】,发送【开源】可获取更多学习资源

在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

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

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

相关文章

基于STM32F103C8T6的同步电机驱动-电流环PI与力矩模式

基于STM32F103C8T6的同步电机驱动-电流环PI与力矩模式 本系列文章: 基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现基于STM32F103C8T6的同步电机驱动-ADC采样与基于MT6701的角度获取基于STM32F103C8T6的…

JavaScript中的解构赋值:用途与优势

文章目录 JavaScript中的解构赋值:用途与优势一、简化数组和对象数据的访问数组解构对象解构 二、函数返回多个值三、与扩展运算符结合使用数组扩展对象扩展 四、默认值五、嵌套解构总结 JavaScript中的解构赋值:用途与优势 在JavaScript中,…

linux cpuspeed工具

cpuspeed 是一个用于管理和监控 CPU 频率的工具,主要用于基于 Linux 的系统。它可以帮助用户根据系统的负载自动调整 CPU 频率,以节省电能或提高性能。 以下是一些常见的 cpuspeed 用法及其配置示例: 安装 cpuspeed 在某些 Linux 发行版上…

免杀笔记 ----> DLL注入

这段时间我们暂时没什么事情干的话我们就继续更新我们的免杀笔记力!!! :今天我们讲DLL注入 目录 1.DLL注入 2.直接加载DLL? 3.远程线程注入 获取Handle 远程申请内存空间 将我们的CS的DLL加载入内存 创建远程线…

02:C语言数据类型

C语言数据类型 1、整型变量2、浮点型变量3、字符型变量4、有符号数和无符号数 1、整型变量 #include <stdio.h>int main(void) { /* int a; //定义一个整型变量aint b; //定义一个整型变量bint c; //定义一个整型变量c */ /* int a,b,c; //也可以这样定义a 25;b 6; *…

Linux 服务器环境搭建

一、安装 JDK 官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads # 创建目录 mkdir /usr/local/java/# 解压 tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/local/java/# 配置环境变量 vim /etc/profileexport export JAVA_HOME/usr/local/java/…

【Linux】进程信号_4

文章目录 八、进程信号3. 信号的处理4. 可重入函数5. volatile 未完待续 八、进程信号 3. 信号的处理 当某个信号的处理函数被调用时&#xff0c;操作系统会自动将当前信号假如进程的信号屏蔽字当中。如果处理完该信号&#xff0c;该信号同样也会自动从信号屏蔽字中 移除。该…

马尔科夫假设

马尔科夫假设 马尔科夫假设&#xff08;Markov Assumption&#xff09;&#xff0c;也称为无记忆假设&#xff0c;它假设在给定当前状态的情况下&#xff0c;未来的状态只依赖于当前状态&#xff0c;而与过去的状态序列无关。在强化学习中&#xff0c;如果这个假设不成立&…

Apache Seata core 模块源码分析

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 一 . 导读 core 模块定义了事务的类型、状态&#xff0c;通用的行为&#xff0c;client 和 s…

毕业季有感

本文介绍一些刚毕业、即将入职前的随想与心得。 毕业和上班无缝衔接。要离开北京了&#xff0c;来到天津。 我一向很喜欢探索新环境&#xff0c;每一次要到新的学校、新的城市、新的单位都会很激动&#xff1b;这一次也是一样&#xff0c;在一开始几乎只有对新环境的憧憬。但是…

zoom缩放问题(关于ElementPlus、Echarts、Vue3draggable等组件偏移问题)

做了一个项目下来&#xff0c;由于整体界面偏大&#xff0c;采取了缩放90%&#xff0c;导致很多组件出现偏移问题&#xff0c;以下我会把我遇到的各种组件偏移问题依次进行描述解答&#xff1a; ElementPlus选择器下拉偏移 <template><el-select :teleported"f…

7.6第三天作业

一、在数据库中创建一个表student&#xff0c;用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); &#xff08;1.&#xff09;先创建一个数据库 &#xff08;2.&#xff09;创建student表 查看是否创建成功 1、向studen…

http读书笔记

持久化 HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接&#xff08;HTTP Persistent Connections&#xff0c; 也称为 HTTP keep-alive 或 HTTP connection reuse&#xff09; 的方法。 持久连接的特点是&#xff0c; 只要任意一端 没有明确提出断开连接&#xff0c; 则保持 T…

MySQL第三天作业

一、在数据库中创建一个表student&#xff0c;用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录 记录中id字段的值为1&#xff0c;name字段的值为"monkey"…

【Linux】查找命令——which,type,find,whereis,locate

命令与文件的查找 文件的查找可就厉害了&#xff0c;因为我们常常需要知道哪个文件放在哪里&#xff0c;才能够对该文件进行一些修改或维护等操作。 有时候某些软件配置文件的文件名是不变的&#xff0c;但是各Linux发行版放置的目录则不同。 此时就要利用一些查找命令将该配…

【linux/shell】shell中实现函数重载

在 shell 脚本中&#xff0c;函数重载&#xff08;Function Overloading&#xff09;的概念与一些编程语言&#xff08;如 Java 或 C#&#xff09;中的函数重载不同。在这些编程语言中&#xff0c;你可以定义多个同名函数&#xff0c;只要它们的参数列表不同。然而&#xff0c;…

C语言基础全解:细说每个知识点

目录 1. 进制转换方法 1.1 二进制转十进制 1.2 十进制转二进制 1.3 二进制转八进制 1.4 二进制转十六进制 1.5 八进制转二进制 1.6 十六进制转二进制 2. 进制简介 特别注意 C语言基础元素概览 1. 关键字分类 1.1 存储类型关键字 1.2 数据类型关键字 1.3 构造类型…

25.【C语言】循环结构之for 上

1.基本使用 类比while 在while循环中&#xff0c;有三个不可或缺的部分&#xff1a;初始化&#xff0c;判断部分&#xff0c;调整部分 int i 0;//初始化 while (i < 10)//判断部分 {……i;//调整部分 }三个部分太分散&#xff0c;用for循环可集为一体&#xff0c;简洁 …

使用shell脚本实现DM8开机自动启动

编写shell脚本 #!/bin/bashsu -dmdba >>EOF cd /home/dmdba/dmdbms/bin ./DmServiceDMTEST start echo "dm start ... " EOF注意&#xff1a;DmServiceDMTEST每个服务器设置的不一样&#xff0c;根据实际进行更换 授权脚本可执行权限 chmod -x /dmdata/dmse…

Kotlin中的关键字

Kotlin 中的关键字可分为几个大类&#xff1a; 声明/定义关键字&#xff1a; class&#xff1a;用于定义类interface&#xff1a;用于定义接口object&#xff1a;用于声明对象&#xff0c;Kotlin中实现单例模式的关键字fun&#xff1a;用于声明函数var&#xff1a;用于声明可变…