tao-train-grounding-dino
NVIDIA/skills
Entraîne, évalue, exporte, quantifie et effectue des inférences pour un modèle Grounding DINO capable de détecter des objets décrits par des invites textuelles sans vocabulaire de classes fixe.
...Développer toutMise en pratique de DINO
Grounding DINO pour la détection d'objets dans un ensemble ouvert. Combine la détection de type DINO avec l'encodeur de texte BERT pour une détection guidée par le langage. Détecte les objets décrits par des invites textuelles sans vocabulaire de classes fixe.
Définissez `train.pretrained_model_path` pour obtenir l'ensemble des poids de Grounding DINO ou `model.pretrained_backbone_path` pour le backbone uniquement.
Pour les actions TAO Deploy TensorRT (gen_trt_engine, TensorRT evaluate et TensorRT inference), consultez d’abord le fichier references/tao-deploy-grounding-dino.md. Les modèles de spécifications de déploiement se trouvent dans le dossier references/ de cette compétence, avec le préfixe spec_template_deploy_*.yaml.
Schémas Dataclass
Les schémas TAO Core générés sont regroupés dans schemas/, le fichier schemas/manifest.json répertoriant les actions disponibles. Chaque schéma généré produit également un fichier references/spec_template_ à partir du champ par défaut de niveau supérieur du schéma. L’activation d’AutoML est déclarée au niveau de la couche modèle dans `references/skill_info.yaml ` via `automl_enabled`. Pour qu’AutoML soit exécutable, les fichiers ` schemas/train.schema.json ` et `references/spec_template_train.yaml ` doivent toujours exister et être analysés. Utilisez le schéma de formation fourni dans le package pour les paramètres automl_default_parameters, automl_disabled_parameters, les valeurs par défaut, les limites min/max, les énumérations, les poids des options, les conditions mathématiques, les dépendances et les paramètres courants. Ne comptez pas sur la présence de ~/tao-core lors de l’exécution ; les responsables régénèrent les schémas et les modèles avant de packager la banque de compétences.
Politique d’action d’entraînement
Ce modèle est compatible avec AutoML au niveau de la couche de modèle. Avant de traiter toute requête de phase d’entraînement, lisez le fichier references/skill_info.yaml et déterminez la valeur de remplacement de l’exécution à partir soit d’une valeur automl_policy explicite, soit de la requête de workflow de l’utilisateur. Utilisez automl_policy : on par défaut et n’exposez les options on / off que dans les nouvelles invites de lancement. Traitez les expressions telles que « désactiver AutoML », « désactiver AutoML », « pas de HPO » ou « entraînement simple » comme automl_policy: off pour cette exécution uniquement. Lorsque automl_policy est défini sur « on », que automl_enabled est défini sur « true » et que les fichiers schemas/train.schema.json et references/spec_template_train.yaml sont tous deux inclus dans le package, acheminez l’action « train » par défaut via tao-skill-bank:tao-run-automl en utilisant le répertoire skill_dir de ce modèle. Conserver les remplacements du workflow/de l’application pour les ensembles de données, les spécifications, les répertoires de sortie, les paramètres GPU/plateforme, les points de contrôle parents et automl_policy. N’utilisez l’entraînement direct du modèle que lorsque `automl_policy` est défini sur `off` ou que le schéma/modèle d’entraînement inclus dans le package est manquant ; dans le cas d’un schéma manquant, signalez qu’AutoML est activé mais ne peut pas être exécuté pour ce modèle tant que les schémas n’ont pas été générés.
Les actions hors entraînement, telles que les flux d’évaluation, d’inférence, d’exportation et de déploiement, restent dans cette compétence de modèle. La modification de l’`automl_policy` par exécution ne modifie pas les métadonnées du modèle.
Exigences d’entraînement
- Type de jeu de données : object_detection
- Formats : odvg, coco, raw
- Métrique de suivi : val_mAP50
Exigences relatives au jeu de données par action
| Action | Spécification clé | Source | Fichiers | Liste ? |
|---|---|---|---|---|
| évaluer | ensemble_de_données.test_data_sources | eval_dataset | image_dir : images.tar.gz, json_file : annotations.json | Non |
| inférence | dataset.infer_data_sources.image_dir | ensemble_de_données_d'inférence | images.tar.gz | Oui |
| inférence | ensemble_de_données.sources_de_données_d’inférence.légendes | invites de workflow | liste des invites | Oui |
| quantification | ensemble de données.sources de données d'entraînement | ensembles_de_données_d'entraînement | image_dir : images.tar.gz, json_file : annotations_odvg.jsonl, label_map : annotations_odvg_labelmap.json | Oui |
| quantifier | dataset.val_data_sources | ensemble_de_données_d'évaluation | image_dir : images.tar.gz, json_file : annotations.json | Non |
| quantifier | dataset.quant_calibration_data_sources | ensemble de données de calibration/évaluation | image_dir : images.tar.gz, json_file : annotations.json | Non |
| entraînement | dataset.train_data_sources | ensembles_de_données_d'entraînement | image_dir : images.tar.gz, json_file : annotations_odvg.jsonl, label_map : annotations_odvg_labelmap.json | Oui |
| entraînement | dataset.val_data_sources | ensemble_de_données_d'évaluation | image_dir : images.tar.gz, json_file : annotations.json | Non |
Le runner peut utiliser des archives d’images telles que images.tar.gz, mais les spécifications locales directes
de la CLI Docker TAO doivent pointer image_dir vers un répertoire d’images extrait.
Les métadonnées de la compétence marquent ces sources d’images issues d’archives avec
runtime: extracted_folder afin qu’un nouveau runner puisse décompresser l’archive avant
de lancer TAO.
Remplacements typiques des spécifications
Les remplacements de source de données sont obligatoires pour chaque action — l’agent DOIT construire les chemins d’accès aux sources de données à partir du tableau « Exigences relatives aux ensembles de données par action » ci-dessus 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": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources" : {"image_dir" : f"{S3_EVAL}/images.tar.gz", "json_file" : f"{S3_EVAL}/annotations.json"},
}
deploy/gen_trt_engine (utiliser references/tao-deploy-grounding-dino.md) :
{
"gen_trt_engine.onnx_file": "",
"gen_trt_engine.trt_engine": "",
"gen_trt_engine.tensorrt.data_type" : "FP16",
}
Inférence (sources de données obligatoires) :
{
"inference.checkpoint": "<point de contrôle d'entraînement/AutoML sélectionné>",
"dataset.infer_data_sources.image_dir": [f"{S3_EVAL}/images.tar.gz"],
"dataset.infer_data_sources.captions": [
"extincteur",
"cône",
"chariot",
"chariot élévateur"
],
}
évaluation (sources de données obligatoires) :
{
"evaluate.checkpoint": "<point de contrôle d'entraînement/AutoML sélectionné>",
"dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
quantification (sources de données obligatoires) :
{
"quantize.model_path": "",
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources" : {"image_dir" : f"{S3_EVAL}/images.tar.gz", "json_file" : f"{S3_EVAL}/annotations.json"},
"dataset.quant_calibration_data_sources" : {"image_dir" : f"{S3_EVAL}/images.tar.gz", "json_file" : f"{S3_EVAL}/annotations.json"},
}
Ensemble de données d’évaluation
Facultatif. La validation utilise des annotations au format COCO pour le mAP, même si l'entraînement peut utiliser le format ODVG.
Paramètres importants
- model.backbone: valeur par défaut swin_tiny_224_1k. Prend également en charge resnet_50 et d’autres variantes de Swin. Swin offre généralement de meilleures performances pour les tâches de « grounding ».
- model.text_encoder_type: modèle BERT pour l’encodage de texte. Valeur par défaut : bert-base-uncased. La valeur par défaut de max_text_len est 256.
- model.max_text_len: veillez à ce que cette valeur corresponde aux cartes de position des étiquettes/tokens du jeu de données. Ne la réduisez pas pour les tests préliminaires, sauf si les cartes d’étiquettes correspondantes sont régénérées avec la même longueur ; sinon, la validation peut échouer en raison d’une incompatibilité de forme matricielle entre les probabilités des tokens et les cartes de position.
- train.optim.lr: Taux d’apprentissage. Valeur par défaut : 2e-4. lr_backbone : 2e-5. Prend en charge la précision bf16 en plus de fp16/fp32.
- dataset.max_labels: Nombre maximal d’étiquettes par image pendant l’entraînement. Valeur par défaut : 50. À augmenter pour les ensembles de données à annotation dense.
- model.num_queries: Nombre de requêtes d’objets. Valeur par défaut : 900 (supérieure aux 300 de DINO) en raison de la nature à vocabulaire ouvert du modèle.
- model.num_queries / model.num_select: veillez à ce que la valeur de
num_queriessoit suffisamment élevée pour le nombre de cibles ODVG correspondantes dans un lot. Des valeurs de « smoke » très faibles, telles que 20, peuvent entraîner des échecs lors de l'indexation des cibles hongroises sur des images denses ; utilisez au moins 100 pour les exécutions « smoke » minimales de Grounding DINO, sauf si l'on sait que le jeu de données comporte moins d'objets par image. - train.optim.lr_steps: plan de régression en plusieurs étapes. Valeur par défaut [10].
Multi-GPU / Multi-nœuds
Méthode de lancement : gérée par Lightning (processus Python unique, Lightning lance les workers).
| Clé de spécification | Description | Valeur par défaut |
|---|---|---|
train.num_gpus |
Nombre de GPU | 1 |
train.gpu_ids |
Indices des périphériques GPU | [0] |
train.num_nodes |
Nombre de nœuds | 1 |
train.distributed_strategy |
ddp ou fsdp |
ddp |
Comportement DDP/FSDP identique à celui de DINO. Le mode multi-nœuds nécessite que les variables d’environnement WORLD_SIZE, NODE_RANK, MASTER_ADDR et MASTER_PORT soient définies par l’orchestrateur.
Valeurs par défaut d'exportation / TRT
- Entrée d’exportation : 960x544 (plus grande que les autres modèles OD), opset 17. Conserver
les spécifications d’exportation de Grounding-DINO à la résolution d’exportation du modèle pour les tests de validation ;
la réduction de l’exportation à des tailles d’image très petites, telles que 128x128, peut déclencher une
assertion de forme d’inférence ONNX PyTorch dans la tête de texte contrastive pendant
torch.onnx.export. - L'interface CLI parent PyTorch
grounding_dinoprend en chargel'entraînement,l'évaluation,l'inférence,l'exportationetla quantification. Exécutez la génération du moteur TensorRT, l'inférence TensorRT et l'évaluation TensorRT viareferences/tao-deploy-grounding-dino.md. - Types de données TRT : FP32 et FP16 uniquement — INT8 n’est PAS pris en charge
- Espace de travail TRT : 8 192 Mo (8 fois plus grand que les autres modèles OD)
- Taille maximale de lot TRT : 4
Matériel
Au moins 1 GPU, 4 GPU recommandés. 24 Go+ (A100 recommandé) de VRAM par GPU. Grounding DINO est plus gourmand en ressources que le DINO standard en raison de l’encodeur de texte (BERT). 24 Go+ de mémoire GPU recommandés. Réduisez la taille de lot (batch_size) pour les GPU de 16 Go.
Cas d'erreur
Mémoire CUDA insuffisante: réduisez la taille du lot (batch_size) (4 → 2 → 1). L’encodeur de texte BERT ajoute une surcharge mémoire importante en plus de l’architecture de base de vision.
ID de catégorie d’annotation Val: les annotations de validation doivent avoir des ID de catégorie commençant par 0 pour un calcul correct de la perte. Utilisez la conversion de format d’annotation si nécessaire.
Erreur de chargement de l’encodeur de texte: assurez-vous que le conteneur a accès au téléchargement des poids bert-base-uncased ou indiquez un chemin d’accès local.
La quantification à l’aide d’un checkpoint PyTorch échoue dans TAO Toolkit 7.0.0-rc-226:
Le script de quantification Grounding-DINO du conteneur transmet cap_lists=None lors du
chargement d’un checkpoint, ce qui provoque un échec dans post_process.py. La quantification ONNX utilise
l’artefact ONNX exporté et les données d’étalonnage COCO, mais l’image PyTorch par défaut de la version rc-226
ne dispose pas non plus du module modelopt.onnx.quantization. Considérez cela comme
un blocage au niveau de l’image/du SDK, et non comme un problème lié au résolveur de points de contrôle.
Les formes mat1 et mat2 ne peuvent pas être multipliées dans post_process.py: les cartes de
longueur des tokens de texte et de position des étiquettes ne correspondent pas, généralement parce que
model.max_text_len a été redéfini à une valeur inférieure à la valeur par défaut de 256, alors que les cartes d’étiquettes du jeu de données
utilisent toujours des cartes de position d’une longueur de 256. Rétablissez la valeur de ` model.max_text_len ` ou
régénérez les cartes de positions des étiquettes avec la même longueur.
L’index est hors limites pour la dimension 0 dans criterion.py: model.num_queries
est trop petit pour les cibles ODVG correspondantes dans le lot actuel. Augmentez
model.num_queries et veillez à ce que model.num_select reste compatible avec cette valeur.
Erreur NotADirectoryError avec images.tar.gz/: l’interface CLI TAO directe
tente de parcourir un chemin d’archive comme s’il s’agissait d’un répertoire. Extrayez l’archive et définissez
le champ image_dir correspondant sur le dossier d’images extrait ; les sources de données de compétences basées sur des archives
utilisent runtime:extracted_folder pour cette raison.
Paramètres de spécification / Inférence du modèle parent
Les mappages d’inférence spécifiques au modèle doivent figurer dans ce fichier MD, et non dans config.json. Les exécuteurs générés doivent lire cette section et appliquer les mappages à l’aide des fonctions d’aide du SDK avant la méthode create_job(). Cela reflète l’ancien flux infer_params.py des microservices.
Mappages d’inférence issus du fichier grounding_dino.config.json de TAO Core :
| Action | Champ de spécification | Fonction d’inférence | Signification |
|---|---|---|---|
| évaluer | clé_de_chiffrement |
clé |
clé de chiffrement |
| évaluer | évaluation.point de contrôle |
modèle_parent |
fichier de modèle déduit à partir du dossier de résultats de la tâche parente |
| évaluer | evaluate.trt_engine |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| évaluer | results_dir |
output_dir |
répertoire des résultats de la tâche en cours |
| export | clé_de_chiffrement |
clé |
clé de chiffrement |
| export | export.point de contrôle |
modèle_parent |
fichier de modèle déduit à partir du dossier de résultats de la tâche parente |
| export | export.onnx_file |
create_onnx_file |
chemin d'accès au fichier ONNX de sortie |
| export | répertoire_résultats |
répertoire_de_sortie |
répertoire des résultats du travail en cours |
| inférence | clé_de_chiffrement |
clé |
clé de chiffrement |
| inférence | point de contrôle d'inférence |
modèle_parent |
fichier de modèle déduit à partir du dossier de résultats de la tâche parente |
| inférence | inference.trt_engine |
parent_model |
fichier de modèle déduit à partir du dossier de résultats du travail parent |
| inférence | results_dir |
output_dir |
répertoire des résultats du job en cours |
| quantification | clé_de_chiffrement |
clé |
clé de chiffrement |
| quantifier | quantize.model_path |
parent_model |
fichier de modèle déduit du dossier de résultats du travail parent |
| quantize | results_dir |
répertoire_de_sortie |
répertoire des résultats du travail en cours |
| entraînement | clé_de_chiffrement |
clé |
clé de chiffrement |
| entraînement | chemin_vers_le_modèle_pré-entraîné |
ptm_si_pas_de_modèle_de_reprise |
PTM lorsqu’il n’existe aucun point de contrôle de reprise |
| entraînement | répertoire_des_résultats |
output_dir |
répertoire des résultats du travail en cours |
| train | train.chemin_vers_le_modèle_pré-entraîné |
ptm_if_no_resume_model |
PTM lorsqu'il n'existe aucun point de contrôle de reprise |
| train | train.chemin_vers_le_point_de_contrôle_de_reprise_de_l'entraînement |
resume_model |
fichier de modèle déduit à partir du dossier de résultats du travail en cours |
Pour parent_model ou parent_model_folder, transmettez l’ID du job enfant en amont (train/export/AutoML) en tant que parent_job_id. Le SDK répertorie le dossier de résultats parent, filtre les artefacts de points de contrôle et renvoie le fichier ou le dossier de modèle sélectionné. N’ajoutez pas ces mappages dans config.json et ne modifiez pas les scripts de runner générés pour deviner les chemins d’accès aux points de contrôle.
Lorsque vous sélectionnez un point de contrôle Grounding-DINO en dehors du résolveur du SDK, faites correspondre exactement l’
artefact d’époque/étape souhaité, par exemple
model_epoch_000_step_00046.pth. Le lien symbolique gdino_model_latest.pth n’est valide
que lorsque « latest » est explicitement demandé. Transférez les paramètres structurels du modèle, tels que
model.backbone, model.num_queries, model.num_select,
model.num_feature_levels, model.max_text_len et la résolution d’entrée d’exportation
vers les spécifications d’évaluation, d’inférence, d’exportation et de déploiement afin que les formes des points de contrôle et
du moteur correspondent.
Déploiement
- tao-deploy-grounding-dino
---
name: tao-train-grounding-dino
description: Trains, evaluates, exports, quantizes, and runs inference for a Grounding DINO model that detects objects described by text prompts without a fixed class vocabulary.
license: Apache-2.0
---
# Grounding DINO
Grounding DINO for open-set object detection. Combines DINO-style detection with BERT text encoder for language-guided detection. Detects objects described by text prompts without fixed class vocabulary.
Set train.pretrained_model_path for full Grounding DINO weights or model.pretrained_backbone_path for backbone-only.
For TAO Deploy TensorRT actions (`gen_trt_engine`, TensorRT `evaluate`, and TensorRT `inference`), read `references/tao-deploy-grounding-dino.md` first. Deploy spec templates live in this skill's `references/` folder with the `spec_template_deploy_*.yaml` prefix.
## 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.
## 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. Use `automl_policy: on` by default and only expose `on` / `off` in new launch prompts. Treat phrases like "turn off AutoML", "disable AutoML", "no HPO", or "plain training" as `automl_policy: off` for this run only. When `automl_policy: on`, `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.
## Training Requirements
- **Dataset type:** object_detection
- **Formats:** odvg, coco, raw
- **Monitoring metric:** val_mAP50
### Per-Action Dataset Requirements
| Action | Spec Key | Source | Files | List? |
|---|---|---|---|---|
| evaluate | dataset.test_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| inference | dataset.infer_data_sources.image_dir | inference_dataset | images.tar.gz | Yes |
| inference | dataset.infer_data_sources.captions | workflow prompts | prompt list | Yes |
| quantize | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json | Yes |
| quantize | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| quantize | dataset.quant_calibration_data_sources | calibration/eval dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
| train | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json | Yes |
| train | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | No |
The runner may source image archives as `images.tar.gz`, but direct local
Docker TAO CLI specs must point `image_dir` to an extracted image directory.
Skill metadata marks these archive-backed image sources with
`runtime: extracted_folder` so a fresh runner can unpack the archive before
launching TAO.
### 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"
S3_EVAL = "s3://bucket/data/eval"
```
**train (mandatory data sources):**
```python
{
"train.num_epochs": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
```
**deploy/gen_trt_engine (use `references/tao-deploy-grounding-dino.md`):**
```python
{
"gen_trt_engine.onnx_file": "<exported_onnx_uri>",
"gen_trt_engine.trt_engine": "<output_engine_path>",
"gen_trt_engine.tensorrt.data_type": "FP16",
}
```
**inference (mandatory data sources):**
```python
{
"inference.checkpoint": "<selected train/AutoML checkpoint>",
"dataset.infer_data_sources.image_dir": [f"{S3_EVAL}/images.tar.gz"],
"dataset.infer_data_sources.captions": [
"fire extinguisher",
"cone",
"cart",
"forklift"
],
}
```
**evaluate (mandatory data sources):**
```python
{
"evaluate.checkpoint": "<selected train/AutoML checkpoint>",
"dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
```
**quantize (mandatory data sources):**
```python
{
"quantize.model_path": "<selected train checkpoint or exported ONNX model>",
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
"dataset.quant_calibration_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
```
## Eval Dataset
Optional. Validation uses COCO-format annotations for mAP even though training can use ODVG format.
## Important Parameters
- **model.backbone**: Default swin_tiny_224_1k. Also supports resnet_50 and other Swin variants. Swin generally performs better for grounding tasks.
- **model.text_encoder_type**: BERT model for text encoding. Default bert-base-uncased. max_text_len defaults to 256.
- **model.max_text_len**: Keep this aligned with the dataset label/token
position maps. Do not shrink it for smoke tests unless the corresponding
label maps are regenerated with the same length; otherwise validation can
fail with a matrix shape mismatch between token probabilities and position
maps.
- **train.optim.lr**: Learning rate. Default 2e-4. lr_backbone 2e-5. Supports bf16 precision in addition to fp16/fp32.
- **dataset.max_labels**: Maximum labels per image during training. Default 50. Increase for dense annotation datasets.
- **model.num_queries**: Object queries. Default 900 (higher than DINO's 300) due to open-vocabulary nature.
- **model.num_queries / model.num_select**: Keep `num_queries` high enough
for the number of matched ODVG targets in a batch. Very small smoke values
such as 20 can fail during Hungarian target indexing on dense images; use at
least 100 for minimal Grounding DINO smoke runs unless the dataset is known
to have fewer objects per image.
- **train.optim.lr_steps**: MultiStep LR schedule. Default [10].
## Multi-GPU / Multi-Node
**Launch method:** Lightning-managed (single `python` process, Lightning spawns workers).
| Spec Key | Description | Default |
|----------|-------------|---------|
| `train.num_gpus` | Number of GPUs | 1 |
| `train.gpu_ids` | GPU device indices | [0] |
| `train.num_nodes` | Number of nodes | 1 |
| `train.distributed_strategy` | `ddp` or `fsdp` | `ddp` |
Same DDP/FSDP behavior as DINO. Multi-node requires `WORLD_SIZE`, `NODE_RANK`, `MASTER_ADDR`, `MASTER_PORT` env vars set by orchestrator.
## Export / TRT Defaults
- Export input: 960x544 (larger than other OD models), opset 17. Keep
Grounding-DINO export specs at the template export resolution for smoke tests;
reducing export to very small image sizes such as 128x128 can trigger a
PyTorch ONNX shape-inference assertion in the contrastive text head during
`torch.onnx.export`.
- The parent PyTorch `grounding_dino` CLI supports `train`, `evaluate`,
`inference`, `export`, and `quantize`. Run TensorRT engine generation,
TensorRT inference, and TensorRT evaluation through `references/tao-deploy-grounding-dino.md`.
- TRT data types: FP32, FP16 only — **INT8 is NOT supported**
- TRT workspace: 8192 MB (8x larger than other OD models)
- TRT max_batch_size: 4
## Hardware
Minimum 1 GPU(s), recommended 4 GPU(s). 24GB+ (A100 recommended) VRAM per GPU. Grounding DINO is heavier than standard DINO due to the text encoder (BERT). 24GB+ GPU memory recommended. Reduce batch_size for 16GB GPUs.
## Error Patterns
**CUDA out of memory**: Reduce batch_size (4 -> 2 -> 1). The BERT text encoder adds significant memory overhead on top of the vision backbone.
**Val annotation category IDs**: Validation annotations should have category IDs starting from 0 for correct loss computation. Use annotation format conversion if needed.
**Text encoder loading error**: Ensure the container has access to download bert-base-uncased weights or provide a local path.
**Quantize with a PyTorch checkpoint fails in TAO Toolkit 7.0.0-rc-226**:
The container's Grounding-DINO quantize script passes `cap_lists=None` when
loading a checkpoint, which fails in `post_process.py`. ONNX quantization uses
the exported ONNX artifact and COCO calibration data, but the default rc-226
PyTorch image also lacks the `modelopt.onnx.quantization` module. Treat this as
an image/SDK blocker, not a checkpoint resolver issue.
**mat1 and mat2 shapes cannot be multiplied in `post_process.py`**: The text
token length and label position maps are inconsistent, commonly because
`model.max_text_len` was overridden below the default 256 while the dataset
label maps still use 256-length position maps. Restore `model.max_text_len` or
regenerate the label maps with the same length.
**index is out of bounds for dimension 0 in `criterion.py`**: `model.num_queries`
is too small for the matched ODVG targets in the current batch. Increase
`model.num_queries` and keep `model.num_select` compatible with it.
**NotADirectoryError with `images.tar.gz/<image>.jpg`**: The direct TAO CLI is
trying to traverse an archive path as a directory. Extract the archive and set
the relevant `image_dir` field to the extracted image folder; archive-backed
skill data sources use `runtime: extracted_folder` for this reason.
## 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 `grounding_dino.config.json`:
| Action | Spec Field | Inference Function | Meaning |
|---|---|---|---|
| evaluate | `encryption_key` | `key` | encryption key |
| evaluate | `evaluate.checkpoint` | `parent_model` | model file inferred from the parent job results folder |
| evaluate | `evaluate.trt_engine` | `parent_model` | model file inferred from the parent job results folder |
| evaluate | `results_dir` | `output_dir` | current job results directory |
| export | `encryption_key` | `key` | encryption key |
| export | `export.checkpoint` | `parent_model` | model file inferred from the parent job results folder |
| export | `export.onnx_file` | `create_onnx_file` | output ONNX path |
| export | `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 | `inference.trt_engine` | `parent_model` | model file inferred from the parent job results folder |
| inference | `results_dir` | `output_dir` | current job results directory |
| quantize | `encryption_key` | `key` | encryption key |
| quantize | `quantize.model_path` | `parent_model` | model file inferred from the parent job results folder |
| quantize | `results_dir` | `output_dir` | current job results directory |
| train | `encryption_key` | `key` | encryption key |
| train | `model.pretrained_backbone_path` | `ptm_if_no_resume_model` | PTM when no resume checkpoint exists |
| train | `results_dir` | `output_dir` | current job results directory |
| train | `train.pretrained_model_path` | `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.
When selecting a Grounding-DINO checkpoint outside the SDK resolver, match the
intended epoch/step artifact exactly, for example
`model_epoch_000_step_00046.pth`. The `gdino_model_latest.pth` symlink is valid
only when latest is explicitly requested. Carry structural model settings such
as `model.backbone`, `model.num_queries`, `model.num_select`,
`model.num_feature_levels`, `model.max_text_len`, and export input resolution
forward into evaluate, inference, export, and deploy specs so checkpoint and
engine shapes match.
## Deployment
- [tao-deploy-grounding-dino](references/tao-deploy-grounding-dino.md)
Tous les fichiers
24 fichiersInstaller tao-train-grounding-dino
Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/NVIDIA/skills/tree/main/skills/tao-train-grounding-dino # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
