图像接地标注生成Skill tao-generate-image-grounding

基于视觉语言模型(VLM)的两步图像接地标注流水线,从图像与文本描述对中提取指代表达式并生成像素级边界框。用于自动生成短语接地的训练数据,支持图像自动标注、短语定位、目标检测数据标注等场景。关键词:图像接地、短语接地、指代表达式、边界框、自动标注、VLM、视觉语言模型、图像理解、数据标注、TAO工具包。

视觉数据生成标注 0 次安装 0 次浏览 更新于 9/6/2026
名称 tao-generate-image-grounding
描述 “两步图像定位流水线:从(图像,描述)对中提取指代表达式,并通过视觉语言模型(VLM)将其接地到像素空间边界框。当用户希望将描述接地到边界框、生成短语接地标注、自动标注图像进行接地,或运行 image_grounding 流水线时使用。触发词包括 ‘image grounding’、‘phrase grounding’、‘ground captions’、‘auto-label image grounding’、‘image_grounding’。”
开源协议 Apache-2.0 compatibility: 需要 Docker + NVIDIA 容器工具包 + 至少一个 VLM 端点(Gemini API 密钥或 OpenAI 兼容端点)。 metadata:
作者 NVIDIA Corporation
版本 “0.1.0” allowed-tools: Read Bash Write tags: - image - grounding - bounding-boxes - auto-label - vlm - 2d-grounding

图像定位流水线

需要独立安装? 如果此会话尚未由 TAO 技能库插件初始化,请先运行 tao-setup 技能(主机预检、凭据、跨技能发现)。

(图像, 描述) 对转换为每张图像的定位标注:清理后的描述、带字符跨度的指代表达式,以及每个表达式的像素空间边界框。一个 VLM(Gemini 或任何 OpenAI 兼容端点)即可处理两个步骤。

用途

为指代表达式和定位模型生成短语定位训练数据。VLM 充当“教师”标注器:步骤 0 在查看图像的同时从描述中提取指代表达式;步骤 1 为每个图像中的每个表达式返回一组边界框。

流水线架构

步骤 0:表达式提取 → VLM 清理描述,提取指代表达式 + 字符跨度
步骤 1:短语定位 → VLM 为每个表达式返回像素边界框 + 分数

通过 workflow.steps 可单独选择各步骤。每个步骤都会将每个样本的检查点写入 step_<N>_*/.ckpt/<sample_id>.json,并在重新运行时跳过已处理的记录。设置 workflow.force_reprocess: true 可忽略检查点并从头重新处理。

说明

初始设置

当用户想要运行此流水线时,请遵循以下步骤:

  1. 输入 JSONL:询问 JSONL 路径。每行必须是一个类似 {"image_path": "...", "caption": "..."} 的对象。image_path 可以是绝对路径或相对路径。

  2. 图像根目录:如果任何 image_path 值是相对的,请设置 data.image_root 为它们应解析的目录。

  3. API 访问:询问用户想要使用哪个 VLM 端点。呈现以下五个选项并根据选择操作:

    1. Gemini — 设置 vlm.backend: "gemini";需要 GOOGLE_API_KEY(环境变量或 vlm.gemini.api_key)。
    2. NIM(例如 https://inference-api.nvidia.com/v1)— 设置 vlm.backend: "openai";收集 base_urlmodel_nameapi_key
    3. TAO 推理微服务(自托管,OpenAI 兼容)。确认服务器是否已在运行:
      • 正在运行 — 收集 base_urlmodel_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_urlmodel_name 和(可选)api_key;设置 vlm.backend: "openai"
    4. vLLM(自托管,OpenAI 兼容)。确认服务器是否已在运行:
      • 正在运行 — 收集 base_urlmodel_name 和(可选)api_key;设置 vlm.backend: "openai"
      • 未运行 — 按照 references/vllm_server.md 安装并启动 vLLM 服务器,然后收集 base_urlmodel_name 和(可选)api_key;设置 vlm.backend: "openai"
    5. 自定义(任何其他 OpenAI 兼容端点)— 设置 vlm.backend: "openai";收集 base_urlmodel_name 和(可选)api_key

    如果用户没有端点且不想设置,请停止并首先帮助解决 API 访问问题。

  4. 工作流步骤:选择以下之一:

    • 完整流水线:["0", "1"]
    • 仅表达式提取:["0"]
    • 仅定位:["1"],这需要已有的步骤 0 输出位于 results_dir/step_0_expression_extraction/annotations.jsonl
  5. 恢复 vs 全新运行:默认情况下,工作流重用检查点并跳过已完成的记录。要重新处理所有内容,设置 image_grounding.workflow.force_reprocess=true

运行流水线

该流水线在 TAO 工具包容器内通过 auto_label CLI 运行:

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 点符号覆盖。

参见 references/configuration.md 以了解完整的 YAML 结构、所有参数、模型/端点设置和错误模式。

推荐的试点工作流

  1. 在两个步骤上运行 5-10 张图像。
  2. 检查 step_0_expression_extraction/annotations.jsonlcleaned_captionexpressions[] 是否准确?是否捕获了正确的名词短语?
  3. 检查 step_1_grounding/annotations.jsonlexpressions[].instances[] 中的边界框是否正确?置信度分数是否合理?
  4. 如果质量不足,请将 VLM 切换到更强的模型(例如 gemini-2.5-pro)或提高 media_resolution/max_output_tokens,然后使用 force_reprocess=true 重新运行。
  5. 一旦满意,扩展到完整数据集。

配置

关键配置字段(完整参考见 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 必需 包含每行 image_path + caption 的输入 JSONL 路径
data.image_root "" 可选前缀,用于解析相对 image_path 条目

输入

位于 data.input_jsonl 的单个 JSONL 文件。每行一个 JSON 对象:

字段 必需 描述
image_path 绝对路径,或相对于 data.image_root 解析的路径
caption 图像的免费文本描述
image_id 稳定的标识符;如果缺少,则自动从文件名派生
width, height 图像尺寸(像素);如果缺少,则默认为 1920×1080 用于边界框钳制

输出

所有输出都放在 results_dir/ 中:

  • step_0_expression_extraction/annotations.jsonl — 每个记录的输出,带有 cleaned_captionexpressions[](每个包含 textexpression_idchar_spannoun_chunk、空的 instances[])。
  • step_1_grounding/annotations.jsonl — 相同记录,但填充了 expressions[].instances[](每个实例具有像素空间中的 bbox: [x1,y1,x2,y2]score[0.0, 1.0] 范围内,以及 bbox_id)。
  • results_dir/annotations.jsonl — 为方便起见,最后步骤输出的副本。
  • step_<N>_*/.ckpt/<sample_id>.json — 用于恢复的每个样本检查点。

先决条件

  • 容器nvcr.io/nvidia/tao/tao-toolkit:7.1.0-pyt <!-- versions-key: images.tao_toolkit.pyt -->
  • API 访问:至少一个 VLM 端点(Gemini API 密钥或能够进行图像输入的 OpenAI 兼容端点)