tao-train-sparse4d
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSparse4D
Sparse4D
Sparse4D for multi-camera temporal 3D object detection and tracking. Uses sparse queries with deformable attention across camera views and time for end-to-end 3D perception. Includes instance bank for temporal tracking.
Requires pretrained ResNet-101 backbone. Set train.pretrained_model_path.
Sparse4D用于多相机时序3D目标检测与跟踪。它采用稀疏查询结合跨相机视角与时序的可变形注意力机制,实现端到端3D感知,并内置实例库以支持时序跟踪。
需要预训练的ResNet-101骨干网络。请设置train.pretrained_model_path参数。
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仍要求和存在且可解析。使用打包的训练模式来配置、、默认值、最小/最大边界、枚举值、选项权重、数学条件、依赖关系以及常用参数。运行时不要依赖;维护人员会在打包技能库前重新生成模式/模板。
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
训练动作策略
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非训练动作(如、、以及部署流程)仍在该模型技能中处理。单次运行的覆盖配置不会改变模型元数据。
evaluateinferenceexportautoml_policyTraining Requirements
训练要求
- Dataset type: sparse4d
- Formats: ovpkl
- Monitoring metric: val_mAP
- 数据集类型: sparse4d
- 格式: ovpkl
- 监控指标: val_mAP
Per-Action Dataset Requirements
各动作的数据集要求
| Action | Spec Key | Source | Files | List? |
|---|---|---|---|---|
| dataset_convert | aicity.root | id | No | |
| evaluate | dataset.data_root | eval_dataset | (from convert job, spec: aicity.split) | No |
| evaluate | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | No |
| evaluate | dataset.train_dataset.ann_file | train_datasets | (from convert job, spec: aicity.split) | No |
| evaluate | dataset.val_dataset.ann_file | eval_dataset | (from convert job, spec: aicity.split) | No |
| evaluate | dataset.test_dataset.ann_file | inference_dataset | (from convert job, spec: aicity.split) | No |
| export | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | No |
| inference | dataset.data_root | inference_dataset | (from convert job, spec: aicity.split) | No |
| inference | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | No |
| inference | dataset.train_dataset.ann_file | train_datasets | (from convert job, spec: aicity.split) | No |
| inference | dataset.val_dataset.ann_file | eval_dataset | (from convert job, spec: aicity.split) | No |
| inference | dataset.test_dataset.ann_file | inference_dataset | (from convert job, spec: aicity.split) | No |
| quantize | dataset.data_root | train_datasets | (from convert job, spec: aicity.split) | No |
| quantize | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | No |
| quantize | dataset.train_dataset.ann_file | train_datasets | (from convert job, spec: aicity.split) | No |
| quantize | dataset.val_dataset.ann_file | eval_dataset | (from convert job, spec: aicity.split) | No |
| quantize | dataset.test_dataset.ann_file | inference_dataset | (from convert job, spec: aicity.split) | No |
| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | No | |
| train | dataset.data_root | train_datasets | (from convert job, spec: aicity.split) | No |
| train | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | No |
| train | dataset.train_dataset.ann_file | train_datasets | (from convert job, spec: aicity.split) | No |
| train | dataset.val_dataset.ann_file | eval_dataset | (from convert job, spec: aicity.split) | No |
| train | dataset.test_dataset.ann_file | inference_dataset | (from convert job, spec: aicity.split) | No |
| 动作 | 规格键 | 来源 | 文件 | 是否为列表? |
|---|---|---|---|---|
| dataset_convert | aicity.root | id | 否 | |
| evaluate | dataset.data_root | eval_dataset | (来自转换任务,规格:aicity.split) | 否 |
| evaluate | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | 否 |
| evaluate | dataset.train_dataset.ann_file | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| evaluate | dataset.val_dataset.ann_file | eval_dataset | (来自转换任务,规格:aicity.split) | 否 |
| evaluate | dataset.test_dataset.ann_file | inference_dataset | (来自转换任务,规格:aicity.split) | 否 |
| export | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | 否 |
| inference | dataset.data_root | inference_dataset | (来自转换任务,规格:aicity.split) | 否 |
| inference | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | 否 |
| inference | dataset.train_dataset.ann_file | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| inference | dataset.val_dataset.ann_file | eval_dataset | (来自转换任务,规格:aicity.split) | 否 |
| inference | dataset.test_dataset.ann_file | inference_dataset | (来自转换任务,规格:aicity.split) | 否 |
| quantize | dataset.data_root | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| quantize | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | 否 |
| quantize | dataset.train_dataset.ann_file | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| quantize | dataset.val_dataset.ann_file | eval_dataset | (来自转换任务,规格:aicity.split) | 否 |
| quantize | dataset.test_dataset.ann_file | inference_dataset | (来自转换任务,规格:aicity.split) | 否 |
| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | 否 | |
| train | dataset.data_root | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| train | model.head.instance_bank.anchor | train_datasets | /results/{dataset_convert_job_id}/anchor_init.npy | 否 |
| train | dataset.train_dataset.ann_file | train_datasets | (来自转换任务,规格:aicity.split) | 否 |
| train | dataset.val_dataset.ann_file | eval_dataset | (来自转换任务,规格:aicity.split) | 否 |
| train | dataset.test_dataset.ann_file | inference_dataset | (来自转换任务,规格:aicity.split) | 否 |
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": 30,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.sequences.split_num": 90,
"train_dataset.sequences_split_num": 90,
"dataset.data_root": {"spec": f"{S3_TRAIN}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}evaluate (mandatory data sources):
python
{
"dataset.data_root": {"spec": f"{S3_EVAL}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}export (mandatory data sources):
python
{
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
}inference (mandatory data sources):
python
{
"dataset.data_root": {"spec": f"{S3_EVAL}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}quantize (mandatory data sources):
python
{
"dataset.data_root": {"spec": f"{S3_TRAIN}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.quant_calibration_dataset.images_dir": f"{S3_TRAIN}",
}数据源覆盖配置对每个动作都是必填项——Agent必须根据上述“各动作的数据集要求”表格构建数据源路径,并将其包含在中。
spec_overridespython
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"训练(必填数据源):
python
{
"train.num_epochs": 30,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.sequences.split_num": 90,
"train_dataset.sequences_split_num": 90,
"dataset.data_root": {"spec": f"{S3_TRAIN}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}评估(必填数据源):
python
{
"dataset.data_root": {"spec": f"{S3_EVAL}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}导出(必填数据源):
python
{
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
}推理(必填数据源):
python
{
"dataset.data_root": {"spec": f"{S3_EVAL}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
}量化(必填数据源):
python
{
"dataset.data_root": {"spec": f"{S3_TRAIN}/aicity.split)"},
"model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
"dataset.train_dataset.ann_file": {"spec": f"{S3_TRAIN}/aicity.split)"},
"dataset.val_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.test_dataset.ann_file": {"spec": f"{S3_EVAL}/aicity.split)"},
"dataset.quant_calibration_dataset.images_dir": f"{S3_TRAIN}",
}Eval Dataset
评估数据集
Optional. Val/test splits configured via dataset ann_file paths.
可选。验证/测试集通过数据集ann_file路径配置。
Important Parameters
重要参数
- model.backbone: Backbone. Default resnet_101.
- model.neck.out_channels: FPN output channels. Default 256. num_outs=4.
- model.input_shape: Input image shape [W, H]. Default [1408, 512].
- model.head.num_output: Number of detection output queries. Default 300.
- model.head.num_decoder: Number of decoder layers. Default 6.
- model.head.temporal: Enable temporal reasoning. Default True.
- model.head.instance_bank.num_anchor: Instance bank anchors. Default 900.
- model.head.instance_bank.num_temp_instances: Temporal instance count. Default 600.
- model.depth_branch.loss_weight: Depth supervision loss weight. Default 0.2.
- dataset.batch_size: Per-GPU batch size. Default 2.
- dataset.num_frames: Sequence length. Default 200.
- dataset.classes: Detection classes. Default [person, gr1_t2, agility_digit, nova_carter]. num_ids=70 for tracking.
- train.optim.lr: Learning rate. Default 5e-5. img_backbone lr_mult=0.2.
- train.lr_scheduler: Cosine scheduler with linear warmup (500 iters, ratio 0.333).
- train.grad_clip.max_norm: Gradient clipping. Default 25.
- train.precision: Options: bf16, fp16, fp32. Default bf16.
- evaluate.metrics: Eval metrics. Default ["detection"]. Optional tracking evaluation.
- evaluate.tracking.enabled: Enable tracking evaluation. tracking_threshold=0.2.
- model.backbone: 骨干网络。默认值为resnet_101。
- model.neck.out_channels: FPN输出通道数。默认值为256。num_outs=4。
- model.input_shape: 输入图像尺寸 [W, H]。默认值为[1408, 512]。
- model.head.num_output: 检测输出查询数。默认值为300。
- model.head.num_decoder: 解码器层数。默认值为6。
- model.head.temporal: 启用时序推理。默认值为True。
- model.head.instance_bank.num_anchor: 实例库锚点数。默认值为900。
- model.head.instance_bank.num_temp_instances: 时序实例数量。默认值为600。
- model.depth_branch.loss_weight: 深度监督损失权重。默认值为0.2。
- dataset.batch_size: 单GPU批次大小。默认值为2。
- dataset.num_frames: 序列长度。默认值为200。
- dataset.classes: 检测类别。默认值为[person, gr1_t2, agility_digit, nova_carter]。跟踪任务的num_ids=70。
- train.optim.lr: 学习率。默认值为5e-5。img_backbone lr_mult=0.2。
- train.lr_scheduler: 带线性预热的余弦调度器(500次迭代,比例0.333)。
- train.grad_clip.max_norm: 梯度裁剪。默认值为25。
- train.precision: 选项:bf16, fp16, fp32。默认值为bf16。
- evaluate.metrics: 评估指标。默认值为["detection"]。可选跟踪评估。
- evaluate.tracking.enabled: 启用跟踪评估。tracking_threshold=0.2。
Multi-GPU / Multi-Node
多GPU / 多节点
Launch method: Lightning-managed (single process, Lightning spawns workers).
python| Spec Key | Description | Default |
|---|---|---|
| Number of GPUs | 1 |
| GPU device indices | [0] |
| Number of nodes | 1 |
- Multi-GPU strategy: (no fsdp support)
ddp_find_unused_parameters_true - is always enabled (True)
sync_batchnorm - Iterations per epoch computed as:
num_frames * num_bev_groups / (num_nodes * num_gpus * batch_size) - Scaling: When increasing GPUs, effective batch size grows and iterations-per-epoch shrinks proportionally
Multi-node env vars (set by orchestrator): , , , , .
WORLD_SIZENODE_RANKMASTER_ADDRMASTER_PORTNUM_GPU_PER_NODE启动方式: Lightning管理(单个进程,Lightning生成工作进程)。
python| 规格键 | 描述 | 默认值 |
|---|---|---|
| GPU数量 | 1 |
| GPU设备索引 | [0] |
| 节点数量 | 1 |
- 多GPU策略:(不支持fsdp)
ddp_find_unused_parameters_true - 始终启用(True)
sync_batchnorm - 每轮迭代数计算公式:
num_frames * num_bev_groups / (num_nodes * num_gpus * batch_size) - 缩放规则: 增加GPU数量时,有效批次大小会成比例增加,每轮迭代数会成比例减少
多节点环境变量(由编排器设置):, , , , 。
WORLD_SIZENODE_RANKMASTER_ADDRMASTER_PORTNUM_GPU_PER_NODEHardware
硬件要求
Minimum 2 GPU(s), recommended 8 GPU(s). 40GB+ (A100 recommended) VRAM per GPU. Multi-camera temporal model is memory intensive. bf16 required for practical training. Multi-GPU strongly recommended. Instance bank requires substantial memory for temporal reasoning.
最少2块GPU,推荐8块GPU。每块GPU需40GB以上显存(推荐A100)。多相机时序模型对内存要求较高。实际训练需要bf16精度。强烈推荐使用多GPU。实例库进行时序推理需要大量内存。
Error Patterns
错误模式
dataset_convert required: Must run dataset_convert first to produce annotation pickles and anchor_init.npy.
Missing anchor file: Set model.head.instance_bank.anchor to the anchor_init.npy path from dataset_convert results.
Temporal OOM: Reduce dataset.num_frames or dataset.batch_size if running out of memory during temporal training.
需先执行dataset_convert:必须先运行dataset_convert生成标注pickle文件和anchor_init.npy。
缺失锚点文件:将model.head.instance_bank.anchor设置为dataset_convert结果中的anchor_init.npy路径。
时序训练内存不足(OOM):若时序训练时内存不足,可减少dataset.num_frames或dataset.batch_size。
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 :
sparse4d.config.json| Action | Spec Field | Inference Function | Meaning |
|---|---|---|---|
| dataset_convert | | | current job results directory |
| evaluate | | | encryption key |
| 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 |
| inference | | | encryption key |
| 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 | | | 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 的推理映射:
sparse4d.config.json| 动作 | 规格字段 | 推理函数 | 含义 |
|---|---|---|---|
| dataset_convert | | | 当前任务结果目录 |
| evaluate | | | 加密密钥 |
| evaluate | | | 从父任务结果文件夹推断出的模型文件 |
| evaluate | | | 当前任务结果目录 |
| export | | | 加密密钥 |
| export | | | 从父任务结果文件夹推断出的模型文件 |
| export | | | 输出ONNX路径 |
| export | | | 当前任务结果目录 |
| inference | | | 加密密钥 |
| inference | | | 从父任务结果文件夹推断出的模型文件 |
| inference | | | 当前任务结果目录 |
| quantize | | | 加密密钥 |
| quantize | | | 从父任务结果文件夹推断出的模型文件 |
| quantize | | | 当前任务结果目录 |
| train | | | 加密密钥 |
| train | | | 当前任务结果目录 |
| train | | | 无恢复检查点时使用的预训练模型(PTM) |
| train | | | 从当前任务结果文件夹推断出的模型文件 |
对于或,传入上游训练/导出/AutoML子任务ID作为。SDK会列出父结果文件夹,过滤检查点工件,并返回选中的模型文件或文件夹。请勿将这些映射添加回,也不要修改生成的运行器脚本来猜测检查点路径。
parent_modelparent_model_folderparent_job_idconfig.json