Visual ChangeNet
Visual ChangeNet est un modèle TAO Toolkit pour l'inspection visuelle et la détection de défauts. Il supporte deux tâches :
- Classify — Classification binaire d'images utilisant une architecture de style siamois avec un backbone partagé (C-RADIO ViT) et un module de différence apprenable. Compare des paires d'images pour classer les défauts en PASS/NO_PASS.
- Segment — Segmentation de changement au niveau pixel utilisant un backbone ViT-Large NVDINOv2. Compare des paires d'images avant/après pour produire un masque de changement binaire.
Le poids du backbone (c_radio_v2_vit_base_patch16_224) est le modèle nvidia/C-RADIOv2-B depuis HuggingFace, distribué sous forme de model.safetensors (~393 MB). Le conteneur TAO 7.0.0-rc ne télécharge pas automatiquement depuis les URLs HF — ptm_utils.load_pretrained_weights() transmet directement la valeur pretrained_backbone_path à torch.load(path) / safetensors.torch.load_file(path). Passer une URL https://huggingface.co/... ou un id de repo produit FileNotFoundError et l'exécution échoue avec Execution status: FAIL en quelques secondes. Préparez le fichier localement avant le lancement :
python3 -c "from huggingface_hub import hf_hub_download; import shutil; \
shutil.copy(hf_hub_download('nvidia/C-RADIOv2-B', 'model.safetensors'), '<workspace>/backbone/c_radio_v2_b.safetensors')"
Montez-le dans le conteneur (-v <workspace>/backbone/c_radio_v2_b.safetensors:/data/pretrained_models/C-RADIOv2_B.safetensors) et définissez le spec model.backbone.pretrained_backbone_path sur le chemin du conteneur. HF_TOKEN n'est nécessaire qu'au moment de la préparation, non au moment de l'entraînement.
Schémas Dataclass
Les schémas TAO Core générés sont emballés dans schemas/<action>.schema.json, avec schemas/manifest.json listant les actions disponibles. Chaque schéma généré émet également references/spec_template_<action>.yaml à partir du champ default au niveau supérieur du schéma. L'activation d'AutoML est déclarée au niveau du modèle dans references/skill_info.yaml via automl_enabled. L'exécution d'AutoML nécessite toujours que schemas/train.schema.json et references/spec_template_train.yaml existent et se analysent correctement. Utilisez le schéma d'entraînement emballé pour automl_default_parameters, automl_disabled_parameters, les valeurs par défaut, les limites min/max, les énumérations, les poids d'option, les conditions mathématiques, les dépendances et les paramètres populaires. Ne vous attendez pas à ~/tao-core à l'exécution ; les responsables régénèrent les schémas/templates avant d'emballer la skill bank.
Politique de l'action Train
Ce modèle est activé pour AutoML au niveau du modèle. Avant de traiter toute demande de train, lisez references/skill_info.yaml et résolvez le remplacement d'exécution soit à partir d'une valeur automl_policy explicite, soit à partir de la demande de workflow de l'utilisateur. Traitez les expressions comme « désactiver AutoML », « désactiver HPO » ou « entraînement simple » comme automl_policy: off pour cette exécution uniquement ; sinon, utilisez la valeur par défaut auto. Quand automl_policy: auto, automl_enabled: true, et que schemas/train.schema.json et references/spec_template_train.yaml sont emballés, routez l'action train via tao-skill-bank:tao-run-automl par défaut avec le skill_dir de ce modèle. Préservez les remplacements de workflow/application pour les datasets, les specs, les répertoires de sortie, les paramètres GPU/plateforme, les checkpoints parent et automl_policy. Utilisez l'entraînement direct du modèle uniquement quand automl_policy: off ou que le schéma/template d'entraînement emballé est manquant ; dans le cas de schéma manquant, signalez qu'AutoML est activé mais non exécutable pour ce modèle jusqu'à ce que les schémas soient générés.
Les actions non-train telles que evaluate, inference, export et les workflows de déploiement restent dans cette skill du modèle. Le remplacement automl_policy par exécution ne modifie pas les métadonnées du modèle.
Pour les actions TensorRT de TAO Deploy (gen_trt_engine, évaluation TensorRT et inférence TensorRT pour les variantes classify et segment), consultez d'abord references/tao-deploy-visual-changenet.md. Les templates de spec de déploiement se trouvent dans le dossier references/ de cette skill avec le préfixe spec_template_deploy_*.yaml.
Tâches
Classify (par défaut)
Utilise les actions : train, evaluate, inference. Template par défaut : references/spec_template_train.yaml.
Segment
Utilise les actions : segment_train, segment_evaluate, segment_inference. Template par défaut : references/spec_template_segment.yaml.
La segmentation nécessite de compiler les ops CUDA personnalisées (MultiScaleDeformableAttention) à la première exécution, ce qui prend ~5 minutes. Le backbone adaptateur ViT les utilise pour l'extraction de caractéristiques multi-échelle.
La structure du dataset pour la segmentation diffère du classify — elle utilise des répertoires appariés (A/, B/, list/, label/) au lieu de fichiers CSV. Voir dataset.segment.root_dir dans les valeurs par défaut.
Datasets, Remplacements de Spec et Format de Données
Visual ChangeNet a deux modes de tâche avec différents types de datasets et structures de sources de données. Classify utilise un CSV à 4 colonnes (input_path,golden_path,label,object_name) plus un répertoire d'images ; segment utilise une structure de répertoires appariés (A/, B/, list/, label/) sous un root_dir unique. Les remplacements de sources de données sont obligatoires pour chaque action — l'agent DOIT construire les chemins de sources de données et les inclure dans spec_overrides.
Voir references/dataset-and-specs.md pour les tableaux complets des exigences de dataset par action (classify et segment), chaque exemple de spec-override (train, export, quantize, evaluate, inference, gen_trt_engine pour les deux variantes), le format CSV classify, les champs d'évaluation/inférence et segment, les conventions d'éclairage, la disposition des données de segment et la configuration input_map multi-éclairage.
Invocation Docker Locale
Sans le SDK TAO, résolvez l'image TAO pyt depuis versions.yaml et invoquez visual_changenet <action> directement avec --shm-size=8g et le .ckpt du backbone monté en tant que fichier unique. Voir references/local-docker-invocation.md pour la commande docker run complète, l'exigence de mémoire partagée, le détail du montage du backbone et le motif de remplacement checkpoint/results_dir en ligne de commande.
Paramètres, Matériel et Motifs d'Erreurs
Les paramètres clés incluent train.validation_interval (par défaut 50, doit être ≤ num_epochs), train.checkpoint_interval (par défaut 200, doit être ≤ num_epochs), train.num_epochs (par défaut 100), model.classify.eval_margin (par défaut 0,3, le seuil de précision/rappel principal) et train.classify.cls_weight (par défaut [1.0, 10.0]). Le matériel minimum est 1 GPU avec 16 GB+ de VRAM ; 8 GPU (DDP) sont recommandés pour la production. Le nombre de GPU est géré en interne par TAO — ne définissez pas gpu_spec_key.
Voir references/parameters-and-troubleshooting.md pour la référence complète des paramètres, les conseils matériels et le catalogue complet des motifs d'erreurs (checkpoint non trouvé, non-concordance de format CSV, non-concordance d'extension d'image, OOM, faible précision d'évaluation, assertion de perte contrastive, non-convergence, build MultiScaleDeformableAttention spécifique au segment, misconfiguration d'époque Lightning, PYTHONPATH/ModuleNotFoundError et valeurs par défaut d'époque).
Inférence Spec Param / Parent Model
Les mappages d'inférence spécifiques au modèle appartiennent à ce fichier MD, pas à config.json. Les runners générés doivent lire cette section et appliquer les mappages avec les helpers SDK avant create_job(). Cela reflète l'ancien flux microservices infer_params.py.
Mappages d'inférence depuis cette skill du modèle :
| Action | Champ Spec | Fonction d'Inférence | Signification |
|---|---|---|---|
| evaluate | results_dir |
output_dir |
répertoire des résultats du job courant |
| inference | results_dir |
output_dir |
répertoire des résultats du job courant |
| train | results_dir |
output_dir |
répertoire des résultats du job courant |
| train | train.resume_training_checkpoint_path |
resume_model |
fichier modèle déduit du dossier des résultats du job courant |
Pour parent_model ou parent_model_folder, passez l'id du job enfant train/export/AutoML en amont en tant que parent_job_id. Le SDK liste le dossier de résultats parent, filtre les artefacts de checkpoint et retourne le fichier modèle ou dossier sélectionné. N'ajoutez pas ces mappages à config.json et ne modifiez pas les scripts de runner générés pour deviner les chemins de checkpoint.
Déploiement
- tao-deploy-visual-changenet — Workflow de déploiement Visual ChangeNet pour la génération de moteur TensorRT, l'évaluation TensorRT et l'inférence TensorRT utilisant TAO Deploy.