关于 i4h-workflow-dataset-convert
将录制的 HDF5 演示转换为本地 LeRobot 数据集,并保留动作、状态、相机数据、任务文本和具身标签。还会检查元数据、回合数据、视频及特征宽度。
主要功能
- 01解析录制和具身元数据
- 02转换选定的成功回合
- 03保留动作、状态、相机与任务文本
- 04核验元数据、数据、视频和特征宽度
适用场景
- 01转换工作流录制数据以供策略训练
- 02使用转换后的回合前检查数据集完整性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nvidia/ skills --skill i4h-workflow-dataset-convert安装后在 Claude Code 中输入/i4h-workflow-dataset-convert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.json详细介绍
将工作流 HDF5 转换为 LeRobot
目的
在本地 LeRobot 数据集中保留记录的动作、状态、摄像头、任务文本和本体标签。
说明
- 运行检出解析器并选择源 HDF5。
- 读取工作流、Scene、本体和指令。
- 转换所选的成功片段。
- 检查元数据、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.jsonmeta/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/视频检查结果,以及任何缺失的模态。