首页
/ RT-DETR目标检测模型详解与使用指南

RT-DETR目标检测模型详解与使用指南

2025-07-09 03:50:45作者:裴锟轩Denise

一、RT-DETR项目概述

RT-DETR(Real-Time Detection Transformer)是一种基于Transformer架构的实时目标检测模型,它结合了CNN和Transformer的优势,在保持高精度的同时实现了实时检测性能。该项目提供了多种不同规模的预训练模型,适用于COCO和Objects365等主流目标检测数据集。

二、模型性能概览

1. COCO数据集表现

RT-DETR在COCO数据集上提供了多个不同规模的模型变体:

模型变体 骨干网络 输入尺寸 AP AP50 参数量(M) 计算量(G) 推理速度(FPS)
RT-DETR-R18 ResNet-18 640×640 46.5 63.8 20 60 217
RT-DETR-R34 ResNet-34 640×640 48.9 66.8 31 92 161
RT-DETR-R50 ResNet-50 640×640 53.1 71.3 42 136 108
RT-DETR-L HGNetv2 640×640 53.0 71.6 32 110 114
RT-DETR-X HGNetv2 640×640 54.8 73.1 67 234 74

2. Objects365数据集表现

RT-DETR在Objects365数据集上也表现出色,特别是经过COCO+Objects365联合训练的模型:

模型变体 训练数据 AP AP50 推理速度(FPS)
RT-DETR-R18 COCO+Objects365 49.2 66.6 217
RT-DETR-R50 COCO+Objects365 55.3 73.4 108
RT-DETR-R101 COCO+Objects365 56.2 74.6 74

三、快速开始指南

1. 环境安装

首先需要安装必要的依赖项:

pip install -r requirements.txt

2. 数据准备

按照COCO数据集的格式组织数据:

path/to/coco/
  annotations/  # 标注JSON文件
  train2017/    # 训练图像
  val2017/      # 验证图像

3. 训练与评估

单GPU训练

export CUDA_VISIBLE_DEVICES=0
python tools/train.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml --eval

多GPU训练

export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml --fleet --eval

模型评估

python tools/eval.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams

推理测试

python tools/infer.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams \
              --infer_img=./demo/000000570688.jpg

四、模型微调指南

  1. 准备自定义数据集,格式与COCO相同:
path/to/custom/data/
    annotations/  # 标注文件
    train/        # 训练图像
    val/          # 验证图像
  1. 修改数据集配置文件中的路径参数

  2. 使用预训练权重进行微调:

fleetrun --gpus=0,1,2,3 tools/train.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
         -o pretrain_weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams --eval

五、模型部署方案

1. 模型导出

python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams trt=True \
              --output_dir=output_inference

2. 转换为ONNX格式

paddle2onnx --model_dir=./output_inference/rtdetr_r50vd_6x_coco/ \
            --model_filename model.pdmodel \
            --params_filename model.pdiparams \
            --opset_version 16 \
            --save_file rtdetr_r50vd_6x_coco.onnx

3. 转换为TensorRT引擎

trtexec --onnx=./rtdetr_r50vd_6x_coco.onnx \
        --workspace=4096 \
        --shapes=image:1x3x640x640 \
        --saveEngine=rtdetr_r50vd_6x_coco.trt \
        --avgRuns=100 \
        --fp16

六、模型参数与计算量统计

可以通过修改PaddlePaddle的dynamic_flops.py文件来准确计算模型的参数数量和计算量:

import paddle
from ppdet.core.workspace import load_config, merge_config
from ppdet.core.workspace import create

cfg_path = './configs/rtdetr/rtdetr_r50vd_6x_coco.yml'
cfg = load_config(cfg_path)
model = create(cfg.architecture)

blob = {
    'image': paddle.randn([1, 3, 640, 640]),
    'im_shape': paddle.to_tensor([[640, 640]]),
    'scale_factor': paddle.to_tensor([[1., 1.]])
}
paddle.flops(model, None, blob, custom_ops=None, print_detail=False)

七、技术特点分析

  1. 高效架构设计:RT-DETR采用混合CNN-Transformer架构,在保持Transformer强大建模能力的同时,通过CNN骨干网络提取高效的特征表示。

  2. 实时性能:即使在ResNet-101这样的较大骨干网络下,RT-DETR仍能保持74 FPS的推理速度,满足实时检测需求。

  3. 多尺度训练:所有模型均在640×640分辨率下训练和评估,保证了检测性能的一致性。

  4. 迁移学习能力强:在COCO和Objects365数据集上表现出良好的迁移学习能力,联合训练可以进一步提升模型性能。

RT-DETR项目为工业级目标检测应用提供了一个高效、准确的解决方案,特别适合需要实时性能的场景。通过灵活的配置和丰富的预训练模型,开发者可以快速将其应用于各种实际项目中。