Baidu 的 RT-DETR:基于视觉 Transformer 的实时目标检测器#
概述#
Real-Time Detection Transformer (RT-DETR) 由百度开发,是一个尖端的端到端目标检测器,在保持高准确率的同时提供实时性能。它基于 DETR(无 NMS 框架)的理念,同时引入了基于卷积的骨干网络和高效的混合编码器以获得实时速度。RT-DETR 通过解耦尺度内交互和跨尺度融合,高效处理多尺度特征。该模型高度适应,支持在不重新训练的情况下通过不同的解码器层灵活调整推理速度。RT-DETR 在带有 TensorRT 的 CUDA 等加速后端上表现出色,性能超越了许多其他实时目标检测器。
Watch: How to Use Baidu's RT-DETR for Object Detection | Inference and Benchmarking with Ultralytics 🚀
Baidu 的 RT-DETR 概览。 RT-DETR 模型架构图展示了骨干网络的最后三个阶段 {S3, S4, S5} 作为编码器的输入。高效的混合编码器通过尺度内特征交互(AIFI)和跨尺度特征融合模块(CCFM)将多尺度特征转换为图像特征序列。采用 IoU 感知查询选择来选择固定数量的图像特征,作为解码器的初始目标查询。最后,带有辅助预测头的解码器迭代优化目标查询以生成边界框和置信度得分(来源)。
主要特性#
- 高效混合编码器: Baidu 的 RT-DETR 使用高效的混合编码器,通过解耦尺度内交互和跨尺度融合来处理多尺度特征。这种独特的基于 Vision Transformer 的设计降低了计算成本,并实现了实时目标检测。
- IoU 感知查询选择: 百度的 RT-DETR 通过利用 IoU 感知查询选择改进了目标查询初始化。这使得模型能够专注于场景中最相关的目标,从而提高检测准确率。
- 可适应的推理速度: 百度的 RT-DETR 支持通过使用不同的解码器层灵活调整推理速度,而无需重新训练。这种适应性促进了其在各种实时目标检测场景中的实际应用。
- 无 NMS 框架: 基于 DETR,RT-DETR 消除了对非极大值抑制后处理的需求,简化了检测管道并可能提高效率。
- 无锚框检测: 作为一种无锚框检测器,RT-DETR 简化了检测过程,并可能改善对不同数据集的泛化能力。
预训练模型#
Ultralytics Python API 提供了不同规模的预训练 PaddlePaddle RT-DETR 模型:
- RT-DETR-L:在 COCO val2017 上达到 53.0% AP,在 T4 GPU 上达到 114 FPS
- RT-DETR-X:在 COCO val2017 上达到 54.8% AP,在 T4 GPU 上达到 74 FPS
此外,百度于 2024 年 7 月发布了 RTDETRv2,它在原始架构的基础上进一步提升了性能指标。
使用示例#
此示例提供了简单的 RT-DETR 训练和推理示例。有关这些和其他模式的完整文档,请参阅预测、训练、验证和导出文档页面。也可以通过Ultralytics Platform在云 GPU 上训练模型。
from ultralytics import RTDETR
# Load a COCO-pretrained RT-DETR-l model
model = RTDETR("rtdetr-l.pt")
# Display model information (optional)
model.info()
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the RT-DETR-l model on the 'bus.jpg' image
results = model("path/to/bus.jpg")RT-DETR 预训练权重支持两种推理时设置,无需重新训练即可降低延迟:
eval_idx:提前停止解码。对于默认的 6 层解码器,使用从零开始的索引(0–5)。eval_idx=5使用所有层;eval_idx=3使用 4 层。在配备 TensorRT v10.11 的 T4 GPU 上,RT-DETR-L 使用 4 层时性能从 8.0 毫秒 / 52.7 mAP 提升至 7.4 毫秒 / 52.5 mAP。num_queries:减少目标查询(默认:300)。在相同的设置下,将其降低到 100 可以在 COCO 上达到 7.4 毫秒 / 51.7 mAP。在每张图像目标较少的数据集上,mAP 下降通常较小,但请将该值保持在每张图像预期最大目标数之上。
这两种设置都可能降低 mAP — 在部署前请先在你的数据集上验证这种权衡。
from ultralytics import RTDETR
rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]
# Choose one or both settings after validating the speed/accuracy trade-off.
head.decoder.eval_idx = 3 # Use 4 of 6 decoder layers.
head.num_queries = 100 # Use fewer object queries.
results = rtdetr("path/to/image.jpg")
# Export uses the same decoder and query settings, including TensorRT exports.
rtdetr.export(format="engine", device=0, quantize=16)支持的任务和模式#
此表展示了模型类型、特定的预训练权重、每个模型支持的任务,以及支持的各种模式(训练、验证、预测、导出),由 ✅ 表情符号表示。
| 模型类型 | 预训练权重 | 支持的任务 | 训练 | 验证 | 推理 | 导出 |
|---|---|---|---|---|---|---|
| RT-DETR Large | rtdetr-l.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
| RT-DETR Extra-Large | rtdetr-x.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
rtdetr-resnet50.yaml 和 rtdetr-resnet101.yaml 仅作为 YAML 架构发布。Ultralytics 仅为 rtdetr-l 和 rtdetr-x 发布预训练权重。根据需要从 YAML 实例化 ResNet 变体(例如 RTDETR("rtdetr-resnet50.yaml"))并进行训练或微调。
理想使用场景#
RT-DETR 特别适合需要高准确率和实时性能的应用:
- 自动驾驶:用于速度和准确率都至关重要的自动驾驶系统中的可靠环境感知。了解有关自动驾驶汽车中人工智能的更多信息。
- 先进机器人技术:使机器人能够执行需要在动态环境中进行准确目标识别和交互的复杂任务。探索人工智能在机器人技术中的角色。
- 医学影像:用于医疗保健应用,其中目标检测的精度对于诊断可能至关重要。发现人工智能在医疗保健中的应用。
- 监控系统:用于需要实时监控且检测准确率高的安全应用。了解安全报警系统。
- 卫星图像分析:用于高分辨率图像的详细分析,其中全局上下文理解非常重要。阅读有关卫星图像中的计算机视觉的文章。
引用与致谢#
如果在你的研究或开发工作中使用 Baidu 的 RT-DETR,请引用原始论文:
@misc{lv2023detrs,
title={DETRs Beat YOLOs on Real-time Object Detection},
author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
year={2023},
eprint={2304.08069},
archivePrefix={arXiv},
primaryClass={cs.CV}
}对于 RTDETRv2,你可以引用2024 年论文:
@misc{lv2024rtdetrv2,
title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
year={2024},
eprint={2407.17140},
archivePrefix={arXiv},
primaryClass={cs.CV}
}我们要感谢百度和 PaddlePaddle 团队为计算机视觉社区创建和维护这一宝贵资源。他们通过开发基于 Vision Transformer 的实时目标检测器 RT-DETR 对该领域做出的贡献受之无愧。
常见问题解答#
Baidu 的 RT-DETR(Real-Time Detection Transformer)是一个基于 Vision Transformer 架构的高级实时目标检测器。它通过高效的混合编码器,通过解耦尺度内交互和跨尺度融合来高效处理多尺度特征。通过采用 IoU 感知查询选择,模型专注于最相关的目标,从而提高检测准确率。其通过在无需重新训练的情况下调整解码器层来实现适应性推理速度,使 RT-DETR 适用于各种实时目标检测场景。在 RT-DETR Arxiv 论文中了解有关 RT-DETR 功能的更多信息。
你可以利用 Ultralytics Python API 使用预训练的 PaddlePaddle RT-DETR 模型。例如,要加载一个在 COCO val2017 上预训练的 RT-DETR-l 模型并在 T4 GPU 上实现高 FPS,你可以使用以下示例:
示例from ultralytics import RTDETR # Load a COCO-pretrained RT-DETR-l model model = RTDETR("rtdetr-l.pt") # Display model information (optional) model.info() # Train the model on the COCO8 example dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # Run inference with the RT-DETR-l model on the 'bus.jpg' image results = model("path/to/bus.jpg")Baidu 的 RT-DETR 因其高效的混合编码器和 IoU 感知查询选择而脱颖而出,这些功能在保持高准确率的同时大幅降低了计算成本。它通过使用不同的解码器层在无需重新训练的情况下调整推理速度的独特能力增加了巨大的灵活性。这使其在需要在带有 TensorRT 的 CUDA 等加速后端上实现实时性能的应用中具有特别的优势,胜过许多其他实时目标检测器。与传统的基于 CNN 的检测器相比,Transformer 架构还提供了更好的全局上下文理解。
Baidu 的 RT-DETR 允许通过使用不同的解码器层灵活调整推理速度,而无需重新训练。这种适应性对于扩展各种实时目标检测任务的性能至关重要。无论你需要更快的处理速度来满足较低的精度需求,还是需要更慢、更精确的检测,RT-DETR 都可以进行定制以满足你的具体要求。在具有不同计算能力的设备之间部署模型时,此功能尤其有价值。
不能。对于 RT-DETR,
max_det限制了推理后返回的预测数量,但它不会增加解码器产生的目标查询数量。Ultralytics RT-DETR 预训练检查点使用 300 个目标查询,因此即使将max_det设置为更大的值,每张图像也不能返回超过 300 个检测结果。当你只需要较少的高置信度预测时,使用
max_det来减少返回的检测结果,例如max_det=100。如果你的数据集每张图像可能包含超过 300 个目标,请在模型 YAML 中训练一个具有更高解码器查询计数(nq)的自定义 RT-DETR 模型;训练后在预训练检查点上更改此值是不等效的,需要重新训练以学习额外的查询。