Datawhale Task04 具身智能零基础入门 打卡笔记

Task04 打卡笔记:分支 A 继续做 LeWorldModel

Task03 我选的是分支 A,先把 MuJoCo + ACT 的操作链路理了一遍:示教数据进来,ACT 根据图像和状态预测一段动作,再放回 MuJoCo 里 rollout。Task04 没有换方向,我继续留在操作模型与世界模型这条线上,选了 LeWorldModel 做进阶复现。原因也很直接:ACT 解决的是"现在该怎么动",LeWM 多看了一步,先学"执行某个动作以后环境会变成什么",再用这个预测结果去选动作。

这次主要参考项目里的两份材料:

  • Task03-分支A操作模型与世界模型-MuJoCo_ACT复现教程.md
  • 17-具身世界模型/Leworldmodel分析解读与实验复现/Leworldmodel分析解读与实验复现.md

这次复现抓住的点

LeWM 的结构比我预期的简单。它把当前图像 o_t 编码成潜在向量 z_t,再把 z_t 和动作 a_t 丢给 predictor,预测下一时刻的潜在表示 z_{t+1}。代码层面主要盯住两项 loss:

python 复制代码
pred_loss = (pred_emb - tgt_emb).pow(2).mean()
loss = pred_loss + lambd * sigreg_loss

这里 pred_loss 管未来状态预测,SIGReg 管特征分布别塌掉。表征崩溃这件事在世界模型里很现实:如果 encoder 把所有图像都压成同一个向量,预测误差可以被做得很低,但这个模型已经分不清房间、方块和目标位置了。LeWM 的处理办法是把高维特征随机投到多个一维方向上,再做一维正态性约束。论文里用 Cramer-Wold 定理兜底,我觉得少绕一层 teacher-student 和 EMA,也不用堆 7 个辅助 loss,直接用一个分布约束逼 encoder 保留信息。

训练好的 LeWM 像一个小型"仿真器"。先把当前图像和目标图像编码成两个 latent,然后采样一批未来动作序列,用 predictor 在 latent 空间里往前滚 H 步,最后挑出离目标 latent 最近的那组动作。实际执行时只走第一步,下一帧再重新规划。这个 receding horizon 的做法能缓解长序列自回归误差,长 rollout 一次走到底我觉得风险会很大。

复现步骤

环境按 LeWM 文档走,Python 版本用 3.10:

bash 复制代码
conda create -n lewm python=3.10
conda activate lewm
pip install stable-worldmodel[train,env]

数据和权重按任务分目录放。tworoom 的结构是:

text 复制代码
lewm/
└── tworoom/
    └── tworoom/
        ├── lewm_object.ckpt
        └── tworoom.h5

cube 的数据多一层 ogbench

text 复制代码
lewm/
└── cube/
    ├── ogbench/
    │   └── cube_single_expert.h5
    └── cube/
        └── lewm_object.ckpt

路径这里要小心,STABLEWM_HOME 需要指到任务外层目录。比如 tworoom:

bash 复制代码
export STABLEWM_HOME=/home/your-user/lewm/tworoom
python train.py data=tworoom
python eval.py --config-name=tworoom.yaml policy=tworoom/lewm

我这次没把所有任务都铺开,重点看了 tworoomcube。tworoom 更像导航预测问题,cube 更接近机械臂操作,能和 Task03 的 ACT 对上。

结果记录

tworoom 结果:

text 复制代码
success_rate: 98.0
evaluation_time: 179.3897 seconds
episodes: 50

这个结果说明 LeWM 在简单二维房间任务上能稳定用 latent 预测支撑规划。50 个 episode 里只有 1 个失败,失败样本值得后面单独看轨迹,不然只看 98% 会把问题遮住。

cube 结果:

text 复制代码
success_rate: 64.0
evaluation_time: 191.0677 seconds
episodes: 50

cube 的 64% 我不打算直接当成"机械臂操作已经做得不错"。这里有两个折扣:一是 cube 权重只训练了 12 轮,二是成功判定只看方块位置和目标位置的欧氏距离是否小于等于 0.04 m,没有检查夹爪姿态、接触过程和最终稳定性。方块到了目标点就算成功,机械臂有没有用一个像样的操作过程完成,指标没有完全约束住。

遇到的问题

官方 Google Drive 权重不方便下载,改用 Hugging Face 上的 Datawhale 权重更省事。还有一个小坑:Hugging Face 下到的 .pt 和 eval 期望的 .ckpt 不完全是一回事,直接混用会卡在加载阶段。我最后按文档把对应任务的权重重命名成 lewm_object.ckpt,放到任务目录里。

路径也容易踩。STABLEWM_HOME 如果只指到 lewm/,模型权重会散在根目录下面,训练和评估再切任务时很乱。我这次把它指到 lewm/tworoomlewm/cube,后面排查日志方便很多。

我对 cube 的成功率还存疑。0.04 m 的距离阈值适合快速评估目标到达,但机械臂任务最好再补一个过程指标,比如夹爪是否完成稳定抓取、方块到目标后是否保持若干帧、末端执行器是否离开目标区域。否则会出现"指标成功,视频看着勉强"的情况。

和 Task03 的关系

Task03 的 ACT 是 imitation policy,训练目标贴着动作数据走;LeWM 是 model-based planning,先学环境转移,再通过目标 latent 反过来挑动作。两者没有谁替代谁的问题,算是同一条操作链路里的两种接口。

如果后面继续做,我会先做一个小对比表:ACT 看单步或 action chunk 的动作误差,LeWM 看 latent 预测误差和规划成功率。再往后可以试 cube 的完整 99 轮训练,重新测 50 个 episode,并把成功判定改得严格一点。这个方向继续挖下去,比较有意思的是把 LeWM 的未来预测接到 ACT/VLA 的动作候选上,让策略模型提动作,世界模型负责提前筛掉明显会失败的动作序列。

相关推荐
LinXunFeng2 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
闪闪发亮的小星星7 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq7 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波7 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.7 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余7 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.7 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
秋波。未央7 天前
Java Agent 开发 · Day 1 学习笔记(含作业完整标准答案)
java·笔记·学习
中屹指纹浏览器7 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记