tao-train-bevfusion について
tao-train-bevfusion は、LiDAR 点群とカメラ画像を融合して鳥瞰視点の 3D 物体検出を行う NVIDIA TAO BEVFusion 用スキルです。データセット変換、学習、評価、推論に対応し、複数 GPU・複数ノードでの学習も扱います。
主な機能
- 01LiDAR とカメラデータの融合
- 02鳥瞰視点の 3D 物体検出
- 03データセット変換・学習・評価
- 04複数 GPU・複数ノードでの学習
- 05AutoML 学習ポリシーへの対応
活用シーン
- 01自動運転向け 3D 認識モデルの学習
- 02BEVFusion の検出結果の評価
- 03KITTI 形式データセットでの推論
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill tao-train-bevfusionインストール後、Claude Code で/tao-train-bevfusionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/skill_info.yamlspec_template_dataset_convert.yamlspec_template_evaluate.yamlspec_template_inference.yamlspec_template_train.yamlschemas/dataset_convert.schema.jsonevaluate.schema.jsoninference.schema.jsonmanifest.jsontrain.schema.json詳細
BEVFusion
マルチセンサーによる3D物体検出のためのBEVFusionです。LiDARの点群とカメラ画像を鳥瞰図(BEV)空間で融合します。堅牢な3D認識を実現するため、自動運転で使用されます。
Swin画像バックボーンの事前学習済みバックボーンパスを設定します。
データクラススキーマ
生成された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、デフォルト値、最小/最大値の範囲、列挙型、オプションの重み、数式条件、依存関係、よく使われるパラメーターには、パッケージ化されたtrainスキーマを使用してください。実行時に~/tao-coreが存在することを前提にしないでください。メンテナーはスキルバンクをパッケージ化する前に、スキーマとテンプレートを再生成してください。
Trainアクションのポリシー
このモデルでは、モデルレイヤーでAutoMLが有効になっています。trainステージのリクエストを処理する前に、references/skill_info.yamlを読み込み、明示的なautoml_policy値、またはユーザーのワークフローリクエストから、この実行に適用する設定を解決してください。「AutoMLをオフにする」「AutoMLを無効にする」「HPOなし」「通常のトレーニング」などの表現は、この実行に限りautoml_policy: offとして扱ってください。それ以外の場合は、デフォルトでautoにします。automl_policy: auto、automl_enabled: trueが設定され、schemas/train.schema.jsonとreferences/spec_template_train.yamlの両方がパッケージ化されている場合は、このモデルのskill_dirを指定して、デフォルトでtrainアクションをtao-skill-bank:tao-run-automl経由で実行してください。データセット、spec、出力ディレクトリ、GPU/プラットフォーム設定、親チェックポイント、automl_policyに対するワークフロー/アプリケーションのオーバーライドは保持してください。直接モデルをトレーニングするのは、automl_policy: offの場合、またはパッケージ化されたtrainスキーマ/テンプレートがない場合に限ります。スキーマがない場合は、AutoMLは有効になっているものの、スキーマが生成されるまではこのモデルで実行できないことを報告してください。
evaluate、inference、export、deployフローなどのtrain以外のアクションは、引き続きこのモデルのスキルで処理します。実行ごとのautoml_policyオーバーライドによってモデルのメタデータが変わることはありません。
トレーニング要件
- データセットの種類: bevfusion
- 形式: default
- モニタリング指標: AP11
アクションごとのデータセット要件
| アクション | Spec Key | ソース | ファイル | リスト? |
|---|---|---|---|---|
| dataset_convert | root_dir | id | いいえ | |
| evaluate | dataset.test_dataset | train_datasets | ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl | いいえ |
| inference | dataset.root_dir | train_datasets | いいえ | |
| inference | dataset.test_dataset | train_datasets | ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl | いいえ |
| train | dataset.train_dataset | train_datasets | ann_file: results/{dataset_convert_job_id}/kitti_person_infos_train.pkl | いいえ |
| train | dataset.val_dataset | train_datasets | ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl | いいえ |
| train | dataset.test_dataset | train_datasets | ann_file: results/{dataset_convert_job_id}/kitti_person_infos_val.pkl | いいえ |
代表的なSpecオーバーライド
データソースのオーバーライドはすべてのアクションで必須です。エージェントは上記のアクションごとのデータセット要件の表をもとにデータソースのパスを構築し、spec_overridesに含める必要があります。
S3_TRAIN = "s3://bucket/data/train"
train(必須データソース):
{
"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(必須データソース):
{
"dataset.test_dataset": {"ann_file": f"{S3_TRAIN}/results/{dataset_convert_job_id}/kitti_person_infos_val.pkl"},
}
inference(必須データソース):
{
"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データセット
任意です。Valデータセットの分割は、データセット設定のann_fileで構成します。
重要なパラメーター
- 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 です。
マルチ GPU/マルチノード
起動方法: torchrun(LIGHTNING_EXCLUDED_NETWORK)です。エントリーポイントは torchrun --nnodes=N --nproc-per-node=M train.py を実行します。通常の python ではありません。
| Spec Key | 説明 | デフォルト |
|---|---|---|
train.num_gpus | ノードごとの GPU 数 | 1 |
train.gpu_ids | GPU デバイスのインデックス | [0] |
train.num_nodes | ノード数 | 1 |
CUDA_VISIBLE_DEVICESはTAO_VISIBLE_DEVICESから明示的に設定されます。- BEVFusion は Lightning DDP ではなく、mmdet3d ベースの分散学習を使用します。
RANKが未設定の場合、NODE_RANKの値がRANKにコピーされます。
マルチノード環境変数(オーケストレーターによって設定):
| 変数 | 用途 |
|---|---|
WORLD_SIZE | ノード数 |
NODE_RANK | このノードのランク |
MASTER_ADDR | ランク 0 のノードの IP アドレス |
MASTER_PORT | ランク 0 のポート(デフォルトは 29500) |
NUM_GPU_PER_NODE | ノードごとの GPU 数 |
ハードウェア
最低 2 GPU、推奨 4 GPU です。GPU ごとに 24 GB 以上(A100 を推奨)の VRAM が必要です。BEVFusion は複数センサーのフュージョンを行うため、メモリを大量に消費します。A100 GPU を強く推奨します。マルチ GPU 学習を想定しています。
エラーパターン
dataset_convert が必要です:学習を始める前に dataset_convert を実行して、info pickle ファイルを生成してください。
モダリティデータの欠落:マルチモーダルフュージョンを使用する場合は、カメラ画像と LiDAR 点群の両方が存在することを確認してください。
エポック番号:BEVFusion のチェックポイントのエポック番号は、標準的なゼロ埋め形式に従わない場合があります。
Spec パラメーター/親モデルの推論
モデル固有の推論マッピングは、config.json ではなくこの MD ファイルに記述します。生成されたランナーはこのセクションを読み込み、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_model または parent_model_folder には、上流の train/export/AutoML 子ジョブの ID を parent_job_id として渡します。SDK は親の結果フォルダーを一覧表示し、チェックポイントの成果物を絞り込み、選択されたモデルファイルまたはフォルダーを返します。これらのマッピングを config.json に戻したり、チェックポイントのパスを推測するために生成されたランナースクリプトを修正したりしないでください。