异构多格式具身数据集统一升级合并
更新时间:2026-07-21
概述
将多种来源、不同格式的机器人数据集(RLDS、v2.1 等)统一转换为 LeRobot v3.0 格式,并可选进行跨本体对齐(帧率统一、动作空间归一化),最终合并为单一数据集。
- 输入:含
.tar/.tar.gz归档的目录(BOS 或 PFS) - 输出:统一的 LeRobot v3.0 格式数据集
- 业务价值:一站式解决异构数据格式统一 + 跨机器人本体对齐问题,为多机器人联合训练提供标准化数据
处理流程
Plain Text
1tar 归档目录 → S1 解压 → S2 格式路由 → ┬─ S3 RLDS分支转换 ─┬→ S5 跨本体对齐(可选) → S6 统一合并 → v3.0数据集
2 └─ S4 v2.1分支转换 ─┘
算子映射
| 步骤 | 算子 | 说明 |
|---|---|---|
| S1 | Extract |
递归解压 tar/tar.gz 归档文件 |
| S2 | Route |
自动识别源格式(RLDS / v2.1),生成路由标记 |
| S3 | ConvertRLDS |
RLDS 分支:转为 v3.0 格式(含分片) |
| S4 | ConvertV21 |
v2.1 分支:转为 v3.0 格式 |
| S5 | Align |
跨本体对齐:统一帧率、动作归一化、robot_type 标签 |
| S6 | Merge |
将所有转换后的子数据集合并为统一输出 |
数据流向
Plain Text
1input_dir (tar archives)
2 → S1 → tmp_dir/extracted/ + tmp_dir/s1_dirs.jsonl
3 → S2 → tmp_dir/s2_routed.jsonl
4 → S3 → output_dir/ (RLDS 分支) + tmp_dir/s3_rlds.jsonl ──┐
5 → S4 → output_dir/ (v2.1 分支) + tmp_dir/s4_v21.jsonl ──┤
6 → S5 → output_dir/ (对齐后) + tmp_dir/s5_aligned.jsonl <─┘ (可选)
7 → S6 → output_dir/ (最终合并)
前置条件
| 资源 | 说明 |
|---|---|
| AIHC 队列 | 需要有可用的计算队列(queue_id) |
| PFS 存储 | 用于存放中间数据和最终输出(pfs_id) |
| BOS Bucket | 用于挂载算子脚本和输入数据,默认 aihc-rdw-bj/aihc-daft |
| 镜像 | ccr-registry.baidubce.com/aihc/aihc-daft-gpu:0.5.2.1-cu121-py3.11-ubuntu22.04 |
全局参数说明
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
image |
string | 是 | ccr-registry.baidubce.com/aihc/aihc-daft-gpu:0.5.2.1-cu121-py3.11-ubuntu22.04 |
镜像地址(含 tag),不填则使用默认值 |
queue_id |
string | 是 | — | AIHC 队列 ID |
priority |
string | 否 | high |
任务优先级 |
pfs_id |
string | 是 | — | PFS 存储 ID |
pfs_source_path |
string | 否 | / |
PFS sourcePath |
pfs_mount_path |
string | 否 | /mnt/pfs |
PFS 挂载点 |
bos_source_path |
string | 否 | aihc-rdw-bj/aihc-daft |
BOS sourcePath |
bos_mount_path |
string | 否 | /opt/aihc |
BOS 挂载点 |
input_dir |
string | 是 | /opt/aihc/data/embodied_pipelines/input_data/p5/archive_real |
含 tar/tar.gz 的目录 |
output_dir |
string | 是 | — | 统一 v3.0 输出根目录 |
tmp_dir |
string | 是 | — | 中间数据目录 |
num_splits |
int | 否 | 3 |
RLDS 转换分片数 |
align |
string | 否 | true |
是否做跨本体对齐(true/false) |
target_fps |
string | 否 | 空 | 对齐目标帧率(空=取各集 fps 最小值) |
target_robot_type |
string | 否 | aligned_generic |
对齐后统一的 robot_type 标签 |
normalize |
string | 否 | meanstd |
动作/状态归一化方式(none/meanstd/minmax) |
vcodec |
string | 否 | h264 |
视频编码器(h264/auto/libsvtav1) |
encoder_threads |
string | 否 | 空 | 每个编码器实例的线程数(空=不限制) |
head_cpu |
int | 否 | 4 |
Head 节点 CPU 数 |
head_memory |
int | 否 | 8 |
Head 节点内存(GB) |
shared_memory |
int | 否 | 8 |
sharedMemory 大小(GB) |
worker_replicas |
int | 否 | 1 |
Worker 副本数 |
worker_cpu |
int | 否 | 6 |
Worker 节点 CPU 数 |
worker_memory |
int | 否 | 12 |
Worker 节点内存(GB) |
步骤详解
S1 递归解压(Extract)
递归解压输入目录中的 tar/tar.gz 归档文件,展开为数据集子目录。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| (使用全局参数) | — | — | — |
- 输入:
input_dir/(含 tar 归档) - 输出:
tmp_dir/extracted/(解压后的目录)+tmp_dir/s1_dirs.jsonl(目录清单)
S2 格式路由(Route)
自动识别每个解压目录的源格式(RLDS / v2.1 / 其他),生成路由标记供后续分支使用。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| (无独有参数) | — | — | — |
- 输入:
tmp_dir/s1_dirs.jsonl - 输出:
tmp_dir/s2_routed.jsonl(含format路由标记)
S3 RLDS 分支转换(Convert RLDS)
将路由标记为 RLDS 的数据集转为 LeRobot v3.0 格式。支持分片并行。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
num_splits |
int | 3 |
RLDS 分片数 |
vcodec |
string | h264 |
视频编码器 |
encoder_threads |
string | 空 | 编码线程数 |
- 输入:
tmp_dir/s2_routed.jsonl(RLDS 子集) - 输出:
output_dir/(RLDS 转换结果)+tmp_dir/s3_rlds.jsonl
S4 v2.1 分支转换(Convert V21)
将路由标记为 v2.1 的数据集转为 LeRobot v3.0 格式。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| (无独有参数) | — | — | — |
- 输入:
tmp_dir/s2_routed.jsonl(v2.1 子集) - 输出:
output_dir/(v2.1 转换结果)+tmp_dir/s4_v21.jsonl
S3 和 S4 并行执行,互不依赖。
S5 跨本体对齐(Align)— 可选
当 align=true 时执行。将来自不同机器人的数据集做帧率对齐、动作空间归一化和 robot_type 统一。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
target_fps |
string | 空 | 目标帧率(空=取各集最小 fps) |
target_robot_type |
string | aligned_generic |
统一的 robot_type 标签 |
normalize |
string | meanstd |
归一化方式(none/meanstd/minmax) |
vcodec |
string | h264 |
重编码视频编码器 |
- 输入:
tmp_dir/s3_rlds.jsonl+tmp_dir/s4_v21.jsonl - 输出:
output_dir/(对齐后数据)+tmp_dir/s5_aligned.jsonl - 跳过条件:
align=false时直接跳过
S6 统一合并(Merge)
将所有转换/对齐后的子数据集合并为一个统一的 LeRobot v3.0 数据集。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| (无独有参数) | — | — | — |
-
输入:
align=true:tmp_dir/s5_aligned.jsonlalign=false:tmp_dir/s3_rlds.jsonl+tmp_dir/s4_v21.jsonl
- 输出:
output_dir/(最终合并的完整数据集)
任务拓扑
Plain Text
1 +------------------+
2 ┌--> | S3 Convert RLDS | --┐
3+------------+ +-----------+ | +------------------+ | +-----------+ +----------+
4| S1 Extract | --> | S2 Route | --------+ +--> | S5 Align | --> | S6 Merge |
5+------------+ +-----------+ | +------------------+ | +-----------+ +----------+
6 └--> | S4 Convert V21 | --┘
7 +------------------+
- S1 → S2:串行
- S2 → S3/S4:并行分支(同时执行)
- S3 + S4 → S5:汇聚(两个分支都完成后执行)
- S5 → S6:串行
使用建议
- P5 全程 CPU 计算,无需 GPU
align=true(默认)适用于多机器人联合训练场景;如只是格式转换不需对齐,设置align=false可跳过 S5normalize=meanstd最常用;minmax适合已知动作空间范围的场景;none跳过归一化target_fps留空时自动取所有数据集中最小的帧率,避免上采样引入伪数据num_splits影响 S3 的并行度和内存占用,大数据集建议增加到 4~8- S3/S4 并行执行是 P5 独有的 DAG 结构,可有效缩短总执行时间
- 合并后的输出目录直接可被 LeRobot 训练脚本加载
评价此篇文章
