mcpField
I
i4h-workflow-dataset-convert

i4h-workflow-dataset-convert

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

关于 i4h-workflow-dataset-convert

将录制的 HDF5 演示转换为本地 LeRobot 数据集,并保留动作、状态、相机数据、任务文本和具身标签。还会检查元数据、回合数据、视频及特征宽度。

主要功能

  1. 01解析录制和具身元数据
  2. 02转换选定的成功回合
  3. 03保留动作、状态、相机与任务文本
  4. 04核验元数据、数据、视频和特征宽度

适用场景

  1. 01转换工作流录制数据以供策略训练
  2. 02使用转换后的回合前检查数据集完整性

安装

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

$npx skills add https://github.com/nvidia/skills --skill i4h-workflow-dataset-convert

安装后在 Claude Code 中输入/i4h-workflow-dataset-convert确认已加载。

包含的文件

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

BENCHMARK.md
skill-card.md
skill.oms.sig
evals/
evals.json

详细介绍

将工作流 HDF5 转换为 LeRobot

目的

在本地 LeRobot 数据集中保留记录的动作、状态、摄像头、任务文本和本体标签。

说明

  1. 运行检出解析器并选择源 HDF5。
  2. 读取工作流、Scene、本体和指令。
  3. 转换所选的成功片段。
  4. 检查元数据、parquet、视频和特征宽度。

解析并检查

export I4H_WORKFLOWS_REPO_URL="${I4H_WORKFLOWS_REPO_URL:-https://github.com/isaac-for-healthcare/i4h-workflows}"
I4H_REPO_DIR_NAME="${I4H_WORKFLOWS_REPO_URL%/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*/}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME##*:}"
I4H_REPO_DIR_NAME="${I4H_REPO_DIR_NAME%.git}"
[ -n "$I4H_REPO_DIR_NAME" ] || { echo "Cannot derive a checkout name from I4H_WORKFLOWS_REPO_URL" >&2; exit 2; }
ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/i4h_workflows" ]; then
  ROOT="${I4H_WORKFLOWS:-$HOME/$I4H_REPO_DIR_NAME}"
  [ -d "$ROOT/workflows/i4h_workflows" ] || git clone "$I4H_WORKFLOWS_REPO_URL" "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"
cd "$ROOT"
HDF5_PATH=/absolute/path/to/recording.hdf5
uv run --project tools/dataset i4h-dataset inspect "$HDF5_PATH" --segments

将上方的解析器视为技能契约的一部分:托管副本可能在基础仓库之外运行,因此切勿假设当前检出目录中包含 workflows/i4h_workflows。I4H_WORKFLOWS_REPO_URL 用于选择克隆源。当 I4H_WORKFLOWS 未设置时,根据该 URL 推导备用目录;只有在要复用或选择特定目标目录时才设置 I4H_WORKFLOWS。切勿替换现有检出目录。

使用明确指定的录制,或当前调用链中的录制。根据录制元数据/上下文解析其工作流和 Scene,然后读取 Scene 清单以获取本体和指令。使用本体清单获取标签。不要假设状态宽度等于动作宽度;转换器会根据录制内容推导二者。

转换

RUN_DIR="$(pwd)/runs/<workflow>/$(date +%Y%m%d_%H%M%S)"
DATASET_DIR="$RUN_DIR/lerobot/local/<name>"
mkdir -p "$(dirname "$DATASET_DIR")"
[ ! -e "$DATASET_DIR" ] || { echo "Destination already exists: $DATASET_DIR" >&2; exit 2; }
uv run --project tools/dataset i4h-dataset convert \
  "$HDF5_PATH" "$DATASET_DIR" \
  --robot <embodiment> \
  --repo-id "local/<name>" \
  --successful-only \
  --task "<instruction>"

仅在用户提出要求或源元数据有依据时使用 --fps 或 --skip-frames。为兼容 GR00T 的快速 decord 加载器,保留默认的 H.264 视频编解码器;只有目标使用方有要求时才选择其他 --video-codec。

转换会写入汇总的 meta/stats.json,供下游策略加载器使用。原生 G1 规则式 WBC 录制已包含 43 维状态和 50 维动作;转换器可识别此契约,并自动写入 GR00T 所需的语义 meta/modality.json。对于通过旧版 23 维 Pink/键盘契约制作、且目标为 50 维 G1 WBC 策略 Task 的 G1 录制,添加 --g1-wbc-policy-actions。此显式映射会将测得的 43 关节状态与录制的导航、底座高度和躯干指令合并;要求源动作宽度为 23,状态宽度为 43。

验证

确保存在:

  • meta/info.json
  • meta/stats.json
  • 当目标训练器需要语义模态切片时,存在 meta/modality.json
  • 片段 parquet 数据
  • 每个已录制摄像头对应的视频文件
  • 转换后的片段数与所选成功源片段数一致
  • 动作/状态特征宽度和名称与录制内容及本体描述符一致

对于 G1,以下两种受支持路径都必须具备模态元数据:原生 state=43/action=50,或显式映射的 state=43/source-action=23/output-action=50。将缺少 meta/modality.json 的原生 50 维数据集视为不完整。

将缺少输入或转换后片段数为零视为失败。如果转换留下了不完整的目标目录,重试前应隔离或删除该特定不完整目录;切勿将其报告为可用。

故障排除

遇到维度错误时,重新解析源工作流和本体。缺少视频时,确认转换前已有帧。

前提条件

需要可读取的 HDF5 录制,以及与之匹配的 Scene 和本体清单。

限制

转换无法重建缺失的摄像头、动作、状态、任务文本或成功片段。

示例

  • 将我的剪刀拾取放置录制转换为 LeRobot 数据集。 → 解析 so101,转换成功片段,并验证元数据、parquet 和两个摄像头的视频。

完成条件

报告源 HDF5/工作流、本体、任务文本、源/已转换/已跳过数量、动作/状态宽度、输出目录/repo id、汇总统计/模态/parquet/视频检查结果,以及任何缺失的模态。

评论

支持 Markdown