【免费下载链接】Being-H
Being-H is BeingBeyond's family of human-centric embodied foundation models.
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_positions | observation.state[0:6] | 6:12 | 6 维绝对关节/夹爪位置 |
action.joint_positions | action[0:5] | 6:11 | 5 维 delta 关节动作 |
action.gripper | action[5:6] | 11:12 | 1 维绝对夹爪动作 |
注意关键约定:前 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_plate | v2.1 | 210 | 51,987 | 原始合并数据,用于审计 |
pick_cube_plate_filtered | v2.1 | 189 | 45,001 | 已剔除过短/不完整 episode |
pick_cube_plate_trimmed | v2.1 | 189 | 35,006 | ✅ 推荐训练集,已裁剪静态帧 |
pick_cube_plate_v3.0 | v3.0 | 210 | 51,987 | v3.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六、训练启动前校验清单 📋
meta/info.json的codebase_version为v2.1,fps为 30;meta/tasks.jsonl包含预期指令(如Pick the cube into the plate.);- delta 转换标记
meta/action_delta_conversion.json存在; data/chunk-000/*.parquet含action、observation.state、timestamp、frame_index、episode_index、index、task_index列;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.
相关推荐
LeRobot项目数据集创建与格式转换完全指南
LeRobot项目数据集创建与格式转换完全指南 数据集架构概述 LeRobot项目采用标准化的数据集格式,旨在为机器人学习提供统一的数据管理方案。该架构包含三个
人工智能机器学习深度学习机器人具身智能强化学习GDAL gdal_translate 完全指南:栅格格式转换、裁剪、重采样与像素缩放实战
GDAL gdal_translate 完全指南:栅格格式转换、裁剪、重采样与像素缩放实战 gdal_translate 是 GDAL 提供的最基础、最常用的栅
GIS遥感数据工程tldraw图片工具:图像裁剪与格式转换处理
tldraw图片工具:图像裁剪与格式转换处理 引言:为什么需要专业的白板图像处理? 在现代协作白板应用中,图像处理是不可或缺的核心功能。无论是产品设计会议中的界
前端UI组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考