百度 RT-DETR:基于视觉 Transformer 的实时目标检测器#
概述#
百度研发的实时检测 Transformer(RT-DETR)是一款先进的端到端目标检测器,在实现实时性能的同时保持了较高的精度。它基于 DETR(无需 NMS 的框架),同时引入了基于卷积的骨干网络和高效的混合编码器,实现实时速度。RT-DETR 通过解耦尺度内交互和跨尺度融合,高效处理多尺度特征。该模型适应性很强,无需重新训练即可通过使用不同的解码器层灵活调整推理速度。RT-DETR 在 CUDA 搭配 TensorRT 等加速后端上表现出色,性能优于许多其他实时目标检测器。
观看: 如何使用百度 RT-DETR 进行目标检测 | 使用 Ultralytics 进行推理和基准测试 🚀
百度 RT-DETR 概览。 RT-DETR 模型架构图展示了骨干网络的最后三个阶段 {S3, S4, S5},它们作为编码器的输入。高效的混合编码器通过尺度内特征交互(AIFI)和跨尺度特征融合模块(CCFM),将多尺度特征转换为图像特征序列。模型采用 IoU 感知查询选择,从中选出固定数量的图像特征,作为解码器的初始目标查询。最后,带有辅助预测头的解码器迭代优化目标查询,生成边界框和置信度分数(来源)。
主要功能#
- 高效混合编码器: 百度 RT-DETR 使用高效的混合编码器,通过解耦尺度内交互和跨尺度融合来处理多尺度特征。这种独特的视觉 Transformer 架构设计降低了计算成本,并支持实时目标检测。
- IoU 感知查询选择: 百度 RT-DETR 利用 IoU 感知查询选择改进目标查询初始化。这样模型便能聚焦场景中最相关的目标,从而提高检测精度。
- 可调节的推理速度: 百度 RT-DETR 无需重新训练,只需使用不同的解码器层即可灵活调整推理速度。这种适应性有助于模型在各种实时目标检测场景中实际应用。
- 无需 NMS 的框架: RT-DETR 基于 DETR,无需进行非极大值抑制后处理,从而简化检测流程,并有望提高效率。
- 无锚框检测: RT-DETR 是一款无锚框检测器,能够简化检测流程,并可能提升模型在不同数据集上的泛化能力。
预训练模型#
Ultralytics Python API 提供不同规模的预训练 PaddlePaddle RT-DETR 模型:
- RT-DETR-L:在 COCO val2017 上 AP 为 53.0%,在 T4 GPU 上为 114 FPS
- RT-DETR-X:在 COCO val2017 上 AP 为 54.8%,在 T4 GPU 上为 74 FPS
此外,百度于 2024 年 7 月发布了 RTDETRv2,在原始架构基础上进一步提升了性能指标。
使用示例#
本示例展示了简单的 RT-DETR 训练和推理用法。如需了解这些模式及其他模式的完整文档,请参阅预测、训练、验证和导出文档页面。你也可以通过 Ultralytics Platform 使用云 GPU 训练模型。
from ultralytics import RTDETR
# 加载一个在 COCO 上预训练的 RT-DETR-l 模型
model = RTDETR("rtdetr-l.pt")
# 显示模型信息(可选)
model.info()
# 使用 COCO8 示例数据集训练模型 100 个 epoch
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 使用 RT-DETR-l 模型对图像 'bus.jpg' 进行推理
results = model("path/to/bus.jpg")使用 PyTorch 2.0 或更高版本在 CUDA 上训练 RT-DETR 时,设置 deterministic=False。它的可变形注意力使用 F.grid_sample,而该算子没有确定性的 CUDA 反向传播,因此 deterministic=True 无法保证运行可复现,还可能降低训练吞吐量。seed 仍用于控制权重初始化、数据顺序和增强采样。
RT-DETR 预训练权重支持两种推理时设置,可在无需重新训练的情况下降低延迟:
eval_idx:提前停止解码。对于默认的 6 层解码器,请使用从零开始的索引(0–5)。eval_idx=5使用所有层;eval_idx=3使用 4 层。在搭载 TensorRT v10.11 的 T4 GPU 上,使用 4 层后,RT-DETR-L 的性能从 8.0 ms / 52.7 mAP 提升至 7.4 ms / 52.5 mAP。num_queries:减少目标查询数量(默认值:300)。在相同配置下,将数量降至 100,可在 COCO 上达到 7.4 ms / 51.7 mAP。对于每张图像目标数量较少的数据集,mAP 通常下降得更少,但该值应高于每张图像预期目标数量的最大值。
这两种设置都可能降低 mAP——部署前请在自己的数据集上验证这种权衡。
from ultralytics import RTDETR
rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]
# 验证速度与精度之间的权衡后,选择其中一种或同时使用两种设置。
head.decoder.eval_idx = 3 # 使用 6 层解码器中的 4 层。
head.num_queries = 100 # 减少目标查询数量。
results = rtdetr("path/to/image.jpg")
# 导出时使用相同的解码器和查询设置,包括 TensorRT 导出。
rtdetr.export(format="engine", device=0, quantize=16)支持的任务和模式#
此表列出了模型类型、对应的预训练权重、各模型支持的任务,以及支持的各种模式(训练、验证、预测、导出,以 ✅ 表示)。
| 模型类型 | 预训练权重 | 支持的任务 | 训练 | 验证 | 推理 | 导出 |
|---|---|---|---|---|---|---|
| RT-DETR 大型版 | rtdetr-l.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
| RT-DETR 超大型版 | rtdetr-x.pt | 目标检测 | ✅ | ✅ | ✅ | ✅ |
rtdetr-resnet50.yaml 和 rtdetr-resnet101.yaml 仅以 YAML 架构形式提供。Ultralytics 仅为 rtdetr-l 和 rtdetr-x 发布预训练权重。你可以从 YAML 实例化 ResNet 变体(例如 RTDETR("rtdetr-resnet50.yaml")),并按需训练或微调。
理想应用场景#
RT-DETR 尤其适合同时要求高精度和实时性能的应用:
- 自动驾驶:用于自动驾驶系统中的可靠环境感知,这类系统对速度和精度都有严格要求。了解更多关于自动驾驶汽车中的 AI。
- 先进机器人技术:帮助机器人在动态环境中执行复杂任务,准确识别目标并与目标交互。探索 AI 在机器人技术中的作用。
- 医学影像:适用于医疗保健领域,在这些应用中,精确检测目标对诊断至关重要。了解医疗保健领域的 AI。
- 监控系统:适用于需要实时监控和高检测精度的安防应用。了解安防报警系统。
- 卫星图像分析:适用于需要理解全局背景的高分辨率图像详细分析。阅读卫星图像中的计算机视觉。
引用与致谢#
如果你在研究或开发中使用百度的 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 团队创建并维护这项宝贵资源,为计算机视觉社区提供支持。他们开发了基于视觉 Transformer 的实时目标检测器 RT-DETR,为该领域作出的贡献值得我们由衷感谢。
常见问题#
百度的 RT-DETR(实时检测 Transformer)是一款基于视觉 Transformer 架构的先进实时目标检测器。它通过高效的混合编码器解耦尺度内交互和跨尺度融合,从而高效处理多尺度特征。通过采用 IoU 感知查询选择,模型会聚焦最相关的目标,提升检测精度。RT-DETR 无需重新训练,只需调整解码器层即可改变推理速度,因此适用于各种实时目标检测场景。你可以在 RT-DETR arXiv 论文中了解更多 RT-DETR 的特性。
你可以使用 Ultralytics Python API 调用预训练的 PaddlePaddle RT-DETR 模型。例如,要加载一个在 COCO val2017 上预训练、并在 T4 GPU 上实现较高 FPS 的 RT-DETR-l 模型,可以参考以下示例:
示例from ultralytics import RTDETR # 加载一个在 COCO 上预训练的 RT-DETR-l 模型 model = RTDETR("rtdetr-l.pt") # 显示模型信息(可选) model.info() # 使用 COCO8 示例数据集训练模型 100 个 epoch results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # 使用 RT-DETR-l 模型对图像 'bus.jpg' 进行推理 results = model("path/to/bus.jpg")百度的 RT-DETR 凭借高效的混合编码器和 IoU 感知查询选择脱颖而出,在保持高精度的同时大幅降低了计算成本。它无需重新训练即可通过使用不同的解码器层来调整推理速度,这一独特能力带来了显著的灵活性。因此,对于需要在 CUDA 搭配 TensorRT 等加速后端上实现实时性能的应用,它尤其具有优势,胜过许多其他实时目标检测器。与传统的基于 CNN 的检测器相比,Transformer 架构还能更好地理解全局背景。
百度的 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 模型;在训练完成后对预训练检查点更改此值并不能达到同样效果,而且需要重新训练才能学习额外的查询。