tao-train-grounding-dino について
Grounding DINOによるオープンセット物体検出を学習・実行するTAOスキルです。固定クラス語彙に頼らず、テキストプロンプトで検出でき、評価、推論、エクスポート、デプロイにも対応します。
主な機能
- 01テキストプロンプトによるオープンセット検出
- 02ODVG、COCO、raw形式に対応
- 03学習、評価、推論のワークフロー
- 04ONNXエクスポートとTensorRTデプロイ
- 05AutoML対応の学習ポリシー
活用シーン
- 01テキストで記述した物体の検出
- 02ODVGまたはCOCOアノテーションでの学習
- 03検証データでの検出結果の評価
- 04TensorRTを利用したモデルのデプロイ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill tao-train-grounding-dinoインストール後、Claude Code で/tao-train-grounding-dinoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/skill_info.yamlspec_template_deploy_evaluate.yamlspec_template_deploy_gen_trt_engine.yamlspec_template_deploy_inference.yamlspec_template_evaluate.yamlspec_template_export.yamlspec_template_gen_trt_engine.yamlspec_template_inference.yamlspec_template_quantize.yamlspec_template_train.yamltao-deploy-grounding-dino.mdtao-deploy-grounding-dino.skill_info.yamlschemas/evaluate.schema.jsonexport.schema.jsongen_trt_engine.schema.jsoninference.schema.jsonmanifest.jsonquantize.schema.jsontrain.schema.json詳細
Grounding DINO
オープンセット物体検出向けの Grounding DINO です。DINO スタイルの検出と BERT テキストエンコーダーを組み合わせ、言語でガイドする検出を実現します。固定のクラス語彙を使わず、テキストプロンプトで説明された物体を検出します。
Grounding DINO の重み一式には train.pretrained_model_path を、バックボーンのみの重みには model.pretrained_backbone_path を設定してください。
TAO Deploy TensorRT アクション(gen_trt_engine、TensorRT の evaluate、TensorRT の inference)を実行する場合は、最初に references/tao-deploy-grounding-dino.md を読んでください。デプロイ仕様テンプレートは、このスキルの references/ フォルダーにあり、ファイル名のプレフィックスは spec_template_deploy_*.yaml です。
データクラススキーマ
生成された 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、デフォルト値、最小値/最大値の範囲、列挙値、オプションの重み、数式条件、依存関係、よく使われるパラメーターには、同梱の train スキーマを使用してください。実行時に ~/tao-core があることを前提にしないでください。メンテナーはスキルバンクをパッケージ化する前に、スキーマとテンプレートを再生成します。
Train アクションのポリシー
このモデルはモデルレイヤーで AutoML が有効になっています。train ステージのリクエストに対応する前に、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 の両方がパッケージに含まれている場合、デフォルトではこのモデルの skill_dir を指定して、train アクションを tao-skill-bank:tao-run-automl 経由で実行してください。データセット、仕様、出力ディレクトリー、GPU/プラットフォーム設定、親チェックポイント、automl_policy に関するワークフロー/アプリケーションのオーバーライドは維持してください。直接モデルをトレーニングするのは、automl_policy: off の場合、またはパッケージ内に train スキーマ/テンプレートがない場合に限ります。スキーマがない場合は、AutoML は有効ですが、スキーマが生成されるまではこのモデルで実行できないことを報告してください。
evaluate、inference、export、デプロイフローなどの train 以外のアクションは、このモデルのスキル内で実行します。実行ごとの automl_policy オーバーライドによって、モデルのメタデータが変わることはありません。
トレーニング要件
- データセットの種類: object_detection
- 形式: odvg、coco、raw
- 監視メトリック: val_mAP50
アクションごとのデータセット要件
| アクション | 仕様キー | ソース | ファイル | リスト形式? |
|---|---|---|---|---|
| evaluate | dataset.test_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | いいえ |
| inference | dataset.infer_data_sources | inference_dataset | image_dir: images.tar.gz, classmap: label_map.txt | いいえ |
| quantize | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json | はい |
| quantize | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | いいえ |
| quantize | dataset.quant_calibration_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json | いいえ |
| train | dataset.train_data_sources | train_datasets | image_dir: images.tar.gz, json_file: annotations_odvg.jsonl, label_map: annotations_odvg_labelmap.json | はい |
| train | dataset.val_data_sources | eval_dataset | image_dir: images.tar.gz, json_file: annotations.json | いいえ |
典型的な Spec オーバーライド
データソースのオーバーライドはすべてのアクションで必須です。エージェントは、上記のアクション別データセット要件テーブルに基づいてデータソースのパスを構築し、spec_overrides に含める必要があります。
S3_TRAIN = "s3://bucket/data/train"
S3_EVAL = "s3://bucket/data/eval"
train(必須のデータソース):
{
"train.num_epochs": 10,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
gen_trt_engine:
{
"gen_trt_engine.tensorrt.data_type": "FP16",
}
inference(必須のデータソース):
{
"dataset.infer_data_sources.captions": [
"person"
],
"dataset.infer_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "classmap": f"{S3_EVAL}/label_map.txt"},
}
evaluate(必須のデータソース):
{
"dataset.test_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
}
quantize(必須のデータソース):
{
"dataset.train_data_sources": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"}],
"dataset.val_data_sources": {"image_dir": f"{S3_EVAL}/images.tar.gz", "json_file": f"{S3_EVAL}/annotations.json"},
"dataset.quant_calibration_data_sources": {"image_dir": f"{S3_TRAIN}/images.tar.gz", "json_file": f"{S3_TRAIN}/annotations_odvg.jsonl", "label_map": f"{S3_TRAIN}/annotations_odvg_labelmap.json"},
}
評価データセット
任意です。トレーニングでは ODVG 形式を使用できますが、検証では mAP の計算に COCO 形式のアノテーションを使用します。
重要なパラメーター
- model.backbone:デフォルトは swin_tiny_224_1k です。resnet_50 やその他の Swin バリアントもサポートしています。Swin は一般にグラウンディングタスクでより高い性能を発揮します。
- model.text_encoder_type:テキストエンコーディングに使用する BERT モデルです。デフォルトは bert-base-uncased です。max_text_len のデフォルト値は 256 です。
- train.optim.lr:学習率です。デフォルトは 2e-4 です。lr_backbone は 2e-5 です。fp16/fp32 に加えて、bf16 精度もサポートしています。
- dataset.max_labels:トレーニング中の画像あたりの最大ラベル数です。デフォルトは 50 です。密なアノテーションを含むデータセットでは、この値を増やしてください。
- model.num_queries:オブジェクトクエリ数です。オープンボキャブラリーの性質上、デフォルトは 900(DINO の 300 より多い)です。
- train.optim.lr_steps:MultiStep 学習率スケジュールです。デフォルトは [10] です。
マルチ GPU/マルチノード
起動方法: Lightning による管理(単一の python プロセスで、Lightning がワーカーを起動します)。
| Spec Key | 説明 | デフォルト |
|---|---|---|
train.num_gpus | GPU 数 | 1 |
train.gpu_ids | GPU デバイスのインデックス | [0] |
train.num_nodes | ノード数 | 1 |
train.distributed_strategy | ddp または fsdp | ddp |
DINO と同じ DDP/FSDP の動作です。マルチノードでは、オーケストレーターによって WORLD_SIZE、NODE_RANK、MASTER_ADDR、MASTER_PORT の環境変数が設定されている必要があります。
エクスポート/TRT のデフォルト値
- エクスポート入力:960x544(他の OD モデルより大きい)、opset 17
- TRT データ型:FP32、FP16 のみ — INT8 はサポートされていません
- TRT ワークスペース:8192 MB(他の OD モデルの 8 倍)
- TRT max_batch_size:4
TAO Deploy のリファレンス全体:tao-deploy-grounding-dino。
ハードウェア
最低 1 GPU、推奨 4 GPU です。GPU あたり 24GB 以上の VRAM(A100 を推奨)が必要です。Grounding DINO はテキストエンコーダー(BERT)を使用するため、標準的な DINO よりも負荷が高くなります。GPU メモリは 24GB 以上を推奨します。16GB GPU の場合は batch_size を小さくしてください。
エラーパターン
CUDA のメモリ不足:batch_size を小さくしてください(4 -> 2 -> 1)。BERT テキストエンコーダーによって、ビジョンバックボーンに加えて大幅なメモリーオーバーヘッドが発生します。
検証アノテーションのカテゴリ ID:損失を正しく計算するには、検証アノテーションのカテゴリ ID を 0 から始めてください。必要に応じて、アノテーション形式を変換してください。
テキストエンコーダーの読み込みエラー:コンテナから bert-base-uncased の重みをダウンロードできることを確認するか、ローカルパスを指定してください。
Spec パラメーター/親モデルの推論
モデル固有の推論マッピングは、config.json ではなくこの MD ファイルに記載します。生成されたランナーはこのセクションを読み込み、create_job() の前に SDK ヘルパーを使ってマッピングを適用します。これは、以前のマイクロサービスにおける infer_params.py のフローを踏襲しています。
TAO Core の grounding_dino.config.json における推論マッピング:
| アクション | Spec フィールド | 推論関数 | 意味 |
|---|---|---|---|
| 評価 | encryption_key | key | 暗号化キー |
| 評価 | evaluate.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| 評価 | evaluate.trt_engine | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| 評価 | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| エクスポート | encryption_key | key | 暗号化キー |
| エクスポート | export.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| エクスポート | export.onnx_file | create_onnx_file | 出力 ONNX パス |
| エクスポート | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| gen_trt_engine | encryption_key | key | 暗号化キー |
| gen_trt_engine | gen_trt_engine.onnx_file | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| gen_trt_engine | gen_trt_engine.trt_engine | create_engine_file | 出力 TensorRT エンジンパス |
| gen_trt_engine | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| 推論 | encryption_key | key | 暗号化キー |
| 推論 | inference.checkpoint | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| 推論 | inference.trt_engine | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| 推論 | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| 量子化 | encryption_key | key | 暗号化キー |
| 量子化 | quantize.model_path | parent_model | 親ジョブの結果フォルダーから推論されるモデルファイル |
| 量子化 | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| 学習 | encryption_key | key | 暗号化キー |
| 学習 | model.pretrained_backbone_path | ptm_if_no_resume_model | 再開チェックポイントがない場合の PTM |
| 学習 | results_dir | output_dir | 現在のジョブの結果ディレクトリ |
| 学習 | train.pretrained_model_path | ptm_if_no_resume_model | 再開チェックポイントがない場合の PTM |
| 学習 | train.resume_training_checkpoint_path | resume_model | 現在のジョブの結果フォルダーから推論されるモデルファイル |
parent_model または parent_model_folder の場合は、上流の train/export/AutoML 子ジョブの ID を parent_job_id として渡します。SDK は親の結果フォルダーを一覧表示し、チェックポイントのアーティファクトを絞り込んで、選択されたモデルファイルまたはフォルダーを返します。これらのマッピングを config.json に戻したり、チェックポイントパスを推測するように生成されたランナースクリプトを修正したりしないでください。