Mask2Former
Mask2Former pour la segmentation d'image universelle (panoptique, instance et sémantique). Basé sur Transformer avec attention masquée pour des résultats de segmentation haute qualité.
Définissez model.backbone.pretrained_weights pour les poids du backbone Swin.
Pour les actions TAO Deploy TensorRT (gen_trt_engine, évaluation TensorRT et inférence TensorRT), lisez d'abord references/tao-deploy-mask2former.md. Les templates de spec de déploiement se trouvent dans le dossier references/ de ce skill avec le préfixe spec_template_deploy_*.yaml.
Schémas de classe de données
Les schémas TAO Core générés sont empaqueté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 du sommet du schéma. L'activation AutoML est déclarée au niveau du modèle dans references/skill_info.yaml via automl_enabled. L'AutoML exécutable 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 empaqueté pour automl_default_parameters, automl_disabled_parameters, les valeurs par défaut, les limites min/max, les énumérations, les poids des options, les conditions mathématiques, les dépendances et les paramètres populaires. Ne comptez pas sur ~/tao-core à l'exécution ; les responsables régénèrent les schémas/templates avant d'empaqueter la banque de skills.
Politique d'action d'entraînement
Ce modèle est activé AutoML au niveau du modèle. Avant de traiter toute demande au stade d'entraînement, lisez references/skill_info.yaml et résolvez l'override d'exécution à partir soit d'une valeur automl_policy explicite, soit de la demande de workflow de l'utilisateur. Traitez les phrases comme « désactiver AutoML », « désactiver AutoML », « pas de HPO » ou « entraînement simple » comme automl_policy: off pour cette exécution uniquement ; sinon, utilisez par défaut auto. Lorsque automl_policy: auto, automl_enabled: true, et que schemas/train.schema.json et references/spec_template_train.yaml sont empaquetés, routez l'action d'entraînement via tao-skill-bank:tao-run-automl par défaut avec le skill_dir de ce modèle. Préservez les overrides de workflow/application pour les datasets, les specs, les répertoires de sortie, les paramètres GPU/plateforme, les checkpoints parents et automl_policy. Utilisez l'entraînement direct du modèle uniquement lorsque automl_policy: off ou que le schéma/template d'entraînement empaqueté est manquant ; dans le cas du schéma manquant, rapportez qu'AutoML est activé mais non exécutable pour ce modèle jusqu'à la génération des schémas.
Les actions non-entraînement telles que evaluate, inference, export et les flux de déploiement restent dans ce skill de modèle. L'override automl_policy par exécution ne change pas les métadonnées du modèle.
Exigences d'entraînement
- Type de dataset : segmentation
- Formats : coco_panoptic, coco
- Métrique de monitoring : mIoU
Exigences de dataset par action
| Action | Clé de spec | Source | Fichiers | Liste ? |
|---|---|---|---|---|
| evaluate | dataset.train.img_dir | train_datasets | images.tar.gz | Non |
| evaluate | dataset.label_map | train_datasets | coco_panoptic: label_map_panoptic.json; *: label_map.json | Non |
| evaluate | dataset.train.instance_json | train_datasets | annotations.json | Non |
| evaluate | dataset.train.panoptic_json | train_datasets | annotations_panoptic.json | Non |
| evaluate | dataset.train.panoptic_dir | train_datasets | images_panoptic.tar.gz | Non |
| evaluate | dataset.val.img_dir | eval_dataset | images.tar.gz | Non |
| evaluate | dataset.val.instance_json | eval_dataset | annotations.json | Non |
| evaluate | dataset.val.panoptic_json | eval_dataset | annotations_panoptic.json | Non |
| evaluate | dataset.val.panoptic_dir | eval_dataset | images_panoptic.tar.gz | Non |
| evaluate | dataset.test.img_dir | eval_dataset | images.tar.gz | Non |
| inference | dataset.train.img_dir | train_datasets | images.tar.gz | Non |
| inference | dataset.label_map | train_datasets | coco_panoptic: label_map_panoptic.json; *: label_map.json | Non |
| inference | dataset.train.instance_json | train_datasets | annotations.json | Non |
| inference | dataset.train.panoptic_json | train_datasets | annotations_panoptic.json | Non |
| inference | dataset.train.panoptic_dir | train_datasets | images_panoptic.tar.gz | Non |
| inference | dataset.val.img_dir | eval_dataset | images.tar.gz | Non |
| inference | dataset.val.instance_json | eval_dataset | annotations.json | Non |
| inference | dataset.val.panoptic_json | eval_dataset | annotations_panoptic.json | Non |
| inference | dataset.val.panoptic_dir | eval_dataset | images_panoptic.tar.gz | Non |
| inference | dataset.test.img_dir | eval_dataset | images.tar.gz | Non |
| quantize | dataset.train.img_dir | train_datasets | images.tar.gz | Non |
| quantize | dataset.label_map | train_datasets | coco_panoptic: label_map_panoptic.json; *: label_map.json | Non |
| quantize | dataset.train.instance_json | train_datasets | annotations.json | Non |
| quantize | dataset.train.panoptic_json | train_datasets | annotations_panoptic.json | Non |
| quantize | dataset.train.panoptic_dir | train_datasets | images_panoptic.tar.gz | Non |
| quantize | dataset.val.img_dir | eval_dataset | images.tar.gz | Non |
| quantize | dataset.val.instance_json | eval_dataset | annotations.json | Non |
| quantize | dataset.val.panoptic_json | eval_dataset | annotations_panoptic.json | Non |
| quantize | dataset.val.panoptic_dir | eval_dataset | images_panoptic.tar.gz | Non |
| quantize | dataset.test.img_dir | eval_dataset | images.tar.gz | Non |
| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | images.tar.gz | Non |
| train | dataset.train.img_dir | train_datasets | images.tar.gz | Non |
| train | dataset.label_map | train_datasets | coco_panoptic: label_map_panoptic.json; *: label_map.json | Non |
| train | dataset.train.instance_json | train_datasets | annotations.json | Non |
| train | dataset.train.panoptic_json | train_datasets | annotations_panoptic.json | Non |
| train | dataset.train.panoptic_dir | train_datasets | images_panoptic.tar.gz | Non |
| train | dataset.val.img_dir | eval_dataset | images.tar.gz | Non |
| train | dataset.val.instance_json | eval_dataset | annotations.json | Non |
| train | dataset.val.panoptic_json | eval_dataset | annotations_panoptic.json | Non |
| train | dataset.val.panoptic_dir | eval_dataset | images_panoptic.tar.gz | Non |
| train | dataset.test.img_dir | eval_dataset | images.tar.gz | Non |
Overrides de spec typiques
Les overrides de source de données sont obligatoires pour chaque action — l'agent DOIT construire les chemins de source de données à partir du tableau Exigences de dataset par action ci-dessus et les inclure dans spec_overrides.
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"
train (sources de données obligatoires) :
{
"train.num_gpus": 1,
"train.num_epochs": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"model.sem_seg_head.num_classes": 90,
"dataset.contiguous_id": True,
"dataset.train.img_dir": f"{S3_TRAIN}/images.tar.gz",
"dataset.label_map": {"coco_panoptic": f"{S3_TRAIN}/label_map_panoptic.json; *: label_map.json"},
"dataset.train.instance_json": f"{S3_TRAIN}/annotations.json",
"dataset.train.panoptic_json": f"{S3_TRAIN}/annotations_panoptic.json",
"dataset.train.panoptic_dir": f"{S3_TRAIN}/images_panoptic.tar.gz",
"dataset.val.img_dir": f"{S3_EVAL}/images.tar.gz",
"dataset.val.instance_json": f"{S3_EVAL}/annotations.json",
"dataset.val.panoptic_json": f"{S3_EVAL}/annotations_panoptic.json",
"dataset.val.panoptic_dir": f"{S3_EVAL}/images_panoptic.tar.gz",
"dataset.test.img_dir": f"{S3_EVAL}/images.tar.gz",
}
evaluate (sources de données obligatoires) :
{
"model.sem_seg_head.num_classes": 90,
"dataset.contiguous_id": True,
"dataset.train.img_dir": f"{S3_TRAIN}/images.tar.gz",
"dataset.label_map": {"coco_panoptic": f"{S3_TRAIN}/label_map_panoptic.json; *: label_map.json"},
"dataset.train.instance_json": f"{S3_TRAIN}/annotations.json",
"dataset.train.panoptic_json": f"{S3_TRAIN}/annotations_panoptic.json",
"dataset.train.panoptic_dir": f"{S3_TRAIN}/images_panoptic.tar.gz",
"dataset.val.img_dir": f"{S3_EVAL}/images.tar.gz",
"dataset.val.instance_json": f"{S3_EVAL}/annotations.json",
"dataset.val.panoptic_json": f"{S3_EVAL}/annotations_panoptic.json",
"dataset.val.panoptic_dir": f"{S3_EVAL}/images_panoptic.tar.gz",
"dataset.test.img_dir": f"{S3_EVAL}/images.tar.gz",
}
export :
{
"model.sem_seg_head.num_classes": 90,
}
inference (sources de données obligatoires) :
{
"model.sem_seg_head.num_classes": 90,
"dataset.contiguous_id": True,
"dataset.train.img_dir": f"{S3_TRAIN}/images.tar.gz",
"dataset.label_map": {"coco_panoptic": f"{S3_TRAIN}/label_map_panoptic.json; *: label_map.json"},
"dataset.train.instance_json": f"{S3_TRAIN}/annotations.json",
"dataset.train.panoptic_json": f"{S3_TRAIN}/annotations_panoptic.json",
"dataset.train.panoptic_dir": f"{S3_TRAIN}/images_panoptic.tar.gz",
"dataset.val.img_dir": f"{S3_EVAL}/images.tar.gz",
"dataset.val.instance_json": f"{S3_EVAL}/annotations.json",
"dataset.val.panoptic_json": f"{S3_EVAL}/annotations_panoptic.json",
"dataset.val.panoptic_dir": f"{S3_EVAL}/images_panoptic.tar.gz",
"dataset.test.img_dir": f"{S3_EVAL}/images.tar.gz",
}
quantize (sources de données obligatoires) :
{
"dataset.train.img_dir": f"{S3_TRAIN}/images.tar.gz",
"dataset.label_map": {"coco_panoptic": f"{S3_TRAIN}/label_map_panoptic.json; *: label_map.json"},
"dataset.train.instance_json": f"{S3_TRAIN}/annotations.json",
"dataset.train.panoptic_json": f"{S3_TRAIN}/annotations_panoptic.json",
"dataset.train.panoptic_dir": f"{S3_TRAIN}/images_panoptic.tar.gz",
"dataset.val.img_dir": f"{S3_EVAL}/images.tar.gz",
"dataset.val.instance_json": f"{S3_EVAL}/annotations.json",
"dataset.val.panoptic_json": f"{S3_EVAL}/annotations_panoptic.json",
"dataset.val.panoptic_dir": f"{S3_EVAL}/images_panoptic.tar.gz",
"dataset.test.img_dir": f"{S3_EVAL}/images.tar.gz",
"dataset.quant_calibration_dataset.images_dir": f"{S3_TRAIN}/images.tar.gz",
}
Dataset d'évaluation
Optionnel. Les sources de données Val font partie de la configuration du dataset en même temps que l'entraînement.
Paramètres importants
- model.sem_seg_head.num_classes : Nombre de classes de segmentation. Par défaut 200. Doit correspondre à vos catégories d'annotation.
- model.backbone.swin.type : Variante Swin Transformer. Par défaut tiny. Les options incluent tiny, small, base, large.
- model.mode : Mode de segmentation. Par défaut panoptic. Options : panoptic, instance, semantic.
- train.optim.lr : Taux d'apprentissage. Par défaut 2e-4 (AdamW).
- dataset.train.batch_size : Taille de batch par GPU. Par défaut 1. Mask2Former est gourmande en mémoire en raison des prédictions par pixel.
Multi-GPU / Multi-nœud
Méthode de lancement : Lightning-managed (processus python unique, Lightning lance les workers).
| Clé de spec | Description | Par défaut |
|---|---|---|
train.num_gpus |
Nombre de GPU | 1 |
train.gpu_ids |
Indices de périphériques GPU | [0] |
train.num_nodes |
Nombre de nœuds | 1 |
train.distributed_strategy |
ddp ou fsdp |
ddp |
- Même comportement DDP/FSDP que DINO (conscient du checkpoint d'activation)
- Les backbones FAN activent automatiquement
sync_batchnorm fsdpforce FP16
Variables d'environnement multi-nœud (définies par l'orchestrateur) : WORLD_SIZE, NODE_RANK, MASTER_ADDR, MASTER_PORT, NUM_GPU_PER_NODE.
Valeurs par défaut Export / TRT
- Types de données TRT : FP32, FP16 uniquement — INT8 n'est PAS supporté
Référence TAO Deploy complète : tao-deploy-mask2former.
Matériel
Minimum 1 GPU, recommandé 4 GPU. 24 GB+ (A100 recommandé) de VRAM par GPU. Mask2Former est gourmande en mémoire. batch_size=1 est la valeur par défaut pour une bonne raison. Multi-GPU recommandé pour une vitesse d'entraînement raisonnable.
Modèles d'erreur
CUDA out of memory : batch_size est déjà 1 par défaut. Réduisez la résolution de l'image dans la configuration d'augmentation ou utilisez une variante Swin plus petite.
Incompatibilité format panoptic vs instance : Assurez-vous de fournir le format d'annotation correct correspondant au paramètre model.mode.
Inférence de paramètre de spec / modèle parent
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(). Ceci reflète l'ancien flux microservices infer_params.py.
Mappages d'inférence de mask2former.config.json TAO Core :
| Action | Champ de spec | Fonction d'inférence | Signification |
|---|---|---|---|
| evaluate | encryption_key |
key |
clé de chiffrement |
| evaluate | evaluate.checkpoint |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| evaluate | evaluate.trt_engine |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| evaluate | results_dir |
output_dir |
répertoire de résultats du job actuel |
| export | encryption_key |
key |
clé de chiffrement |
| export | export.checkpoint |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| export | export.onnx_file |
create_onnx_file |
chemin ONNX de sortie |
| export | results_dir |
output_dir |
répertoire de résultats du job actuel |
| gen_trt_engine | encryption_key |
key |
clé de chiffrement |
| gen_trt_engine | gen_trt_engine.onnx_file |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| gen_trt_engine | gen_trt_engine.trt_engine |
create_engine_file |
chemin du moteur TensorRT de sortie |
| gen_trt_engine | results_dir |
output_dir |
répertoire de résultats du job actuel |
| inference | encryption_key |
key |
clé de chiffrement |
| inference | inference.checkpoint |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| inference | inference.trt_engine |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| inference | results_dir |
output_dir |
répertoire de résultats du job actuel |
| quantize | encryption_key |
key |
clé de chiffrement |
| quantize | quantize.model_path |
parent_model |
fichier de modèle déduit du dossier de résultats du job parent |
| quantize | results_dir |
output_dir |
répertoire de résultats du job actuel |
| train | encryption_key |
key |
clé de chiffrement |
| train | model.backbone.pretrained_weights |
{'link': 'https://github.com/SwinTransformer/storage/releases/download/v1.0.8/swin_tiny_patch4_window7_224_22k.pth', 'destination_path': '/ptm/mask2former/swin_tiny_patch4_window7_224_22k/swin_tiny_patch4_window7_224_22k.pth'} |
{'link': 'https://github.com/SwinTransformer/storage/releases/download/v1.0.8/swin_tiny_patch4_window7_224_22k.pth', 'destination_path': '/ptm/mask2former/swin_tiny_patch4_window7_224_22k/swin_tiny_patch4_window7_224_22k.pth'} |
| train | results_dir |
output_dir |
répertoire de résultats du job actuel |
| train | train.resume_training_checkpoint_path |
resume_model |
fichier de modèle déduit du dossier de résultats du job actuel |
Pour parent_model ou parent_model_folder, passez l'ID du job enfant d'entraînement/export/AutoML amont en tant que parent_job_id. Le SDK répertorie le dossier de résultats parent, filtre les artefacts de checkpoint et retourne le fichier ou dossier de modèle sélectionné. N'ajoutez pas ces mappages à config.json et ne patchez pas les scripts de runner générés pour deviner les chemins de checkpoint.