开始使用机器人学习的世界模型:一个实用指南
步骤指南培训机器人世界模型. 涵盖先决条件,数据准备,梦想家 v3 培训,评估和部署. 包括代码示例,常见错误和常见问题.
杰里·黄 · 2026年4月22日
这是一本实践指南,可以为您的第一世界模型进行机器人任务的培训.我们通过整个管道进行了:选择模型,准备数据,培训,评估想象力的质量,以及使用训练模型进行规划或政策改进.所有代码示例都使用Dreamer v3作为主要示例,并指出了TD-MPC2和IRIS替代方案的不同情况.
条件
硬件
- GPU: NVIDIA RTX 3090, RTX 4090,或A100. 梦想家 v3 和 TD-MPC2 运行在单个消费者 GPU 上. VRAM 要求:状态任务的最低12GB,视觉任务的建议24GB,64x64图像. 256x256图像需要24GB+ VRAM.
- CPU/RAM: 8+核心, 32GB+ RAM.数据加载是对大型数据集进行图像观测而言的CPU绑定.NVMe SSD存储强烈建议 - - 基于硬盘的数据加载将阻碍训练.
- **机器人 (初步实验可选):**您可以从无需物理硬件的模拟环境 (DMControl,Meta-World,Robosuite) 开始.当准备好进行实验时,任何具有位置/速度控制和至少一个摄像头的手臂都会工作.
软件
鱼3.10+ - JAX与CUDA (对于Dreamer v3) 或 PyTorch 2.0+ (对于TD-MPC2,IRIS)
- 模拟环境的健身房 (前为OpenAI健身房)
- 重量和偏差 (可选,但建议进行实验追踪)
数据
您需要轨迹数据:从机器人或模拟环境中记录的 (观察,行动,奖励,完成) 双数序列.初步实验,使用已有的数据集或从模拟环境中收集数据.对于现实机器人世界模型,您需要50-500集,具体取决于任务复杂性.详细的数据要求请参阅[我们的世界模型概述]
第一个步:选择你的世界模式
使用这个决定树来选择您的项目的合适起点:
决策树:哪个世界模式?
Q1:你的行动空间是连续的吗
- 是的 -> 进入Q2
- 没有 (分辨别操作) -> 考虑IRIS (原生分辨别支持) 或Dreamer v3 (也支持分辨率)
Q2:在部署时,你需要改变奖励/目标吗?
- 是的 -> 使用 TD-MPC2 (在线计划与灵活的奖励)
- 没有 -> 进入Q3
Q3:你需要最快的训练演变吗
- 是的 -> 使用TD-MPC2** (2-12小时单个GPU训练)
- 没有 -> 进入Q4
问4:您的任务需要计划15个+步骤吗?
- 是的 -> 使用Dreamer v3 (RSSM的长空想)
- 否则,Dreamer v3或TD-MPC2都会工作.Dreamer v3是安全的默认.
对于本指南的其他部分,我们将Dreamer v3作为主要例子,因为它是最广泛应用的.
步骤2:准备数据
剧情格式
梦想家v3预计数据将作为NPZ文件目录,每集一个.每个NPZ文件包含以下键的NumPy阵列:
导入 numpy为 np # 举例:保存一个节目200时间步骤节目 = { # 视觉观测: (T, H, W, C), uint8, 0-255 '图像': np.random.randint(0, 255, (200, 64, 64, 3), dtype=np.uint8), # 亲属状态: (T, state_dim), float32 # 例如, 7 联合位置 + 7 联合速度 + 1 联合速度 + 1 抓住状态 = 15 '状态: np.random.vezn(200, 15). 实类型: ((np.float32), # 行动: (T, action_dim), float32节目 # 比如, 7 联合速度命令 + 1 个 '行动'节目: np.random.dn200, 8) 随机操作: ((((((((((((((((((((((((((((((((((((((((((((((((((((((((
观察结构
观察代表的主要决定:
- **图像分辨率:**从64x64开始.这足以用于大多数桌面操作任务,并且速度比128x128快4倍.只需观察模型不能在64x64时区分与任务相关的视觉细节 (例如小物体,细节定向)
- 摄像头数量: 开始一个 (上头或手腕安装).多摄像头设置提高性能,但每额外摄像头的数据大小和训练时间翻倍. 仅在验证单个摄像头不足后添加摄像头.
- 自觉: 总是包括关节位置,关节速度和抓住状态.这些提供精确的状态信息,以补充噪音视觉观测.将每个维度正常化到大约零的平均和单元差异.
- 历史: Dreamer v3 的 RSSM 通过复发状态内部处理历史.你不需要堆叠框架或提供观察历史 - - 只是当前的时间步骤的观察.
行动正常化
这也是训练失败的常见来源.
导入 numpy为 np def正常化_actions(action, action_low, action_high): """将行动正常化到 [-1, 1]范围."""中点 = (action_high + action_low) / 2.0 半_range = (action_high - action_low) / 2.0 返回 (action - midpoint) /半_range def denormalize_actions(normalized_actions, action_low, action_high): """将[1]行动转换到原始范围.""中点 = (action_high + action_low) / 2.0 action_range = (\_high - action_low) / 2.0 返回_actions _low) / 2.0 返回_actions *_actions *_range *range _actions: (\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
梦想家 v3 内部将操作剪辑到 [-1, 1].如果您的原始操作已经在这个范围内,不需要正常化. TD-MPC2 也预期 [-1, 1]正常化操作. IRIS 将操作分化为垃圾桶,因此正常化由垃圾桶方案处理.
从LeRobot格式转换
如果您的数据是 HuggingFace LeRobot格式,请使用此转换脚本:
从 lerobot.common.datasets.lerobot_dataset 导入 LeRobotDataset 从 PIL 导入 图像导入 numpy np 导入 os 数据集 = LeRobotDataset.filter lambda 节目: x"episode\dream_index") os.makedirs("dreamer_episodes",存在_ok=True) #集成节目_indices = 数据集.hf_dataset.unique"episode_index") 为 ep_idx 在节目_indices: ep_data = 数据集.hf_dataset.filter lambda 节目: x"episode\_index"\\idx"d\idx) #d\imstack 观测图片 =
第三步:火车
安装Dreamer v3
装备Jax与CUDA支持的管道安装--升级"jax[cuda12]"jaxlib #克隆梦想家 v3 git
配置
创建一个配置文件,为您的自定义机器人任务. 梦想家 v3 使用YAML配置,您将会取消的明智默认设置:
转型组份_尺寸: 1e6 # 重播缓冲大小 转型组份_尺寸: 16 # 训练组份_尺寸: 50 # 训练后续长度 # 世界模型 rssm: 驱逐: 4096 # 确定状态大小 (GRU隐藏) 库存: 32 # 分类变量类: 32 # 分类变量单元: 1024 # 多层感知器隐藏分量编码器: mlp_key: 'state' # 观察键使用 多层感知器编码器 cnn_key: 'image' # 观察键使用 多层感知器编码器 图片: 'image' # 操作键每一个 cnn_key: 48 步骤: # 测量数据单元: 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运行程序: # 运
启动训练
通过线下数据进行列车 python dreamerv3/main.py 设置默认设置 设置配置/机器人 操作.yaml 设置配置/机器人 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置 设置
TD-MPC2替代:
导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航: 导航
训练期间要注意什么
在 TensorBoard 或 W&B 中监控这些指标:
- **图像重建损失 (解码器_图像):**应该稳步减少.如果高平原,编码器/解码器容量不足 - 增加cnn_深度.
- **KL分离 (kl_loss):**应该 konverge到中等值 (通常1-10 nats).如果它下降到接近零,模型忽略了股票的隐藏 - - 增加KL自由位或减少KL规模.如果它非常高 (>50),动态模型正在努力预测后面 - - 任务可能需要更多的训练步骤.
- ** 预测收益损失 (解码器_收益):** 应该减少,特别是在模型需要了解哪些状态是终端/成功的稀少收益任务.
- 演员损失和评论员损失: 这些应该随着时间的推移减少.如果演员损失不稳定,想象力推广可能不可靠 - - 首先检查世界模型损失.
- 想象中的回报: 通过推出世界模型中的演员所想象的轨迹的平均回报. 政策改善时应该增加. 如果它迅速增加,但实际评估表现没有改善,则政策可能会利用世界模型的不准确性.
步骤4:评估
想象力推广质量
评估世界模型的最直接方法是可视化想象中的推广并将其与现实进行比较.
导入 numpy作为 np从梦想家v3导入代理 # 装载训练有素代理 = 代理.载荷.'./logdir/robot_v1/checkpoint.pkl') # 装载一个持续的测试集集集集 = np.load('test_episodes/episode_050.npz') real_images = episode'image') # (T, 64, 64, 3) real_actions = episode'action') # (T, action_dim) # Encode first observation = {'image': real_images[0:1], 'stateagesages': episode[state'images'][0:1] latent agent._model.tode) #imaged in imagination_objects = t\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
量化指标
| Metric | What It Measures | Good Value | Horizon |
|---|---|---|---|
| Reconstruction MSE | Pixel-level prediction accuracy | < 0.01 (normalized) | 1-step |
| SSIM | Structural visual similarity | > 0.85 at step 10, > 0.7 at step 50 | Multi-step |
| Reward prediction accuracy | Can the model predict task success? | > 90% binary classification | 情节-level |
| State prediction error | Latent state divergence from ground truth | Task-dependent | Multi-step |
| Policy success rate (in imagination) | Does the learned policy solve the task in the world model? | > 80% | 情节-level |
| Policy success rate (real robot) | Does the policy actually work? | Task-dependent (gap with imagined rate indicates model error) | 情节-level |
假设在想象中,政策成功95%但在实际机器人上只有40%的成功,世界模型存在着重大不准确性,这就是政策正在利用的.
步骤5:用于规划或政策改进
选择A: 实施所学到的政策 (梦想者)
梦想家的演员网络是一个反应性政策:鉴于目前的隐形状态,它在 ~ 1ms 中输出了行动.这是最简单的部署路径.
选择B:使用TD-MPC2进行模型预测控制
TD-MPC2直接通过MPPI进行在线规划使用世界模型.
没有完成的:obs = get_robot_observation() # MPPI规划:样本512个行动序列,通过世界模型行动 = agent.act(obs, eval_mode=True) 发送_to_robot(denormalize_actions(action, action_low, action_high)) 时间.睡眠(1.0 /控制_频率)
选择C:作为数据增强的世界模型
通过训练的世界模型来生成合成节目来训练下游传播政策或VLA.这是最低风险的方法 - - 世界模型在线上使用,而不是控制循环.
导入 numpy作为 np从dreamerv3导入代理代理 = Agent.load. ./logdir/robot_v1/checkpoint.pkl') def generate_synthetic_episode(agent,初始_obs, num_steps=100): """使用学习政策+世界模型生成合成剧集.""" latente = agent.world_model.encode(初始_obs) 图像,状态,行动,奖励图像 = [\], [], [\], [\start[] t t 在 t 中 图像: ##startstart 从学习政策行动代理.actor_steps: ##start_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_action_
常见的错误
太少数据
团队收集20-50集,训练一个世界模型,发现它不准确,并得出结论世界模型不适合他们的任务.实际上,20集仅足以完成最简单的任务.预算100-200集最小的任何非微不足道的操纵任务. 如果您无法收集这么多,请使用TD-MPC2 (由于在线规划更有效的数据) 而不是Dreamer.
错误观察方式
只有在拥有自觉感觉时使用RGB图像.世界模型只需要从像素中学习机器人动力学,这需要比直接提供联合状态更多的数据.总是包括自觉感觉状态在图像旁边. 恰恰相反,只需要使用自觉感觉, 任务需要对物体的位置或方向进行推理,
剧情多样性不足
一个数据集,每一集始于同一位置的对象,教导世界模型一个狭窄的状态空间.当对象在测试时处于稍微不同的位置时,模型会做出野蛮的预测. 随机对数据收集过程中的初始条件:对象的位置,方向,机器人启动配置以及环境条件 (照明,背景).
4. 不匹配的控制频率
训练数据记录在30Hz,但部署政策在10Hz (或相反).世界模型学习动态在数据的时间分辨率.如果你训练在30Hz,每个操作产生小状态变化.如果你然后部署在10Hz,每个操作应该产生3倍更大的状态变化 - 但模型从来没有看到. 如果您必须改变频率,请在目标频率重新收集数据.
5 忽略奖励信号
对于具有稀有回报的任务 (集结时成功/失败),奖励预测器需要足够的积极的例子来学习.如果只有10%的集中成功,模型可能永远不会学会准确预测奖励. 它们可以 (a) 收集更成功的示范, (b) 添加中间奖励塑造, (c) 仅仅使用世界模型进行动态化 (数据增强) 而不是政策优化.
6 没有评估的训练太长
实际政策性能停滞或降低 (重复缓冲器的过度适应).在实际机器人上评估每100K训练步骤 (或持续的模拟事件).如果性能降低,停止训练并使用最后一个好的检查点.
如何获取培训数据
国际数据中心数据服务
RCSV的 [管理数据收集服务]
对于世界模型项目,我们提供了一个"动态多样性"收集协议,最大限度地覆盖国家空间:节目包括成功和失败完成任务,多种方法策略,扰乱恢复和边缘情况场景. 这产生了比仅成功的数据集更广泛的世界模型. 试点活动开始于2,500美元200集; [联系我们]
开放数据集
| Dataset | Episodes | Robots | Observations | 世界模型 Suitability |
|---|---|---|---|---|
| DROID | 76K | Franka Panda | Multi-view RGB, proprio, language | Excellent -- large, diverse, multi-task |
| Bridge V2 | 60K | WidowX | Single RGB, proprio, language | Good -- diverse tasks, single viewpoint |
| Open X-Embodiment | 1M+ | 22 robot types | Varies by sub-dataset | Good for pre-training foundation world models |
| RoboTurk | 2.1K | Sawyer | RGB, proprio | Fair -- smaller scale, good for initial testing |
| RCSV Public Datasets | Varies | UR5e, Franka, ALOHA | Multi-view RGB, proprio, F/T | Good -- pre-formatted for Dreamer/TD-MPC2 |
对于预训练的任务特定世界模型,DROID或桥 V2过
常见的问题
我需要多少数据来训练一个世界模型?
对于 Dreamer v3 或 TD-MPC2 的单个操作任务,您需要至少50-200集 (10K-50K转换).对于具有对象位置变化的强大的部署性能,预算300-500集. IRIS需要2-3倍多的费用,因为VQ-VAE标记器训练的费用.质量和多样性比原始量更重要 - 200 个不同的集比1000个接近相同的集体更高.
我可以用单个消费者GPU训练世界模型吗?
是的.Dreamer v3和TD-MPC2都在单个RTX 3090或RTX 4090上训练.训练时间取决于数据集尺寸和模型配置,从2-24小时之间.IRIS更需要计算 (12-48小时在单个GPU上).除非您正在训练UniSim尺度的像素空间世界模型,否则您不需要A100或多GPU设置.
什么是世界模型和像Mujoko或Isaac Sim这样的模拟器之间的区别?
物理模拟器实现了手工设计的运动方程 (硬体动态,接触模型,摩擦角孔).世界模型从数据中学习动态.模拟器对硬体是准确的,但与可变体,电缆,液体和传感器噪音而斗争. 世界模型捕捉到其训练数据中所存在的任何动态,包括难以分析地模拟的现象.
我应该使用世界模型或传播政策吗?
它们不相互排斥.一个世界模型学习环境动态,用于规划和数据增强.一个扩散政策是一个控制政策,从观察中产生行动.你可以使用一个世界模型来生成一个扩散政策的合成培训数据,或者使用一个世界模型来评估和选择一个扩散政策提出的候选轨迹. 如果您必须选择一个,请使用[传播政策]
我怎么知道我的世界模型是否足够准确?
评估现实世界轨迹.编码初始观测,使用记录的操作推出世界模型,并与实际记录的观测进行预测的比较.关键指标:重建MSE,视觉质量SSIM,奖励预测精度和10/20/50视界状态预测错误. 如果您的任务的典型节目长度内,想象中的部署明显与现实分歧,模型需要更多的数据或建筑变化.
我可以根据机器人数据调整一个预训练的世界模型吗?
对于Dreamer v3和TD-MPC2,你可以从一个训练在模拟数据 (例如,从MuJoCo或Isaac Sim) 的检查点开始,并对真实的机器人数据进行细节调整.这通常需要50-100个真实集,以适应动态模型到现实世界物理,而从零开始训练时需要200-500个集. 基因世界模型,如Genie, 显然是为了预训练,然后调整的范式而设计的.
相关阅读
- [机器人世界模型:为什么它们重要]
- Dreamer vs IRIS vs TD-MPC2 --详细的建筑比较
- [机器人学习的分散政策]
T8 ) --补充政策架构 - [LeRobot框架指南]
T9 ) --数据集格式和培训框架 - [机器人训练数据是什么?]
- RCSV数据服务 -- 针对世界模型培训的定制数据收集
- [公共数据集]
T12 ) --预先格式化数据集准备进行培训







