tao-generate-image-grounding について
画像とキャプションの組から、整えたキャプション、文字範囲付きの参照表現、ピクセル座標のバウンディングボックスを生成する TAO Toolkit のパイプラインスキルです。視覚言語モデルを使い、フレーズグラウンディング用の学習データを準備します。
主な機能
- 01キャプションの整形と表現抽出
- 02表現の文字範囲を記録
- 03表現をピクセル座標のボックスに対応付け
- 04各パイプラインステップを個別実行
- 05サンプルごとのチェックポイントから再開
活用シーン
- 01フレーズグラウンディング用学習注釈の作成
- 02画像キャプションから表現を抽出
- 03参照表現にボックスを追加
- 04中断後にアノテーションを再開
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ promptingcompany/ nv-skills --skill tao-generate-image-groundingインストール後、Claude Code で/tao-generate-image-groundingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/configuration.mdskill_info.yamlvllm_server.md詳細
画像グラウンディングパイプライン
(image, caption) のペアを、画像ごとのグラウンディング済みアノテーションに変換します。アノテーションには、整形済みキャプション、文字範囲付きの参照表現、および各表現に対応するピクセル空間のバウンディングボックスが含まれます。1 つの VLM(Gemini または OpenAI 互換エンドポイント)が両方のステップを処理します。
目的
参照表現モデルとグラウンディングモデル向けの、フレーズ単位でグラウンディングされた学習データを生成します。VLM は「教師」アノテーターとして機能します。ステップ 0 では、画像を見ながらキャプションから参照表現を抽出し、ステップ 1 では、各画像の各表現について 1 セットのバウンディングボックスを返します。
パイプラインのアーキテクチャ
Step 0: Expression extraction → VLM cleans caption, extracts referring expressions + char spans
Step 1: Phrase grounding → VLM returns pixel bboxes + scores per expression
各ステップは workflow.steps で個別に選択できます。各ステップはサンプルごとのチェックポイントを step_<N>_*/.ckpt/<sample_id>.json に書き込み、再実行時には処理済みのレコードをスキップします。チェックポイントを無視して最初から再処理するには、workflow.force_reprocess: true を設定します。
手順
初期設定
ユーザーがこのパイプラインを実行したい場合は、次の手順に沿って案内します。
-
入力 JSONL:JSONL のパスを尋ねます。各行は
{"image_path": "...", "caption": "..."}のようなオブジェクト 1 つである必要があります。image_pathは絶対パスでも相対パスでもかまいません。 -
画像ルート:
image_pathの値に相対パスが含まれる場合は、それらの解決先となるディレクトリをdata.image_rootに設定します。 -
API アクセス:使用する VLM エンドポイントを尋ねます。次の 5 つの選択肢を提示し、選択に応じて対応します。
- Gemini —
vlm.backend: "gemini"を設定します。GOOGLE_API_KEY(環境変数またはvlm.gemini.api_key)が必要です。 - NIM(例:
https://inference-api.nvidia.com/v1)—vlm.backend: "openai"を設定し、base_url、model_name、api_keyを確認します。 - TAO inference microservice(セルフホスト可能、OpenAI 互換)。サーバーがすでに実行中かどうかを確認します。
- 実行中 —
base_url、model_name、および(任意で)api_keyを確認し、vlm.backend: "openai"を設定します。 - 未実行 —
skills/applications/tao-run-inference-serviceスキルに沿って、OpenAI 互換 API を備えたローカル TAO 推論マイクロサービスの起動を案内します。特定のモデルを利用できると案内する前に、skills/applications/tao-run-inference-service/references/service.yamlのvalid_network_arch_config_basenamesを確認します。サーバーの起動後、base_url、model_name、および(任意で)api_keyを確認し、vlm.backend: "openai"を設定します。
- 実行中 —
- vLLM(セルフホスト可能、OpenAI 互換)。サーバーがすでに実行中かどうかを確認します。
- 実行中 —
base_url、model_name、および(任意で)api_keyを確認し、vlm.backend: "openai"を設定します。 - 未実行 — references/vllm_server.md に沿って vLLM サーバーをインストールして起動し、
base_url、model_name、および(任意で)api_keyを確認して、vlm.backend: "openai"を設定します。
- 実行中 —
- カスタム(その他の OpenAI 互換エンドポイント)—
vlm.backend: "openai"を設定し、base_url、model_name、および(任意で)api_keyを確認します。
ユーザーがエンドポイントを持っておらず、設定する意思もない場合は、いったん停止して API アクセスの解決を支援します。
- Gemini —
-
ワークフローのステップ:次のいずれかを選択します。
- パイプライン全体:
["0", "1"] - 表現抽出のみ:
["0"] - グラウンディングのみ:
["1"]。この場合、results_dir/step_0_expression_extraction/annotations.jsonlにステップ 0 の出力が存在する必要があります。
- パイプライン全体:
-
再開または新規実行:ワークフローはデフォルトでチェックポイントを再利用し、完了済みのレコードをスキップします。すべてを再処理するには、
image_grounding.workflow.force_reprocess=trueを設定します。
パイプラインの実行
パイプラインは auto_label CLI を使って TAO Toolkit コンテナ内で実行します。
auto_label generate -e /path/to/spec.yaml \
results_dir=/results \
image_grounding.data.input_jsonl=/data/captions.jsonl \
image_grounding.data.image_root=/data/images \
image_grounding.vlm.gemini.api_key=$GOOGLE_API_KEY
デフォルトの仕様ファイルを生成します:auto_label default_specs results_dir=/results module_name=auto_label。その後、autolabel_type: "image_grounding" を設定します。すべてのフィールドは、コマンドラインで Hydra のドット記法によるオーバーライドに対応しています。
YAML の構造全体、すべてのパラメーター、モデル/エンドポイントの設定、およびエラーのパターンについては、references/configuration.md を参照してください。
推奨されるパイロットワークフロー
- 両方のステップを実行し、5~10 枚の画像で試します
step_0_expression_extraction/annotations.jsonlを確認します。cleaned_captionとexpressions[]は正確ですか? 適切な名詞句が抽出されていますか?step_1_grounding/annotations.jsonlを確認します。expressions[].instances[]の bbox は適切ですか? 信頼度スコアは妥当ですか?- 品質が不十分な場合は、VLM をより高性能なモデル(例:
gemini-2.5-pro)に切り替えるか、media_resolution/max_output_tokensの値を上げてから、force_reprocess=trueを指定して再実行します。 - 問題がないことを確認したら、データセット全体で実行します。
設定
主な設定項目(全項目については references/configuration.md を参照):
| 項目 | デフォルト | 説明 |
|---|---|---|
workflow.steps | ["0","1"] | 実行するパイプラインのステップ("0" = 表現、"1" = グラウンディング) |
workflow.max_workers | 4 | ステップごとの並列スレッド数(API のレート制限に注意してください) |
workflow.force_reprocess | false | サンプルごとのチェックポイントを無視し、最初から再処理します |
vlm.backend | "gemini" | "gemini" または "openai"(OpenAI 互換エンドポイント) |
data.input_jsonl | 必須 | 1 行ごとに image_path と caption を含む入力 JSONL のパス |
data.image_root | "" | 相対 image_path エントリの解決に使用する任意のプレフィックス |
入力
data.input_jsonl に指定する単一の JSONL ファイルです。1 行につき JSON オブジェクトを 1 つ記述します。
| 項目 | 必須 | 説明 |
|---|---|---|
image_path | はい | 絶対パス、または data.image_root を基準に解決する相対パス |
caption | はい | 画像の自由記述キャプション |
image_id | いいえ | 安定した識別子です。指定がない場合はファイル名から自動生成されます |
width, height | いいえ | 画像のピクセル単位の寸法です。指定がない場合、bbox の範囲制限には 1920×1080 が使用されます |
出力
すべての出力は results_dir/ に保存されます。
step_0_expression_extraction/annotations.jsonl—cleaned_captionとexpressions[](各要素にtext、expression_id、char_span、noun_chunk、空のinstances[]を含む)が追加されたレコードごとの出力です。step_1_grounding/annotations.jsonl— 同じレコードにexpressions[].instances[]を入力したものです(各インスタンスには、ピクセル座標空間のbbox: [x1,y1,x2,y2]、[0.0, 1.0]の範囲のscore、bbox_idが含まれます)。results_dir/annotations.jsonl— 利便性のため、最後のステップの出力をコピーしたものです。step_<N>_*/.ckpt/<sample_id>.json— 再開に使用するサンプルごとのチェックポイントです。
前提条件
- コンテナー:
nvcr.io/nvidia/tao/tao-toolkit:6.26.3-pyt - API アクセス:少なくとも 1 つの VLM エンドポイント(Gemini API キー、または画像入力に対応した OpenAI 互換エンドポイント)