mcpField
T
tao-generate-video-reasoning-annotations

tao-generate-video-reasoning-annotations

github.com/nvidia数据与数据库3.8k1.6k 次安装今天更新
代码仓库

关于 tao-generate-video-reasoning-annotations

将视频转换为字幕、结构化描述以及带推理过程的问答训练数据的 TAO 标注技能。支持按需选择并恢复各处理步骤,也可为通用或特定领域的视频配置提示词。

主要功能

  1. 01视频筛选与分类
  2. 02全局、密集及分段字幕
  3. 03合成结构化描述
  4. 04选择题、二元及开放式问答
  5. 05步骤选择与断点恢复
  6. 06可配置领域提示词

适用场景

  1. 01创建视频理解训练数据
  2. 02标注交通或仓库视频
  3. 03用样本视频试运行并调整提示词
  4. 04更改提示词后恢复标注

安装

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

$npx skills add https://github.com/nvidia/skills --skill tao-generate-video-reasoning-annotations

安装后在 Claude Code 中输入/tao-generate-video-reasoning-annotations确认已加载。

包含的文件

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

BENCHMARK.md
skill-card.md
skill.oms.sig
config/
skillspector-baseline.yaml
evals/
evals.json
references/
configuration.md
domain_adaptation.md
prompts_traffic.py
prompts_warehouse.py
skill_info.yaml

详细介绍

视频推理标注流水线

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

通过生成多级字幕、结构化描述和 QA 问答对(选择题、二元题、开放式题),并附上逐步推理轨迹,从视频生成思维链(CoT)训练数据集。默认不限定领域,可自定义提示词以适配任何视频领域。

目的

将原始视频转换为用于视频理解模型的 CoT 问答训练数据。VLM(例如 Gemini、Qwen)充当“教师”标注员:步骤 0–1 需要模型查看视频(调用 VLM);步骤 2–3 仅处理文本(调用成本更低的大模型)。

流水线架构

Step 0:  [Optional] Filter & classify videos  → Keep domain-relevant, classify anomaly vs normal
Step 1a: Global + dense captions               → VLM: narrative summary + timestamped events
Step 1b: Chunk captions                         → VLM: fixed-duration segment micro-captions
Step 1c: [Optional, anomaly only] Highlight     → LLM extracts anomaly timestamp, VLM captions clip
Step 2:  Description synthesis                  → LLM: synthesize captions into structured narrative
Step 3:  QA generation                          → LLM: MCQ, binary, open-ended with reasoning
Step 4:  Parse outputs                          → Per-task `tao-vl-reason-v1.0` JSON files

可通过 workflow.steps 单独选择步骤。流水线内置了续跑功能——每个步骤都会跳过已处理的视频,因此调整提示词后重新运行是安全的。

初步沟通

用户调用此技能时,请按顺序逐一询问以下问题。不要跳过——一开始就确认领域和 VLM 访问权限,可避免浪费运行资源。

1. 视频
  • 视频目录的路径,和/或每行包含 {"video_path": "..."} 的 JSONL 文件。
  • 确认格式(优先使用 .mp4;也支持遍历 .avi、.mov、.mkv)。
2. 领域 — 决定提示词选择

询问用户:“这些视频属于什么领域?” 从以下分支中选择:

领域操作
general使用默认提示词。设置 prompts_module: ""(或省略)。内置的 nvidia_tao_ds.auto_label.video_reasoning_annotation.prompts 适用于不限定领域的内容。
traffic(CCTV 路口、高速公路;不包括行车记录仪)使用参考模块。设置 prompts_module: "nvidia_tao_ds.auto_label.video_reasoning_annotation.prompts_traffic",或者将 references/prompts_traffic.py 复制到用户的项目中,并根据其具体摄像机角度调整,然后将 prompts_module 指向该副本。
warehouse(工业场所 CCTV — 安全、运营、安保)使用相同的方式。设置 prompts_module: "nvidia_tao_ds.auto_label.video_reasoning_annotation.prompts_warehouse",或者复制 references/prompts_warehouse.py 并进行调整。
custom(任何其他领域)运行 references/domain_adaptation.md 中的工作坊。工作坊将引导用户完成:阶段 1 — 用户希望模型回答的问题类型;阶段 2 — 字幕要求检查清单;阶段 3 — 填写 nvidia_tao_ds.auto_label.video_reasoning_annotation.prompt_template 中的 [PLACEHOLDER] 标记。以上两个参考模块均为可供仿照的有效示例。请在运行任何流水线之前完成此操作。
3. 异常 / 正常 / 混合
  • 混合数据集 → workflow.mode: "auto"(步骤 0 对每个视频进行分类)。
  • 预先拆分的仅异常数据集 → workflow.mode: "anomaly",移除步骤 0。
  • 预先拆分的仅正常数据集 → workflow.mode: "normal",移除步骤 0 和 1c。
4. VLM / LLM 端点 — 运行前确认访问权限
  • Gemini(vlm.backend 和 llm.backend 的默认选项):用户需要设置 GOOGLE_API_KEY,或将密钥写入 YAML。
  • 兼容 OpenAI 的端点(通过 vLLM 运行 Qwen、NIM 端点等):用户需提供 base_url、model_name 和 api_key。
  • 步骤 2–3 仅处理文本——即使 vlm.backend 使用的是前沿视频模型,llm.backend 也可以使用更小、成本更低的大模型。

如果用户完全没有端点,并希望自行托管,请引导他们使用 skills/applications/tao-run-inference-service 技能——该工作流会在本地启动面向特定网络的 TAO 推理微服务,并提供兼容 OpenAI 的端点。该服务应支持 Cosmos、Qwen 和 Gemma。在依赖特定模型之前,请检查 skills/applications/tao-run-inference-service/references/service.yaml 中当前的 valid_network_arch_config_basenames 列表。

如果用户尚未准备好端点访问权限,也尚未准备好设置端点,请在此处暂停,先帮助他们解决相关问题。

5. 试运行与完整运行
  • 当领域为 custom、编辑过任何提示词,或这是用户首次运行时,建议先试运行 5–10 个视频。
  • 对于 general / traffic / warehouse,如果用户此前已在相同数据类型上验证过输出质量,则可以直接完整运行。
  • 流水线内置了断点续跑功能,因此试运行后再完整运行时,不会重新处理试运行中的视频。

快速开始

流水线通过 auto_label CLI 在 TAO Toolkit 容器内运行:

auto_label generate -e /path/to/spec.yaml \
    results_dir=/results \
    video_reasoning_annotation.data.video_root=/videos \
    video_reasoning_annotation.vlm.gemini.api_key=$GOOGLE_API_KEY \
    video_reasoning_annotation.workflow.mode=auto

生成默认配置以开始使用:

auto_label default_specs results_dir=/results module_name=auto_label
# then set:  autolabel_type: "video_reasoning_annotation"

所有字段都支持在命令行中使用 Hydra 点表示法进行覆盖。完整的 YAML 参考(包括所有字段、模型/端点设置和错误模式),请参阅 references/configuration.md。

试运行工作流

运行 5–10 个视频的试运行时,请按以下步骤操作:

  1. 使用选定的 prompts_module 和 workflow.mode,在试运行子集上运行流水线。
  2. 检查 results_dir/step_1a_caption/captions.jsonl——字幕是否准确?是否捕捉到了恰当的细节层次?
  3. 检查 results_dir/step_3_qa/qa_output.jsonl——问题是否有意义、答案是否正确、推理是否合乎逻辑?
  4. 如果质量不够:调整提示词(如果针对领域进行了定制,则在 prompts_module 中调整;如果领域模块调整过度,则改用 general),然后重新运行。流水线会自动跳过已处理的视频。
  5. 满意后,将 data.video_root(或 data.input_jsonl_files)指向完整数据集并重新运行,以扩展到整个数据集;可使用相同的 results_dir(续跑),也可使用新的目录(完整重跑)。

质量问题会在下游逐级累积——糟糕的字幕会产生糟糕的描述,进而产生糟糕的 QA。请先重点迭代改进步骤 1a/1b 的输出;字幕准确后,描述和 QA 通常也会随之改善。

配置摘要

关键字段(完整参考请参阅 references/configuration.md):

字段默认值说明
workflow.steps["0","1a","1b","1c","2","3","4"]要执行的流水线步骤
workflow.mode"auto""auto"、"anomaly" 或 "normal"
vlm.backend"gemini""gemini" 或 "openai"(兼容 OpenAI)
llm.backend"gemini"选项相同;仅处理文本,使用较便宜的模型即可
workflow.max_workers4每个步骤的并行线程数(注意 API 速率限制)
license""可选:写入步骤 4 输出中的 metadata.license(例如 "CC-BY-4.0")
description_extra""可选:在步骤 4 元数据中追加到每项任务描述的文本
prompts_module""自定义提示词模块的点分导入路径

提示词

  • 内置(通用):nvidia_tao_ds.auto_label.video_reasoning_annotation.prompts — 不针对特定领域,默认使用。
  • 模板:nvidia_tao_ds.auto_label.video_reasoning_annotation.prompt_template — 包含相同的 26 个键,并用 [PLACEHOLDER] 标记以便针对领域定制。
  • 参考模块(咨询项目中 traffic / warehouse 分支的可用示例):references/prompts_traffic.py、references/prompts_warehouse.py。
  • 自定义领域:完整指南和占位符参考请参阅 references/domain_adaptation.md。

输入

  • video_root:视频目录(递归查找 .mp4、.avi、.mov、.mkv 文件)。
  • input_jsonl_files:JSONL 文件列表,每行包含 {"video_path": "..."}。也接受 video 键;可包含额外字段。
  • filter_field:可选的布尔字段,用于筛选 JSONL 条目。

请提供 video_root、input_jsonl_files,或同时提供两者(列表会合并)。

输出

所有输出均写入 results_dir/,并按步骤划分子目录(step_0_filter/、step_1a_caption/,…,step_4_output/):

  • 步骤 0–3:JSONL — 每行对应一个视频的 JSON 对象。
  • 步骤 4:每种非空任务类型生成一个 <task>.json,采用 tao-vl-reason-v1.0 封装格式。最多生成 10 个文件:mcq.json、mcq_openended.json、bcq.json、bcq_openended.json、open_qa.json、causal_linkage.json、temporal_localization.json、temporal_description.json、scene_description.json、video_summarization.json。

每个步骤 4 的文件格式如下:

{
  "format": "tao-vl-reason-v1.0",
  "metadata": {"type": "annotation", "task": "<task>", "date": "YYYY-MM-DD",
               "description": "<per-task + description_extra>", "license": "<from config>"},
  "media_root": "<data.video_root>" | null,
  "items": [{"video_id": "...", "question": "...", "answer": "...", "reasoning": "..."}, ...]
}

media_root 与 data.video_root 对应(未设置时为 null);每个条目的 video_id 是去掉 video_root 前缀后的视频路径。在规范中设置 license 和 description_extra,即可填充元数据。

先决条件

  • 容器:nvcr.io/nvidia/tao/tao-toolkit:7.3.0-pyt。
  • ffmpeg / ffprobe:分块生成说明(步骤 1b)和提取精彩片段(步骤 1c)时需要。
  • VLM 端点:至少需要一个 — Gemini API 密钥或兼容 OpenAI 的端点。

评论

支持 Markdown