论文地址:https://arxiv.org/abs/2304.08069
代码地址:https://github.com/PaddlePaddle/PaddleDetection
中文翻译:https://blog.csdn.net/weixin_43694096/article/details/131353118
这篇博文将介绍百度的RT-DETR
,首先让我们来看一下RT-DETR
的论文标题,它声称“在实时目标检测领域打败YOLO”。尽管从数据的角度来看,RT-DETR
似乎确实在某些方面超越了YOLO
,但与经过时间考验的YOLO
相比,仍有许多需要进一步研究和探索的地方。当然,在当前Transformer
技术如此火热的今天,RT-DETR
绝对是是一个非常引人注目的方向。接下来,我们将深入探讨RT-DETR
。
与最新的YOLOv8
算法相比,RT-DETR
在训练时间方面要求更少,大约只需要进行
75
75
75 到
80
80
80 轮训练(而YOLOv8
通常需要进行
300
300
300 到
400
400
400 轮训练)。此外,RT-DETR
对数据增强的依赖较小。在相同的测试条件下,RT-DETR
表现更出色,具有更好的性能和平衡,而且速度也与YOLO
相当。
虽然YOLO
检测器在目标检测中表现出色,但它面临一个重要问题,就是需要使用NMS
(非极大值抑制)来处理多个重叠的检测框,这会导致速度延迟并且难以进行有效的优化。
为了克服这个问题,研究人员将目光转向了DETR(DEtection TRansformer)
,这是一种基于Transformer
架构的端到端目标检测器。与YOLO
不同,DETR
无需NMS
后处理,它可以直接在网络中完成整个目标检测过程。
然而,虽然DETR
在消除NMS
的需求方面具有优势,但与YOLO
系列检测器相比,它的处理速度明显较慢。这意味着尽管不需要NMS
,但在速度方面并没有表现出明显的优势。因此,这个问题促使研究人员寻找一种方法,设计一个实时的端到端目标检测器,以克服NMS
对速度的延迟影响。
由此,百度正式推出了——RT-DETR (Real-Time DEtection TRansformer) ,一种基于 DETR
架构的实时端到端检测器,其在速度和精度上取得了 SOTA
性能。
每次提到DETR
,我们不得不说到NMS
,NMS
是目标检测领域的一项重要后处理技术,旨在解决检测器生成的存在重叠的多个检测框的问题。该技术的核心包括两个关键超参数:置信度阈值和IoU
(交并比)阈值。
首先,NMS
会将置信度低于设定置信度阈值的检测框直接过滤掉,即将那些置信度不高的框排除。接着,对于那些交并比(IoU)
大于设定IoU
阈值的检测框,NMS
会保留其中置信度较高的框,而将置信度较低的框排除。这一过程将不断迭代执行,直到对所有目标类别的检测框都进行了处理。
NMS
算法的执行时间主要受两个因素影响,即预测框的数量和上述两个阈值的设定。为了详细研究这一影响,作者使用了YOLOv5
(基于锚点的方法)和YOLOv8
(无锚点方法)进行了实验,考察了不同置信度阈值下保留的检测框数量,以及在不同超参数组合下检测器在COCO
验证集上的性能和NMS
的执行时间。
实验结果表明,NMS
不仅会减慢检测器的推理速度,还需要仔细选择合适的超参数才能实现最佳性能。这一实验结果强调了设计实时端到端目标检测器的重要性,以克服NMS
引入的性能瓶颈和不足之处。
为了验证这一观点,我们利用YOLOv5(基于锚点)和YOLOv8(无锚点)进行实验。我们首先统计在相同输入图像下,通过不同的分数阈值对输出框进行过滤后剩余的预测框数量。我们从0.001到0.25之间随机选择一些分数作为阈值,统计两个检测器的剩余预测框并绘制成直方图,直观地反映了NMS对其超参数的敏感性,如图2所示。
此外,我们以YOLOv8为例,评估了该模型在COCO val2017数据集上的准确率,并在不同的NMS超参数下测试了NMS操作的执行时间。需要注意的是,我们在实验中采用的NMS后处理操作是指TensorRT efficientNMSPlugin,其中包含多个CUDA内核,包括EfficientNMSFilter、RadixSort、EfficientNMS等,我们只报告EfficientNMS内核的执行时间。我们在T4 GPU上进行速度测试,上述实验中的输入图像和预处理保持一致。我们使用的超参数及相应结果如表1所示。
接下来,我们来介绍一下RT-DETR
的结构。从结构上来看,RT-DETR
可以分为三部分:主干网络、颈部网络以及头部网络。下面分别来说一下这三部分。
对于 backbone
部分,采用了经典的 ResNet
和可缩放的 HGNetv2
两种,两种 backbone
各训练了两个版本 ,以 HGNetv2
为 backbone
的 RT-DETR
包括 L
和 X
版本,以 ResNet
为 backbone
的 RT-DETR
则包括 RT-DETR-R50
和 RT-DETR-R101
。 RT-DETR-R50 / 101
做主干是方便和现有的DETR
变体进行对比,而 RT-DETR-HGNet-L / X
则用来和现有的实时检测器进行对比,值得注意的是,HGNetv2
是由百度自家研发的主干结构。
与YOLO
相似的地方在于,RT-DETR
最终会输出三种不同尺寸的特征图,它们相对于输入图像的分辨率下采样倍数分别是
8
8
8 倍、
16
16
16 倍和
32
32
32 倍。这与主流的YOLO
算法相似。除此之外,在主干结构的其他方面,RT-DETR
并没有特别的地方。
对于颈部网络部分,RT-DETR
采用了一层 Transformer
的 Encoder
,文中这个颈部网络叫做 Efficient Hybrid Encoder
,其包括两部分:Attention-based Intra-scale Feature Interaction (AIFI)
和 CNN-based Cross-scale Feature-fusion Module (CCFM)
,这个AIFI
模块有一点值得注意,这个模块只对S5
特征图进行处理,
对于AIFI
模块,它首先将二维的 S5
特征拉成向量,然后交给AIFI
模块处理,其数学过程就是多头自注意力与 FFN
,随后,再将输出Reshape
回二维,记作 F5
,以便去完成后续的所谓的“跨尺度特征融合”。
对于CCFM
模块,以YOLO
的角度看这个结构的话,这个CCFM
模块就是一个FPN/PAN
结构。关于CCFM
模块中的Fusion
文中也给了详细的结构图,是由
2
2
2 个
1
×
1
1×1
1×1 卷积和
N
N
N个 RepBlock
构成的,这里之所以写成
N
N
N ,我觉得是因为 RT-DETR
可以进行缩放处理,通过调整 CCFM
中RepBlock
的数量和 Encoder
的编码维度分别控制 Hybrid Encoder
的深度和宽度,同时对 backbone
进行相应的调整即可实现检测器的缩放。
之所以RT-DETR
的AIFI
只处理最后的S5
特征,文中解释是出于两点考虑:
DETR
模型,如Deformable DETR
,通常会将来自多个尺度的特征图拉平成一个非常长的向量,这样做可以使不同尺度之间的特征相互交互,但会导致巨大的计算量和计算时间。RT-DETR
认为这是当前DETR
模型速度较慢的主要原因之一。RT-DETR
认为S5
特征相对于较浅的S3
和S4
特征来说,具有更深、更高级和更丰富的语义特征。这些语义特征对于Transformer
模型更加重要,因为它们对于区分不同物体的特征非常有用,而浅层特征由于缺乏良好的语义特征并不是很丰富。综上,RT-DETR
的作者团队认为将编码器仅应用于S5
特征图,而不是所有尺度的特征图,有助于显著减少计算量和提高计算速度,同时不会对模型的性能造成很明显的损害。
关于这个设想,作者也是做了详细的实验,
计算瓶颈分析。为了加快训练收敛速度并改善性能,Zhu等人 [43] 建议引入多尺度特征并提出了可变形注意力机制来减少计算量。然而,尽管注意力机制的改进减少了计算开销,但输入序列的大幅增加仍导致编码器成为计算瓶颈,阻碍了DETR的实时实现。正如[17]中报告的那样,编码器占据了GFLOPs的49%,但仅贡献了Deformable-DETR [43]中11%的AP。为了克服这一障碍,我们分析了多尺度变换器编码器中存在的计算冗余,并设计了一系列变种来证明同时进行内部尺度和跨尺度特征交互在计算上效率低下。
从低级特征中提取出高级特征,这些特征包含了图像中物体的丰富语义信息。直观上讲,在连接多尺度特征上进行特征交互是多余的。为了验证这一观点,我们重新思考了编码器的结构,并设计了一系列具有不同编码器的变种,如图5所示。这些变种逐步提高了模型的准确性,同时通过将多尺度特征交互分解为内部尺度交互和跨尺度融合的两步操作,显著降低了计算成本(详细指标参见表3)。我们首先将DINO-R50 [40]中的多尺度变换器编码器作为基准A进行移除。然后,插入不同形式的编码器,基于基准A产生一系列变种,具体如下所述:
A → B:变体B插入了一个单尺度的Transformer编码器,它使用了一个Transformer块的层。每个尺度的特征共享编码器,进行内部尺度的特征交互,然后将输出的多尺度特征进行连接。
B → C:变体C在B的基础上引入了基于尺度的特征融合,将连接的多尺度特征输入编码器进行特征交互。
C → D:变体D将多尺度特征的内部尺度交互和跨尺度融合解耦。首先,使用单尺度的Transformer编码器进行内部尺度交互,然后利用类似于PANet [21]的结构进行跨尺度融合。
D → E:变体E在D的基础上进一步优化多尺度特征的内部尺度交互和跨尺度融合,采用了我们设计的高效混合编码器。
对于数据增强和训练策略部分,RT-DETR
的数据增强采用的是基础的随机颜色抖动、随机翻转、裁剪和 Resize
,并且在验证和推理时图像的输入尺寸统一为
640
640
640 ,与 DETR
系列的处理方式有较大的不同,主要是为了满足实时性的要求。RT-DETR
的训练策略则是和 DETR
系列基本相同,优化器同样采用 AdamW
,默认在 COCO train2017
上训练 6x
,即
72
72
72 个 epoch
。
为了进一步提高 RT-DETR
的精度,作者又将目光移向了 DETR
架构的另外两个关键组件:Query Selection
和 Decoder
Query Selection
的作用是从 Encoder
输出的特征序列中选择固定数量的特征作为 object queries
,其经过 Decoder
后由预测头映射为置信度和边界框。现有的 DETR
变体都是利用这些特征的分类分数直接选择 Top-K
特征。然而,由于分类分数和 IoU
分数的分布存在不一致,分类得分高的预测框并不一定是和 GT
最接近的框,这导致高分类分数低 IoU
的框会被选中,而低分类分数高 IoU
的框会被丢弃,这将会损害检测器的性能。
为解决这一问题,作者提出了 IoU-aware Query Selection
,通过在训练期间约束检测器对高 IoU
的特征产生高分类分数,对低 IoU
的特征产生低分类分数。从而使得模型根据分类分数选择的 Top-K
特征对应的预测框同时具有高分类分数和高 IoU
分数。
其中, y ? y? y?和 y y y分别表示预测和真实值, y ? y? y? = { ? c ?c ?c, ? b ?b ?b} 和 y = c , b y = {c, b} y=c,b, c c c 和 b b b 分别表示类别和边界框。我们将 IoU 分数引入到分类分支的目标函数中(类似于VFL),以实现对正样本的分类和定位的一致性约束。
文中通过可视化这些编码器特征的置信度分数以及与GT
之间的IoU
分数后发现,IoU-aware Query Selection
(蓝色点)明显提高了被选中特征的质量(集中于右上角)。
对于 Decoder
,作者并没有对其结构进行调整,论文中说目的是为了方便使用高精度的 DETR
的大检测模型对轻量级 DETR
检测器进行蒸馏。
数据集:我们在Microsoft COCO
数据集上进行了大量实验,以验证所提出的检测器。在消融研究中,我们在COCO train2017
上进行训练,并在COCO val2017
数据集上进行验证。我们使用标准的COCO AP
指标,使用单尺度图像作为输入。
实现细节:我们使用ResNet
和HGNetv2
系列在ImageNet
上进行预训练的模型作为我们的骨干网络,这些模型来自于PaddleClas2
。AIFI
包括
1
1
1个Transformer
层,CCMF
中的融合块默认由
3
3
3个RepBlocks
组成。在IoU-aware query selection
中,我们选择前
300
300
300 个编码器特征来初始化解码器的物体查询。解码器的训练策略和超参数几乎遵循DINO
的设置。我们使用AdamW
优化器进行训练,基本学习率为0.0001
,权重衰减为0.0001
,全局梯度剪裁范数为0.0001
,线性预热步数为2000
。骨干网络的学习率设置遵循[4]的方式。我们还使用指数移动平均(EMA),衰减率为0.9999
。如果不特别指定,1×
配置意味着总共训练
12
12
12个epoch
。最终报告的结果使用6×
配置。数据增强包括随机的{颜色扭曲、扩展、裁剪、翻转、调整大小}操作,参考了[36]的设置。
表2将我们提出的RT-DETR
与其他实时端到端目标检测器进行了比较。我们提出的RT-DETR-L
实现了53.0%
的AP
和114帧/秒
,而RT-DETR-X
实现了54.8%
的AP
和74帧/秒
,在速度和准确性方面都优于同等规模的YOLO检测器。此外,我们提出的RT-DETR-R50
实现了53.1%
的AP
和108帧/秒
,而RT-DETR-R101
实现了54.3%
的AP
和74帧/秒
,在速度和准确性方面都优于同等主干网络的最先进端到端检测器。
与实时检测器相比。为了公平比较,在端到端设置中(速度测试方法参见第3.2节),我们将缩放的RT-DETR
的速度和准确性与当前的实时检测器进行比较。在表2中,我们将缩放的RT-DETR
与YOLOv5 [10]、PP-YOLOE [36]、YOLOv6v3.0 [14]、YOLOv7 [33]和YOLOv8 [11]
进行了比较。与YOLOv5-L / PP-YOLOE-L / YOLOv7-L
相比,RT-DETR-L
显著提高了准确性,提高了4.0% / 1.6% / 1.8%的AP
,增加了111.1% / 21.3% / 107.3%
的FPS
,并减少了30.4% / 38.5% / 11.1%
的参数数量。与YOLOv5-X / PP-YOLOE-X / YOLOv7-X
相比,RT-DETR-X
提高了4.1% / 2.5% / 1.9%
的准确性,增加了72.1% / 23.3% / 64.4%
的FPS
,并减少了22.1% / 31.6% / 5.6%
的参数数量。与YOLOv6-L / YOLOv8-L
相比,RT-DETR-L
在准确性上提高了0.2% / 0.1%
的AP
,速度提高了15.2% / 60.6%
,参数数量减少了45.8% / 25.6%
。与YOLOv8-X
相比,RT-DETR-X
在准确性上提高了0.9%
的AP
,速度提高了48.0%
的FPS
,并减少了1.5%
的参数数量。
与端到端检测器相比。表2显示,RT-DETR
在所有使用相同主干网络的端到端检测器中实现了最先进的性能。与DINO-Deformable-DETR-R50 [40]
相比,RT-DETR-R50
显著提高了准确性,提高了2.2%
的AP(53.1% AP对比50.9% AP)
,速度提高了21
倍(108 FPS对比5 FPS)
,并减少了10.6%
的参数数量。与SMCA-DETR-R101 [6]
相比,RT-DETR-R101
显著提高了8.0%
的AP
准确性。
表3:将多尺度特征融合拆分为内尺度交互和跨尺度融合的两步操作的分析实验结果。
为了验证我们关于编码器的分析的正确性以及提出的混合编码器的有效性,我们评估了在 T4 ``GPU
上设计的一组变体的指标,包括AP
、参数数量和延迟。实验结果如表3所示。
B
变体相比A
变体提高了1.9%
的AP
,同时参数数量增加了3%
,延迟增加了54%
。这证明了尺度内特征交互的重要性,但原始的Transformer
编码器的计算代价很高。
C
变体相比B
变体提高了0.7%
的AP
,参数数量保持不变,但延迟增加了20%
。这表明跨尺度特征融合也是必要的。
D
变体相比C
变体提高了0.8%
的AP
,参数数量增加了9%
,但延迟减少了8%
。这表明解耦尺度内交互和跨尺度融合可以在提高准确性的同时减少计算量。
与原始的D
变体相比,DS5
减少了35%
的延迟,同时提高了0.4%
的AP
。这证明了较低级别特征的尺度内交互是不必要的。
最后,我们提出的混合编码器所配备的E变体相比D变体提高了1.5%
的AP
。尽管参数数量增加了20%
,但延迟减少了24%
,使编码器在计算上更高效。
我们对IoU
感知的查询选择进行了割除研究,并在4中展示了定量实验结果。我们采用的查询选择根据分类得分选择前K
个(K = 300
)编码器特征作为内容查询,并将对应的边界框作为初始位置查询。我们比较了两种查询选择在val2017
上选择的编码器特征,并计算了分类得分大于0.5
和同时得分大于0.5
的比例,分别对应于“Propcls”
和“Propboth”
列。结果表明,通过IoU
感知的查询选择所选择的编码器特征不仅增加了高分类得分的比例(0.82%
对比0.35%
),而且提供了更多具有高分类得分和高IoU
得分的特征(0.67%
对比0.30%
)。我们还在val2017
上评估了使用两种类型的查询选择训练的检测器的准确性,其中IoU
感知的查询选择实现了0.8%
的AP
改进(48.7% AP
对比47.9% AP
)。
表4:IoU
感知查询选择消融研究结果。Propcls
和Propboth
分别表示分类得分大于0.5
和两个得分都大于0.5
的比例。
表5:解码器的消融研究结果。ID
表示解码器层的索引,AP
表示不同解码器层所获得的模型准确性。Detk
表示具有k
个解码器层的检测器。结果基于使用6×
调度设置的RT-DETR-R50
报告。
表5显示了RT-DETR
在不同解码器层数下的准确性和速度。当解码器层数为6时,检测器实现了最佳的53.1% AP
准确性。我们还分析了每个解码器层对推理速度的影响,并得出结论每个解码器层的消耗约为0.5
毫秒。此外,我们发现解码器相邻层之间的准确性差异随着解码器层索引的增加逐渐减小。以6
层解码器为例,仅使用5
层进行推理在准确性上仅损失0.1% AP
(53.1% AP
对比53.0% AP
),同时将延迟降低了0.5
毫秒(9.3
毫秒对比8.8
毫秒)。因此,RT-DETR
通过使用不同的解码器层支持推理速度的灵活调整,无需重新训练推理,从而便于实时检测器的实际应用。
在这篇博客中,我们只是轻触了 RT-DETR
的表面,讨论了其核心原理和潜在应用,更多的细节还是要通过代码去挖掘~
感谢阅读本文,我是迪菲赫尔曼,如果您觉得有所收获,请点赞和关注,获取有关深度学习和计算机视觉的更多更新。如果您有任何问题或建议,请随时留言,让我们一起探索深度学习的奇妙世界。
如果您对改进 YOLO 有兴趣,欢迎关注我的专栏 !