论文:Learning to Fold: prizewinning solution at LeHome Challenge 2026 (1st place online, 2nd offline)
作者:Ilia Larchenko(独立研究者,也是 BEHAVIOR-1K 2025 冠军团队成员)
成绩:线上仿真赛第 1 名(62 支队伍,79.63%,领先第二名 6.1 个百分点);ICRA 2026 维也纳线下真机决赛第 2 名(865 分,第一名 sZs 895 分)
开源:代码github.com/IliaLarchenko/lehome_solution;模型lehome_sim和lehome_real发布在 HuggingFace
一、赛题回顾
- 任务:用双臂 SO-ARM101 叠一件平铺在桌上的衣服。动作是 12 维关节空间,仿真 30 Hz、真机 20 Hz。三个 RGB 相机:一个俯视,两个腕部。
- 四类衣物:长袖上衣、短袖上衣、长裤、短裤。
- 评分:按关键点距离条件做二值判定,上衣 5 个条件、裤子 4 个,全部满足才算成功,没有部分分。
- 泛化:每类 20 件衣服。10 件"见过",有官方脚本策略生成的 BC 数据;10 件"没见过",其中 8 件完全不公开。
- 陷阱:评测时不告诉策略衣服类别,策略得自己识别。
如图所示四种衣服:
二、方法总览
一句话:以 π0.5 结构的 VLA 为底座,用"策略自己当价值函数"的离线式 RL(AWR + RECAP)持续自我提升,再加上推理时调参和工程化的数据飞轮。作者自己也说,这是一份工程案例报告,不是对照实验,基本没做消融。
如图系统概览:
1. 模型结构
沿用他们 BEHAVIOR-1K 的方案:SigLIP(冻结)+ Gemma-2B 前缀 + Gemma-300M 动作专家。用 flow matching 输出 30 步 × 12 维的动作块,不用语言输入。
为这次比赛新加了:
- 衣物类别 token:替代文本 prompt。推理时先让模型自己预测类别,前几个 chunk 投票后锁定。
- 优势值条件化:优势值同时作为 token 输入和 AdaRMS 层归一化的调制信号。光用一个 token 太弱,模型会做出"错误衣服的动作"。
- XSA(Exclusive Self-Attention)、按时间步平滑的动作归一化(std ∝ √t)。
- 关键设计:所有预测头只看图像 token,看不到关节状态,防止价值头靠本体感知"走捷径"。
如图所示策略架构:
2. 策略即价值函数(核心思路)
同一个网络上挂一组线性预测头:
- success:最终能否成功的概率,即 V 函数。
- completion:任务进度 t/T,只在成功的 episode 上训练。对策略变化不敏感,比 success 稳定。
- keypoint distance:直接预测评测用的那组关键点距离比。
- 未来预测头:预测 30 帧后的关键点距离,以及以动作为条件的 Δsuccess。这相当于一个廉价的 Q 函数加"世界模型替代品",用于 best-of-N 选动作。
好处:只有一个模型要训练和部署,表征共享,辅助任务还能反哺主干。
3. 奖励和优势估计(技术含量最高的部分)
- 稠密化:直接复用比赛的成功判定条件,把过程切成"中间检查点 0.5 + 成功 1.0",第一段再按距离缩小的比例平滑发放。
- 失败时收回奖励:失败的 episode 把累计奖励均匀扣回去,保证总回报始终等于 0/1,和真实目标对齐。
- CUPED 式的打折基线:Â = G − αV̂。作者推导出最优 α* = ρ²(V, V̂),也就是"预测器有多可信,就减多少"。α=0 退化为纯检查点奖励,α=1 退化为 ΔP(success)。这里借用了 A/B 测试里的方差缩减思路,挺有意思。实际取了 α=0.5,事后估算 α* 在 0.4–0.8 之间。
- GAE同时用 success 和 completion 两路信号;旧数据的优势值逐渐混成只看结果的 GRPO 式相对成功信号;成功 episode 里折叠最紧的前 20% 额外加分(precision boost)。
4. 优势值怎么用:AWR + RECAP 双管齐下
- AWR 改在采样器里做:按 P ∝ e^clip(A,−2,2) 采样帧,loss 本身不加权。低优势值的帧几乎不会被加载,算力全花在好动作上。辅助头再用重要性权重纠偏。
- RECAP 式条件化:A ≥ 0 时以一定概率打开优势值 token,推理时始终打开,并做classifier-free guidance。guidance 系数最后收敛到 7–9,相当高。
- 不用 PPO/GRPO 的理由:flow matching 拿不到干净的 log-prob;而且"压低坏动作的概率"会把输出推离有效动作流形。条件化和重加权只是在模型已经会的动作里重新分配概率质量。
5. 推理时优化(零训练成本的大头收益)
- 执行长度、播放速度、inpainting 起始点、CFG 系数、噪声温度、候选数 N,每类衣服各调一套。
- 用因子化的 Thompson Sampling 多臂老虎机,在采集 rollout 的同时在线调参,参数随策略演化,探索本身也提供了训练数据的多样性。
- 收敛到的结论:执行步数要短(3–5 步就重规划);N=2–3 有收益,再多没用(作用主要是"避开最差的",而不是"找到最好的");inpainting 要轻。
6. 工程飞轮
- 训练节点、任意多个 rollout 节点、人工 DAgger 工作站,三者只通过 HuggingFace Hub 异步通信,加机器就能扩容。
- 多种采集策略:随机、课程学习、成功状态重放(加重增强)、困难样本挖掘(预测成功率骤降时存下物理状态,之后从那里重来)。
- 定期回滚 checkpoint:退回几天前的模型,用最新积累的数据重新训,用来跳出局部最优。π0.6 也有类似做法。
- 规模:约 12,500 条 rollout(430 万帧),一张 H200 训练约 30 万步。
7. Sim-to-Real(约一周的冲刺)
- 零样本迁移失败:模型对渲染细节严重过拟合。把 640→224 改成 640→320→224 两步缩放,仿真成功率就明显下降。
- 做法:
- 从较晚但不是最新的 checkpoint 出发,去掉所有依赖仿真特权信息的头(keypoint、Q、优势值、CFG、best-of-N)。
- 按三桶混合训练:官方真机 BC 数据占 60%,自己的遥操作和 DAgger 数据占 30%,仿真成功重放占 10%。
- 相机叠图对齐工具:把机器人驱动到数据集里某帧的关节状态,实时画面和数据集画面叠加,对齐相机位置。
- 极重的图像增强,并刻意随机化自己的实验台(挪相机、重新标定、换灯光)。
- 统一各数据源的动作速度:按来源重采样时间轴,DAgger 数据 ×2.0,仿真 ×0.65。
- 真机 DAgger:双主臂、双从臂加三联脚踏板切换模式。人工接管的帧权重最高;接管前 5 秒内的自主帧权重渐降到 0,避免学到"把局面搞砸的那几步"。
- 单位 bug:LeRobot 0.4.x 两个版本之间,SO-101 关节状态从 −100…100 归一化改成了角度制。肉眼几乎看不出来,但每个关节约有 10% 的偏差。作者直到截止前两天才发现。
三、总结归纳
| 维度 | 关键做法 |
|---|---|
| 学习范式 | BC 预热,然后用 AWR(采样)+ RECAP(条件化 + CFG)做离线式 RL |
| 价值估计 | 不另训 critic,策略网络的辅助头就是 V、Q 和进度估计 |
| 奖励 | 复用评测条件做稠密化,失败收回奖励,CUPED 式打折基线 |
| 推理 | CFG + best-of-N + 软 inpainting,用 Thompson 采样按类别调参 |
| 数据 | 异步 Hub 飞轮,成功重放和困难样本挖掘,定期回滚 checkpoint |
| 迁移 | 对齐(相机叠图、速度、单位)+ 多样化(重增强、实验台随机化、DAgger) |
我认为最值得借鉴的三点:
- "策略即价值函数"加 AWR 采样器:实现简单,不需要单独的 critic,很适合 flow-matching VLA。
- 推理参数用 bandit 在线调:几乎零成本,收益却很大,任何 VLA 部署都能直接用。
- sim-to-real 的工程清单:相机叠图对齐、跨数据源速度对齐、DAgger 按接管位置加权,都是可以直接照抄的做法。
局限,作者自己也承认:
- 几乎没有消融,不知道哪些组件真正必要;整体也明显过度工程化。
- 不会自主恢复:所有推理技巧都只是把策略推回"已知的好模式",不会探索新的恢复动作。恢复能力只能靠真机上的人工 DAgger。
- 两轮比赛用了两套割裂的流水线:真机端没有奖励和价值函数,只能退回纯 BC。作者估计合成一套流水线能到 90% 以上。
- 样本效率不高,模型规模也大于任务需要,作者坦言更小的模型应该也够。