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.
-
Préservez chaque valeur d'utilisateur explicite.
epoch 1signifietrain.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, oudefault) dans le Résumé de Pré-Vol. -
Après approbation du Résumé par l'utilisateur, initialisez
deft_state.jsonune seule fois avecscripts/init_deft_state.py. Ne l'écrivez jamais à la main ni ne le réinitialisez à la reprise. -
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é commeread_before_actionavant de continuer. -
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.
-
Validez chaque étape avec
scripts/commit_stage.py; il vérifie les artefacts, met à jourdeft_state.json, ajoute exactement un événementloop_log.jsonlordonné, et annule si son audit échoue. -
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_actionet 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=erroret 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.
- 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. - 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. - Baseline (iter_0) — pas d'entraînement. Exécutez
inferenceavec le checkpoint zéro-shot / préentraîné fourni, puiskpi_analyze. Amorceztrain_grounding_dino.yamlà partir du modèle de l'utilisateur pour que les itérations ultérieures l'étendent. - Itérez. Pour chaque itération 1..
max_iterations, exécutez les sept étapes en ordre :gap_analysis→embed→mine→stage→train→inference→kpi_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. - Arrêtez quand
max_iterationsest 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. - Rendez
results/DEFT_Loop_Report.mdaprès chaque itération terminée et une fois de plus à la fin de la boucle en invoquant le sous-agentreporter(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.