| 名称 | tao-train-action-recognition |
| 描述 | 从视频序列进行动作识别。支持RGB、光流和联合(多流)输入类型,用于对视频片段中的时间动作进行分类。当需要训练、评估、导出或运行TAO动作识别模型的推理时使用。触发短语包括“训练动作识别”、“视频动作分类”、“RGB+光流动作模型”、“TAO ActionRecognition”。 |
| 开源协议 | Apache-2.0 compatibility: 需要docker + nvidia-container-toolkit。 metadata: |
| 版本 | “0.1.0” |
| 作者 | NVIDIA Corporation allowed-tools: Read Bash tags: - 动作 - 识别 |
动作识别
独立安装? 如果此会话未由TAO技能库插件初始化,请先运行
tao-setup技能(主机预检、凭据、跨技能发现)。
从视频序列进行动作识别。支持RGB、光流和联合(多流)输入类型,用于对视频片段中的时间动作进行分类。
设置model.pretrained_model_path以指定预训练主干权重。
快速开始(docker run)
Docker原生启动——主机上不需要TAO SDK和Python。当本地Docker/平台技能提供更严格的环境特定命令(非根UID映射、缓存重定向、远程守护进程)时,请使用该技能。
TAO_PYT_IMAGE_DEFAULT=nvcr.io/nvidia/tao/tao-toolkit:7.1.0-pyt # versions-key: images.tao_toolkit.pyt
TAO_PYT_IMAGE="${TAO_PYT_IMAGE:-$TAO_PYT_IMAGE_DEFAULT}"
RUN_ROOT="${RUN_ROOT:-$PWD}"
DOCKER_COMMON=(
--rm --gpus all --shm-size=8g
--shm-size=8g
--ulimit memlock=-1
--ulimit stack=67108864
-v "$RUN_ROOT/data:/data:ro"
-v "$RUN_ROOT/specs:/specs:ro"
-v "$RUN_ROOT/results:/results"
)
训练:
docker run "${DOCKER_COMMON[@]}" "$TAO_PYT_IMAGE" \
action_recognition train -e /specs/train.yaml
评估:
docker run "${DOCKER_COMMON[@]}" "$TAO_PYT_IMAGE" \
action_recognition evaluate -e /specs/evaluate.yaml
推理:
docker run "${DOCKER_COMMON[@]}" "$TAO_PYT_IMAGE" \
action_recognition inference -e /specs/inference.yaml
导出:
docker run "${DOCKER_COMMON[@]}" "$TAO_PYT_IMAGE" \
action_recognition export -e /specs/export.yaml
每个动作都通过-e参数传入其spec;results_dir在spec中设置或在命令行覆盖。挂载spec引用的任何预训练权重目录,并保持所有容器内路径在各动作间一致。
数据类模式
生成的TAO Core模式打包在schemas/<action>.schema.json中,schemas/manifest.json列出可用动作。每个生成的模式还会从模式顶层default字段生成references/spec_template_<action>.yaml。AutoML支持在references/skill_info.yaml中的模型层通过automl_enabled声明。一个动作的可运行AutoML需要schemas/<action>.schema.json和references/spec_template_<action>.yaml存在且可解析。使用打包的所选动作模式获取automl_default_parameters、automl_disabled_parameters、默认值、最小/最大边界、枚举、选项权重、数学条件、依赖关系和常用参数。不要期望运行时存在~/tao-core;维护者在打包技能库之前会重新生成模式和模板。
训练动作策略
该模型在模型层启用了AutoML。在处理任何训练阶段请求之前,请阅读references/skill_info.yaml,并从显式的automl_policy值或用户的工作流请求中解析运行覆盖。默认使用automl_policy: on,并在新的启动提示中仅暴露on / off。将“关闭AutoML”、“禁用AutoML”、“无HPO”或“普通训练”等短语视为本次运行的automl_policy: off。当automl_policy: on、automl_enabled: true且schemas/train.schema.json和references/spec_template_train.yaml都已打包时,默认通过tao-skill-bank:tao-run-automl并使用该模型的skill_dir路由训练动作。保留用于数据集、specs、输出目录、GPU/平台设置、父检查点和automl_policy的工作流/应用覆盖。仅在automl_policy: off或打包的训练模式/模板缺失时使用直接模型训练;在模式缺失的情况下,报告AutoML已启用但在此模型上不可运行,直到生成模式为止。
非训练动作(如evaluate、inference、export和部署流程)留在此模型技能中。每次运行的automl_policy覆盖不会改变模型元数据。
训练要求
- 数据集类型: action_recognition
- 格式: 默认
- 监控指标: val_loss
每个动作的数据集要求
| 动作 | Spec键 | 来源 | 文件 | 列表? |
|---|---|---|---|---|
| evaluate | evaluate.test_dataset_dir | train_datasets | test/ 从 test.tar.gz 提取 | 否 |
| inference | inference.inference_dataset_dir | train_datasets | test/smile/ 从 test/smile.tar.gz 提取 | 否 |
| train | dataset.train_dataset_dir | train_datasets | train/ 从 train.tar.gz 提取 | 否 |
| train | dataset.val_dataset_dir | train_datasets | test/ 从 test.tar.gz 提取 | 否 |
典型Spec覆盖
数据源覆盖对每个动作都是强制性的——代理必须根据上面的“每个动作的数据集要求”表构造数据源路径,并将它们包含在spec_overrides中。
LOCAL_DATA = "/workspace/data/extracted"
如果源数据集作为TAO示例归档文件train.tar.gz、test.tar.gz或test/smile.tar.gz提供,请在启动TAO容器之前下载并解压它们。动作识别入口点期望目录路径,当这些spec键指向.tar.gz文件时会失败并返回NotADirectoryError。
训练(强制数据源):
{
"train.num_epochs": 30,
"train.checkpoint_interval": 10,
"train.validation_interval": 10,
"train.num_gpus": 1,
"dataset.label_map": {
"catch": 0,
"smile": 1
},
"dataset.batch_size": 2,
"dataset.train_dataset_dir": f"{LOCAL_DATA}/train",
"dataset.val_dataset_dir": f"{LOCAL_DATA}/test",
}
评估(强制数据源):
{
"dataset.label_map": {
"catch": 0,
"smile": 1
},
"evaluate.test_dataset_dir": f"{LOCAL_DATA}/test",
}
推理(强制数据源):
{
"dataset.label_map": {
"catch": 0,
"smile": 1
},
"inference.inference_dataset_dir": f"{LOCAL_DATA}/smile_infer/smile",
}
导出(强制检查点+输出路径):
{
"export.checkpoint": "<选定的训练检查点>",
"export.onnx_file": "<results_dir>/action_recognition.onnx",
}
对于没有SDK解析器的直接本地docker链式调用,选择训练产生的具体检查点,例如model_epoch_000_step_00005.pth,并将该确切文件传递给evaluate、inference和export。除非用户明确请求最新检查点行为,否则不要使用ar_model_latest.pth符号链接。对于恢复训练,将train.resume_training_checkpoint_path设置为要恢复的确切epoch/step检查点。
评估数据集
可选。测试数据集可能作为独立的test.tar.gz分发;解压它并将spec指向解压后的test/目录。TAO训练会为打包的示例数据输出val_loss作为验证标量;将val_loss与最小化方向用于AutoML选择,除非自定义评估器提供准确率指标。
重要参数
- model.model_type: 输入类型:rgb、of(光流)或joint(多流)。
- model.backbone: 默认resnet_18。用作空间特征提取器。
- dataset.label_map: 将类别名称映射到索引的字典。
- model.rgb_seq_length: RGB输入的每个片段的帧数。
- model.of_seq_length: 光流输入的帧数。
- train.optim.lr: 学习率。默认5e-4。
多GPU / 多节点
启动方式: Lightning管理(单个python进程,Lightning启动worker)。
| Spec键 | 描述 | 默认 |
|---|---|---|
train.num_gpus |
GPU数量 | 1 |
train.gpu_ids |
GPU设备索引 | [0] |
- 策略:
auto(Lightning自动选择最佳策略) - 没有显式的
num_nodes或distributed_strategy配置——面向单节点
硬件
最低1个GPU,推荐2个GPU。每个GPU 16GB+ VRAM。内存取决于序列长度和输入分辨率。batch_size=2对于视频数据是保守的。
错误模式
序列长度不匹配:确保视频片段有足够的帧以匹配配置的rgb_seq_length或of_seq_length。
评估/推理缺少标签映射:下游动作在加载检查点之前重建ActionRecognitionModel,因此它们需要与训练期间使用的相同的dataset.label_map。每次评估或推理spec中包含它;否则在验证检查点之前模型构造就会失败。
Spec参数 / 父模型推断
模型特定的推断映射属于此MD文件,而不是config.json。生成的运行器应读取本节,并在create_job()之前使用SDK辅助函数应用映射。这类似于旧的微服务infer_params.py流程。
来自TAO Core action_recognition.config.json的推断映射:
| 动作 | Spec字段 | 推断函数 | 含义 |
|---|---|---|---|
| evaluate | encryption_key |
key |
加密密钥 |
| evaluate | evaluate.checkpoint |
parent_model |
从父作业结果文件夹推断的模型文件 |
| evaluate | results_dir |
output_dir |
当前作业结果目录 |
| export | encryption_key |
key |
加密密钥 |
| export | export.checkpoint |
parent_model |
从父作业结果文件夹推断的模型文件 |
| export | export.onnx_file |
create_onnx_file |
输出ONNX路径 |
| export | results_dir |
output_dir |
当前作业结果目录 |
| inference | encryption_key |
key |
加密密钥 |
| inference | inference.checkpoint |
parent_model |
从父作业结果文件夹推断的模型文件 |
| inference | results_dir |
output_dir |
当前作业结果目录 |
| train | encryption_key |
key |
加密密钥 |
| train | model.of_pretrained_model_path |
ptm_if_no_resume_model |
当没有恢复检查点时的PTM |
| train | model.rgb_pretrained_model_path |
ptm_if_no_resume_model |
当没有恢复检查点时的PTM |
| train | results_dir |
output_dir |
当前作业结果目录 |
| train | train.resume_training_checkpoint_path |
resume_model |
从当前作业结果文件夹推断的模型文件 |
对于parent_model或parent_model_folder,将上游训练/导出/AutoML子作业ID作为parent_job_id传递。SDK列出父结果文件夹,过滤检查点工件,并返回选定的模型文件或文件夹。不要将这些映射添加回config.json,也不要修改生成的运行器脚本去猜测检查点路径。