tao-run-deft-object-detection

Par nvidia · skills

Exécute la boucle complète DEFT smart-data-augmentation pour la détection d'objets NVIDIA TAO Grounding DINO : inférence de base zero-shot, analyse des KPI, analyse des écarts par classe, embedding SigLIP des images faibles, mining de voisins uniques contre un pool source, staging du dataset ODVG, et réentraînement — répété pour un nombre fixe d'itérations. Prépare également le pool source utilisé par la boucle de mining, en exécution séparée : pseudo-labeling Co-DETR, repliement vers les classes cibles, conversion KITTI→COCO→ODVG, et embedding. À utiliser pour des prompts tels que « run the DEFT OD loop », « run smart data augmentation for grounding dino », « mine and retrain my detection model », « improve OD mAP with gap analysis and mining », « prep the source pool », ou « pseudo-label my unlabeled images for mining » ; ne pas utiliser pour un entraînement TAO autonome, une inférence ponctuelle ou une analyse des écarts seule.

npx skills add https://github.com/nvidia/skills --skill tao-run-deft-object-detection

Skill: tao-run-deft-object-detection

Installation autonome ? Si cette session n'a pas été initialisée par le plugin de banque de skills TAO, exécutez d'abord le skill tao-setup (vérification préalable de l'hôte, identifiants, découverte inter-skills).

Contrat d'exécution

Traitez ceci comme une machine à états persistante sur disque, non comme une recette en prose.

  1. Préservez chaque valeur d'utilisateur explicite. epoch 1 signifie train.num_epochs=1 ; une valeur de spec ou un défaut documenté ne s'applique que si l'utilisateur n'a pas fourni ce paramètre. Affichez la source de chaque paramètre d'exécution (user, spec, ou default) dans le Résumé de Pré-Vol.

  2. Après approbation du Résumé par l'utilisateur, initialisez deft_state.json une seule fois avec scripts/init_deft_state.py. Ne l'écrivez jamais à la main ni ne le réinitialisez à la reprise.

  3. Exécutez chaque commande Python d'hôte groupée ou inline via scripts/deft_python.sh. Au démarrage, après compaction du contexte, avant chaque étape, et avant toute affirmation d'achèvement, exécutez :

    <skill_root>/scripts/deft_python.sh \
      <skill_root>/scripts/audit_deft_run.py --results-dir "${RESULTS_DIR}"

    S'il imprime DEFT_RUN_STATUS=INVALID, arrêtez et réparez l'incohérence de disque listée ; ne lancez pas une autre étape. Lisez le chemin imprimé comme read_before_action avant de continuer.

  4. Appelez le skill sous-jacent mappé après avoir lu l'overlay DEFT. Ne remplacez pas une référence d'étape manquante ou non lue, un appel de skill échoué, par des commandes shell devinées, du Python inline, un arborescence de sortie différente, ou des données fabriquées.

  5. Validez chaque étape avec scripts/commit_stage.py ; il vérifie les artefacts, met à jour deft_state.json, ajoute exactement un événement loop_log.jsonl ordonné, et annule si son audit échoue.

  6. Affirmez la boucle complète seulement quand ceci se termine avec zéro :

    <skill_root>/scripts/deft_python.sh \
      <skill_root>/scripts/audit_deft_run.py \
      --results-dir "${RESULTS_DIR}" --require-complete

Discipline de contexte

  • Chargez les références à la demande. Exécutez l'audit, lisez seulement son fichier read_before_action et la section nommée de l'étape actuelle, puis agissez. Ne préchargez jamais toutes les références.
  • Redirigez les sorties d'entraînement, d'inférence et de Docker détaillées vers des fichiers. Inspectez au maximum les 40 dernières lignes ou une vérification d'artefact d'une ligne ; n'imprimez jamais une spec complète, un fichier d'état, ou un loop log dans la conversation.
  • Un appel Skill-tool charge les instructions d'étape ; il ne démarre pas d'orchestrateur en arrière-plan. Continuez l'étape documentée dans le parent immédiatement après son retour.

Quand utiliser ce skill

Utilisez ce skill quand l'utilisateur veut qu'un agent exécute la boucle complète d'augmentation de données intelligentes pour un modèle de détection TAO Grounding DINO : baseline zéro-shot, analyse d'écart, mining, croissance de jeu de données, et réentraînement sur N itérations.

  • "Run the DEFT OD loop"
  • "Run smart data augmentation for grounding dino"
  • "Mine more training data for my detection model and retrain"
  • "Improve detection mAP with gap analysis and unique-neighbor mining"

Utilisez-le aussi pour préparer le pool source, qui est une exécution séparée qui se termine avant le lancement de la boucle (voir ## Two Invocations: Prep, Then Loop) :

  • "Prep the source pool"
  • "Pseudo-label my unlabeled images for mining"
  • "Build the mining pool from these raw images"

N'utilisez pas ce skill pour une seule exécution TAO d'entraînement autonome, une inférence unique, ou une analyse d'écart seule. Invoquez plutôt le skill feuille pertinent directement.

Périmètre : Grounding DINO + ODVG

Cette boucle cible Grounding DINO avec les annotations d'entraînement ODVG (tmm_odvg.jsonl + labelmap.json), correspondant au pipeline de référence. dataset.train_data_sources est une liste ; chaque itération ajoute une nouvelle source ODVG plutôt que de réécrire un CSV combiné. DINO et RT-DETR (COCO) ne sont pas pris en charge par ce workflow — utilisez les skills feuille directement pour ceux-ci.

La boucle n'entraîne pas au baseline. Elle évalue le checkpoint zéro-shot / préentraîné fourni comme itération 0 et n'entraîne qu'à partir de l'itération 1, une fois que le mining a produit des données à ajouter.

Deux invocations : Prep, puis boucle

Le pool source est préparé par sa propre exécution, avant le lancement de la boucle. Ils sont séparés car un pool est préparé une fois et sert ensuite beaucoup d'exécutions de boucle — les coupler relabéliserait et ré-intégrerait les mêmes images à chaque lancement.

Invocation Fait Produit
"Prep the source pool" Co-DETR pseudo-label les images du pool brut, plie vers les classes cibles, convertit KITTI→COCO→ODVG, vérifie, intègre coco.json, odvg/, source_embeddings.parquet, pool_report.json
"Run the DEFT loop" baseline → itérations checkpoints, KPI, la tendance mAP

Suivez references/prep-source-pool.md pour le premier. La boucle prend ensuite ces quatre chemins comme entrées ; le Pré-Vol les valide et init_deft_state.py les épingle, donc une exécution ne peut pas atteindre mine sans corpus à chercher.

Acquisition au lancement

Après que l'utilisateur confirme qu'il veut exécuter ce workflow, demandez sur quelle plateforme prise en charge il entend l'exécuter. Découvrez les plateformes d'exécution à partir des skills de plateforme installés (tao-run-on-docker / -slurm / -kubernetes / -brev). Après la sélection de la plateforme, lisez la section ## Credentials du skill de plateforme choisi.

Ne demandez jamais et ne lisez jamais les valeurs d'identifiants. Vérifiez seulement que la variable d'environnement requise est définie ; si elle n'est pas définie, dites à l'utilisateur quelle variable exporter.

Comportement de l'agent

Il y a exactement une porte utilisateur : confirmation de pré-vol. Imprimez le Résumé de Pré-Vol (voir references/preflight.md), puis ARRÊTEZ et attendez une approbation explicite ("go", "yes", "looks good"). Ne lancez aucune étape ayant des effets secondaires avant cette approbation.

Après la porte, le skill est entièrement autonome. Exécutez la boucle entière sans demander de confirmation. Arrêtez seulement si une étape échoue avec une erreur irrécupérable ou si une porte de suspension ferme se déclenche. Imprimez une mise à jour de statut d'une ligne à chaque jalon d'étape.

Mode auto requis. La boucle post-porte déclenche des appels constants ayant des effets secondaires ; sans mode auto-accept, elle bloque à la première invite. Rappelez à l'utilisateur au Résumé de Pré-Vol d'activer le mode auto (shift+tab) avant d'approuver.

Règle de commande non-zéro. Ne répétez jamais une commande échouée inchangée. Lisez le bloc d'erreur final, mappez-le à la référence d'étape chargée, faites une correction basée sur les preuves, et réexécutez sa vérification documentée. Si la référence ne couvre pas l'échec, validez status=error et arrêtez.

Plan révisé. Si un paramètre d'exécution change après affichage du Résumé, réexécutez le Pré-Vol et affichez un Résumé mis à jour avant de procéder.

Workflow

Détails complets dans references/pipeline-and-state.md.

  1. Pré-Vol. Exécutez chaque vérification dans references/preflight.md. Résolvez l'espace de travail, les specs, les annotations, le checkpoint zéro-shot, le parquet d'intégration du pool source, et les images de conteneur. Arrêt ferme seulement sur une entrée manquante que vous ne pouvez pas résoudre vous-même.
  2. Prep (une fois, avant baseline). Si le pool source n'est pas déjà labélisé et intégré, pseudo-labélisez-le avec Co-DETR, pliez les prédictions sur les classes cibles de l'utilisateur, convertissez KITTI→COCO→ODVG, et intégrez le pool. Idempotent — chaque artefact est ignoré s'il existe déjà. Voir references/prep-source-pool.md.
  3. Baseline (iter_0) — pas d'entraînement. Exécutez inference avec le checkpoint zéro-shot / préentraîné fourni, puis kpi_analyze. Amorcez train_grounding_dino.yaml à partir du modèle de l'utilisateur pour que les itérations ultérieures l'étendent.
  4. Itérez. Pour chaque itération 1..max_iterations, exécutez les sept étapes en ordre : gap_analysisembedminestagetraininferencekpi_analyze. L'analyse d'écart de chaque itération consomme les labels d'inférence de la phase précédente. Entre les étapes, exécutez l'audit et suivez son action suivante d'une ligne persistante sur disque.
  5. Arrêtez quand max_iterations est atteint ou qu'une porte de suspension ferme se déclenche. mAP est rapporté, non porté en porte — la boucle ne fait pas de sortie anticipée sur une cible de métrique.
  6. Rendez results/DEFT_Loop_Report.md après chaque itération terminée et une fois de plus à la fin de la boucle en invoquant le sous-agent reporter (agents/reporter.md). Ne rendez jamais inline.

Tous les étapes s'exécutent inline dans le contexte parent. Préférez invoquer les skills sous-jacents tao-skill-bank:* via l'outil Skill, en stratifiant les conventions de boucle par-dessus via l'overlay references/*.md correspondant.

Utilisation des scripts groupés

Exécutez les scripts groupés via <skill_root>/scripts/deft_python.sh. Résolvez chaque argument de chemin en un chemin d'hôte absolu d'abord. Utilisez commit_stage.py pour tous les écritures d'état et de log. Voir references/scripts-and-agents.md.

Modules de référence d'étape

Chaque étape se mappe à un skill sous-jacent ou à une glue groupée. Lisez seulement l'overlay de l'étape actuelle, puis invoquez.

Les overlays sont écrits par rapport à deux variables de boucle que le Pré-Vol définit et que chaque étape utilise : N, le numéro d'itération actuelle, et PHASE, qui est baseline ou iter${N}. Ils sont énoncés ici car un overlay d'étape est lu en soi — voir references/preflight.md pour l'ensemble complet.

Si un overlay est manquant, arrêtez et demandez à l'utilisateur de réinstaller le plugin — la boucle ne peut pas exécuter une étape dont elle n'a pas les paramètres. Si un skill mappé est indisponible, ne vous arrêtez pas et ne improvisez pas : retombez sur le docker run documenté de l'overlay comme décrit dans references/scripts-and-agents.md, et enregistrez execution_path=direct-container. L'overlay porte tout ce dont l'invocation a besoin, donc le retombée produit les mêmes artefacts.

Étape Overlay Skill sous-jacent
prep (une fois) references/prep-source-pool.md tao-skill-bank:tao-train-codetr + tao-generate-image-embeddings (+ glue groupée)
gap_analysis references/tao-analyze-gaps-od-map.md tao-skill-bank:tao-analyze-gaps-od-map
embed references/tao-generate-image-embeddings.md tao-skill-bank:tao-generate-image-embeddings
mine references/tao-mine-od-images.md tao-skill-bank:tao-mine-od-images
stage references/stage-mined-data.md (glue groupée — pas de skill feuille)
train, inference references/grounding-dino.md tao-skill-bank:tao-train-grounding-dino
kpi_analyze references/tao-analyze-detection-kpi.md tao-skill-bank:tao-analyze-detection-kpi

Règle de chemin (invariant). Enregistrez les chemins d'hôte absolus sous ${RESULTS_DIR}. Montez "$WORKSPACE:$WORKSPACE" avec les mêmes chemins d'hôte et de conteneur. Le update_results_dir de TAO ajoute le nom de la tâche à results_dir, donc passer results_dir=X à train écrit X/train/ et à inference écrit X/inference/. Ne vous ajoutez jamais le sous-répertoire vous-même.

Données, Pré-Vol, Pipeline et références d'état

Sujet Référence
Contrat de données, mise en page ODVG, pool source, arborescence de sortie references/data-layout.md
Prep de pool source unique (pseudo-label, remappage, conversion, intégration) references/prep-source-pool.md
Vérifications de Pré-Vol, défauts, modèle de Résumé references/preflight.md
Étapes de pipeline, schéma d'état, séquence de fin de boucle references/pipeline-and-state.md
Scripts groupés, glue, agent reporter, tableau d'étapes references/scripts-and-agents.md

max_iterations défaut à 1 — un mining, un entraînement et une exécution de notation, la plus petite exécution qui produit une comparaison par rapport au baseline. Confirmez-le avec l'utilisateur quand il n'a pas dit combien d'itérations il veut ; une exécution sans surveillance prend le défaut plutôt que de s'arrêter pour demander.

Portes

Exécutez le Pré-Vol complet, imprimez le Résumé, puis ARRÊTEZ à la seule porte utilisateur. Après approbation, exécutez le baseline et le pipeline d'itération à sept étapes.

Arrêt ferme et jamais auto-retry sur : tout étape status=error ; un parquet d'intégration de pool source manquant ou à zéro ligne ; un résultat de mining à zéro ligne quand des images faibles étaient présentes ; une source d'annotation ODVG manquante ; une inadéquation image/annotation après staging ; ou une sortie d'entraînement qui n'émet aucun checkpoint d'itération nouveau. La boucle s'arrête quand max_iterations est atteint ou une porte irrécupérable se déclenche. Chaque chemin terminal valide loop_stop via commit_stage.py, puis suit la séquence de fin de boucle dans references/pipeline-and-state.md.

Skills similaires