tao-train-rtdetr
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRT-DETR
RT-DETR
RT-DETR (Real-Time DEtection TRansformer) for 2D object detection. Designed for real-time inference with competitive accuracy. Supports distillation and quantization for deployment optimization.
Set model.pretrained_backbone_path for backbone weights or train.pretrained_model_path for full model.
For TAO Deploy TensorRT actions (, TensorRT , and TensorRT ), read first. Deploy spec templates live in this skill's folder with the prefix.
gen_trt_engineevaluateinferencereferences/tao-deploy-rtdetr.mdreferences/spec_template_deploy_*.yamlRT-DETR(Real-Time DEtection TRansformer)是用于2D目标检测的模型。专为具备竞争力精度的实时推理设计,支持蒸馏和量化以优化部署。
设置model.pretrained_backbone_path以指定骨干网络权重,或设置train.pretrained_model_path以指定完整模型权重。
对于TAO Deploy TensorRT操作(、TensorRT 和TensorRT ),请先阅读。部署规格模板位于本skill的文件夹中,前缀为。
gen_trt_engineevaluateinferencereferences/tao-deploy-rtdetr.mdreferences/spec_template_deploy_*.yamlDataclass Schemas
数据类模式(Dataclass Schemas)
Generated TAO Core schemas are packaged in , with listing available actions. Each generated schema also emits from the schema top-level field. AutoML enablement is declared at the model layer in via . Runnable AutoML still requires and to exist and parse. Use the packaged train schema for , , defaults, min/max bounds, enums, option weights, math conditions, dependencies, and popular parameters. Do not expect at runtime; maintainers regenerate schemas/templates before packaging the skill bank.
schemas/<action>.schema.jsonschemas/manifest.jsonreferences/spec_template_<action>.yamldefaultreferences/skill_info.yamlautoml_enabledschemas/train.schema.jsonreferences/spec_template_train.yamlautoml_default_parametersautoml_disabled_parameters~/tao-core生成的TAO Core模式打包在中,列出了可用操作。每个生成的模式还会从模式顶层的字段生成。AutoML支持在中的模型层通过声明。可运行的AutoML仍要求和存在且可解析。使用打包的训练模式来配置、、默认值、最小/最大边界、枚举、选项权重、数学条件、依赖项和常用参数。运行时不要依赖;维护人员会在打包skill库前重新生成模式/模板。
schemas/<action>.schema.jsonschemas/manifest.jsondefaultreferences/spec_template_<action>.yamlreferences/skill_info.yamlautoml_enabledschemas/train.schema.jsonreferences/spec_template_train.yamlautoml_default_parametersautoml_disabled_parameters~/tao-coreTrain Action Policy
训练操作策略(Train Action Policy)
This model is AutoML-enabled at the model layer. Before handling any train-stage request, read and resolve the run override from either an explicit value or the user's workflow request. Treat phrases like "turn off AutoML", "disable AutoML", "no HPO", or "plain training" as for this run only; otherwise default to . When , , and both and are packaged, route the train action through by default with this model's . Preserve workflow/application overrides for datasets, specs, output directories, GPU/platform settings, parent checkpoints, and . Use direct model training only when or the packaged train schema/template is missing; in the missing-schema case, report that AutoML is enabled but not runnable for this model until schemas are generated.
references/skill_info.yamlautoml_policyautoml_policy: offautoautoml_policy: autoautoml_enabled: trueschemas/train.schema.jsonreferences/spec_template_train.yamltao-skill-bank:tao-run-automlskill_dirautoml_policyautoml_policy: offNon-train actions such as , , , and deploy flows stay in this model skill. The per-run override does not change model metadata.
evaluateinferenceexportautoml_policy该模型在模型层支持AutoML。处理任何训练阶段请求前,请阅读,并通过显式的值或用户的工作流请求确定运行覆盖配置。将“turn off AutoML”、“disable AutoML”、“no HPO”或“plain training”这类短语视为本次运行的;否则默认设为。当、且和已打包时,默认将训练操作通过路由,使用该模型的。保留数据集、规格、输出目录、GPU/平台设置、父检查点和的工作流/应用覆盖配置。仅当或打包的训练模式/模板缺失时,才使用直接模型训练;若模式缺失,需报告该模型已启用AutoML但无法运行,直到生成模式为止。
references/skill_info.yamlautoml_policyautoml_policy: offautoautoml_policy: autoautoml_enabled: trueschemas/train.schema.jsonreferences/spec_template_train.yamltao-skill-bank:tao-run-automlskill_dirautoml_policyautoml_policy: off非训练操作(如、、和部署流程)仍在本模型skill中执行。单次运行的覆盖配置不会更改模型元数据。
evaluateinferenceexportautoml_policyTraining Requirements
训练要求
- Dataset type: object_detection
- Formats: coco, coco_raw
- Monitoring metric: val_mAP50
- 数据集类型: object_detection
- 格式: coco, coco_raw
- 监控指标: val_mAP50
Per-Action Dataset Requirements
各操作的数据集要求
| Action | Spec Key | Source | Files | List? |
|---|---|---|---|---|
| distill | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | Yes |
| distill | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| evaluate | dataset.test_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | images.tar.gz | Yes |
| inference | dataset.infer_data_sources | inference_dataset | image_dir: images.tar.gz, classmap: label_map.txt | No |
| quantize | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | Yes |
| quantize | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| quantize | dataset.quant_calibration_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | No |
| train | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | Yes |
| train | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| 操作 | 规格键 | 来源 | 文件 | 是否为列表? |
|---|---|---|---|---|
| distill | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | 是 |
| distill | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | 否 |
| evaluate | dataset.test_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | 否 |
| gen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | images.tar.gz | 是 |
| inference | dataset.infer_data_sources | inference_dataset | image_dir: images.tar.gz, classmap: label_map.txt | 否 |
| quantize | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | 是 |
| quantize | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | 否 |
| quantize | dataset.quant_calibration_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | 否 |
| train | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations.json | 是 |
| train | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | 否 |
Typical Spec Overrides
典型规格覆盖配置
Data source overrides are mandatory for every action — the agent MUST construct data source paths from the Per-Action Dataset Requirements table above and include them in .
spec_overridespython
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"train (mandatory data sources):
python
{
"train.num_epochs": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.num_classes": "<num_classes> + 1",
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}evaluate (mandatory data sources):
python
{
"dataset.num_classes": "<num_classes> + 1",
"dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}export:
python
{
"dataset.num_classes": "<num_classes> + 1",
"export.input_height": 640,
"export.input_width": 640,
}quantize (mandatory data sources):
python
{
"dataset.num_classes": "<num_classes> + 1",
"quantize.layers": [
{
"module_name": "*",
"weights": {
"dtype": "float8_e4m3fn"
},
"activations": {
"dtype": "float8_e4m3fn"
}
}
],
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
"dataset.quant_calibration_data_sources": {"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"},
}gen_trt_engine (mandatory data sources):
python
{
"gen_trt_engine.tensorrt.data_type": "FP16",
"gen_trt_engine.tensorrt.calibration.cal_image_dir": [f"{S3_TRAIN}/images.tar.gz"],
}inference (mandatory data sources):
python
{
"dataset.num_classes": "<num_classes> + 1",
"dataset.infer_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "classmap": f"{S3_EVAL}/label_map.txt"},
}distill (mandatory data sources):
python
{
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}数据源覆盖配置对每个操作都是必需的——Agent必须根据上述“各操作的数据集要求”表格构建数据源路径,并将其包含在中。
spec_overridespython
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"train(必需数据源):
python
{
"train.num_epochs": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.num_classes": "<num_classes> + 1",
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}evaluate(必需数据源):
python
{
"dataset.num_classes": "<num_classes> + 1",
"dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}export:
python
{
"dataset.num_classes": "<num_classes> + 1",
"export.input_height": 640,
"export.input_width": 640,
}quantize(必需数据源):
python
{
"dataset.num_classes": "<num_classes> + 1",
"quantize.layers": [
{
"module_name": "*",
"weights": {
"dtype": "float8_e4m3fn"
},
"activations": {
"dtype": "float8_e4m3fn"
}
}
],
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
"dataset.quant_calibration_data_sources": {"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"},
}gen_trt_engine(必需数据源):
python
{
"gen_trt_engine.tensorrt.data_type": "FP16",
"gen_trt_engine.tensorrt.calibration.cal_image_dir": [f"{S3_TRAIN}/images.tar.gz"],
}inference(必需数据源):
python
{
"dataset.num_classes": "<num_classes> + 1",
"dataset.infer_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "classmap": f"{S3_EVAL}/label_map.txt"},
}distill(必需数据源):
python
{
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}Eval Dataset
评估数据集
Optional. Provides validation mAP at each checkpoint if supplied.
可选。若提供,会在每个检查点输出验证mAP值。
Important Parameters
重要参数
- dataset.num_classes: Number of classes. Default 80 (MSCOCO 80-class). Must match your dataset annotations.
- model.backbone: Default resnet_50. Supported: ResNet variants, ConvNeXt, FAN, EfficientViT. RT-DETR is optimized for real-time with lighter backbones.
- train.optim.lr: Learning rate. Default 1e-4 (lower than DINO's 2e-4). lr_backbone defaults to 1e-5.
- dataset.augmentation.train_spatial_size: Training input size. Default [640, 640]. Smaller than DINO's multi-scale (up to 1333). Key to RT-DETR's speed.
- model.num_feature_levels: Default 3 (vs DINO's 4). return_interm_indices is [1,2,3].
- train.enable_ema: Exponential moving average. Default False. Enable for potentially smoother convergence.
- dataset.remap_mscoco_category: Default False. Set True only for original MSCOCO dataset with 91-to-80 category ID remapping.
- dataset.num_classes: 类别数量。默认值为80(MSCOCO的80类)。必须与数据集标注匹配。
- model.backbone: 默认值为resnet_50。支持的骨干网络:ResNet变体、ConvNeXt、FAN、EfficientViT。RT-DETR针对轻量骨干网络优化了实时性能。
- train.optim.lr: 学习率。默认值为1e-4(低于DINO的2e-4)。lr_backbone默认值为1e-5。
- dataset.augmentation.train_spatial_size: 训练输入尺寸。默认值为[640, 640]。小于DINO的多尺度(最大1333)。这是RT-DETR实现高速的关键。
- model.num_feature_levels: 默认值为3(对比DINO的4)。return_interm_indices为[1,2,3]。
- train.enable_ema: 指数移动平均。默认值为False。启用后可能会使收敛更平滑。
- dataset.remap_mscoco_category: 默认值为False。仅当使用原始MSCOCO数据集(需要将91类ID映射为80类)时设为True。
Multi-GPU / Multi-Node
多GPU / 多节点
Launch method: (LIGHTNING_EXCLUDED_NETWORK). The entrypoint runs , NOT plain .
torchruntorchrun --nnodes=N --nproc-per-node=M train.pypython| Spec Key | Description | Default |
|---|---|---|
| Number of GPUs per node | 1 |
| GPU device indices | [0] |
| Number of nodes | 1 |
| | |
- is explicitly set (unlike Lightning-managed models which use
CUDA_VISIBLE_DEVICES)TAO_VISIBLE_DEVICES - with activation checkpointing:
ddpfind_unused_parameters=False - without:
ddpfind_unused_parameters=True - supported, forces FP16
fsdp
Multi-node env vars (set by orchestrator):
| Variable | Purpose |
|---|---|
| Number of nodes (triggers multinode mode) |
| This node's rank (0-indexed) |
| Rank-0 node IP |
| Rank-0 port (default 29500) |
| GPUs per node (default: all visible) |
CRITICAL: is copied to if is unset. This is required for torchrun multinode.
NODE_RANKRANKRANK启动方式: (LIGHTNING_EXCLUDED_NETWORK)。入口点执行,而非直接执行。
torchruntorchrun --nnodes=N --nproc-per-node=M train.pypython| 规格键 | 描述 | 默认值 |
|---|---|---|
| 每个节点的GPU数量 | 1 |
| GPU设备索引 | [0] |
| 节点数量 | 1 |
| | |
- 会被显式设置(不同于Lightning管理的模型,后者使用
CUDA_VISIBLE_DEVICES)TAO_VISIBLE_DEVICES - 启用激活检查点的:
ddpfind_unused_parameters=False - 未启用激活检查点的:
ddpfind_unused_parameters=True - 支持,强制使用FP16
fsdp
多节点环境变量(由编排器设置):
| 变量 | 用途 |
|---|---|
| 节点数量(触发多节点模式) |
| 当前节点的排名(从0开始) |
| 排名为0的节点IP |
| 排名为0的节点端口(默认29500) |
| 每个节点的GPU数量(默认:所有可见GPU) |
关键注意事项: 若未设置,会被复制到中。这是torchrun多节点运行的必需配置。
RANKNODE_RANKRANKExport / TRT Defaults
导出 / TRT默认值
- Export input: 640x640, opset 17
- TRT data types: FP32, FP16, INT8
- TRT workspace: 1024 MB
- TRT max_batch_size: 4
Full TAO Deploy reference: tao-deploy-rtdetr.
- 导出输入尺寸:640x640,opset 17
- TRT数据类型:FP32、FP16、INT8
- TRT工作空间:1024 MB
- TRT最大批量大小:4
完整TAO Deploy参考文档:tao-deploy-rtdetr。
Distillation
蒸馏
RT-DETR supports knowledge distillation with a teacher model. Requires action with teacher model path and distillation bindings configuration.
distillRT-DETR支持基于教师模型的知识蒸馏。需要使用操作,并配置教师模型路径和蒸馏绑定参数。
distillHardware
硬件要求
Minimum 1 GPU(s), recommended 2 GPU(s). 16GB+ (V100 or A100) VRAM per GPU. RT-DETR is more memory-efficient than DINO/GDINO due to smaller input size (640x640) and fewer feature levels. Trains well on single GPU for small-medium datasets.
最低要求1块GPU,推荐2块GPU。每块GPU需16GB及以上显存(V100或A100)。由于输入尺寸更小(640x640)且特征层级更少,RT-DETR比DINO/GDINO更节省显存。对于中小型数据集,单GPU即可完成训练。
Error Patterns
错误模式
CUDA out of memory: Reduce batch_size. RT-DETR at 640x640 is lighter than DINO at 1333px, but batch_size > 8 may still OOM on 16GB GPUs.
num_classes mismatch: RT-DETR defaults to 80 (not 91 like DINO). Ensure dataset.num_classes matches your annotation categories.
return_interm_indices vs num_feature_levels: Default is [1,2,3] with num_feature_levels=3. Must be consistent if changed.
CUDA内存不足: 减小batch_size。640x640尺寸的RT-DETR比1333px尺寸的DINO更轻量,但在16GB显存的GPU上,batch_size大于8仍可能出现内存溢出。
num_classes不匹配: RT-DETR默认类别数为80(不同于DINO的91)。确保dataset.num_classes与你的标注类别数量匹配。
return_interm_indices与num_feature_levels不一致: 默认配置为[1,2,3]且num_feature_levels=3。若修改,必须保持两者一致。
Spec Param / Parent Model Inference
规格参数 / 父模型推理
Model-specific inference mappings belong in this MD file, not in . Generated runners should read this section and apply the mappings with SDK helpers before . This mirrors the old microservices flow.
config.jsoncreate_job()infer_params.pyInference mappings from TAO Core :
rtdetr.config.json| Action | Spec Field | Inference Function | Meaning |
|---|---|---|---|
| distill | | | model file inferred from the parent job results folder |
| distill | | | encryption key |
| distill | | | current job results directory |
| evaluate | | | encryption key |
| evaluate | | | model file inferred from the parent job results folder |
| evaluate | | | model file inferred from the parent job results folder |
| evaluate | | | current job results directory |
| export | | | encryption key |
| export | | | model file inferred from the parent job results folder |
| export | | | output ONNX path |
| export | | | current job results directory |
| gen_trt_engine | | | encryption key |
| gen_trt_engine | | | model file inferred from the parent job results folder |
| gen_trt_engine | | | calibration cache path |
| gen_trt_engine | | | output TensorRT engine path |
| gen_trt_engine | | | current job results directory |
| inference | | | encryption key |
| inference | | | model file inferred from the parent job results folder |
| inference | | | model file inferred from the parent job results folder |
| inference | | | current job results directory |
| quantize | | | encryption key |
| quantize | | | model file inferred from the parent job results folder |
| quantize | | | current job results directory |
| train | | | encryption key |
| train | | | PTM when no resume checkpoint exists |
| train | | | current job results directory |
| train | | | PTM when no resume checkpoint exists |
| train | | | model file inferred from the current job results folder |
For or , pass the upstream train/export/AutoML child job id as . The SDK lists the parent result folder, filters checkpoint artifacts, and returns the selected model file or folder. Do not add these mappings back to and do not patch generated runner scripts to guess checkpoint paths.
parent_modelparent_model_folderparent_job_idconfig.json模型特定的推理映射应放在本MD文件中,而非。生成的运行器应读取本节内容,并在调用前使用SDK助手应用这些映射。这与旧微服务的流程一致。
config.jsoncreate_job()infer_params.py来自TAO Core 的推理映射:
rtdetr.config.json| 操作 | 规格字段 | 推理函数 | 含义 |
|---|---|---|---|
| distill | | | 从父任务结果文件夹中推断出的模型文件 |
| distill | | | 加密密钥 |
| distill | | | 当前任务结果目录 |
| evaluate | | | 加密密钥 |
| evaluate | | | 从父任务结果文件夹中推断出的模型文件 |
| evaluate | | | 从父任务结果文件夹中推断出的模型文件 |
| evaluate | | | 当前任务结果目录 |
| export | | | 加密密钥 |
| export | | | 从父任务结果文件夹中推断出的模型文件 |
| export | | | 输出ONNX路径 |
| export | | | 当前任务结果目录 |
| gen_trt_engine | | | 加密密钥 |
| gen_trt_engine | | | 从父任务结果文件夹中推断出的模型文件 |
| gen_trt_engine | | | 校准缓存路径 |
| gen_trt_engine | | | 输出TensorRT引擎路径 |
| gen_trt_engine | | | 当前任务结果目录 |
| inference | | | 加密密钥 |
| inference | | | 从父任务结果文件夹中推断出的模型文件 |
| inference | | | 从父任务结果文件夹中推断出的模型文件 |
| inference | | | 当前任务结果目录 |
| quantize | | | 加密密钥 |
| quantize | | | 从父任务结果文件夹中推断出的模型文件 |
| quantize | | | 当前任务结果目录 |
| train | | | 加密密钥 |
| train | | | 无恢复检查点时使用的预训练模型(PTM) |
| train | | | 当前任务结果目录 |
| train | | | 无恢复检查点时使用的预训练模型(PTM) |
| train | | | 从当前任务结果文件夹中推断出的模型文件 |
对于或,将上游训练/导出/AutoML子任务ID作为传入。SDK会列出父任务结果文件夹,过滤检查点工件,并返回选中的模型文件或文件夹。不要将这些映射添加回,也不要修改生成的运行器脚本以猜测检查点路径。
parent_modelparent_model_folderparent_job_idconfig.json