DETRs Beat YOLOs on Real-time Object Detection论文详解

2023-12-29 17:50

本文主要是介绍DETRs Beat YOLOs on Real-time Object Detection论文详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文题目:DETRs Beat YOLOs on Real-time Object Detection

论文地址:https://arxiv.org/abs/2304.08069

论文代码:mirrors / facebookresearch / ConvNeXt · GitCode

等我毕业再打败吧,别打败YOLO,广大研究生们不同意

1. 摘要

        最近,基于端到端Transformer的检测器(DETRs)已经取得了显著的性能。然而,DETRs的高计算成本问题尚未得到有效解决,限制了它们的实际应用,并阻止它们充分利用无后处理的优点,例如非最大值抑制(NMS)。本文首先分析了现代实时目标检测器中NMS对推理速度的影响,并建立了一个端到端速度基准。为避免NMS引起的推理延迟,我们提出了Real-Time DEtection TRansformer(RT-DETR),这是我们所知道的第一个实时端到端物体检测器。具体来说,我们设计了一个高效的混合编码器,通过解耦内部尺度交互和跨尺度融合来高效处理多尺度特征,并提出了IoU感知的查询选择来改善物体查询的初始化。此外,我们提出的检测器支持通过使用不同的解码器层来灵活调整推理速度,无需重新训练,这有助于实时目标检测器的实际应用。我们的RT-DETR-L在COCO val2017上达到了53.0%的AP和在T4 GPU上达到了114 FPS,RT-DETR-X达到了54.8%的AP和74 FPS,在速度和准确性方面都优于相同规模的所有YOLO检测器。此外,我们的RT-DETR-R50在准确性方面比DINO-Deformable-DETR-R50提高了2.2%的AP,在FPS方面约高出21倍。

2. 主要贡献

本文的主要贡献总结如下:

(1) 我们提出了第一个实时端到端目标检测器,不仅在准确性和速度方面优于当前最先进的实时检测器,而且不需要后处理,因此它的推理速度不会延迟并保持稳定

(2) 我们详细分析了NMS对实时检测器的影响,并从后处理的角度得出了关于基于CNN的实时检测器的结论

(3) 我们提出的IoU感知的查询选择在我们的模型中显示出优秀的性能改进,为改进目标查询的初始化方案提供了新思路

(4) 我们的工作为端到端检测器的实时实现提供了可行的解决方案,所提出的检测器可以通过使用不同的解码器层灵活调整模型大小和推理速度,无需重新训练

3. 相关工作

3.1 实时目标检测器
       经过多年的持续发展,YOLO系列已经成为实时目标检测器的代名词,可以大致分为两类:基于锚点的和无锚点的。从这些检测器的性能来看,锚点不再是限制YOLO发展的主要因素。然而,上述检测器产生了大量冗余的边界框,需要在后处理阶段利用NMS进行过滤。不幸的是,这导致了性能瓶颈,而NMS的超参数对检测器的准确性和速度有重要影响。我们认为这与实时目标检测器的设计理念不相容。

3.2 端对端目标检测器
       端到端目标检测器以其简化的流程而闻名。DETR消除了传统检测流程中手动设计的锚点和NMS组件。相反,它采用二分图匹配并直接预测一对一的对象集。通过采用这种策略,DETR简化了检测流程并减轻了NMS导致的性能瓶颈。尽管DETR具有明显的优点,但它存在两个主要问题:训练收敛速度慢和难以优化的查询。许多DETR变体已被提出来解决这些问题。具体而言,Deformable-DETR 通过增强注意机制的效率来加速多尺度特征的训练收敛。Conditional DETR 和Anchor DETR 降低了查询的优化难度。DAB-DETR 引入了4D参考点,并逐层迭代地优化预测框。DN-DETR 通过引入查询去噪来加速训练收敛。DINO 在以前的工作基础上进行了改进,并实现了最先进的结果。尽管我们不断改进DETR的组件,但我们的目标不仅是进一步提高模型的性能,而且是创建一个实时的端到端目标检测器。

3.3 目标检测的多尺度特征
       现代目标检测器已经证明了利用多尺度特征来提高性能的重要性,特别是对于小物体。FPN 引入了一个特征金字塔网络,它融合了相邻尺度的特征。随后的工作扩展和增强了这个结构,并被广泛应用于实时目标检测器中。虽然可变形注意机制在一定程度上缓解了计算成本,但多尺度特征的融合仍会导致高计算负担。为了解决这个问题,一些工作尝试设计计算效率高的DETR。Efficient DETR 通过使用密集先验来初始化对象查询,从而减少编码器和解码器层数。Sparse DETR 有选择性地更新编码器标记,以减少解码器的计算开销。Lite DETR 通过交错方式降低低层特征的更新频率,增强了编码器的效率。尽管这些研究已经降低了DETR的计算成本,但这些工作的目标并不是将DETR推广为实时检测器。

4. 实时的DETR

4.1 模型概述
       所提出的RT-DETR由一个骨干网络、一个混合编码器和一个带有辅助预测头的变换器解码器组成。模型架构的概述如图所示。

具体来说:

(1) 首先,利用Backbone的S3,S4,S5最后3个阶段的输出特征作为编码器的输入;

(2) 然后,混合编码器通过尺度内交互和跨尺度融合将多尺度特征转换为一系列图像特征(如第4.2节所述);

(3) 随后,采用IoU-Aware查询选择从编码器输出序列中选择固定数量的图像特征,作为解码器的初始目标查询;

(4) 最后,具有辅助预测头的解码器迭代地优化对象查询以生成框和置信度得分。

4.2 高效混合编码器
       (1)计算瓶颈分析。为了加速训练收敛和提高性能,朱等人[43]建议引入多尺度特征,并提出了可变形注意机制来减少计算量。然而,尽管注意机制的改进减少了计算开销,但输入序列长度的急剧增加仍使编码器成为计算瓶颈,阻碍了DETR的实时实现。如[17]中所报告的那样,编码器占Deformable-DETR[43]的49%的GFLOPs,但只贡献了11%的AP。为了克服这个障碍,我们分析了多尺度变换器编码器中存在的计算冗余,并设计了一组变体来证明内部尺度和跨尺度特征的同时交互在计算上效率低下。

        从包含关于图像中的对象的丰富语义信息的低级特征中提取高级特征。直观地说,对连接的多尺度特征进行特征交互是多余的。如图5所示,为了验证这一观点,作者重新思考编码器结构,并设计了一系列具有不同编码器的变体。

       该组变体通过将多尺度特征交互解耦为尺度内交互和跨尺度融合的两步操作,逐步提高模型精度,同时显著降低计算成本。首先删除了DINO-R50中的多尺度变换编码器作为基线A。接下来,插入不同形式的编码器,以产生基于基线A的一系列变体,具体如下:

• A → B: 变体B插入了一个单尺度变换器编码器,该编码器使用一个变换器块层。每个尺度的特征共享编码器进行内部尺度特征交互,然后将输出的多尺度特征进行级联。
• B → C: 变体C在B的基础上引入了跨尺度特征融合,将级联的多尺度特征馈送到编码器中进行特征交互。
• C → D: 变体D解耦了多尺度特征的内部尺度交互和跨尺度融合。首先,使用单尺度变换器编码器进行内部尺度交互,然后使用类似于PANet的结构进行跨尺度融合。

• D → E: 变体E在D的基础上进一步优化了多尺度特征的内部尺度交互和跨尺度融合,采用我们设计的高效混合编码器。

       (2) Hybrid design

       基于上述分析,作者重新思考了编码器的结构,并提出了一种新的高效混合编码器。如图3所示,所提出的编码器由两个模块组成,即基于注意力的尺度内特征交互(AIFI)模块和基于神经网络的跨尺度特征融合模块(CCFM)。AIFI进一步减少了基于变体D的计算冗余,变体D仅在S5上执行尺度内交互。作者认为,将自注意力操作应用于具有更丰富语义概念的高级特征可以捕捉图像中概念实体之间的联系,这有助于后续模块对图像中目标的检测和识别。同时,由于缺乏语义概念以及与高级特征的交互存在重复和混淆的风险,较低级别特征的尺度内交互是不必要的。为了验证这一观点,只对变体D中的S5进行了尺度内相互作用,实验结果见表3,见DS5行。与变体D相比,DS5显著降低了延迟(快35%),但提高了准确性(AP高0.4%)。这一结论对实时检测器的设计至关重要。

        CCFM也基于变体D进行了优化,在融合路径中插入了几个由卷积层组成的融合块。融合块的作用是将相邻的特征融合成一个新的特征,其结构如图4所示。融合块包含N个RepBlock,两个路径输出通过元素相加进行融合。
 

可以将这个过程表述如下:

Q= K = V = Flatten (S_{5}^{})

F_{5} = Reshape (Attn (Q,K,V) )

Output = CCFM ( {S_{3}S_{4}F_{5}} )

其中Attn表示多头自注意力,Reshape表示将特征的形状恢复到与S5相同的形状,这是Faltten的inverse操作。

4.3 IoU感知查询选择

       DETR中的对象查询是一组可学习的嵌入向量,它们由decoder优化,并由预测头映射到分类分数和边界框。DINO的对象查询是利用分类分数从encoder中选择前K个特征来初始化对象查询。然而,由于分类得分和位置置信度的分布不一致,一些预测框具有高分类得分,但不接近GT框,这导致选择了分类得分高、IoU得分低的框,而分类得分低、IoU分数高的框被丢弃。这会削弱检测器的性能。为了解决这个问题,本文提出了IoU感知查询选择,通过约束模型在训练期间为具有高IoU分数的特征产生高分类分数,并为具有低IoU得分的特征产生低分类分数。因此,与由根据分类得分的模型选择的前K个编码器特征相对应的预测框具有高分类得分和高IoU得分。本文将DETR的二分匹配重新表述如下:

{L}(\hat{y},y)​ =L{box} (\hat{b},b) + L{cls}(\hat{c},c,IoU)

        通过IoU感知查询选择,在COCO MAP有了显著提升。其中,\hat{y} 和 y 分别表示预测和真实值,c和b分别表示类别和边界框。我们将IoU分数引入到分类分支的目标函数中,以实现对正样本的分类和定位的一致性约束。

       具体来说,首先根据分类得分选择前K个(在实验中K=300)编码器特征,然后可视化分类得分大于0.5的散点图。红点和蓝点是根据分别应用普通查询选择和IoU感知查询选择训练的模型计算的。点越靠近图的右上角,对应特征的质量就越高,即分类标签和边界框更有可能描述图像中的真实对象。根据可视化结果发现最引人注目的特征是大量蓝色点集中在图的右上角,而红色点集中在右下角。这表明,使用IoU感知查询选择训练的模型可以产生更多高质量的编码器特征。

        此外,还定量分析了这两类点的分布特征。图中蓝色点比红色点多138%,即分类得分小于或等于0.5的红色点更多,这可以被视为低质量特征。然后,分析分类得分大于0.5的特征的IoU得分,发现IoU得分大于0.5时,蓝色点比红色点多120%。定量结果进一步表明,IoU感知查询选择可以为对象查询提供更多具有准确分类(高分类分数)和精确定位(高IoU分数)的编码器特征,从而提高检测器的准确性。
 

这篇关于DETRs Beat YOLOs on Real-time Object Detection论文详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550220

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-