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

相关文章

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输