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
四、模型微调指南
- 准备自定义数据集,格式与COCO相同:
path/to/custom/data/
annotations/ # 标注文件
train/ # 训练图像
val/ # 验证图像
-
修改数据集配置文件中的路径参数
-
使用预训练权重进行微调:
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)
七、技术特点分析
-
高效架构设计:RT-DETR采用混合CNN-Transformer架构,在保持Transformer强大建模能力的同时,通过CNN骨干网络提取高效的特征表示。
-
实时性能:即使在ResNet-101这样的较大骨干网络下,RT-DETR仍能保持74 FPS的推理速度,满足实时检测需求。
-
多尺度训练:所有模型均在640×640分辨率下训练和评估,保证了检测性能的一致性。
-
迁移学习能力强:在COCO和Objects365数据集上表现出良好的迁移学习能力,联合训练可以进一步提升模型性能。
RT-DETR项目为工业级目标检测应用提供了一个高效、准确的解决方案,特别适合需要实时性能的场景。通过灵活的配置和丰富的预训练模型,开发者可以快速将其应用于各种实际项目中。