一、先说那个没人愿意承认的坑

一个实验室买了动捕设备、买了机械臂、招了学生,兴致勃勃采了两百 G 的操作数据。等到要跑模型的时候,问题来了:

  • 想复现 ACT,官方代码读的是 episode_0.hdf5,里面 /observations/images/top/action 这些 key 的层级写死了;
  • 想用 LeRobot 那套训练脚本,它要的是自己的目录结构和元数据文件;
  • 想在 Open X-Embodiment 上做预训练再微调,那边全是 RLDS 的 tfrecord 分片;
  • 学生手里的,是一堆 2026-05-12_15-42-17/cam0/000001.png 加一个 Excel。

于是接下来两周,实验室干的事情不是训练模型,是写转换脚本。写完发现时间戳没对齐,再写一遍。

这就是具身智能数据工程的真实状态:格式不是收尾工作,是入场券。视觉领域有 COCO、语音领域有 LibriSpeech 的既成规范,具身智能没有——因为它要同时装下 RGB 图像、深度图、点云、关节角、末端位姿、力矩、语音指令、任务文本,而且这些东西必须在时间轴上严格对齐。

下面把目前实际能用的四种格式讲清楚,再给一张选型表。


二、为什么具身智能数据这么难存

先建立一个共识。传统 CV 数据集的结构是扁平的:一张图 + 一个标签,样本之间互相独立,随便打乱。

具身智能数据的结构是 episode(轨迹)→ step(时间步) 的两层嵌套:

episode(一次完整的任务执行,比如"把红色方块放进盒子")
 └── step_0 : observation(多路相机图像 + 关节状态 + 力传感器) + action + language_instruction
 └── step_1 : ...
 └── step_N : ...

请添加图片描述
三个后果:

  1. 不能打乱。step 之间有强时序依赖,模仿学习学的就是这个序列。
  2. 多模态必须同步。相机 30fps、关节编码器 1000Hz、力传感器 500Hz,采样率不一样,落盘时要么统一重采样,要么存原始时间戳留给后处理。
  3. 单条 episode 就能上 GB。两路 720p 相机跑 30 秒就是几千帧,一个数据集几千条 episode,随机读取的 I/O 效率直接决定训练卡不卡。

所有格式的差异,本质上都是在这三件事上做了不同取舍。


三、四种格式逐个拆

1. HDF5 —— 最朴素,也最容易上手

Hierarchical Data Format v5,出身科学计算领域,不是给机器人专门设计的。它提供的是一个"文件内的文件系统":树状分组 + 多维数组数据集。

episode_0.h5
├── /observations
│   ├── /images/cam_high      (400, 480, 640, 3)  uint8
│   └── /qpos                 (400, 14)           float32
├── /action                   (400, 14)           float32
└── attrs: sim=False, task="pick_cube"

为什么它在具身智能里这么常见:ALOHA/ACT、RoboMimic 这几个影响力最大的开源工作都用它,导致大量代码默认读 HDF5。

优点:自描述、分层清晰、支持分块存储和压缩、可以只读一个切片而不加载整个文件、有并行 HDF5 加速、跨平台。写起来也简单,h5py 十行搞定。

缺点它只规定了容器,没规定内容。你的 /action 和别人的 /actions,你的 qpos 和别人的 joint_positions,机器分不出来。所以 HDF5 数据集之间几乎不能直接互用——每换一个数据源就要读一遍别人的代码。

适合:单实验室自采自用、复现 ACT 系工作、传感器数据量大且需要随机切片读取。

2. RLDS —— 大规模预训练的事实标准

Reinforcement Learning Datasets,Google 那边出来的,底座是 TensorFlow Datasets,物理形态是 tfrecord 分片。

它和 HDF5 最大的区别:RLDS 规定了语义。episode 里的 step 必须包含 observation / action / reward / discount / is_first / is_last / is_terminal 这些字段,含义是钉死的。正因为钉死,不同实验室、不同机器人本体的数据才能被同一份代码读。

Open X-Embodiment 那批横跨几十种机器人本体的数据,用的就是这套;RT 系列、Octo、OpenVLA 这些工作的数据入口也在这里。

优点:原生 TFDS 生态,内置分片与混洗,天然适合大规模并行 I/O;只要你的数据是 RLDS,就能直接和公开数据混合训练。

缺点:TensorFlow 技术栈,PyTorch 用户会觉得别扭;写入端比 HDF5 麻烦,要定义 dataset builder;tfrecord 是顺序读优化的,想随手翻看某一帧不方便。

适合:要和 Open X-Embodiment 等公开数据混训、做大规模预训练、复现 RT/Octo/OpenVLA 系工作。

3. LeRobot —— PyTorch 阵营的社区答案

HuggingFace 推的机器人学习数据集格式。设计思路很务实:低维高频信号和高维视频分开存

当前的 v3.0 版本由三根支柱构成:

  1. 表格数据:状态、动作、时间戳这类低维高频信号,存成 Apache Parquet,可内存映射或流式读取;
  2. 视觉数据:相机帧拼接后编码成 MP4,按相机分片;
  3. 元数据:JSON / Parquet 记录 schema(特征名、dtype、shape)、帧率、归一化统计量,以及 episode 分段信息(每条 episode 在共享文件里的起止偏移)。

目录结构大致长这样:

meta/info.json        # schema、FPS、数据/视频分片的路径模板
meta/stats.json       # 全局特征统计量(mean/std/min/max),用于归一化
meta/tasks.jsonl      # 自然语言任务描述 → 整数 ID
meta/episodes/        # 每条 episode 的长度/任务/偏移,chunked Parquet
data/                 # 逐帧 Parquet 分片,一个文件装多条 episode
videos/               # 各相机的 MP4 分片,一个文件装多条 episode

这里有个必须知道的版本坑:v2.x 是一条 episode 一个文件,数据集规模上到百万级 episode 就会撞上文件系统瓶颈;v3.0 改成多条 episode 合并进一个大文件,episode 边界靠元数据里的偏移量还原,而不再靠文件名。v3.0 与 v2.1 不向后兼容,官方提供了 convert_dataset_v21_to_v30 转换脚本。v3.0 随 lerobot >= 0.4.0 发布。
请添加图片描述
所以拿到一份 LeRobot 数据集,第一件事是看 meta/info.json 里的版本号,别拿 v2 的加载代码去读 v3 的目录。

优点:深度集成 HuggingFace 生态,LeRobotDataset 统一接口,返回的直接是 PyTorch tensor 字典,能塞进 DataLoaderdelta_timestamps 参数可以直接取时间窗口(做 action chunking 很方便);StreamingLeRobotDataset 支持不落盘直接从 Hub 流式训练;视频编码让体积比逐帧 PNG 小一个量级。

缺点:格式仍在快速演进,v2→v3 这种不兼容变更以后可能还有;视频编码有损,对像素级精度敏感的任务要评估影响。

适合:PyTorch 技术栈、打算用社区训练脚本、需要把数据集分享出去或做协作、数据集规模大到单机存不下。

4. ARIO —— 国内出的多本体统一标准

ARIO = All Robots In One,由鹏城实验室多智能体与具身智能研究所、南方科技大学、中山大学联合提出(arXiv:2408.10899),是一套面向通用具身智能体的数据标准 + 统一数据集。

它要解决的问题和 RLDS 同源,但切入角度不同:现有数据集格式不统一、模态不全、本体差异大,导致跨机器人的数据没法合到一起用。ARIO 的做法是定义统一数据格式并引入时间戳同步机制,让不同传感器、不同机器人本体产生的数据在时间轴上对得上。

配套的 ARIO 数据集规模不小:约 300 万条 episode,来自 258 个系列、321,064 个任务,数据来源分三类——开源数据集转换、仿真平台生成、真实机器人场景采集,真实与仿真混合。

优点:统一多本体数据格式;跨传感器时间戳同步;覆盖真实与仿真两类来源;把语言指令、环境观测、执行动作做结构化对齐组织,契合 VLA 范式。

缺点:生态成熟度不及 RLDS 和 LeRobot,能直接读它的训练框架数量有限;社区活跃度和工具链仍在建设中。

适合:做 VLA 联合训练、多模态指令跟随、需要把多种机器人本体的数据汇到一起;以及——国内团队做数据标准对齐时,这是绕不开的一个。

补充两个"非训练"格式

  • YOLO(如 Yolo11):归一化坐标的 txt 标注 + 训练/验证集划分文件。具身智能任务里常有视觉子任务需要单独训一个检测器(比如先定位目标物体再规划抓取),这时候导出 YOLO 格式微调最快。
  • RAW / 原始直出:保持原始目录结构和文件格式(JPEG/PNG/TIFF),可选附带标注文件。用于归档、跨平台迁移、接自己的处理流程。建议:原始数据永远留一份 RAW,任何转换都要可回溯。

四、一张表 + 一棵决策树

HDF5 RLDS LeRobot ARIO Yolo11 RAW
出身 科学计算 Google / TFDS HuggingFace 鹏城实验室等 Ultralytics
物理形态 .h5 .tfrecord 分片 Parquet + MP4 + 元数据 统一多本体格式 txt + 划分文件 原目录
语义是否统一 ❌ 只管容器 ✅ 字段钉死 ✅ 指令/观测/动作
主技术栈 通用 TensorFlow PyTorch 通用 PyTorch
随机读性能 中(顺序优化)
存储体积 小(视频编码) 极小
社区数据量 多但不互通 最大(OXE) 增长最快 建设中

怎么选,四个问题问完就定了:
请添加图片描述

  1. 要不要和公开数据混训?→ 要,且能接受 TF:RLDS
  2. 是不是 PyTorch 栈 + 想用社区脚本 / 分享数据?→ 是:LeRobot
  3. 是不是复现 ACT / RoboMimic 系、或纯自采自用?→ 是:HDF5
  4. 是不是做 VLA、要把多机型多模态汇到一起?→ 是:ARIO

最实际的建议:别只选一种。原始数据存 RAW 归档,主训练格式选一个,另外保留一条能一键导出成其他格式的通路。因为你现在选的模型,三个月后大概率会换。


五、比格式更早的坑:前面那两道工序

写到这必须说句实话——大部分团队根本走不到"选格式"这一步就崩了,因为前面还有两关。
请添加图片描述
**第一关:清洗。**采集端的数据是脏的,这不是意外,是常态。动捕丢帧、图像过曝、点云离群点、轨迹抖动、时间戳错位。这些不处理,格式再标准也是标准的垃圾。真正要做的算子远比想象的多:

  • 基础类:数据去重、缺失值处理、异常值检测、归一化、Z-Score 标准化、类型转换
  • 图像类:高斯去噪、中值滤波、双边滤波、双三次插值缩放、亮度/对比度调整、直方图均衡化、伽马校正、白平衡、色彩空间转换、锐化、边缘增强
  • 点云类:下采样、离群点移除、体素过滤、统计滤波、半径滤波、RANSAC 离群点检测、法向量估计、分割、配准
  • 轨迹类:平滑、插值、重采样、移动平均、Savitzky-Golay 滤波、坐标转换、时间对齐、时间戳同步、速度过滤
  • 音频类:降噪、重采样、分割、裁剪、音量标准化、音源分离

再加上数据增强:图像的水平/垂直翻转、旋转、平移、随机裁剪缩放、颜色抖动、噪声注入、Cutout / Mixup / CutMix;音频的音调偏移、速度变化、时间/频率遮蔽、SpecAugment;点云的随机翻转、随机旋转、全局缩放、随机丢弃。

**第二关:标注。**具身智能的标注是跨模态的——图像要目标检测和语义分割,视频要多目标跟踪,音频要转写和说话人分离,点云要 3D 检测,轨迹要预测。纯人工标注在这个体量下不成立,必须先用模型预标注再人工精修:图像上 YOLOv8 和 SAM,视频上 ByteTrack,音频上 Whisper 和 pyannote.audio,点云上 CenterPoint 和 PointNet++,轨迹上 Trajectron++,文本上 BERT 和 UIE。

**还有一关容易被跳过:交付前的质检。**一个数据集能不能用,至少要过八个维度——完整性(缺失样本/标注/元数据)、准确性(标注类别与边界)、一致性(标注规范统一性)、规范性(格式/坐标/类别合法性)、唯一性(重复图像与数据泄漏)、代表性(类别与场景覆盖度)、均衡性(类别/场景/来源分布)、可用性(文件读取与对应关系)。

数据泄漏这一条尤其要命:同一条 episode 的相邻帧分别落进了训练集和验证集,指标好看得不像话,一上真机全废。


六、把这条链整个做完,长什么样

上面这些我们踩了一整年,最后的结论是:采集、清洗、标注、质检、多格式交付,必须是同一条流水线上的五道工序,不能是五个互不相认的脚本仓库。

这也是我们做「开物元启」这套具身智能训练数据平台的出发点。它的形态很直白——Web 端打开就用,数据在平台内部按 原始 → 清洗 → 标注 → 增强 → 交付 五类打标签流转,每一份交付数据都能往回追到它的原始来源:

  • 数据清洗:内置多类型算子库,覆盖基础/图像/音频/点云/轨迹,清洗与增强规则可勾选、参数可调、执行顺序可拖拽编排,也支持按 com.algorithm.plugin.impl.* 规范注册自定义算子;
  • 数据标注:AI 预标注 + 人工精修双模,内置 12 个模型覆盖图像/视频/音频/点云/轨迹/文本六种模态;标注工具支持矩形框、多边形、关键点、画笔、擦除,带快捷键和撤销重做;
  • 数据交付:前述八维度质量评估出分并给改进建议,然后一键导出为 RLDS / LeRobot / ARIO / HDF5 / Yolo11 / RAW Image 六种格式——也就是本文讲的全部主流选项,选型不用在采集阶段就赌死。

请添加图片描述

一个如实说明:当前导出的 LeRobot 采用的是 v2.x 布局(一条 episode 一个文件)。如果你的训练侧已经上了 v3.0,导出后跑一遍官方转换脚本即可:

python -m lerobot.datasets.v30.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>

对接 v3.0 布局的直出已经在做了。写清楚版本,总比让你导完才发现加载器读不了强。

为什么强调格式全覆盖:学生辛辛苦苦采标一学期的数据,如果产出的是一堆自定义格式的"死数据",喂不进任何主流框架,那这门课的工程价值是零。能直接对接 HuggingFace 生态和 TFDS 生态,学生的产出才算真的进了这个领域。

平台还带了一整套教学侧的东西——课程、班级、教师、授课设置四张表打通,支持从智慧校园批量导入,作业可以按"数据采集/数据清洗/数据标注"三类任务下发,成绩能按课程和班级两个维度统计。这部分是给高校用的,做工业项目的读者可以跳过。


七、写在最后

具身智能这一波,模型层的开源速度远快于数据层的规范化速度。大部分团队真正的瓶颈不是"没有算法",是没有能稳定产出可训练数据的流水线

格式选型只是这条流水线露在水面上的那一小截。真要把它建起来,采集规范、清洗算子、预标注模型、质量门禁,一样都少不了。

如果你正在建实验室或者带课,欢迎评论区聊你踩过的坑。有想深入了解这套平台的,私信我。

下一篇打算写《八维度数据质量评估具体怎么落地》,有兴趣的可以关注一下。



Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐