tao-train-bevfusion

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

BEVFusion

BEVFusion

BEVFusion for multi-sensor 3D object detection. Fuses LiDAR point clouds and camera images in bird's-eye-view (BEV) space. Used in autonomous driving for robust 3D perception.
Set pretrained backbone paths for Swin image backbone.
用于多传感器3D目标检测的BEVFusion。在鸟瞰图(BEV)空间中融合LiDAR点云和相机图像,用于自动驾驶领域的鲁棒3D感知。
设置Swin图像骨干网络的预训练骨干路径。

Dataclass Schemas

数据类模式

Generated TAO Core schemas are packaged in
schemas/<action>.schema.json
, with
schemas/manifest.json
listing available actions. Each generated schema also emits
references/spec_template_<action>.yaml
from the schema top-level
default
field. AutoML enablement is declared at the model layer in
references/skill_info.yaml
via
automl_enabled
. Runnable AutoML still requires
schemas/train.schema.json
and
references/spec_template_train.yaml
to exist and parse. Use the packaged train schema for
automl_default_parameters
,
automl_disabled_parameters
, defaults, min/max bounds, enums, option weights, math conditions, dependencies, and popular parameters. Do not expect
~/tao-core
at runtime; maintainers regenerate schemas/templates before packaging the skill bank.
生成的TAO Core模式打包在
schemas/<action>.schema.json
中,
schemas/manifest.json
列出了可用的操作。每个生成的模式还会从模式顶层的
default
字段生成
references/spec_template_<action>.yaml
。AutoML支持在
references/skill_info.yaml
的模型层通过
automl_enabled
声明。可运行的AutoML仍要求
schemas/train.schema.json
references/spec_template_train.yaml
存在且可解析。使用打包的训练模式来配置
automl_default_parameters
automl_disabled_parameters
、默认值、最小/最大边界、枚举值、选项权重、数学条件、依赖关系以及常用参数。运行时不要依赖
~/tao-core
;维护人员在打包技能库前会重新生成模式/模板。

Train Action Policy

训练操作策略

This model is AutoML-enabled at the model layer. Before handling any train-stage request, read
references/skill_info.yaml
and resolve the run override from either an explicit
automl_policy
value or the user's workflow request. Treat phrases like "turn off AutoML", "disable AutoML", "no HPO", or "plain training" as
automl_policy: off
for this run only; otherwise default to
auto
. When
automl_policy: auto
,
automl_enabled: true
, and both
schemas/train.schema.json
and
references/spec_template_train.yaml
are packaged, route the train action through
tao-skill-bank:tao-run-automl
by default with this model's
skill_dir
. Preserve workflow/application overrides for datasets, specs, output directories, GPU/platform settings, parent checkpoints, and
automl_policy
. Use direct model training only when
automl_policy: off
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.
Non-train actions such as
evaluate
,
inference
,
export
, and deploy flows stay in this model skill. The per-run
automl_policy
override does not change model metadata.
该模型在模型层支持AutoML。处理任何训练阶段请求前,请读取
references/skill_info.yaml
,并通过显式的
automl_policy
值或用户的工作流请求来确定运行覆盖配置。将“turn off AutoML”、“disable AutoML”、“no HPO”或“plain training”这类短语视为本次运行的
automl_policy: off
;否则默认设为
auto
。当
automl_policy: auto
automl_enabled: true
,且
schemas/train.schema.json
references/spec_template_train.yaml
均已打包时,默认将训练操作通过
tao-skill-bank:tao-run-automl
路由,并传入该模型的
skill_dir
。保留数据集、规格、输出目录、GPU/平台设置、父检查点和
automl_policy
的工作流/应用覆盖配置。仅当
automl_policy: off
或打包的训练模式/模板缺失时,才使用直接模型训练;若模式缺失,需报告该模型已启用AutoML但无法运行,直到生成模式为止。
非训练操作(如
evaluate
inference
export
以及部署流程)仍在该模型技能中执行。每次运行的
automl_policy
覆盖配置不会更改模型元数据。

Training Requirements

训练要求

  • Dataset type: bevfusion
  • Formats: default
  • Monitoring metric: AP11
  • 数据集类型: bevfusion
  • 格式: default
  • 监控指标: AP11

Per-Action Dataset Requirements

各操作的数据集要求

ActionSpec KeySourceFilesList?
dataset_convertroot_diridNo
evaluatedataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pklNo
inferencedataset.root_dirtrain_datasetsNo
inferencedataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pklNo
traindataset.train_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_train.pklNo
traindataset.val_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pklNo
traindataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pklNo
操作规格键来源文件是否为列表?
dataset_convertroot_dirid
evaluatedataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl
inferencedataset.root_dirtrain_datasets
inferencedataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl
traindataset.train_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_train.pkl
traindataset.val_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl
traindataset.test_datasettrain_datasetsann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl

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_overrides
.
python
S3_TRAIN = "s3://bucket/data/train"
train (mandatory data sources):
python
{
    "train.num_epochs": 30,
    "train.checkpoint_interval": 10,
    "train.validation_interval": 10,
    "train.num_gpus": 1,
    "dataset.train_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_train.pkl"},
    "dataset.val_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
evaluate (mandatory data sources):
python
{
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
inference (mandatory data sources):
python
{
    "dataset.root_dir": f"{S3_TRAIN}",
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
数据源覆盖配置对每个操作都是必填项 —— 代理必须根据上述“各操作的数据集要求”表格构建数据源路径,并将其包含在
spec_overrides
中。
python
S3_TRAIN = "s3://bucket/data/train"
训练(必填数据源):
python
{
    "train.num_epochs": 30,
    "train.checkpoint_interval": 10,
    "train.validation_interval": 10,
    "train.num_gpus": 1,
    "dataset.train_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_train.pkl"},
    "dataset.val_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
评估(必填数据源):
python
{
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
推理(必填数据源):
python
{
    "dataset.root_dir": f"{S3_TRAIN}",
    "dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}

Eval Dataset

评估数据集

Optional. Val dataset split is configured via ann_file in dataset config.
可选。验证数据集拆分通过数据集配置中的ann_file进行设置。

Important Parameters

重要参数

  • dataset.classes: List of detection classes. Default ["person"]. Must match the annotation categories.
  • dataset.type: Dataset type. Options: KittiPersonDataset, TAO3DSyntheticDataset, TAO3DDataset.
  • dataset.root_dir: Root directory of the KITTI-style dataset.
  • dataset.box_type_3d: 3D box coordinate frame. Options: lidar, camera. Default lidar.
  • train.optimizer.lr: Learning rate. Default 2e-4 (AdamW). Use AmpOptimWrapper for mixed precision via optimizer.wrapper_type.
  • input_modality: Dict controlling sensor modalities. Keys: use_lidar (True), use_camera (True), use_radar (False), use_map (False).
  • model.img_backbone: Image backbone. Default mmdet.SwinTransformer (Swin-Tiny). embed_dims=96, depths=[2,2,6,2].
  • model.view_transform.type: View transform for BEV projection. Options: DepthLSSTransform, LSSTransform. Default DepthLSSTransform.
  • model.point_cloud_range: Spatial extent of LiDAR. Default [0,-40,-3,70.4,40,1].
  • model.voxel_size: Voxel dimensions. Default [0.05, 0.05, 0.1].
  • dataset.train_dataset.batch_size: Per-GPU batch size. Default 4.
  • dataset.classes: 检测类别列表。默认值为["person"]。必须与标注类别匹配。
  • dataset.type: 数据集类型。可选值:KittiPersonDataset、TAO3DSyntheticDataset、TAO3DDataset。
  • dataset.root_dir: KITTI格式数据集的根目录。
  • dataset.box_type_3d: 3D框坐标系。可选值:lidar、camera。默认值为lidar。
  • train.optimizer.lr: 学习率。默认值为2e-4(AdamW优化器)。通过optimizer.wrapper_type使用AmpOptimWrapper实现混合精度。
  • input_modality: 控制传感器模态的字典。键值:use_lidar (True)、use_camera (True)、use_radar (False)、use_map (False)。
  • model.img_backbone: 图像骨干网络。默认值为mmdet.SwinTransformer(Swin-Tiny)。embed_dims=96,depths=[2,2,6,2]。
  • model.view_transform.type: BEV投影的视图变换。可选值:DepthLSSTransform、LSSTransform。默认值为DepthLSSTransform。
  • model.point_cloud_range: LiDAR的空间范围。默认值为[0,-40,-3,70.4,40,1]。
  • model.voxel_size: 体素尺寸。默认值为[0.05, 0.05, 0.1]。
  • dataset.train_dataset.batch_size: 单GPU批量大小。默认值为4。

Multi-GPU / Multi-Node

多GPU / 多节点

Launch method:
torchrun
(LIGHTNING_EXCLUDED_NETWORK). The entrypoint runs
torchrun --nnodes=N --nproc-per-node=M train.py
, NOT plain
python
.
Spec KeyDescriptionDefault
train.num_gpus
Number of GPUs per node1
train.gpu_ids
GPU device indices[0]
train.num_nodes
Number of nodes1
  • CUDA_VISIBLE_DEVICES
    is explicitly set from
    TAO_VISIBLE_DEVICES
  • BEVFusion uses mmdet3d-based distributed training, not Lightning DDP
  • NODE_RANK
    is copied to
    RANK
    if
    RANK
    is unset
Multi-node env vars (set by orchestrator):
VariablePurpose
WORLD_SIZE
Number of nodes
NODE_RANK
This node's rank
MASTER_ADDR
Rank-0 node IP
MASTER_PORT
Rank-0 port (default 29500)
NUM_GPU_PER_NODE
GPUs per node
启动方式:
torchrun
(LIGHTNING_EXCLUDED_NETWORK)。入口点运行
torchrun --nnodes=N --nproc-per-node=M train.py
,而非直接运行
python
规格键描述默认值
train.num_gpus
每个节点的GPU数量1
train.gpu_ids
GPU设备索引[0]
train.num_nodes
节点数量1
  • CUDA_VISIBLE_DEVICES
    TAO_VISIBLE_DEVICES
    显式设置
  • BEVFusion使用基于mmdet3d的分布式训练,而非Lightning DDP
  • RANK
    未设置,则将
    NODE_RANK
    复制到
    RANK
多节点环境变量(由编排器设置):
变量用途
WORLD_SIZE
节点总数
NODE_RANK
当前节点的排名
MASTER_ADDR
排名为0的节点IP
MASTER_PORT
排名为0的节点端口(默认29500)
NUM_GPU_PER_NODE
每个节点的GPU数量

Hardware

硬件要求

Minimum 2 GPU(s), recommended 4 GPU(s). 24GB+ (A100 recommended) VRAM per GPU. BEVFusion is memory-intensive due to multi-sensor fusion. A100 GPUs strongly recommended. Multi-GPU training expected.
最少2块GPU,推荐4块GPU。每块GPU需24GB及以上显存(推荐A100)。BEVFusion因多传感器融合对内存要求较高,强烈推荐使用A100 GPU。建议采用多GPU训练。

Error Patterns

错误模式

dataset_convert required: Run dataset_convert before training to produce info pickle files.
Missing modality data: Ensure both camera images and LiDAR point clouds are present if using multi-modal fusion.
Epoch numbering: BEVFusion checkpoint epoch numbers may not follow standard zero-padded format.
需先执行dataset_convert: 训练前需运行dataset_convert以生成信息pickle文件。
模态数据缺失: 若使用多模态融合,需确保同时存在相机图像和LiDAR点云。
** epoch编号**: BEVFusion的检查点epoch编号可能不遵循标准的零填充格式。

Spec Param / Parent Model Inference

规格参数 / 父模型推理

Model-specific inference mappings belong in this MD file, not in
config.json
. Generated runners should read this section and apply the mappings with SDK helpers before
create_job()
. This mirrors the old microservices
infer_params.py
flow.
Inference mappings from TAO Core
bevfusion.config.json
:
ActionSpec FieldInference FunctionMeaning
dataset_convert
results_dir
output_dir
current job results directory
evaluate
encryption_key
key
encryption key
evaluate
evaluate.checkpoint
parent_model
model file inferred from the parent job results folder
evaluate
results_dir
output_dir
current job results directory
inference
encryption_key
key
encryption key
inference
inference.checkpoint
parent_model
model file inferred from the parent job results folder
inference
results_dir
output_dir
current job results directory
train
encryption_key
key
encryption key
train
results_dir
output_dir
current job results directory
train
train.pretrained_checkpoint
ptm_if_no_resume_model
PTM when no resume checkpoint exists
train
train.resume_training_checkpoint_path
resume_model
model file inferred from the current job results folder
For
parent_model
or
parent_model_folder
, pass the upstream train/export/AutoML child job id as
parent_job_id
. 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
config.json
and do not patch generated runner scripts to guess checkpoint paths.
模型特定的推理映射应放在此MD文件中,而非
config.json
。生成的运行器应读取本节内容,并在
create_job()
前使用SDK助手应用映射。这与旧微服务的
infer_params.py
流程一致。
来自TAO Core
bevfusion.config.json
的推理映射:
操作规格字段推理函数含义
dataset_convert
results_dir
output_dir
当前作业结果目录
evaluate
encryption_key
key
加密密钥
evaluate
evaluate.checkpoint
parent_model
从父作业结果文件夹推断出的模型文件
evaluate
results_dir
output_dir
当前作业结果目录
inference
encryption_key
key
加密密钥
inference
inference.checkpoint
parent_model
从父作业结果文件夹推断出的模型文件
inference
results_dir
output_dir
当前作业结果目录
train
encryption_key
key
加密密钥
train
results_dir
output_dir
当前作业结果目录
train
train.pretrained_checkpoint
ptm_if_no_resume_model
无恢复检查点时的预训练模型(PTM)
train
train.resume_training_checkpoint_path
resume_model
从当前作业结果文件夹推断出的模型文件
对于
parent_model
parent_model_folder
,将上游训练/导出/AutoML子作业ID作为
parent_job_id
传入。SDK会列出父结果文件夹,过滤检查点工件,并返回选定的模型文件或文件夹。请勿将这些映射添加回
config.json
,也不要修改生成的运行器脚本以猜测检查点路径。