☰
Being-H数据加工实战:LeRobot格式、delta动作转换与静态帧裁剪完整指南
2026/10/13 14:49:00 网站建设 项目流程

【免费下载链接】Being-H

Being-H is BeingBeyond's family of human-centric embodied foundation models.

项目地址:https://gitcode.com/gh_mirrors/be/Being-H
点击查看免费下载

Being-H 是 BeingBeyond 推出的以人为中心的具身基础模型家族,其中 Being-H0.5 是其旗舰 VLA 模型。想让模型学会自己的机械臂任务,必须先做好 Being-H 数据加工:把数据整理成 LeRobot 格式、把关节动作转换成 delta、再裁剪掉首尾的静态帧。本文基于官方教程工作区 Being-H-EDU,以 SO101 的pick_cube_plate(把方块放进盘子)任务为例,带你完整走一遍数据加工流程。

一、为什么 Being-H 后训练要折腾数据?

Being-H 内部使用200 维统一动作/状态空间,不同机械臂的数据都通过映射"填入"这个空间。以 SO101 为例(定义见 configs/data_config.py):

模态来源列统一空间位置含义
state.joint_positionsobservation.state[0:6]6:126 维绝对关节/夹爪位置
action.joint_positionsaction[0:5]6:115 维 delta 关节动作
action.gripperaction[5:6]11:121 维绝对夹爪动作

注意关键约定:前 5 个关节动作维度必须是 delta(相对当前状态的增量),夹爪维度保持绝对值。而公开数据集里存的往往是绝对动作,所以 delta 转换是必经步骤。更多细节可参考 docs/unified_action_space.md。

二、LeRobot 格式数据集速览

LeRobot 是机器人数据集的标准格式,目录结构如下:

$DATASET/ meta/ info.json # 版本、fps、特征定义 tasks.jsonl # 任务指令 episodes.jsonl # 每个 episode 的元信息 episodes_stats.jsonl # 逐 episode 统计 stats.json # 全局统计 data/ chunk-000/episode_000000.parquet # 动作/状态帧数据 videos/ chunk-000/ observation.images.external/episode_000000.mp4 # 外部相机 observation.images.wrist/episode_000000.mp4 # 腕部相机

官方 SO101 数据集提供了 4 个变体,日常后训练推荐直接用pick_cube_plate_trimmed:

目录LeRobot 版本Episodes帧数用途
pick_cube_platev2.121051,987原始合并数据,用于审计
pick_cube_plate_filteredv2.118945,001已剔除过短/不完整 episode
pick_cube_plate_trimmedv2.118935,006✅ 推荐训练集,已裁剪静态帧
pick_cube_plate_v3.0v3.021051,987v3.0 布局,适配新版 LeRobot 工具链

下载后可用三条命令验证数据集是否合法(存在meta/info.json、data/、videos/目录即可):

test -f "$SO101_DATASET/meta/info.json" test -d "$SO101_DATASET/data" test -d "$SO101_DATASET/videos"

三、delta 动作转换:一条命令搞定

假设你从绝对动作的 LeRobot 数据集出发,只需运行一次转换脚本(源码:examples/so101/convert_so101_actions_to_delta.py):

python examples/so101/convert_so101_actions_to_delta.py "$SO101_DATASET"

脚本做了什么?核心逻辑只有一行(见 convert_so101_actions_to_delta.py):

action[:, :5] = action[:, :5] - state[:, :5]

此外它还会:

  • 原地更新所有data/**/*.parquet文件;
  • 重算meta/stats.json与meta/episodes_stats.jsonl,并把旧统计备份为stats.before_action_delta.json;
  • 写入转换标记meta/action_delta_conversion.json,防止重复转换(再次运行会直接拒绝,除非加--force从新的绝对动作副本重做);
  • 内置预检:若动作前 5 维已经"长得像 delta"(均值绝对值过小),也会拒绝执行。

四、静态帧裁剪:先分析,再下手

自己采集的数据往往开头和结尾都有一段机械臂静止的空镜,浪费训练算力。官方在 tools/so101_processing/ 提供了三步工具链:

1️⃣ 合并多个采集会话

多批数据先合并成一个数据集,episode 会重新连续编号、统计量自动重算:

python tools/so101_processing/merge_datasets.py \ --srcs /path/to/session_001 /path/to/session_002 /path/to/session_003 \ --dst /path/to/so101_merged

对应源码:merge_datasets.py。

2️⃣ 分析静止帧(只读,不改数据)

python tools/so101_processing/analyze_stillness.py \ --root /path/to/so101_merged \ --threshold 0.5

它会输出每个 episode 开头/末尾的静止帧均值、中位数、分布直方图,以及"静止最严重的 Top 10",帮你判断阈值是否合理。源码:analyze_stillness.py。

3️⃣ 裁剪静态帧

python tools/so101_processing/trim_static.py \ --src /path/to/so101_merged \ --dst /path/to/so101_trimmed \ --threshold 0.5 \ --buffer 3

参数含义:

  • --threshold:按相邻帧 action 变化量判断静止,建议从0.5起步,裁剪后抽查视频再调;
  • --buffer:在动作起止点前后各保留的缓冲帧,避免把有效动作"切过头"。

trim_static.py 会同步裁剪 parquet 数据、用 ffmpeg 按帧范围切视频、重置timestamp/frame_index,并重算episodes.jsonl、episodes_stats.jsonl和全局stats.json,保证输出仍是合法数据集。

💡 参考官方数据量级:pick_cube_plate原始 51,987 帧 → 过滤后 45,001 帧 → 裁剪后 35,006 帧,静态帧裁剪大约又省了 20% 的无用帧。

五、接入训练:配置与启动

数据加工完成后,从示例配置 so101_example.yaml 复制一份本地 YAML,把占位路径替换为你的数据集路径即可:

so101_posttrain: dataset_names: - so101.pick_cube_plate dataset_path_overrides: so101.pick_cube_plate: /local/path/to/Being-H-EDU_SO101/pick_cube_plate_trimmed data_config_names: - "so101" embodiment_tags: - "so101"

数据集键so101.pick_cube_plate要与 configs/dataset_info.py 中的注册保持一致。然后启动训练:

PRETRAIN_MODEL=/path/to/InternVL3_5-2B \ EXPERT_MODEL=/path/to/Qwen3-0.6B \ RESUME_PATH=/path/to/being-h05-checkpoint \ bash examples/so101/train_so101_beingh.sh \ --dataset-config configs/posttrain/so101/so101_local.yaml \ --gpus 4 \ --steps 20000

六、训练启动前校验清单 📋

  1. meta/info.json的codebase_version为v2.1,fps为 30;
  2. meta/tasks.jsonl包含预期指令(如Pick the cube into the plate.);
  3. delta 转换标记meta/action_delta_conversion.json存在;
  4. data/chunk-000/*.parquet含action、observation.state、timestamp、frame_index、episode_index、index、task_index列;
  5. videos/chunk-000/下 external 与 wrist 两路视频与 episode 一一对应。

完整流程回顾:

原始/已转换 LeRobot 会话 -> 合并会话(merge_datasets.py) -> 分析并裁剪静态帧(analyze_stillness.py + trim_static.py) -> delta 动作转换(convert_so101_actions_to_delta.py) -> 配置 YAML 并启动后训练

掌握这条"LeRobot 格式 + delta 转换 + 静态帧裁剪"的数据加工链路后,你就能把自己采集的 SO101(乃至其他映射到统一动作空间的机械臂)数据喂给 Being-H 了。更多环境安装与训练参数说明,见 docs/so101_data_processing.md 和 docs/training.md。

【免费下载链接】Being-H

Being-H is BeingBeyond's family of human-centric embodied foundation models.

项目地址:https://gitcode.com/gh_mirrors/be/Being-H
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询