tao-train-sparse4d

Par nvidia · skills

Sparse4D pour la détection et le suivi d'objets 3D temporels multi-caméras. Utilise des requêtes sparse avec déformable

npx skills add https://github.com/nvidia/skills --skill tao-train-sparse4d

Sparse4D

Sparse4D pour la détection et le suivi d'objets 3D temporels multi-caméra. Utilise des requêtes éparses avec attention déformable à travers les vues de caméra et le temps pour la perception 3D de bout en bout. Inclut une banque d'instances pour le suivi temporel.

Nécessite un backbone ResNet-101 préentraîné. Définissez train.pretrained_model_path.

Schémas Dataclass

Les schémas TAO Core générés sont packagés dans schemas/<action>.schema.json, avec schemas/manifest.json listant les actions disponibles. Chaque schéma généré émet également references/spec_template_<action>.yaml depuis le champ default du niveau supérieur du schéma. L'activation d'AutoML est déclarée au niveau du modèle dans references/skill_info.yaml via automl_enabled. AutoML exécutable nécessite toujours que schemas/train.schema.json et references/spec_template_train.yaml existent et se parsent. Utilisez le schéma train packagé pour automl_default_parameters, automl_disabled_parameters, les valeurs par défaut, les limites min/max, les énumérations, les poids d'options, les conditions mathématiques, les dépendances et les paramètres populaires. Ne supposez pas que ~/tao-core est disponible à l'exécution ; les mainteneurs régénèrent les schémas et templates avant de packager la skill bank.

Politique d'action Train

Ce modèle est activé pour AutoML au niveau du modèle. Avant de gérer toute demande au stade train, lisez references/skill_info.yaml et résolvez l'override d'exécution à partir d'une valeur automl_policy explicite ou d'une demande de workflow utilisateur. Traitez les phrases comme « turn off AutoML », « disable AutoML », « no HPO » ou « plain training » comme automl_policy: off pour cette exécution uniquement ; sinon, par défaut à auto. Quand automl_policy: auto, automl_enabled: true, et que schemas/train.schema.json et references/spec_template_train.yaml sont packagés, routez l'action train via tao-skill-bank:tao-run-automl par défaut avec le skill_dir de ce modèle. Préservez les overrides de workflow/application pour les datasets, specs, répertoires de sortie, paramètres GPU/plateforme, checkpoints parents et automl_policy. Utilisez l'entraînement direct du modèle uniquement quand automl_policy: off ou quand le schéma train/template packagé est manquant ; dans le cas du schéma manquant, signalez qu'AutoML est activé mais non exécutable pour ce modèle jusqu'à la génération des schémas.

Les actions non-train comme evaluate, inference, export et les flux de déploiement restent dans cette skill de modèle. L'override automl_policy par exécution ne change pas les métadonnées du modèle.

Exigences d'entraînement

  • Type de dataset : sparse4d
  • Formats : ovpkl
  • Métrique de suivi : val_mAP

Exigences de dataset par action

Action Clé Spec Source Fichiers Liste ?
dataset_convert aicity.root id Non
evaluate dataset.data_root eval_dataset (depuis job convert, spec : aicity.split) Non
evaluate model.head.instance_bank.anchor train_datasets /results/{dataset_convert_job_id}/anchor_init.npy Non
evaluate dataset.train_dataset.ann_file train_datasets (depuis job convert, spec : aicity.split) Non
evaluate dataset.val_dataset.ann_file eval_dataset (depuis job convert, spec : aicity.split) Non
evaluate dataset.test_dataset.ann_file inference_dataset (depuis job convert, spec : aicity.split) Non
export model.head.instance_bank.anchor train_datasets /results/{dataset_convert_job_id}/anchor_init.npy Non
inference dataset.data_root inference_dataset (depuis job convert, spec : aicity.split) Non
inference model.head.instance_bank.anchor train_datasets /results/{dataset_convert_job_id}/anchor_init.npy Non
inference dataset.train_dataset.ann_file train_datasets (depuis job convert, spec : aicity.split) Non
inference dataset.val_dataset.ann_file eval_dataset (depuis job convert, spec : aicity.split) Non
inference dataset.test_dataset.ann_file inference_dataset (depuis job convert, spec : aicity.split) Non
quantize dataset.data_root train_datasets (depuis job convert, spec : aicity.split) Non
quantize model.head.instance_bank.anchor train_datasets /results/{dataset_convert_job_id}/anchor_init.npy Non
quantize dataset.train_dataset.ann_file train_datasets (depuis job convert, spec : aicity.split) Non
quantize dataset.val_dataset.ann_file eval_dataset (depuis job convert, spec : aicity.split) Non
quantize dataset.test_dataset.ann_file inference_dataset (depuis job convert, spec : aicity.split) Non
quantize dataset.quant_calibration_dataset.images_dir train_datasets Non
train dataset.data_root train_datasets (depuis job convert, spec : aicity.split) Non
train model.head.instance_bank.anchor train_datasets /results/{dataset_convert_job_id}/anchor_init.npy Non
train dataset.train_dataset.ann_file train_datasets (depuis job convert, spec : aicity.split) Non
train dataset.val_dataset.ann_file eval_dataset (depuis job convert, spec : aicity.split) Non
train dataset.test_dataset.ann_file inference_dataset (depuis job convert, spec : aicity.split) Non

Overrides Spec typiques

Les overrides de source de données sont obligatoires pour chaque action — l'agent DOIT construire les chemins de source de données depuis le tableau Exigences de dataset par action et les inclure dans spec_overrides.

S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"

train (sources de données obligatoires) :

{
    "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 (sources de données obligatoires) :

{
    "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 (sources de données obligatoires) :

{
    "model.head.instance_bank.anchor": f"{S3_TRAIN}//results/{dataset_convert_job_id}/anchor_init.npy",
}

inference (sources de données obligatoires) :

{
    "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 (sources de données obligatoires) :

{
    "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}",
}

Dataset d'évaluation

Optionnel. Splits val/test configurés via les chemins des fichiers d'annotation de dataset.

Paramètres importants

  • model.backbone : Backbone. Défaut resnet_101.
  • model.neck.out_channels : Canaux de sortie FPN. Défaut 256. num_outs=4.
  • model.input_shape : Forme d'image d'entrée [W, H]. Défaut [1408, 512].
  • model.head.num_output : Nombre de requêtes de sortie de détection. Défaut 300.
  • model.head.num_decoder : Nombre de couches de décodeur. Défaut 6.
  • model.head.temporal : Activer le raisonnement temporel. Défaut True.
  • model.head.instance_bank.num_anchor : Anchors de la banque d'instances. Défaut 900.
  • model.head.instance_bank.num_temp_instances : Compte d'instances temporelles. Défaut 600.
  • model.depth_branch.loss_weight : Poids de perte de supervision de profondeur. Défaut 0,2.
  • dataset.batch_size : Taille de batch par GPU. Défaut 2.
  • dataset.num_frames : Longueur de séquence. Défaut 200.
  • dataset.classes : Classes de détection. Défaut [person, gr1_t2, agility_digit, nova_carter]. num_ids=70 pour le suivi.
  • train.optim.lr : Taux d'apprentissage. Défaut 5e-5. img_backbone lr_mult=0,2.
  • train.lr_scheduler : Planificateur cosinus avec warmup linéaire (500 iters, ratio 0,333).
  • train.grad_clip.max_norm : Gradient clipping. Défaut 25.
  • train.precision : Options : bf16, fp16, fp32. Défaut bf16.
  • evaluate.metrics : Métriques d'évaluation. Défaut ["detection"]. Évaluation de suivi optionnelle.
  • evaluate.tracking.enabled : Activer l'évaluation de suivi. tracking_threshold=0,2.

Multi-GPU / Multi-Node

Méthode de lancement : Gérée par Lightning (processus Python unique, Lightning crée les workers).

Clé Spec Description Défaut
train.num_gpus Nombre de GPUs 1
train.gpu_ids Indices de dispositifs GPU [0]
train.num_nodes Nombre de nœuds 1
  • Stratégie multi-GPU : ddp_find_unused_parameters_true (pas de support fsdp)
  • sync_batchnorm est toujours activé (True)
  • Itérations par époque calculées comme : num_frames * num_bev_groups / (num_nodes * num_gpus * batch_size)
  • Mise à l'échelle : Lors de l'augmentation des GPUs, la taille effective du batch augmente et les itérations par époque diminuent proportionnellement

Variables d'environnement multi-node (définies par l'orchestrateur) : WORLD_SIZE, NODE_RANK, MASTER_ADDR, MASTER_PORT, NUM_GPU_PER_NODE.

Matériel

Minimum 2 GPU(s), recommandé 8 GPU(s). 40 GB+ (A100 recommandé) VRAM par GPU. Le modèle temporel multi-caméra consomme beaucoup de mémoire. bf16 requis pour l'entraînement pratique. Multi-GPU fortement recommandé. La banque d'instances nécessite une mémoire substantielle pour le raisonnement temporel.

Motifs d'erreurs

dataset_convert obligatoire : Doit exécuter dataset_convert d'abord pour produire les pickles d'annotation et anchor_init.npy.

Fichier anchor manquant : Définissez model.head.instance_bank.anchor sur le chemin anchor_init.npy des résultats de dataset_convert.

Temporal OOM : Réduisez dataset.num_frames ou dataset.batch_size si vous manquez de mémoire lors de l'entraînement temporel.

Inférence de paramètre Spec / Modèle parent

Les mappages d'inférence spécifiques au modèle appartiennent à ce fichier MD, pas à config.json. Les runners générés doivent lire cette section et appliquer les mappages avec les helpers SDK avant create_job(). Cela reflète l'ancien flux infer_params.py des microservices.

Mappages d'inférence depuis TAO Core sparse4d.config.json :

Action Champ Spec Fonction d'inférence Signification
dataset_convert results_dir output_dir répertoire des résultats du job actuel
evaluate encryption_key key clé de chiffrement
evaluate evaluate.checkpoint parent_model fichier de modèle déduit du dossier des résultats du job parent
evaluate results_dir output_dir répertoire des résultats du job actuel
export encryption_key key clé de chiffrement
export export.checkpoint parent_model fichier de modèle déduit du dossier des résultats du job parent
export export.onnx_file create_onnx_file chemin de sortie ONNX
export results_dir output_dir répertoire des résultats du job actuel
inference encryption_key key clé de chiffrement
inference inference.checkpoint parent_model fichier de modèle déduit du dossier des résultats du job parent
inference results_dir output_dir répertoire des résultats du job actuel
quantize encryption_key key clé de chiffrement
quantize quantize.model_path parent_model fichier de modèle déduit du dossier des résultats du job parent
quantize results_dir output_dir répertoire des résultats du job actuel
train encryption_key key clé de chiffrement
train results_dir output_dir répertoire des résultats du job actuel
train train.pretrained_model_path ptm_if_no_resume_model PTM quand aucun checkpoint de reprise n'existe
train train.resume_training_checkpoint_path resume_model fichier de modèle déduit du dossier des résultats du job actuel

Pour parent_model ou parent_model_folder, passez l'identifiant du job enfant train/export/AutoML en amont comme parent_job_id. Le SDK liste le dossier de résultat parent, filtre les artefacts de checkpoint et retourne le fichier ou dossier de modèle sélectionné. N'ajoutez pas ces mappages à config.json et ne patchez pas les scripts de runners générés pour deviner les chemins de checkpoint.

Skills similaires