opción

tao-train-grounding-dino

NVIDIA/skills NVIDIA/skills

Entrena, evalúa, exporta, cuantifica y ejecuta la inferencia de un modelo DINO de Grounding que detecta objetos descritos mediante indicaciones de texto sin un vocabulario de clases fijo.

...Expandir todo
0
Tiempo actualizado 25 de septiembre de 2026

Aplicación de DINO

Grounding DINO para la detección de objetos en conjuntos abiertos. Combina la detección al estilo DINO con el codificador de texto BERT para una detección guiada por el lenguaje. Detecta objetos descritos mediante indicaciones de texto sin un vocabulario de clases fijo.

Establece train.pretrained_model_path para obtener los pesos completos de Grounding DINO o model.pretrained_backbone_path para obtener solo la estructura principal.

Para las acciones de TAO Deploy relacionadas con TensorRT (gen_trt_engine, TensorRT evaluate y TensorRT inference), lee primero el archivo references/tao-deploy-grounding-dino.md. Las plantillas de especificaciones de implementación se encuentran en la carpeta «references/» de esta habilidad con el prefijo «spec_template_deploy_*.yaml ».

Esquemas de Dataclass

Los esquemas generados por TAO Core se empaquetan en schemas/.schema.json, y schemas/manifest.json enumera las acciones disponibles. Cada esquema generado también genera un archivo references/spec_template_.yaml a partir del campo predeterminado de nivel superior del esquema. La habilitación de AutoML se declara en la capa del modelo, en references/skill_info.yaml, mediante automl_enabled. Para que AutoML sea ejecutable, sigue siendo necesario que existan y se analicen los archivos schemas/train.schema.json y references/spec_template_train.yaml. Utiliza el esquema de entrenamiento incluido en el paquete para automl_default_parameters, automl_disabled_parameters, valores por defecto, límites mínimo/máximo, enumeraciones, ponderaciones de opciones, condiciones matemáticas, dependencias y parámetros habituales. No esperes que ~/tao-core esté disponible en tiempo de ejecución; los mantenedores regeneran los esquemas y plantillas antes de empaquetar el banco de habilidades.

Política de acción de entrenamiento

Este modelo tiene AutoML habilitado en la capa del modelo. Antes de gestionar cualquier solicitud de la fase de entrenamiento, lee references/skill_info.yaml y resuelve la anulación de la ejecución a partir de un valor explícito de automl_policy o de la solicitud del flujo de trabajo del usuario. Utiliza automl_policy: on por defecto y solo expón on / off en las nuevas indicaciones de inicio. Trata frases como «desactivar AutoML», «deshabilitar AutoML», «sin HPO» o «entrenamiento básico» como automl_policy: off solo para esta ejecución. Cuando automl_policy: on, automl_enabled: true y tanto schemas/train.schema.json como references/spec_template_train.yaml estén empaquetados, redirige la acción de entrenamiento a través de tao-skill-bank:tao-run-automl de forma predeterminada con el skill_dir de este modelo. Conservar las modificaciones del flujo de trabajo o la aplicación relativas a conjuntos de datos, especificaciones, directorios de salida, configuraciones de GPU o plataforma, puntos de control principales y automl_policy. Utiliza el entrenamiento directo del modelo solo cuando automl_policy: off o cuando falte el esquema o la plantilla de entrenamiento empaquetada; en el caso de que falte el esquema, informa de que AutoML está habilitado pero no se puede ejecutar para este modelo hasta que se generen los esquemas.

Las acciones que no son de entrenamiento, como evaluar, inferir, exportar e implementar flujos, permanecen en esta habilidad del modelo. La sustitución de automl_policy por ejecución no modifica los metadatos del modelo.

Requisitos de entrenamiento

  • Tipo de conjunto de datos: object_detection
  • Formatos: odvg, coco, raw
  • Métrica de seguimiento: val_mAP50

Requisitos del conjunto de datos por acción

Acción Clave de especificación Fuente ¿Archivos ¿Lista?
evaluar conjunto de datos.test_data_sources eval_dataset directorio_de_imágenes: images.tar.gz, archivo_json: annotations.json No
inferencia conjunto de datos.fuentes de datos de inferencia.directorio de imágenes conjunto de datos de inferencia images.tar.gz Sí
inferencia conjunto de datos.fuentes de datos de inferencia.leyendas indicaciones del flujo de trabajo lista de indicaciones Sí
cuantizar conjunto de datos.fuentes de datos de entrenamiento conjuntos de datos de entrenamiento image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json Sí
cuantizar conjunto_de_datos.fuentes_de_datos_de_validación conjunto_de_datos_de_evaluación directorio_de_imágenes: images.tar.gz, archivo_json: annotations.json No
cuantificar conjuntos de datos de calibración de cuantificación conjunto de datos de calibración/evaluación directorio_de_imágenes: images.tar.gz, archivo_json: annotations.json No
entrenar conjunto de datos de entrenamiento.fuentes de datos de entrenamiento conjuntos de datos de entrenamiento directorio_de_imágenes: images.tar.gz, archivo_json: annotations_odvg.jsonl, mapa_de_etiquetas: annotations_odvg_labelmap.json Sí
entrenamiento conjunto de datos.fuentes de datos de validación conjunto de datos de evaluación directorio_de_imágenes: images.tar.gz, archivo_json: annotations.json No

El ejecutor puede utilizar archivos de imágenes como images.tar.gz, pero las especificaciones directas locales de la CLI de Docker TAO deben indicar que image_dir apunte a un directorio de imágenes extraído. Los metadatos de la habilidad marcan estas fuentes de imágenes basadas en archivos con runtime: extracted_folder para que un nuevo ejecutor pueda descomprimir el archivo antes de iniciar TAO.

Modificaciones típicas de las especificaciones

Las modificaciones de las fuentes de datos son obligatorias para cada acción: el agente DEBE construir las rutas de las fuentes de datos a partir de la tabla «Requisitos del conjunto de datos por acción» anterior e incluirlas en `spec_overrides`.

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

train (fuentes de datos obligatorias):

{
    "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 (utiliza references/tao-deploy-grounding-dino.md):

{
    "gen_trt_engine.onnx_file": "",
    "gen_trt_engine.trt_engine": "",
    "gen_trt_engine.tensorrt.data_type": "FP16",
}

Inferencia (fuentes de datos obligatorias):

{
    "inference.checkpoint": "<punto de control seleccionado de entrenamiento/AutoML>",
    "dataset.infer_data_sources.image_dir": [f"{S3_EVAL}/images.tar.gz"],
    "dataset.infer_data_sources.captions": [
        "extintor",
        "cono",
        "carrito",
        "carretilla elevadora"
    ],
}

evaluar (fuentes de datos obligatorias):

{
    "evaluate.checkpoint": "<punto de control de entrenamiento/AutoML seleccionado>",
    "dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}

cuantización (fuentes de datos obligatorias):

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

Conjunto de datos de evaluación

Opcional. La validación utiliza anotaciones en formato COCO para el mAP, aunque el entrenamiento puede utilizar el formato ODVG.

Parámetros importantes

  • model.backbone: Por defecto, swin_tiny_224_1k. También admite resnet_50 y otras variantes de Swin. Swin suele ofrecer mejores resultados en tareas de grounding.
  • model.text_encoder_type: modelo BERT para la codificación de texto. Por defecto, bert-base-uncased. El valor por defecto de max_text_len es 256.
  • model.max_text_len: Mantén este valor alineado con los mapas de etiquetas/tokens del conjunto de datos. No lo reduzcas para pruebas rápidas a menos que los correspondientes mapas de etiquetas se regeneren con la misma longitud; de lo contrario, la validación puede fallar debido a una discrepancia en la forma de la matriz entre las probabilidades de los tokens y los mapas de posición.
  • train.optim.lr: Tasa de aprendizaje. Por defecto, 2e-4. lr_backbone: 2e-5. Admite precisión bf16 además de fp16/fp32.
  • dataset.max_labels: Número máximo de etiquetas por imagen durante el entrenamiento. Por defecto, 50. Aumentar para conjuntos de datos con anotaciones densas.
  • model.num_queries: Consultas de objetos. Por defecto, 900 (superior a los 300 de DINO) debido a la naturaleza de vocabulario abierto.
  • model.num_queries / model.num_select: Mantén num_queries lo suficientemente alto para el número de objetivos ODVG coincidentes en un lote. Valores de «smoke» muy bajos, como 20, pueden fallar durante la indexación de objetivos húngaros en imágenes densas; utiliza al menos 100 para ejecuciones mínimas de Grounding DINO «smoke», a menos que se sepa que el conjunto de datos tiene menos objetos por imagen.
  • train.optim.lr_steps: Programación de LR en varios pasos. Por defecto [10].

Multi-GPU / Multi-nodo

Método de ejecución: gestionado por Lightning (un único proceso de Python; Lightning genera los trabajadores).

Clave de especificación Descripción Valor por defecto
train.num_gpus Número de GPU 1
train.gpu_ids Índices de los dispositivos GPU [0]
train.num_nodes Número de nodos 1
train.distributed_strategy ddp o fsdp ddp

Mismo comportamiento de DDP/FSDP que DINO. El modo multinodo requiere que el orquestador establezca las variables de entorno WORLD_SIZE, NODE_RANK, MASTER_ADDR y MASTER_PORT.

Valores predeterminados de Export / TRT

  • Entrada de exportación: 960x544 (más grande que otros modelos OD), opset 17. Mantener las especificaciones de exportación de Grounding-DINO en la resolución de exportación de la plantilla para las pruebas de funcionamiento; reducir la exportación a tamaños de imagen muy pequeños, como 128x128, puede desencadenar una aserción de inferencia de forma de PyTorch ONNX en el cabezal de texto contrastivo durante torch.onnx.export.
  • La CLI principal de PyTorch grounding_dino admite entrenamiento, evaluación, inferencia, exportación y cuantificación. Ejecuta la generación del motor TensorRT, la inferencia de TensorRT y la evaluación de TensorRT a través de references/tao-deploy-grounding-dino.md.
  • Tipos de datos de TensorRT: solo FP32 y FP16; NO se admite INT8
  • Espacio de trabajo de TRT: 8192 MB (8 veces mayor que otros modelos de OD)
  • Tamaño máximo de lote de TRT: 4

Hardware

Mínimo 1 GPU, recomendado 4 GPU. 24 GB o más (se recomienda A100) de VRAM por GPU. Grounding DINO es más pesado que el DINO estándar debido al codificador de texto (BERT). Se recomiendan 24 GB o más de memoria de GPU. Reduce el tamaño de lote (batch_size) para GPU de 16 GB.

Patrones de error

Falta de memoria en CUDA: reduce el tamaño del lote (4 → 2 → 1). El codificador de texto BERT añade una sobrecarga de memoria significativa además de la estructura base de visión.

ID de categoría de anotaciones de Val: Las anotaciones de validación deben tener ID de categoría que empiecen por 0 para un cálculo correcto de la pérdida. Utiliza la conversión de formato de anotaciones si es necesario.

Error al cargar el codificador de texto: Asegúrate de que el contenedor tenga acceso para descargar los pesos de bert-base-uncased o proporciona una ruta local.

La cuantificación con un punto de control de PyTorch falla en TAO Toolkit 7.0.0-rc-226: El script de cuantificación Grounding-DINO del contenedor pasa cap_lists=None al cargar un punto de control, lo que provoca un error en post_process.py. La cuantización ONNX utiliza el artefacto ONNX exportado y los datos de calibración de COCO, pero la imagen predeterminada de PyTorch en la versión rc-226 tampoco incluye el módulo modelopt.onnx.quantization. Considera esto como un bloqueo de la imagen o del SDK, no como un problema del resolutor de puntos de control.

Las formas de mat1 y mat2 no se pueden multiplicar en post_process.py: la longitud de los tokens de texto y los mapas de posición de las etiquetas son inconsistentes, normalmente porque model.max_text_len se ha sobrescrito por debajo del valor predeterminado de 256, mientras que los mapas de etiquetas del conjunto de datos siguen utilizando mapas de posición de longitud 256. Restablece ` model.max_text_len ` o regenera los mapas de etiquetas con la misma longitud.

El índice está fuera de límites para la dimensión 0 en criterion.py: model.num_queries es demasiado pequeño para los objetivos ODVG coincidentes en el lote actual. Aumenta model.num_queries y mantén model.num_select compatible con este valor.

Error «NotADirectoryError» con images.tar.gz/.jpg: la CLI directa de TAO está intentando recorrer una ruta de archivo como si fuera un directorio. Extrae el archivo y configura el campo image_dir correspondiente a la carpeta de imágenes extraída; las fuentes de datos de habilidades basadas en archivos utilizan runtime:extracted_folder por este motivo.

Parámetros de especificación / Inferencia del modelo padre

Las asignaciones de inferencia específicas del modelo deben incluirse en este archivo MD, no en config.json. Los ejecutores generados deben leer esta sección y aplicar las asignaciones con las funciones auxiliares del SDK antes de llamar a create_job(). Esto refleja el antiguo flujo de infer_params.py de los microservicios.

Asignaciones de inferencia del archivo grounding_dino.config.json de TAO Core:

Acción Campo de especificación Función de inferencia Significado
evaluar clave_de_cifrado clave clave de cifrado
evaluar evaluar.punto de control modelo_padre archivo de modelo deducido a partir de la carpeta de resultados del trabajo principal
evaluar evaluar.trt_engine modelo_padre archivo de modelo deducido a partir de la carpeta de resultados del trabajo principal
evaluar directorio_de_resultados directorio_de_salida directorio de resultados del trabajo actual
exportar clave_de_cifrado clave clave de cifrado
exportar exportar.punto de control modelo_padre archivo de modelo deducido a partir de la carpeta de resultados del trabajo principal
export export.onnx_file create_onnx_file ruta de salida ONNX
export directorio_de_resultados directorio_de_salida directorio de resultados del trabajo actual
inferencia clave_de_cifrado clave clave de cifrado
inferencia punto de control de inferencia modelo_padre archivo del modelo inferido a partir de la carpeta de resultados del trabajo principal
inferencia inference.trt_engine modelo_padre archivo de modelo inferido a partir de la carpeta de resultados del trabajo principal
inferencia directorio_de_resultados directorio_de_salida directorio de resultados del trabajo actual
cuantizar clave_de_cifrado clave clave de cifrado
cuantificar cuantizar.ruta_del_modelo modelo_padre archivo del modelo deducido a partir de la carpeta de resultados del trabajo principal
cuantificar directorio_de_resultados directorio_de_salida directorio de resultados del trabajo actual
entrenar clave_de_cifrado clave clave de cifrado
entrenar modelo.ruta_del_backbone_preentrenado ptm_si_no_hay_modelo_de_reanudación PTM cuando no existe ningún punto de control de reanudación
entrenar directorio_de_resultados directorio_de_salida directorio de resultados del trabajo actual
entrenamiento train.pretrained_model_path ptm_si_no_hay_modelo_de_reanudación PTM cuando no existe ningún punto de control de reanudación
entrenamiento train.resume_training_checkpoint_path resume_model archivo del modelo extraído de la carpeta de resultados del trabajo actual

Para parent_model o parent_model_folder, pasa el ID del trabajo secundario de entrenamiento/exportación/AutoML como parent_job_id. El SDK muestra la carpeta de resultados del trabajo principal, filtra los artefactos de puntos de control y devuelve el archivo o la carpeta del modelo seleccionado. No añadas estas asignaciones de nuevo a config.json y no modifiques los scripts del ejecutor generados para adivinar las rutas de los puntos de control.

Al seleccionar un punto de control de Grounding-DINO fuera del resolutor del SDK, haz coincidir exactamente el artefacto de época/paso deseado; por ejemplo, model_epoch_000_step_00046.pth. El enlace simbólico gdino_model_latest.pth solo es válido cuando se solicita explícitamente «latest». Transfiere los ajustes estructurales del modelo, tales como model.backbone, model.num_queries, model.num_select, model.num_feature_levels, model.max_text_len y la resolución de entrada de exportación a las especificaciones de evaluación, inferencia, exportación e implementación, de modo que las formas de los puntos de control y del motor coincidan.

Despliegue

  • tao-deploy-grounding-dino
Ver en GitHub
---
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)

Instalar tao-train-grounding-dino

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/NVIDIA/skills/tree/main/skills/tao-train-grounding-dino # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio NVIDIA/skills

Habilidades relacionadas

web-search
Tiempo actualizado 29 de junio de 2026
webapp-testing
Tiempo actualizado 29 de junio de 2026
lark-base
Tiempo actualizado 5 de julio de 2026
agentmail
Tiempo actualizado 29 de junio de 2026
OR