Ultralytics YOLO27:

Baidu 的 RT-DETR:基于视觉 Transformer 的实时目标检测器#

概述#

实时检测 Transformer(RT-DETR)由 Baidu 开发,是一种先进的端到端目标检测器,在保持高准确率的同时提供实时性能。它基于 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 模型架构概览 Baidu RT-DETR 概览。 RT-DETR 模型架构图显示,骨干网络的最后三个阶段 {S3, S4, S5} 作为编码器的输入。高效混合编码器通过尺度内特征交互(AIFI)和跨尺度特征融合模块(CCFM),将多尺度特征转换为图像特征序列。模型采用 IoU 感知的查询选择,从图像特征中选出固定数量的特征,作为解码器的初始目标查询。最后,带有辅助预测头的解码器对目标查询进行迭代优化,以生成边界框和置信度分数(来源)。

主要特性#

  • 高效混合编码器: Baidu 的 RT-DETR 使用高效混合编码器,通过解耦尺度内交互与跨尺度融合来处理多尺度特征。这种独特的基于视觉 Transformer 的设计降低了计算成本,并支持实时目标检测
  • IoU 感知的查询选择: Baidu 的 RT-DETR 通过使用 IoU 感知的查询选择改进目标查询初始化。这使模型能够聚焦于场景中最相关的目标,从而提高检测准确率。
  • 可调整的推理速度: Baidu 的 RT-DETR 无需重新训练即可通过使用不同的解码器层灵活调整推理速度。这种适应性有助于在各种实时目标检测场景中实现实际应用。
  • 无需 NMS 的框架: RT-DETR 基于 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

此外,Baidu 于 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")
确定性训练

在 CUDA 上使用 PyTorch 2.0 或更高版本训练 RT-DETR 时,请设置 deterministic=False。其可变形注意力使用 F.grid_sample,而该实现没有确定性的 CUDA 反向传播,因此 deterministic=True 无法使运行结果可复现,并且可能降低训练吞吐量。seed 仍控制权重初始化、数据顺序和增强采样。

更快推理的权衡

RT-DETR 预训练权重支持两种推理时设置,可在无需重新训练的情况下降低延迟:

  • eval_idx:提前停止解码。对于默认的 6 层解码器,请使用从零开始的索引(05)。eval_idx=5 使用全部层;eval_idx=3 使用 4 层。在配备 TensorRT v10.11 的 T4 GPU 上,RT-DETR-L 使用 4 层后,性能从 8.0 ms / 52.7 mAP 提升至 7.4 ms / 52.5 mAP。
  • num_queries:减少目标查询数量(默认值:300)。在相同设置下,将数量降至 100 时,RT-DETR 在 COCO 上可达到 7.4 ms / 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)

支持的任务和模式#

本表展示了模型类型、特定的预训练权重、每个模型支持的任务,以及支持的各种模式(TrainValPredictExport),均以 ✅ 表情符号标出。

模型类型预训练权重支持的任务训练验证推理导出
RT-DETR 大型版rtdetr-l.pt对象检测
RT-DETR 超大型版rtdetr-x.pt对象检测
仅架构变体

rtdetr-resnet50.yamlrtdetr-resnet101.yaml 仅以 YAML 架构形式提供。Ultralytics 仅为 rtdetr-lrtdetr-x 发布预训练权重。请从 YAML(例如 RTDETR("rtdetr-resnet50.yaml"))实例化 ResNet 变体,并根据需要进行训练或微调。

理想应用场景#

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}
}

我们感谢 Baidu 及其 PaddlePaddle 团队创建并维护这一为计算机视觉社区提供的宝贵资源。他们开发了基于视觉 Transformer 的实时目标检测器 RT-DETR,为该领域作出的贡献值得高度肯定。

常见问题#

  • Baidu 的 RT-DETR(实时检测 Transformer)是一种基于视觉 Transformer 架构构建的先进实时目标检测器。它通过高效混合编码器解耦尺度内交互与跨尺度融合,从而高效处理多尺度特征。通过采用 IoU 感知的查询选择,该模型聚焦于最相关的目标,提高检测准确率。它无需重新训练即可通过调整解码器层实现可调整的推理速度,因此适用于各种实时目标检测场景。在 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 模型;训练完成后在预训练检查点上修改此值并不等效,并且需要重新训练才能学习额外的查询。

  • 可以,RT-DETR 模型兼容各种 Ultralytics 模式,包括训练、验证、预测和导出。你可以参考相应文档,详细了解如何使用这些模式:训练验证预测导出。这为开发和部署目标检测解决方案提供了完整的工作流。Ultralytics 框架为不同模型架构提供一致的 API,使 RT-DETR 模型易于使用。

评论