option

tao-mine-aoi-images

NVIDIA/skills NVIDIA/skills

Intègre les fichiers Parquet des images cibles et sources, puis extrait les images sources les plus proches pour les utiliser à des fins d'augmentation dans les workflows VCN AOI.

...Développer tout
26
Heure mise à jour 24 septembre 2026

Compétence DEFT en extraction et intégration

Vous êtes l'opérateur du workflow DEFT « intégration puis extraction » pour la zone d'intérêt (AOI) VCN. Votre tâche consiste à prendre un fichier Parquet d’images cibles faibles (résultat de l’analyse des écarts ou du routage) et un ensemble de sources, puis à produire un fichier Parquet dédupliqué d’images sources extraites qui ressemblent aux cibles — prêtes à être utilisées pour le prochain cycle d’entraînement.

Le workflow est fixe et déterministe : intégration des cibles, intégration du pool de sources, puis extraction des plus proches voisins. Le fichier Parquet généré à chaque étape sert d’entrée à l’étape suivante. Il n’y a ni recherche itérative, ni passe de regroupement en grappes, ni sélection impliquant une intervention humaine : la profondeur provient du choix du bon encodeur et du bon « topn », et non d’une analyse en plusieurs phases.

L’ensemble du processus n’est qu’une fine couche d’encapsulation autour de trois appels directs à `docker run` sur l’image `tao_toolkit.data_services ` déclarée dans `versions.yaml ` (résolue lors de l’exécution — voir Configuration). Le point d’entrée du conteneur prend la forme -e [remplacements Hydra...] — en transmettant les embeddings image_embeddings -e … pour l’embedding et les voisins les plus proches TMM nearest_neighbors -e … pour l’exploration. L'option -e pointe vers un fichier YAML qui fournit des valeurs par défaut pour le schéma de la sous-tâche ; tout ce qui suit est une simple substitution Hydra (clé=valeur) qui remplace de manière sélective les champs de la spécification à chaque exécution. (Il n’y a pas de mot-clé « dataset » à l’intérieur du conteneur — il s’agit du préfixe « pillar » du lanceur TAO, qui est omis ici.) Récupérez l’image une fois si elle n’est pas mise en cache : docker pull "$DS_IMAGE" (après avoir résolu $DS_IMAGE conformément à la configuration).

Les clés du schéma peuvent être renommées entre les versions de data-services (la compétence RCA a vu inference_csv → inference_results_dir, output_dir → results_dir). En cas de doute, examinez le schéma réel une fois par image : ` docker run --rm "$DS_IMAGE" embedding image_embeddings --cfg=job ` et ... `tmm nearest_neighbors --cfg=job`.

Entrées

  1. Fichier Parquet cible — le résultat de l’analyse des écarts, généralement mining_gaps.parquet issu de tao-route-visual-changenet-samples (ou gaps.parquet issu de tao-analyze-gaps-visual-changenet si le routage a été ignoré). Colonne obligatoire : filepath. Si la colonne label est également présente, un filtrage tenant compte des étiquettes est disponible pendant l’exploration ; sinon, la tâche d’exploration ignore silencieusement le filtre.
  2. Pool source — un fichier Parquet contenant les images candidates à analyser, comportant une colonne filepath. Si l’utilisateur ne dispose que d’un fichier CSV, il doit le convertir en fichier Parquet avec les mêmes colonnes avant l’étape 2. Pour le filtrage tenant compte des étiquettes, le pool doit également comporter une colonne label.
  3. Fichier de spécifications d’encodage — un fichier YAML contenant model, model_path, batch_size et (uniquement lorsque model_path est un fichier TAO .pth/.ckpt) model_config_path. Réutilisé aux étapes 1 et 2 ;input_parquet/output_parquet sont fournis à chaque exécution sous forme de remplacements par Hydra. La même spécification DOIT régir les deux étapes d’encodage — les encodages provenant d’encodeurs différents ne sont pas comparables, et l’incompatibilité des encodeurs est la cause la plus fréquente des rapports indiquant que « les images extraites semblent sans rapport ».
  4. Fichier de spécifications d’extraction — un fichier YAML contenant topn, knn_metric, filter_by_label et (rarement modifiés)source_embed_column_name/target_embed_column_name.source_parquet/target_parquet/output_parquet sont des remplacements effectués par Hydra au moment de l’exécution. Les représentations SigLIP et CLIP doivent utiliser knn_metric : cosine. Lorsque filter_by_label est défini sur true mais que l’un des fichiers Parquet de représentation ne comporte pas de colonne d’étiquette, le conteneur enregistre un avertissement et poursuit l’exécution sans filtrage.

Configuration

Résolvez l’URI concret tao_toolkit.data_services à partir du fichier versions.yaml une seule fois au début de l’exécution, puis vérifiez que Docker, la boîte à outils de conteneurs NVIDIA et un GPU sont bien présents avant toute autre opération. Un GPU est requis à la fois pour le passage direct de l’encodeur et pour la recherche k-NN via cuML/cuDF ; ces deux étapes échouent sans CUDA.

# Résoudre l'URI tao_toolkit.data_services → l'URI concret nvcr.io/... à partir du fichier versions.yaml
DS_IMAGE=$(python3 -c "import yaml,os; print(yaml.safe_load(open(os.environ['TAO_SKILL_BANK_PATH']+'/versions.yaml'))['images']['tao_toolkit']['data_services'])")
echo "DS_IMAGE=$DS_IMAGE"

docker info > /dev/null && echo "OK : docker"
nvidia-smi > /dev/null && echo "OK : GPU"
docker image inspect "$DS_IMAGE" > /dev/null \
  || docker pull "$DS_IMAGE"

Chaque chemin d’accès de l’hôte que le conteneur lit ou écrit doit être monté via un bind mount. L’approche la plus prévisible consiste à monter la racine de l’espace de travail avec des chemins identiques à l’intérieur et à l’extérieur du conteneur, puis à réutiliser un seul alias $DOCKER pour les trois invocations :

WORKSPACE=
DOCKER="docker run --gpus all --rm --ipc=host -v $WORKSPACE:$WORKSPACE -w $WORKSPACE $DS_IMAGE"

Ne passez pas l’option --user $(id -u):$(id -g) — cela déclenche une erreur KeyError getpwuid() lors de l’importation des transformateurs avant même que le travail ne commence. Le conteneur s’exécute en tant que root ; la commande chown rétablit ensuite l’UID de l’hôte.

Créez les deux fichiers de spécification une fois par itération, en les plaçant dans $WORKSPACE afin que l’argument -e soit résolu des deux côtés du montage ; les valeurs propres à chaque exécution ne figurent pas dans la spécification et sont transmises sous forme de substitutions Hydra. Si le pool de données source est au format CSV, convertissez-le au préalable en Parquet (en conservant le chemin d’accès au fichier et l’étiquette, le cas échéant). Le fichier embedding_spec.yaml par défaut utilise model: SigLIP, model_path: google/siglip-base-patch16-224, batch_size: 64; le fichier mining_spec.yaml par défaut utilise topn : 5, knn_metric : cosine, filter_by_label : « false » (entre guillemets — le schéma l'interprète comme une chaîne de caractères).

Consultez le fichier references/setup.md pour obtenir les notes complètes sur l’environnement, la gestion de TAO_SKILL_BANK_PATH, la justification du montage de chemin d’accès, la solution de contournement pour le changement de propriétaire (chown) de getpwuid, l’extrait de code CSV-vers-Parquet et les blocs de création de fichiers de spécification tels quels.

Méthode

Trois commandes, dans l’ordre. Le fichier Parquet généré par chaque commande sert d’entrée à la commande suivante. Exécutez-les en Bash standard ; l’alias $DOCKER défini dans la configuration gère le conteneur, le GPU et les montages. Chaque invocation suit le même schéma : -e pour les valeurs par défaut intégrées, puis quelques modifications Hydra pour les chemins spécifiques à l’exécution.

Étape 1 — Intégrer les images cibles

$DOCKER embedding image_embeddings \
    -e  \
    input_parquet= \
    output_parquet=

Lit la sortie de l’analyse des lacunes / du routage et écrit un fichier Parquet contenant le chemin d’accès, l’intégration et toutes les colonnes de métadonnées supplémentaires (par exemple, label, siamese_score, weakness) reprises telles quelles depuis l’entrée. Affichez le schéma de sortie (pd.read_parquet(...).columns) sur la sortie standard (stdout) afin que le hook « script-check » puisse vérifier que la colonne d’encodage existe bel et bien.

Si vous devez remplacer model / model_path / batch_size pour une exécution sans modifier la spécification, ajoutez-les en tant que remplacements Hydra (par exemple model_path=...).

Étape 2 — Intégrer le pool source

$DOCKER embedding image_embeddings \
    -e  \
    input_parquet= \
    output_parquet=

Même structure de commande qu’à l’étape 1, appliquée au pool source. Utilisez le fichier embedding_spec.yaml identique à celui de l’étape 1, et ne modifiez pas ici les paramètres model / model_path / batch_size — des configurations d’encodeur différentes entre les deux étapes produisent des représentations non comparables.

Étape 3 — Recherche des plus proches voisins

$DOCKER tmm nearest_neighbors \
    -e  \
    source_parquet= \
    target_parquet= \
    output_parquet=

Pour chaque embedding cible, cette commande identifie les topn embeddings source les plus proches selon la métrique choisie, élimine les doublons entre les cibles et génère un fichier Parquet à colonne unique (chemin d’accès) contenant les chemins source uniques extraits. Le conteneur génère également un fichier mining_summary.txt à côté du fichier Parquet de sortie, contenant : le nombre de requêtes, le nombre de voisins, les doublons supprimés et (lorsque le filtrage par étiquette est activé) le nombre de paires conservées par rapport à celles supprimées. Ajustez les paramètres `topn`, `knn_metric` ou `filter_by_label` via une redéfinition Hydra en ligne lors du balayage (par exemple, `topn=10`) — il n’est pas nécessaire de réécrire la spécification.

Lorsque filter_by_label=true mais que l’un des fichiers Parquet d’encodage manque la colonne d’étiquette, le conteneur enregistre un avertissement et poursuit l’opération sans filtrage. Si le résultat de l’exploration semble plus volumineux que prévu ou contient des paires inter-étiquettes, consultez le journal Docker à la recherche de cet avertissement avant de supposer que la tâche s’est déroulée correctement.

Consultez le fichier references/reference-invocation.md pour obtenir la recette de bout en bout minimale à copier-coller et modifier (qui résout $DS_IMAGE, écrit les deux spécifications, exécute les trois étapes, attribue les droits de propriété aux sorties et affiche le nombre de lignes) à exécuter sous la forme d’un seul bloc Bash en continu.

Sorties et rapport

Enregistrez tout dans un dossier horodaté situé dans le répertoire de l’expérience / itération. Obtenez l’horodatage réel en exécutant la commande `date +%Y-%m-%d_%H%M%S ` dans Bash — ne le codez PAS en dur et ne le devinez PAS. Si l’utilisateur spécifie un chemin de sortie personnalisé, utilisez-le directement tout en conservant la même structure interne. Le hook de packaging ajoute automatiquement les dossiers `mining_config/` et le fichier ` claude_session.jsonl ` lorsque `Mining_Report.md ` est écrit.

Le fichier Parquet issu de l’exploration est l’artefact utilisé en aval par l’entraînement. Les deux fichiers Parquet d’embedding sont intermédiaires mais méritent d’être conservés — ils sont réutilisables sur plusieurs exécutions d’exploration portant sur le même ensemble de sources, et constituent la seule source à consulter lorsqu’un rapport « apparemment sans rapport » nécessite un débogage au niveau de l’encodeur.

Consultez references/outputs-and-reporting.md pour connaître la structure complète du répertoire de sortie et le modèle exact de Mining_Report.md (Verdict, Entrées, Cohérence de l’encodeur, Exécution de l’exploration, Répartition par étiquette, Validité des résultats, Actions recommandées ; respectez un nombre de mots compris entre 600 et 1 200).

Pièges courants

L’erreur la plus fréquente réside dans l’incompatibilité des encodeurs entre les deux étapes d’encodage — la cause la plus courante de résultats de mining erronés ; les deux étapes doivent utiliser le même fichier embedding_spec.yaml. Autres pièges récurrents : passer l’option --user ( erreur KeyError « getpwuid » ), sauter une étape d’embedding, une colonne d’étiquettes manquante rendant silencieusement inutile l ’option filter_by_label=true, des fichiers de spécification situés en dehors de $WORKSPACE, des ??? sentinelles non résolues, des points de contrôle TAO sans model_config_path, des pools de sources CSV alimentés directement, des incohérences entre les chemins d’accès de l’hôte et du conteneur, l’absence de GPU, une image non récupérée ou une balise :latest, et une taille de source supérieure à topn × N_targets (ce qui est normal — indiquez le nombre réel de données extraites).

Consultez references/troubleshooting.md pour obtenir la liste complète des pièges avec les erreurs exactes, leurs causes et les solutions.

Ordre d’exécution

  1. Déterminez la valeur de DS_IMAGE à partir du fichier versions.yaml (images.tao_toolkit.data_services), puis exécutez une seule fois les commandes docker info, nvidia-smi et docker image inspect "$DS_IMAGE" (en récupérant l’image si elle est manquante) pour valider l’environnement. Interrompez le processus avec un message clair en cas d’échec.
  2. Exécutez ` date +%Y-%m-%d_%H%M%S ` pour obtenir l’horodatage ; créez les répertoires ` `, `/mining_results/` et `/`.
  3. Écrivez les fichiers `embedding_spec.yaml ` et `mining_spec.yaml` dans le répertoire horodaté, en indiquant le choix de l’encodeur et les paramètres de minage. Conservez-les sous $WORKSPACE afin que le chemin `-e` soit résolu à l’intérieur du conteneur.
  4. Si le pool source est au format CSV, convertissez-le d’abord au format Parquet (en conservant le chemin d’accès au fichier et l’étiquette).
  5. Exécutez l’étape 1 (intégration des cibles) via `docker run … embedding image_embeddings -e embedding_spec.yaml input_parquet=… output_parquet=…`. Affichez le nombre de lignes et de colonnes du fichier Parquet de sortie sur la sortie standard (stdout).
  6. Exécutez l’étape 2 (intégration du pool source) avec le fichier ` embedding_spec.yaml ` identique à celui de l’étape 1. Affichez le nombre de lignes et de colonnes du fichier Parquet de sortie.
  7. Exécutez l’étape 3 (extraction des voisins les plus proches) via ` docker run … tmm nearest_neighbors -e mining_spec.yaml source_parquet=… target_parquet=… output_parquet=…`. Vérifiez que le fichier ` mining_summary.txt` a bien été créé à côté de `mined.parquet`.
  8. Calculez la répartition par étiquette (section 5) en joignant le fichier Parquet des représentations cibles à la sortie de l’extraction sur le chemin d’accès, si les deux contiennent des étiquettes.
  9. Écrivez enfin le fichier Mining_Report.md — son écriture déclenche le hook de packaging, qui copie les journaux de session et la configuration de la compétence.
Voir sur GitHub
---
name: tao-mine-aoi-images
description: Embeds target and source image parquets, then mines nearest-neighbour source images for augmentation in VCN AOI workflows.
license: Apache-2.0
---

# DEFT Mining and Embedding Skill

You are the operator of the DEFT embed-then-mine workflow for VCN AOI. Your job is to take a parquet of weak target images (the gap-analysis or routing output) and a source pool, then produce a deduplicated parquet of mined source images that look similar to the targets — ready to feed into the next training round.

The workflow is fixed and deterministic: **embed the targets, embed the source pool, then mine nearest neighbours.** Each step's output parquet is the next step's input. There is no iterative search, no clustering pass, no human-in-the-loop selection — depth comes from picking the right encoder and the right `topn`, not from a multi-phase investigation.

The whole skill is a thin wrapper around three direct `docker run` invocations against the `tao_toolkit.data_services` image declared in `versions.yaml` (resolved at runtime — see Setup). The container's entrypoint takes `<category> <action> -e <spec.yaml> [hydra overrides...]` — pass `embedding image_embeddings -e <embedding_spec.yaml> …` for embedding and `tmm nearest_neighbors -e <mining_spec.yaml> …` for mining. The `-e` flag points at a YAML that supplies default values for the subtask's schema; anything afterward is a bare Hydra override (`key=value`) that selectively overrides spec fields per run. (There is no `dataset` keyword inside the container — that's the TAO launcher's pillar prefix and is dropped here.) Pull the image once if it isn't cached: `docker pull "$DS_IMAGE"` (after resolving `$DS_IMAGE` per Setup).

Schema keys can rename between data-services releases (the RCA skill saw `inference_csv` → `inference_results_dir`, `output_dir` → `results_dir`). When in doubt, introspect the actual schema once per image: `docker run --rm "$DS_IMAGE" embedding image_embeddings --cfg=job` and `... tmm nearest_neighbors --cfg=job`.

---

## Inputs

1. **Target parquet** — the gap-analysis output, typically `mining_gaps.parquet` from `tao-route-visual-changenet-samples` (or `gaps.parquet` from `tao-analyze-gaps-visual-changenet` if routing was skipped). Required column: `filepath`. If `label` is also present, label-aware filtering during mining is available; otherwise the mining task silently no-ops the filter.
2. **Source pool** — a parquet of candidate images to mine against, with a `filepath` column. If the user only has a CSV, convert it to a parquet **with the same columns** before Step 2. For label-aware filtering, the pool must also carry a `label` column.
3. **Embedding spec file** — a YAML containing `model`, `model_path`, `batch_size`, and (only when `model_path` is a TAO `.pth`/`.ckpt`) `model_config_path`. Reused across Steps 1 and 2; `input_parquet`/`output_parquet` are supplied per run as Hydra overrides. The **same** spec MUST drive both embedding steps — embeddings from different encoders are not comparable, and mismatched encoders are the most common cause of "the mined images look unrelated" reports.
4. **Mining spec file** — a YAML containing `topn`, `knn_metric`, `filter_by_label`, and (rarely changed) `source_embed_column_name`/`target_embed_column_name`. `source_parquet`/`target_parquet`/`output_parquet` are Hydra overrides at run time. SigLIP and CLIP embeddings should use `knn_metric: cosine`. When `filter_by_label: true` but either embedding parquet lacks a `label` column, the container logs a warning and proceeds **without** filtering.

---

## Setup

Resolve the concrete `tao_toolkit.data_services` URI from `versions.yaml` once at the top of the run, then confirm Docker, the NVIDIA container toolkit, and a GPU are present before doing anything else. A GPU is required for both the encoder forward pass and the cuML/cuDF k-NN search; both steps fail without CUDA.

```bash
# Resolve tao_toolkit.data_services → concrete nvcr.io/... URI from versions.yaml
DS_IMAGE=$(python3 -c "import yaml,os; print(yaml.safe_load(open(os.environ['TAO_SKILL_BANK_PATH']+'/versions.yaml'))['images']['tao_toolkit']['data_services'])")
echo "DS_IMAGE=$DS_IMAGE"

docker info > /dev/null && echo "OK: docker"
nvidia-smi > /dev/null && echo "OK: GPU"
docker image inspect "$DS_IMAGE" > /dev/null \
  || docker pull "$DS_IMAGE"
```

Every host path the container reads or writes must be bind-mounted. The most predictable approach mounts the workspace root with **identical paths** inside and outside the container, then reuses one `$DOCKER` alias for the three invocations:

```bash
WORKSPACE=<absolute path that contains all parquets, outputs, and the source-pool images>
DOCKER="docker run --gpus all --rm --ipc=host -v $WORKSPACE:$WORKSPACE -w $WORKSPACE $DS_IMAGE"
```

Do **not** pass `--user $(id -u):$(id -g)` — it triggers a `getpwuid()` `KeyError` during the `transformers` import before any work starts. The container runs as root; chown outputs back to the host UID afterward.

Author the two spec files once per iteration, placing them under `$WORKSPACE` so the `-e` argument resolves on both sides of the mount; per-run values stay out of the spec and are passed as Hydra overrides. If the source pool is a CSV, convert it to parquet up front (preserving `filepath`, and `label` if present). The default `embedding_spec.yaml` uses `model: SigLIP`, `model_path: google/siglip-base-patch16-224`, `batch_size: 64`; the default `mining_spec.yaml` uses `topn: 5`, `knn_metric: cosine`, `filter_by_label: "false"` (quoted — the schema reads it as a string).

See `references/setup.md` for the full environment notes, `TAO_SKILL_BANK_PATH` handling, the path-mounting rationale, the `getpwuid` chown workaround, the CSV-to-parquet snippet, and the verbatim spec-file authoring blocks.

---

## Method

Three commands, in order. Each command's output parquet is the next command's input. Run them as plain Bash; the `$DOCKER` alias from Setup handles the container, GPU, and mounts. Every invocation follows the same shape: `-e <spec>` for the baked-in defaults, then a handful of Hydra overrides for the run-specific paths.

### Step 1 — Embed the target images

```bash
$DOCKER embedding image_embeddings \
    -e <embedding_spec.yaml> \
    input_parquet=<target_parquet> \
    output_parquet=<target_embeddings_parquet>
```

Reads the gap-analysis / routing output and writes a parquet with `filepath`, `embedding`, and any extra metadata columns (e.g. `label`, `siamese_score`, `weakness`) carried forward verbatim from the input. Print the output schema (`pd.read_parquet(...).columns`) to stdout so the script-check hook can confirm the embedding column exists.

If you need to override `model` / `model_path` / `batch_size` for one run without editing the spec, append them as Hydra overrides (e.g. `model_path=...`).

### Step 2 — Embed the source pool

```bash
$DOCKER embedding image_embeddings \
    -e <embedding_spec.yaml> \
    input_parquet=<source_pool_parquet> \
    output_parquet=<source_embeddings_parquet>
```

Same command shape as Step 1, applied to the source pool. Use the **identical** `embedding_spec.yaml` as Step 1, and do not override `model` / `model_path` / `batch_size` differently here — mismatched encoder configs across the two steps produce non-comparable embeddings.

### Step 3 — Mine nearest neighbours

```bash
$DOCKER tmm nearest_neighbors \
    -e <mining_spec.yaml> \
    source_parquet=<source_embeddings_parquet> \
    target_parquet=<target_embeddings_parquet> \
    output_parquet=<mined_parquet>
```

For each target embedding, finds the `topn` closest source embeddings under the chosen metric, deduplicates across targets, and writes a single-column (`filepath`) parquet of unique mined source paths. The container also drops a `mining_summary.txt` next to the output parquet with: query count, neighbour count, duplicates removed, and (when label filtering is on) kept-vs-dropped pair counts. Tweak `topn`, `knn_metric`, or `filter_by_label` via inline Hydra override when sweeping (e.g. `topn=10`) — no need to rewrite the spec.

When `filter_by_label=true` but one of the embedding parquets is missing the `label` column, the container logs a warning and proceeds without filtering. If the mined output looks larger than expected or contains cross-label pairs, scan the docker log for that warning before assuming the task did the right thing.

See `references/reference-invocation.md` for the minimal paste-and-edit end-to-end recipe (resolves `$DS_IMAGE`, writes both specs, runs all three steps, chowns outputs, and prints row counts) to run as a single streamed Bash block.

---

## Outputs and report

Write everything into a timestamped folder under the experiment / iteration directory. Get the real timestamp by running `date +%Y-%m-%d_%H%M%S` in Bash — do NOT hardcode or guess. If the user specifies a custom output path, use it directly but maintain the same internal layout. The packaging hook adds `mining_config/` and `claude_session.jsonl` automatically when `Mining_Report.md` is written.

The mined parquet is the artifact downstream training consumes. The two embedding parquets are intermediate but worth retaining — reusable across multiple mining runs against the same source pool, and the only place to look when a "looks unrelated" report needs encoder-level debugging.

See `references/outputs-and-reporting.md` for the full output-directory layout and the verbatim `Mining_Report.md` template (Verdict, Inputs, Encoder Consistency, Mining Run, Per-Label Breakdown, Output Sanity, Recommended Actions; keep it 600–1200 words).

---

## Common pitfalls

The most frequent failure is **mismatched encoders between the two embedding steps** — the single most common cause of garbage mining output; both steps must consume the same `embedding_spec.yaml`. Other recurring traps: passing `--user` (the `getpwuid` `KeyError`), skipping an embedding step, a missing `label` column silently no-oping `filter_by_label=true`, spec files outside `$WORKSPACE`, unresolved `???` sentinels, TAO checkpoints without `model_config_path`, CSV source pools fed in directly, host/container path mismatches, no GPU, an unpulled or `:latest` image tag, and `topn × N_targets ≫ source size` (expected — report the actual mined count).

See `references/troubleshooting.md` for the full pitfall list with the exact errors, causes, and fixes.

---

## Execution Order

1. Resolve `DS_IMAGE` from `versions.yaml` (`images.tao_toolkit.data_services`), then run `docker info`, `nvidia-smi`, and `docker image inspect "$DS_IMAGE"` (pulling if missing) once to confirm the environment. Abort with a clear message if any fail.
2. Run `date +%Y-%m-%d_%H%M%S` to get the timestamp; create `<output_dir>/mining_results/<timestamp>/`.
3. Write `embedding_spec.yaml` and `mining_spec.yaml` into the timestamped dir, filling in the encoder choice and mining knobs. Keep these under `$WORKSPACE` so the `-e` path resolves inside the container.
4. If the source pool is a CSV, convert to parquet first (preserve `filepath` and `label`).
5. Run Step 1 (embed targets) via `docker run … embedding image_embeddings -e embedding_spec.yaml input_parquet=… output_parquet=…`. Print the output parquet's row count and columns to stdout.
6. Run Step 2 (embed source pool) with the **identical** `embedding_spec.yaml` as Step 1. Print output row count and columns.
7. Run Step 3 (mine nearest neighbours) via `docker run … tmm nearest_neighbors -e mining_spec.yaml source_parquet=… target_parquet=… output_parquet=…`. Confirm `mining_summary.txt` was written next to `mined.parquet`.
8. Compute the per-label breakdown (Section 5) by joining the target embeddings parquet with the mined output on filepath, if both carry `label`.
9. Write `Mining_Report.md` last — writing it triggers the packaging hook, which copies session logs and skill config alongside.

Installer tao-mine-aoi-images

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez 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-mine-aoi-images # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera
Dépôt NVIDIA/skills

Compétences similaires

microservices-patterns
Heure mise à jour 29 juin 2026
jpa-patterns
Heure mise à jour 30 juin 2026
fabric-lakehouse
Heure mise à jour 30 juin 2026
prisma-expert
Heure mise à jour 29 juin 2026
OR