mcpField
T
tao-train-mask2former

tao-train-mask2former

github.com/promptingcompany数据与数据库039 次安装17 周前更新
代码仓库

关于 tao-train-mask2former

tao-train-mask2former 是用于训练和运行 Mask2Former 通用分割模型的 TAO 技能,支持全景、实例和语义分割模式。它提供模型配置指引,以及训练、评估、推理、导出、量化和 TensorRT 工作流。

主要功能

  1. 01全景、实例和语义分割
  2. 02采用掩码注意力的 Transformer 架构
  3. 03支持 AutoML 的训练流程
  4. 04训练、评估与推理
  5. 05导出、量化和 TensorRT 指引

适用场景

  1. 01使用 COCO 格式数据集训练 Mask2Former
  2. 02选择全景、实例或语义分割模式
  3. 03评估分割数据集和模型输出
  4. 04准备模型导出或 TensorRT 工作流

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/promptingcompany/nv-skills --skill tao-train-mask2former

安装后在 Claude Code 中输入/tao-train-mask2former确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

BENCHMARK.md
skill-card.md
skill.oms.sig
evals/
evals.json
references/
skill_info.yaml
spec_template_deploy_evaluate.yaml
spec_template_deploy_gen_trt_engine.yaml
spec_template_deploy_inference.yaml
spec_template_evaluate.yaml
spec_template_export.yaml
spec_template_gen_trt_engine.yaml
spec_template_inference.yaml
spec_template_quantize.yaml
spec_template_train.yaml
tao-deploy-mask2former.md
tao-deploy-mask2former.skill_info.yaml
schemas/
evaluate.schema.json
export.schema.json
gen_trt_engine.schema.json
inference.schema.json
manifest.json
quantize.schema.json
train.schema.json

详细介绍

Mask2Former

用于通用图像分割(全景、实例和语义)的 Mask2Former。基于 Transformer,采用掩码注意力,可实现高质量的分割结果。

设置 model.backbone.pretrained_weights 以指定 Swin 主干网络权重。

对于 TAO Deploy TensorRT 操作(gen_trt_engine、TensorRT evaluate 和 TensorRT inference),请先阅读 references/tao-deploy-mask2former.md。Deploy 规范模板位于此技能的 references/ 文件夹中,文件名前缀为 spec_template_deploy_*.yaml。

Dataclass 架构

生成的 TAO Core 架构打包在 schemas/<action>.schema.json 中,schemas/manifest.json 列出了可用操作。每个生成的架构也会根据架构顶层的 default 字段生成 references/spec_template_<action>.yaml。AutoML 是否启用由模型层的 references/skill_info.yaml 中的 automl_enabled 声明。要运行 AutoML,仍需存在且可解析的 schemas/train.schema.json 和 references/spec_template_train.yaml。使用打包的训练架构来获取 automl_default_parameters、automl_disabled_parameters、默认值、最小值/最大值范围、枚举、选项权重、数学条件、依赖项和常用参数。运行时不要依赖 ~/tao-core;维护者会在打包技能库之前重新生成架构/模板。

训练操作策略

此模型在模型层启用了 AutoML。处理任何训练阶段请求之前,请先阅读 references/skill_info.yaml,并根据明确指定的 automl_policy 值或用户的工作流请求确定本次运行的覆盖设置。将“关闭 AutoML”“禁用 AutoML”“不要 HPO”或“普通训练”等表达视为本次运行的 automl_policy: off;否则默认为 auto。当 automl_policy: auto、automl_enabled: true,且已打包 schemas/train.schema.json 和 references/spec_template_train.yaml 时,默认通过 tao-skill-bank:tao-run-automl 执行训练操作,并传入此模型的 skill_dir。保留工作流/应用对数据集、规范、输出目录、GPU/平台设置、父检查点和 automl_policy 的覆盖设置。仅当 automl_policy: off 或缺少打包的训练架构/模板时,才直接训练模型;若缺少架构/模板,请说明此模型已启用 AutoML,但在生成架构之前无法运行 AutoML。

evaluate、inference、export 和部署流程等非训练操作仍由此模型技能处理。单次运行的 automl_policy 覆盖设置不会更改模型元数据。

训练要求

  • 数据集类型: 分割
  • 格式: coco_panoptic、coco
  • 监控指标: mIoU
Per-Action Dataset Requirements
ActionSpec KeySourceFilesList?
evaluatedataset.train.img_dirtrain_datasetsimages.tar.gzNo
evaluatedataset.label_maptrain_datasetscoco_panoptic: label_map_panoptic.json; *: label_map.jsonNo
evaluatedataset.train.instance_jsontrain_datasetsannotations.jsonNo
evaluatedataset.train.panoptic_jsontrain_datasetsannotations_panoptic.jsonNo
evaluatedataset.train.panoptic_dirtrain_datasetsimages_panoptic.tar.gzNo
evaluatedataset.val.img_direval_datasetimages.tar.gzNo
evaluatedataset.val.instance_jsoneval_datasetannotations.jsonNo
evaluatedataset.val.panoptic_jsoneval_datasetannotations_panoptic.jsonNo
evaluatedataset.val.panoptic_direval_datasetimages_panoptic.tar.gzNo
evaluatedataset.test.img_direval_datasetimages.tar.gzNo
inferencedataset.train.img_dirtrain_datasetsimages.tar.gzNo
inferencedataset.label_maptrain_datasetscoco_panoptic: label_map_panoptic.json; *: label_map.jsonNo
inferencedataset.train.instance_jsontrain_datasetsannotations.jsonNo
inferencedataset.train.panoptic_jsontrain_datasetsannotations_panoptic.jsonNo
inferencedataset.train.panoptic_dirtrain_datasetsimages_panoptic.tar.gzNo
inferencedataset.val.img_direval_datasetimages.tar.gzNo
inferencedataset.val.instance_jsoneval_datasetannotations.jsonNo
inferencedataset.val.panoptic_jsoneval_datasetannotations_panoptic.jsonNo
inferencedataset.val.panoptic_direval_datasetimages_panoptic.tar.gzNo
inferencedataset.test.img_direval_datasetimages.tar.gzNo
quantizedataset.train.img_dirtrain_datasetsimages.tar.gzNo
quantizedataset.label_maptrain_datasetscoco_panoptic: label_map_panoptic.json; *: label_map.jsonNo
quantizedataset.train.instance_jsontrain_datasetsannotations.jsonNo
quantizedataset.train.panoptic_jsontrain_datasetsannotations_panoptic.jsonNo
quantizedataset.train.panoptic_dirtrain_datasetsimages_panoptic.tar.gzNo
quantizedataset.val.img_direval_datasetimages.tar.gzNo
quantizedataset.val.instance_jsoneval_datasetannotations.jsonNo
quantizedataset.val.panoptic_jsoneval_datasetannotations_panoptic.jsonNo
quantizedataset.val.panoptic_direval_datasetimages_panoptic.tar.gzNo
quantizedataset.test.img_direval_datasetimages.tar.gzNo
quantizedataset.quant_calibration_dataset.images_dirtrain_datasetsimages.tar.gzNo
traindataset.train.img_dirtrain_datasetsimages.tar.gzNo
traindataset.label_maptrain_datasetscoco_panoptic: label_map_panoptic.json; *: label_map.jsonNo
traindataset.train.instance_jsontrain_datasetsannotations.jsonNo
traindataset.train.panoptic_jsontrain_datasetsannotations_panoptic.jsonNo
traindataset.train.panoptic_dirtrain_datasetsimages_panoptic.tar.gzNo
traindataset.val.img_direval_datasetimages.tar.gzNo
traindataset.val.instance_jsoneval_datasetannotations.jsonNo
traindataset.val.panoptic_jsoneval_datasetannotations_panoptic.jsonNo
traindataset.val.panoptic_direval_datasetimages_panoptic.tar.gzNo
traindataset.test.img_direval_datasetimages.tar.gzNo
常见规格覆盖项

每项操作都必须覆盖数据源——Agent 必须根据上方的「各操作数据集要求」表构建数据源路径,并将其包含在 spec_overrides 中。

S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"

train(必需数据源):

{
    "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(必需数据源):

{
    "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(必需数据源):

{
    "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(必需数据源):

{
    "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",
}

评估数据集

可选。验证数据源与训练数据源一同列在数据集配置中。

重要参数

  • model.sem_seg_head.num_classes:分割类别数。默认值为 200。必须与标注类别匹配。
  • model.backbone.swin.type:Swin Transformer 变体。默认值为 tiny。可选项包括 tiny、small、base、large。
  • model.mode:分割模式。默认值为 panoptic。可选项:panoptic、instance、semantic。
  • train.optim.lr:学习率。默认值为 2e-4(AdamW)。
  • dataset.train.batch_size:每个 GPU 的批大小。默认值为 1。由于需要进行逐像素预测,Mask2Former 的内存占用较高。

多 GPU / 多节点

**启动方式:**由 Lightning 管理(单个 python 进程,由 Lightning 派生工作进程)。

Spec Key描述默认值
train.num_gpusGPU 数量1
train.gpu_idsGPU 设备索引[0]
train.num_nodes节点数量1
train.distributed_strategyddp 或 fsdpddp
  • DDP/FSDP 行为与 DINO 相同(支持激活检查点)
  • FAN 主干网络会自动启用 sync_batchnorm
  • fsdp 会强制使用 FP16

多节点环境变量(由编排器设置):WORLD_SIZE、NODE_RANK、MASTER_ADDR、MASTER_PORT、NUM_GPU_PER_NODE。

导出 / TRT 默认值

  • TRT 数据类型:仅支持 FP32、FP16——不支持 INT8

完整的 TAO Deploy 参考:tao-deploy-mask2former。

硬件

至少需要 1 块 GPU,建议使用 4 块 GPU。每块 GPU 需要 24GB 以上显存(推荐 A100)。Mask2Former 的内存占用较高。默认 batch_size=1 是有充分理由的。建议使用多 GPU,以获得合理的训练速度。

错误模式

CUDA 内存不足:默认 batch_size 已为 1。请在数据增强配置中降低图像分辨率,或使用更小的 Swin 变体。

全景分割与实例分割格式不匹配:请确保提供的标注格式与 model.mode 设置匹配。

Spec 参数 / 父模型推断

特定于模型的推断映射应放在此 MD 文件中,而不是 config.json 中。生成的运行器应读取此部分,并在调用 create_job() 前使用 SDK 辅助函数应用这些映射。这与旧版微服务的 infer_params.py 流程一致。

TAO Core mask2former.config.json 中的推断映射:

操作Spec 字段推断函数含义
evaluateencryption_keykey加密密钥
evaluateevaluate.checkpointparent_model根据父作业结果文件夹推断出的模型文件
evaluateevaluate.trt_engineparent_model根据父作业结果文件夹推断出的模型文件
evaluateresults_diroutput_dir当前作业的结果目录
exportencryption_keykey加密密钥
exportexport.checkpointparent_model根据父作业结果文件夹推断出的模型文件
exportexport.onnx_filecreate_onnx_file输出 ONNX 路径
exportresults_diroutput_dir当前作业的结果目录
gen_trt_engineencryption_keykey加密密钥
gen_trt_enginegen_trt_engine.onnx_fileparent_model根据父作业结果文件夹推断出的模型文件
gen_trt_enginegen_trt_engine.trt_enginecreate_engine_file输出 TensorRT 引擎路径
gen_trt_engineresults_diroutput_dir当前作业的结果目录
inferenceencryption_keykey加密密钥
inferenceinference.checkpointparent_model根据父作业结果文件夹推断出的模型文件
inferenceinference.trt_engineparent_model根据父作业结果文件夹推断出的模型文件
inferenceresults_diroutput_dir当前作业的结果目录
quantizeencryption_keykey加密密钥
quantizequantize.model_pathparent_model根据父作业结果文件夹推断出的模型文件
quantizeresults_diroutput_dir当前作业的结果目录
trainencryption_keykey加密密钥
trainmodel.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'}
trainresults_diroutput_dir当前作业的结果目录
traintrain.resume_training_checkpoint_pathresume_model根据当前作业结果文件夹推断出的模型文件

对于 parent_model 或 parent_model_folder,将上游 train/export/AutoML 子作业 ID 作为 parent_job_id 传入。SDK 会列出父作业的结果文件夹,筛选检查点产物,并返回选定的模型文件或文件夹。不要将这些映射重新添加到 config.json 中,也不要修改生成的运行器脚本来猜测检查点路径。

评论

支持 Markdown