BEVFusion多传感器3D目标检测Skill tao-train-bevfusion

该技能用于训练、评估和推理TAO BEVFusion模型,实现融合LiDAR点云与相机图像的多传感器3D目标检测(鸟瞰图/BEV空间),主要面向自动驾驶场景。关键词:BEVFusion、3D目标检测、多传感器融合、LiDAR、相机、BEV、自动驾驶、模型训练、模型评估、模型推理。

自动驾驶感知模型 0 次安装 4 次浏览 更新于 9/6/2026
名称 tao-train-bevfusion
描述 “BEVFusion用于多传感器3D目标检测。在鸟瞰图(BEV)空间中融合LiDAR点云和相机图像,用于自动驾驶中稳健的3D感知。在训练、评估或对TAO BEVFusion模型进行推理时使用。触发短语包括“train BEVFusion”、“LiDAR + camera fusion”、“BEV 3D detection”、“multi-sensor 3D perception”。”
开源协议 Apache-2.0 compatibility: 需要docker + nvidia-container-toolkit。 metadata:
版本 “0.1.0”
作者 NVIDIA Corporation allowed-tools: 读取Bash tags: - multi - sensor - 3d - detection

BEVFusion

独立安装? 如果此会话不是由TAO技能库插件初始化的,请先运行tao-setup技能(主机预检、凭据、跨技能发现)。

BEVFusion用于多传感器3D目标检测。在鸟瞰图(BEV)空间中融合LiDAR点云和相机图像。用于自动驾驶中的稳健3D感知。

为Swin图像骨干设置预训练骨干路径。

BEVFusion需要BEVFusion专用的TAO容器nvcr.io/nvidia/tao/tao-toolkit:5.5.0-pyt。共享的TAO PyTorch 7.0 RC镜像没有打包mmdet3d,在任何BEVFusion操作解析其spec之前就会失败。模型技能操作命名为dataset_convert,但5.5容器CLI子任务是bevfusion convert -e <spec>

Dataclass Schemas

生成的TAO Core schemas打包在schemas/<action>.schema.json中,schemas/manifest.json列出可用的动作。每个生成的schema还从schema顶层的default字段发出references/spec_template_<action>.yaml。AutoML支持在模型层的references/skill_info.yaml中通过automl_enabled声明。某个动作的可运行AutoML需要存在schemas/<action>.schema.jsonreferences/spec_template_<action>.yaml并能解析。请使用打包的选定动作schema来获取automl_default_parametersautoml_disabled_parameters、默认值、最小/最大边界、枚举、选项权重、数学条件、依赖关系和常用参数。不要期望在运行时存在~/tao-core;维护人员在打包技能库之前重新生成schemas/templates。

Train Action Policy

该模型在模型层启用了AutoML。在处理任何train阶段请求之前,请阅读references/skill_info.yaml,并解析来自显式automl_policy值或用户工作流请求的运行覆盖。默认使用automl_policy: on,并且只在新启动提示中公开on/off。将“关闭AutoML”、“禁用AutoML”、“不要HPO”或“普通训练”等短语视为本次运行的automl_policy: off。当automl_policy: onautoml_enabled: true且同时打包了schemas/train.schema.jsonreferences/spec_template_train.yaml时,默认情况下使用此模型的skill_dir通过tao-skill-bank:tao-run-automl路由train动作。保留用于数据集、specs、输出目录、GPU/平台设置、父检查点和automl_policy的工作流/应用程序覆盖。仅在automl_policy: off或打包的train schema/template缺失时使用直接模型训练;在schema缺失的情况下,报告AutoML已启用但在此模型上无法运行,直到生成schemas。

非训练动作如evaluateinferenceexport和部署流程保留在此模型技能中。每次运行的automl_policy覆盖不会更改模型元数据。

Training Requirements

  • 数据集类型: bevfusion
  • 格式: default
  • 监控指标: AP11

Per-Action Dataset Requirements

表格:

动作 Spec键 来源 文件 列表?
dataset_convert root_dir id No
evaluate dataset.test_dataset train_datasets ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl No
inference dataset.root_dir train_datasets No
inference dataset.test_dataset train_datasets ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl No
train dataset.train_dataset train_datasets ann_file: results/{dataset_convert_job_id}/kitti_person_infos_train.pkl No
train dataset.val_dataset train_datasets ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl No
train dataset.test_dataset train_datasets ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl No

Typical Spec Overrides

数据源覆盖对每个动作都是强制性的 —— 代理必须根据上述“每动作数据集要求”表构造数据源路径,并在spec_overrides中包含它们。

DATA_ROOT = "/path/to/kitti_root"
CONVERTED = DATA_ROOT  # BEVFusion 5.5 writes info pickles into root_dir.
DATA_PREFIX = {"pts": "training/velodyne_reduced", "img": "training/image_2"}

dataset_convert(必需数据源):

{
    "root_dir": DATA_ROOT,
    "results_dir": DATA_ROOT,
    "mode": "training",
}

train(必需数据源):

{
    "train.num_epochs": 30,
    "train.checkpoint_interval": 10,
    "train.validation_interval": 10,
    "train.num_gpus": 1,
    "dataset.root_dir": DATA_ROOT,
    "dataset.train_dataset": {"ann_file": f"{CONVERTED}/kitti_person_infos_train.pkl", "data_prefix": DATA_PREFIX},
    "dataset.val_dataset": {"ann_file": f"{CONVERTED}/kitti_person_infos_val.pkl", "data_prefix": DATA_PREFIX},
    "dataset.test_dataset": {"ann_file": f"{CONVERTED}/kitti_person_infos_val.pkl", "data_prefix": DATA_PREFIX},
}

evaluate(必需数据源):

{
    "dataset.root_dir": DATA_ROOT,
    "dataset.test_dataset": {"ann_file": f"{CONVERTED}/kitti_person_infos_val.pkl", "data_prefix": DATA_PREFIX},
}

inference(必需数据源):

{
    "dataset.root_dir": DATA_ROOT,
    "dataset.test_dataset": {"ann_file": f"{CONVERTED}/kitti_person_infos_val.pkl", "data_prefix": DATA_PREFIX},
}

Eval Dataset

可选。验证数据集分割通过dataset config中的ann_file配置。

Important Parameters

  • 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

启动方法: torchrun (LIGHTNING_EXCLUDED_NETWORK)。入口点运行torchrun --nnodes=N --nproc-per-node=M train.py,而不是普通的python

Spec键 描述 默认
train.num_gpus 每个节点的GPU数 1
train.gpu_ids GPU设备索引 [0]
train.num_nodes 节点数 1
  • CUDA_VISIBLE_DEVICESTAO_VISIBLE_DEVICES 显式设置
  • BEVFusion使用基于mmdet3d的分布式训练,不是Lightning DDP
  • 如果未设置RANKNODE_RANK被复制到RANK

多节点环境变量(由编排器设置):

变量 用途
WORLD_SIZE 节点数
NODE_RANK 当前节点排名
MASTER_ADDR Rank-0节点IP
MASTER_PORT Rank-0端口(默认29500)
NUM_GPU_PER_NODE 每节点GPU数

Hardware

最少2个GPU,推荐4个GPU。每个GPU需要24GB+(推荐A100)显存。由于多传感器融合,BEVFusion非常消耗内存。强烈推荐A100 GPU。期望多GPU训练。

Error Patterns

dataset_convert必需:在训练之前运行模型技能的dataset_convert动作(在BEVFusion 5.5容器中为bevfusion convert -e <spec>),以生成kitti_person_infos_train.pklkitti_person_infos_val.pkltraining/velodyne_reduced。对于直接的本地docker 5.5运行,将results_dir设置为与root_dir相同的挂载路径;转换器会将这些info pickle写入那里,稍后在其减少点云时预期它们位于root_dir下。

KITTI目录名称:BEVFusion 5.5转换器将缩减后的点云写入training/velodyne_reduced,并期望相机图像位于training/image_2。在将dataset_convert链接到train/evaluate或inference时,不要使用过时的training/lidar_reducedtraining/images/默认值。

BEVFusion 5.5配置表面:使用打包模板中的5.5 dataclass键。移除较新的顶层/动作键,例如model_namewandb.groupwandb.run_idtrain.checkpoint_interval_unitevaluate.trt_engineevaluate.batch_sizeinference.trt_engineinference.batch_size。对于train、evaluate和inference spec,保留非运行的action存根(trainevaluateinference),在需要的地方使用空检查点字符串;5.5运行器在运行所选动作之前会具体化完整的实验配置。当不打算使用检查点时,对train.pretrained_checkpointtrain.resume_training_checkpoint_path使用YAML null,不要使用空字符串。

ModuleNotFoundError: No module named 'mmdet3d':共享的TAO PyTorch 7.0 RC镜像不包含BEVFusion的mmdet3d依赖。请使用nvcr.io/nvidia/tao/tao-toolkit:5.5.0-pyt;它包含mmdet3d并暴露BEVFusion的converttrainevaluateinference子任务。

评估后SIGSEGV in BEVFusion 5.5:一些本地docker运行可以写出检查点或预测文件,但在cuMemRetainAllocationHandle中以Signal 11 (SIGSEGV)结束并返回TAO Execution status: FAIL。不要仅根据Docker退出码就标记动作成功;检查TAO日志或status.json。如果在此失败前生成了检查点,对于下游诊断,只使用确切的目标检查点(如epoch_1.pth),除非动作明确请求最新的检查点,否则不要将last_checkpoint视为最佳检查点。

缺失模态数据:如果使用多模态融合,请确保相机图像和LiDAR点云都存在。

Epoch编号:BEVFusion检查点epoch编号可能不遵循标准的零填充格式。

检查点交接:对于父模型选择,请使用SDK/模型检查点解析器。对于直接的本地docker链式操作,请检查train结果并传递确切的目标检查点路径(如epoch_1.pth);仅当用户明确要求最新时才使用latest.pth。Resume/retrain必须设置train.resume: truetrain.resume_training_checkpoint_path为要恢复的确切检查点。

Spec Param / Parent Model Inference

模型特定的推理映射属于这个MD文件,而不是config.json。生成的运行器应在create_job()之前阅读此部分并应用SDK辅助函数的映射。这模拟了旧的微服务infer_params.py流程。

来自TAO Core bevfusion.config.json的推理映射:

动作 Spec字段 推理函数 含义
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_modelparent_model_folder,将上游train/export/AutoML子作业id作为parent_job_id传递。SDK列出父结果文件夹、过滤检查点工件并返回所选模型文件或文件夹。不要将这些映射添加回config.json,也不要修补生成的运行器脚本来猜测检查点路径。