论文精读 · Harness for Robotics · Persistent State / Memory

OptimusVLA

Global Prior Meets Local Consistency: Dual-Memory Augmented Vision-Language-Action Model for Efficient Robotic Manipulation

在 π0.5 外面挂两块记忆,都接在 flow policy 的去噪起点上:全局先验记忆 GPM 从示范库里检索同类轨迹,用它们的均值和方差代替高斯噪声当起点,并按检索相似度决定加多少噪声、走几步;局部一致性记忆 LCM 用 Mamba 读上一个动作块,给起点加一个偏置。flow policy 和 VLM 的权重不动。LIBERO 平均成功率 98.6(π0.5 为 96.9),平均去噪步数 3.2(π0.5 为 10)。

  • 哈工大(深圳)· 鹏城实验室 · 深圳河套学院 · 华为诺亚方舟实验室
  • arXiv 2602.20200v2
  • v1 2026-02-22 · v2 2026-05-18 · CVPR 2026
  • arXiv · 项目页
π0.5 起点 ε ~ 𝒩(0, I),固定 N = 10 动作块 OptimusVLA 起点 = 检索先验 + LCM 偏置 k 条检索轨迹 · 按进度 ρ_t 取窗口 μ ± λ√Var 上一个动作块 A_{t−1} Mamba 偏置 B_t X_t N 由 s̄ 决定 图 6 中为 1–4
按论文 §3、附录 B 的流程画的示意,点数不是实验数据。钴蓝 = 全局先验记忆,藏红 = 局部一致性记忆。

做了什么

GPM:两层 MLP(Prior Head)把 VLM 前缀 token 的均值投成检索键,在 FAISS 里取 top-k 条示范轨迹,按任务进度各切出一个动作块,矩匹配成对角高斯 𝒩(μ, Var),起点取 μ + λ·ε⊙√Var。噪声尺度 λ 和步数 N 都由加权相似度 s 决定。LCM:自注意力的 Consistency Layer 加 Mamba 式的 Dynamic Awareness 模块读上一个动作块,输出与动作块同形状的偏置 Bt,加到起点上。

训练

三阶段:先按 π0.5 的协议微调(30,000 步,batch 512);再冻住它,只训 Prior Head(InfoNCE,1000 步);最后冻住 GPM,只训 LCM(回归 A* − μ,1000 步)。flow policy 只在高斯起点上训练过,先验起点只在推理时换上。总参数 3.6B。

结果

LIBERO 平均 98.6(π0.5 96.9),NFE 3.2 vs 10;CALVIN ABC→D Avg. Len 4.45(π0.5 复现 4.26);RoboTwin 2.0 Hard 主表 8 个任务 38%(π0.5 29%);真机泛化 85.0、长程 64.0(π0.5 75.0 / 51.0,后者读自图 3)。

最该留意的

摘要里的“2.9× 推理加速”是真机上的 NFE 之比(10 / 3.4)。墙钟时间对 π0.5 是 133 → 112 ms(约 1.19×),LIBERO 上 57 → 39 ms(约 1.46×);图 5 标的 6.5×、4.9× 是对 OpenVLA。论文没有“π0.5 直接少走几步”的对照。RoboTwin 全部 16 个任务的平均是 30%,摘要的 38% 来自主表的 8 个。

问题 · §1–2

瓶颈在动作生成:起点太远,眼前太短

原文 Figure 1上:标准 VLA(左)与 OptimusVLA(右),后者在 policy 上方多了 GPM 和 LCM 两个输入。中上:灰色噪声点要走很长的弯路才到橙色动作点,蓝色 prior 点离得近、路径短。中下:绿色箭头示意动作之间的一致性。下:LIBERO 成功率 98.6 / 96.9 / 94.2、NFE 3.2 / 10 / 10;真机成功率 85.0 / 75.0 / 59.5、NFE 3.4 / 10 / 10(依次为本文、π0.5、π0)。

论文针对的是分层 VLA(VLM 主干 + 生成式动作头,如 π0、π0.5)。作者认为这类模型的瓶颈已经从感知转到了动作生成,具体是两条:

  • 效率:先验和目标差太远。flow matching 从各向同性高斯走到结构化的动作分布,跨度大,需要多步去噪;随机起点还可能落在会生成运动学上不可行动作的区域。论文也指出了反面:如果直接拿“动作先验”当起点,多样性会塌掉,模型退化成“把输入挪到目标附近”的函数,而且先验从哪来本身没解决。
  • 鲁棒性:只看当前观测。马尔可夫式的 VLA 分不清看起来一样的不同阶段(论文的例子:没打开过的抽屉和刚关上的抽屉);不参考已执行的轨迹,动作会抖。直接把长历史观测拼进输入,推理开销和显存都上去,而且和 VLA 单帧预训练的分布不一致(这一点引用了 MemoryVLA)。

两条问题对应两块记忆:GPM 是长期记忆,存的是训练集里的整条动作轨迹;LCM 是工作记忆,存的是本条 episode 里刚执行过的动作。

解读两块记忆接在同一个位置

这篇最有辨识度的设计不是“双记忆”这个说法,而是接入点:两块记忆都不进 VLM 的 token 序列,也不作为动作头的条件,而是直接改写 flow policy 的初值 Xt = Xt + Bt。所以它不增加上下文长度,也不需要重训 VLA,代价是只能通过“从哪里出发、走几步”来影响动作。

方法 · 全局 · §3.1

五行公式说完整条推理

Eemb ← VLM(Ot, ℓ),   Ot = {qt, I1t, …, Int}(3)
𝒫re ← GPM(zre),   Xt ∈ ℝH×A ~ 𝒫re(4)
Bt ← LCM(At−1),   Bt ∈ ℝH×A(5)
Xt = Xt + Bt(6)
at+1:t+H ← pθ(Xt, N)(7)

Ot 包括本体状态 qt 和多视角图像;H 是动作块长度,A 是动作维度;N 是自适应的去噪步数(NFE)。VLM 主干和 flow policy 就是 π0.5 的那两部分,论文称其为“分层 VLA 的标准组件”。注意时间约定:本文的 CFM 写法是 t = 0 为噪声、t = 1 为动作(式 1),和 π0 代码里的方向相反,但不影响下面的讨论。

原文 Figure 2左上(蓝底):VLM 输出经 Prior Head 得到查询 zre,在 Memory Bank 里取回 J1…Jk,虚线框是按进度滑动的窗口。中上:Prior-Aware Sampler,图里写着 H = 10 和 λ、Xt 的公式,橙色带是采样出的先验。右侧(绿底):Consistency Layer 读上一个动作块,Dynamic Awareness Module 是 Mamba 式结构(Linear → Conv → σ → SSM,与另一路 Linear → σ 相乘,再接 Linear),输出的偏置沿绿色虚线加到起点上。图注里把 LCM 误写成了 “LBM”。

VLM 主干 + flow policy

来源
π0.5 的结构与训练协议,从 π0.5 权重初始化
输入
多视角图像、本体状态、语言
输出
H × A 动作块,H = 10(图 2 标注)
训练后
阶段 II、III 全程冻结

全局先验记忆 GPM

Prior Head
2 层 MLP,InfoNCE 训练
Memory Bank
M 个(键, 整条轨迹, 元数据),FAISS IndexFlatIP
Sampler
矩匹配高斯 + 由 s 决定的 λ 与 N
频率
每个 episode 检索一次(附录 B.5)

局部一致性记忆 LCM

输入
上一个动作块 At−1 ∈ ℝH×A,不看图像
结构
Consistency Layer(自注意力)+ Dynamic Awareness(Mamba)
输出
偏置 Bt ∈ ℝH×A
目标
B* = A* − μ

一次推理怎么走:从检索到起点

流程和公式来自 §3 与附录 B;曲线是一维玩具数据,不是论文实验

检索情形
进度 ρt 误差
LCM
π0.5 噪声起点

玩具设定交互里哪些是论文的,哪些是我们填的

论文的:取块规则 ui = ⌊ρt(Nchunks − 1)⌋、权重 α = softmax(s/τs)、s = Σαisi、μ 和 Var 的加权矩、λ(s) 与 N(s) 两个线性映射、Xt = Xt + Bt。我们填的:示范轨迹的形状和长度、相似度分数、τs = 0.1、窗口步长 Δ = 2、方差下限,以及 λmax = 1.0、λmin = 0.3、Nmin = 1、Nmax = 10(论文没给,按图 6 的数字反推,见下一节)。LCM 在这里被画成“学到了残差的 75%”,只为显示它的作用方向;它真实的预测精度论文没有报告。

方法 · 全局先验记忆 · §3.2 · 附录 B

把“从哪里出发”变成一次检索

① 离线建库

对数据集里每条 episode,用(阶段 I 训好的)VLM 做一次前向,取前缀 token H(m) ∈ ℝL×Dvlm 的均值 e(m),经 Prior Head fhead(2 层 MLP)投影并 L2 归一化,得到键 zm。值是这条 episode 的整条稠密动作序列 J(m),外加长度、分块参数等元数据。所有键放进 FAISS 的 IndexFlatIP(内积,即归一化后的余弦相似度)。

Prior Head 用监督式 InfoNCE 训练:同一任务的 episode 互为正样本,batch 内其他任务为负样本,温度 τc = 0.07。为保证每个锚点在 batch 里至少有一个正样本,用了 Task-Pair Batch Sampler,每个 batch 里同一任务至少两条轨迹。

② 在线检索与取块

si = ⟨zre, zi⟩,   αi = softmax(si / τs),   s = Σi αi si ∈ [−1, 1](10)
ui = ⌊ρt · (N(i)chunks − 1)⌋,   Ci = Resample( Ji[uiΔ : uiΔ + H0] ) ∈ ℝH×A附录 B.3
μ = Σi αi Ci,   Var = Σi αi (Ci − μ)⊙2,   Var ≥ σ2min(11)

查询 zre 用同样方式从当前时刻的前缀 token 算出。每条检索到的轨迹按一个进度标量 ρt ∈ [0, 1] 对齐:用长度 H0、步长 Δ 的滑动窗口切块,取第 ui 个窗口;H0 ≠ H 时线性插值到 H。k 个块的加权混合用一个矩匹配的对角高斯近似。

Session 级缓存(附录 B.5):检索只在 episode 开始时做一次(或“检测到明显的任务漂移”时重做),缓存 top-k 的索引和权重;之后每一步只按 ρt 取块、重算式 (11),不再查 FAISS。

③ 相似度决定噪声和步数

λ = λmax − ½(s + 1)(λmax − λmin),   N = Round( Nmin + (1 − ½(s + 1))(Nmax − Nmin) )(12)(13)
Xt = μ + λ · (ε ⊙ √Var),   ε ~ 𝒩(0, I)(14)

检索越可信(s → 1),λ 越小(更依赖均值)、N 越少;陌生场景(论文写 s ≈ 0)退回更大的噪声和更多步数。论文强调保留 λ 噪声是为了不让生成退化成确定性映射,保住对新任务的泛化。

GPM 超参数论文给的值来源
Prior Head2 层 MLP;AdamW,lr 1×10⁻⁴,batch 64,τc = 0.07,20 epoch(表 6 写 1000 步)附录 C.2、表 6
检索条数 k表 5 里 k = 8 最好;主实验用几条没有明说表 5
库大小LIBERO-Long 消融里 6500 / 1300 / 130 条表 5
τs、H0、Δ、σ2min未披露—
λmin、λmax、Nmin、Nmax未披露(下方由图 6 反推)—
ρt 怎么得到只写了“维护一个进度标量”,未披露附录 B.3
H图 2 标注 H = 10,正文未写图 2

解读从图 6 反推出的调度范围

图 6(原文 fig7)给了 LIBERO 一条 episode 里 8 个关键帧的 s、λ、N。N 的 8 个值(1, 3, 4, 4, 3, 3, 3, 4)和 Nmin = 1、Nmax = 10 的式 (13) 逐个吻合(例如 s = 0.92 → 1.36 → 1;s = 0.42 → 3.61 → 4)。λ 的 6 组不同取值做线性拟合,得到 λmax ≈ 1.0、λmin ≈ 0.3。这只是按图上数字算的,论文没有写这几个超参数。

起点换了,速度场没换:二维玩具里的去噪

解读 · 玩具模型速度场按 CFM 的定义精确计算

起点
步数 N

同一组 80 个 ε,三种起点在各个 N 下的可行比例:

这个玩具在做什么:二维平面代表动作空间,给定观测后“可行动作”有两簇(左侧抓、右侧抓,共 24 个示范点),两簇中间的平均位置不可行。速度场不是学出来的,而是按条件 flow matching 的定义精确计算的:源分布是 𝒩(0, I)、直线路径 xt = (1 − t)x0 + t x1 时,最优速度场是 v(t, x) = (E[x1 | xt = x] − x) / (1 − t)。这正是附录 B.1 所说“预训练时保持 𝒫0 = 𝒩(0, I)”的 flow policy 在理想情况下会学到的东西。推理时只把起点换成 GPM 的样本,速度场保持不变,与论文的做法一致。

疑点“起点离目标近,步数就能少”在高斯源 flow 上不自动成立

在 t = 0,xt 就是 x0,与 x1 独立,所以理想速度场是 v(0, x) = E[x1 | c] − x:无论起点放在哪,第一步都朝条件均值走 1/N 的距离。N = 1 时输出恒等于 E[x1 | c],起点完全不起作用(图 6 的第一帧就是 N = 1);N 稍大时,先验起点的信息才在后几步体现出来。玩具里 N = 3、4 时检索命中的先验确实减少了落在两簇之间的样本,但 N = 1、2 时两种起点都失败,检索偏离时需要更多步。

真实网络不是理想速度场:它在 t = 0 只见过高斯样本,喂进一个“已经像动作”的起点属于分布外输入,行为论文没有分析。附录也没说推理时 ODE 从哪个 t 开始积分。要判断 NFE 从 10 降到 3.2 有多少来自先验起点,需要“π0.5 用高斯起点直接走 3–4 步”的对照,论文没有做。LIBERO 这类任务给定观测后动作往往接近单峰,单峰时少步数本来就可能够用。

方法 · 局部一致性记忆 · §3.3 · 附录 C.3

只看动作历史的工作记忆

Bt−1 ← ConsistencyLayer(At−1),   At−1 = [at−H+1, …, at] ∈ ℝH×A(15)
Bt ← DynamicAwareness(Bt−1)(16)
B*t = A*t − μt,   𝓛LCM = 𝔼 ‖ Bt − B*t ‖22(18)(19)

Consistency Layer:块内

对上一个动作块的 H 个动作做自注意力,捕捉块内动作之间的依赖和约束。输出 Bt−1,形状仍是 H × A。

Dynamic Awareness Module:块间

Mamba 式结构,线性复杂度。它把每个块的表示作为一个时间步来更新内部状态,再预测下一步的偏置 Bt。论文称它用来推断任务进度。层数、宽度、状态维度均未披露。

训练(阶段 III)时 VLM、flow policy、GPM 全部冻结。对每个时间步先用 GPM 检索、算出先验均值 μt,再让 LCM 沿轨迹展开、回归 A*t − μt。为了应对推理开始时没有历史的情况,训练中以概率 pcold 把 At−1 置零(cold start),让模型只靠内部状态或输出中性偏置。pcold 的取值未披露。

解读LCM 其实是一个“下一块残差预测器”

把训练目标代回式 (6):如果 LCM 学得完美,Xt = μ + λε⊙√Var + (A*t − μ) = A*t + λε⊙√Var,也就是“正确的下一块加一点噪声”。所以 LCM 学的不是一般意义上的平滑约束,而是只凭动作历史去纠正检索均值的偏差,flow policy 此时更像一个精修器。两个细节值得注意:LCM 的输入只有 At−1,看不到 μt 也看不到图像,却要预测 A*t − μt,只能靠 Mamba 状态隐式记住“检索给了什么、现在走到哪”;训练时 At−1 取自示范(teacher forcing),部署时是自己执行出来的动作。

疑点“去掉 GPM、保留 LCM”这一行怎么跑的

LCM 的回归目标定义在 GPM 均值之上(A* − μ)。表 4 里有 GPM ✗ / LCM ✓ 的配置(LIBERO-Long 93.2),但没说此时 Bt 加在什么起点上、LCM 是否重新训练、目标换成了什么。

训练 · §3.4 · 附录 C · 表 6

三个阶段,后两个只训小模块

阶段 I · 分层 VLA 微调

按 π0.5 的结构和训练协议,从 π0.5 权重初始化,在每个基准上用 CFM 训 flow policy。此时没有 GPM 和 LCM,源分布就是 𝒩(0, I)。

AdamW,lr 5×10⁻⁵,30,000 步,batch 512,warmup 比例 0.10,EMA 0.999;8 × A800。

阶段 II · GPM

VLA 全部冻结,只训 Prior Head(InfoNCE)。训完冻结 fhead,离线建库。

AdamW,lr 1×10⁻⁴,1000 步,batch 64。

阶段 III · LCM

VLM、flow policy、GPM 全部冻结,只训 LCM 回归 A* − μ,含 cold-start 置零。

AdamW,lr 1×10⁻⁴,1000 步,batch 64。

解读表 4 最后一行就是 π0.5 本身

消融表里 GPM、LCM 都去掉的配置:LIBERO-Long 92.4、CALVIN 4.26、真机泛化 75.0,分别与表 1 的 π0.5、表 2 的 π0.5†、图 3 的 π0.5 平均完全相同。可见阶段 I 的产物就是 π0.5 基线,OptimusVLA 的全部增益来自推理时外挂的两个小模块。这让消融很干净,也意味着这套方法原则上可以挂到任何已训好的 flow 式 VLA 上。论文在局限里把“GPM、LCM 与 flow policy 端到端联合训练”列为未来工作。

实验设置 · §4.1–4.2 · 附录 D

三个仿真基准 + 一台双臂真机

平台设置评测量对比方法
LIBEROSpatial / Object / Goal / Long 四个套件,各 10 个任务每个套件 500 次 rollout 的平均成功率11 个(表 1)
CALVINABC → D:在 3 个环境训练,留出的 D 环境测试,5 个任务连做500 次 rollout;1/5…5/5 各档成功率与 Avg. Len10 个(表 2)
RoboTwin 2.0从 50 个双臂任务中“随机选” 16 个;Hard 设置(杂物、光照、纹理、桌面高度随机);Aloha-AgileX,单任务训练,每任务 50 条干净示范每任务 100 次 rollout6 个(表 3、表 7)
真机Galaxea R1 Lite:两条 6 自由度臂 + 平行夹爪(正文称 14 自由度双臂平台;整机 23 自由度含 3 自由度躯干、6 自由度底盘);腕部 + 第三人称相机,224 × 224泛化任务每个 50 次(25 次变光照 + 25 次变场景);长程任务每个 25 次;物体初始位置随机OpenVLA、OpenVLA-OFT、π0、π0.5

实现:从 π0.5 权重初始化,加上 GPM、LCM 后共 3.6B 参数;8 × NVIDIA A800,全局 batch 512,30,000 步,三个仿真基准学习率都是 5×10⁻⁵。推理计时用的硬件未披露。

真机任务(表 8、表 9)内容示范rolloutOptimusVLA
place_one_fruit_on_plate抓一个水果(香蕉、苹果、柠檬等)放到盘子上1005088
place_plate_on_tablecloth抓盘子放到桌布上,盘子和桌布各有多种样式1005090
stand_bottle_upright抓起水瓶并竖直放好,瓶子形状外观各异1505074
place_cup_on_tablecloth抓杯子放到桌布上,杯子形状外观各异1205088
place_all_fruits_on_plate把三个不同水果依次放到盘子上,每次组合随机2002564
place_2_fruits_in_2_position从碗里拿一个水果放到桌布上,再从盘子里拿另一个放进碗2002560
place_2_obj_on_plate依次把杯子和苹果放到盘子上2502568
place_blocks_on_tablecloth把三个不同方块放到桌布上,每次组合随机3002564
原文 Figure 3左半是 4 个泛化任务,右半是 4 个长程任务;柱子从左到右依次是 OpenVLA(灰)、OpenVLA-OFT(粉)、π0(黄)、π0.5(紫)、OptimusVLA(蓝)。下面的结果部分按柱顶标注重画了这张图。

结果 · §4.2–4.6

四个平台、两组消融、两张效率图

LIBERO(表 1)

平均成功率与 Long 套件成功率

实心点 = 四个套件平均,空心圈 = LIBERO-Long。横轴从 50 开始。每个套件 500 次 rollout。

平均(OptimusVLA)平均(其他方法)Long 套件
原表数字(表 1)

OptimusVLA 在四个套件上都是最高,平均比 π0.5 高 1.7 个百分点,差距主要在 Long 套件(96.4 vs 92.4)。论文把 Long 上的提升归给 GPM“锚定”长程生成,并强调 NFE 是 3.2 vs 10。

解读这张表里的几个对照要分开看

π0、π0-FAST、π0.5 三行没有标 †,数字与 openpi 仓库 examples/libero/README.md 公布的 LIBERO 30k 步微调结果逐字相同(我们的核对:π0、π0-FAST 两行见该文件 2025-07 的版本,π0.5 见现行版本);图 4 的 π0.5 曲线在 30,000 步处也正好落在这组数上,表 4 的“都去掉”一行同样是 92.4。MemoryVLA 一行取自它自己的论文,而 MemoryVLA 的 LIBERO 结果只用第三人称 RGB(它的表里专门用 * 标出用了腕部相机和本体状态的方法),OptimusVLA 沿用 π0.5 的多视角加本体状态输入,两者输入条件不同。

CALVIN ABC → D(表 2)

平均完成长度 Avg. Len

5 个任务连做,Avg. Len 满分 5。† 为论文复现。

原表数字(表 2),加一列我们算的五档之和

4.45 vs π0 的 3.92,即摘要里的“提升 13.5%”(相对值);比复现的 π0.5(4.26)高 0.19。1/5 和 2/5 两档 RoboVLM 更高,3/5 以后 OptimusVLA 最高,与“长链条更稳”的说法一致。

疑点三行的 Avg. Len 与各档成功率对不上

CALVIN 的 Avg. Len 按定义等于五档成功率之和(第 i 档 = 至少连续完成 i 个任务的比例)。表 2 中 8 个引用的基线都满足这一点(误差 ≤ 0.005),只有论文自己报告或复现的三行不满足:OptimusVLA 五档之和 4.434,表中写 4.45;π0.5† 4.243,写 4.26;π0 3.835,写 3.92。四舍五入解释不了这么大的差距。结论的方向不受影响,但数字本身不自洽。

RoboTwin 2.0 Hard(表 3 主表 + 附录表 7)

逐任务成功率

颜色越深越高。主表只列了 8 个任务,另外 8 个在附录。切换看平均值怎么变。

原表数字(表 7,含排名)

疑点摘要的 38% 是主表 8 个任务的平均

论文说 16 个任务是随机选的,主表放了其中 8 个,摘要和正文用的是这 8 个的平均 38%(π0.5 29%、π0 25%)。附录表 7 全部 16 个任务的平均是 30%(π0.5 24%、π0 23%)。只看附录那 8 个(我们按表 7 算):OptimusVLA 22.1%,π0 21.3%,π0.5 18.3%,差距基本消失。主表选这 8 个的依据没有说明;在这 8 个里 OptimusVLA 有 6 个排第一,附录 8 个里有 4 个。

真机(图 3)

8 个真机任务的成功率

数字读自原图柱顶标注;泛化任务每个 50 次,长程任务每个 25 次。右侧两组是我们按图算的套件平均(图 1 给出的泛化平均 85.0 / 75.0 / 59.5 与之一致)。

OpenVLAOpenVLA-OFTπ0π0.5OptimusVLA
图中数字

泛化套件 85.0,长程套件 64.0,8 个任务都是最高。摘要里“超过 π0 42.9% 和 52.4%”是相对值,换成百分点是 +25.5 和 +22.0;对最强基线 π0.5 是 +10.0 和 +13.0 个百分点。泛化任务的提升论文归给 GPM(按多模态语义检索,对视觉干扰更稳),长程任务归给动作稳定性和双臂协调。

消融:GPM 与 LCM(表 4)

四种组合在三个设置上的表现

各面板刻度不同。最后一行(都去掉)的三个数与 π0.5 相同。括号里是论文标的相对降幅。

原表数字(表 4)

去掉 GPM 在真机泛化上掉得最多(85.0 → 77.0),去掉 LCM 在 LIBERO-Long 上掉 1.6 个点(96.4 → 94.8)。论文的措辞是去掉 GPM 导致“灾难性下降 3.8%”,这里的 3.8% 是 CALVIN Avg. Len 4.45 → 4.28 的相对变化。两者叠加的增益大于各自单独的增益(LIBERO-Long:单加 GPM +2.4,单加 LCM +0.8,都加 +4.0)。

记忆库大小与 k(表 5)

LIBERO-Long 成功率,库里存多少条、检索几条

虚线是表 4 的两个参照:不用 GPM(保留 LCM)93.2,π0.5 92.4。横轴从 90 开始。

原表数字(表 5)

解读只检索 1 条反而比不用 GPM 差

k = 1 时 92.6(库 6500 条)和 92.4(库 1300 条),都低于表 4 里不用 GPM 的 93.2,与 π0.5 持平。库里每个任务只存 1 条(130 条)但检索 8 条时是 93.6,此时 8 条里必然混着别的任务,结果反而比 k = 1 的同任务单条更好。k = 16 也会回落到 94.8。论文的解释是单条先验“太确定”、k 太大则不够具体。这说明 GPM 的好处很大程度来自对多条轨迹求平均得到的均值和方差,而不只是“找到最像的那条示范”。另外 6500 = 130 × 50、1300 = 130 × 10,正好对应 LIBERO 全部 130 个任务(含 LIBERO-90)每任务 50 / 10 条,暗示记忆库可能用到了四个评测套件训练集以外的 LIBERO-90 数据,论文没有说明库的来源。

训练步数(图 4)

同一初始化下,不同训练步数的 LIBERO 成功率

数字读自原图标注;每个面板纵轴范围不同。

OptimusVLAπ0.5
图中数字

论文的读法:OptimusVLA 在 LIBERO-Goal 上 18,000 步就到 97.6,π0.5 要 26,000 步(97.8)才到相近水平,并把这归为“训练效率”。

疑点这张图比的不是训练效率

按附录 C,阶段 I 就是 π0.5 的训练,flow policy 用高斯起点、没有 GPM 和 LCM;GPM、LCM 是之后在冻结的模型上各训 1000 步。所以同一步数下两条曲线的 flow policy 应当是同一份权重,差别只在推理时有没有外挂的两个模块。图 4 说明的是“对没训够的 π0.5 检查点,外挂 GPM + LCM 能补回一部分”,而不是训练本身变快了。每个中间检查点上 GPM、LCM 是否单独训练,论文没写。

推理效率(图 5)

单次推理时间与 NFE

数字读自原图。灰色标注是我们按图中数字算的对 π0.5 的比值;图里红色的 6.5×、4.9× 是对 OpenVLA。

图中数字

疑点“2.9× 推理加速”是 NFE 之比,不是时间之比

正文说图 5 是和 π0.5 比,“推理时间快 6.5×、NFE 少 3.1×”。按图中数字,6.5× = 254 / 39 是对 OpenVLA;对 π0.5 是 57 / 39 ≈ 1.46×。摘要和引言的“2.9× inference speedup”等于真机 NFE 之比 10 / 3.4,真机墙钟时间对 π0.5 是 133 / 112 ≈ 1.19×。

解读如果把时间粗略拆成“固定开销 + N × 每步开销”并忽略 GPM、LCM 自身开销,LIBERO 上每个去噪步约 2.6 ms、固定部分约 30 ms,真机上约 3.2 ms 和 101 ms。也就是说 π0.5 的 10 步去噪在真机上只占约四分之一的时间,大头是 VLM 前缀,NFE 再降也换不来成倍的墙钟加速。

定性结果(图 6、附录图 8)

原文 Figure 6上:LIBERO 任务 “Pick up the bbq sauce and place it in the basket”。π0.5 每帧都是 N = 10;OptimusVLA 的 8 个关键帧依次为 s = 0.92 / 0.63 / 0.42 / 0.42 / 0.53 / 0.53 / 0.49 / 0.40,λ = 0.32 / 0.44 / 0.51 / 0.51 / 0.47 / 0.47 / 0.48 / 0.50,N = 1 / 3 / 4 / 4 / 3 / 3 / 3 / 4。下:真机 “Place the red apple onto the plate”,π0.5 在两个相似观测(粉色圈)之间分不清苹果是否已放好;OptimusVLA 的绿色虚线表示连贯的轨迹。

疑点图 6 的 s 在一条 episode 里一直在变

附录 B.5 说检索只在 episode 开始时做一次,之后缓存 top-k 的索引和权重;s = Σαisi 只依赖这些缓存值,按理整条 episode 不变(除非触发“任务漂移”重检索)。图 6 里 s 却从 0.92 变到 0.40,每帧都不同。另外第 3、4 帧(s = 0.42,λ = 0.51)和第 8 帧(s = 0.40,λ = 0.50)的方向与式 (12) 的单调递减相反,差值很小,可能只是示意数字。

解读键是每条 episode 一个向量,论文没说取 episode 的哪一帧;如果取开头,查询在第一帧最像(0.92)、之后场景变化导致相似度下降,正好是图上的样子。

原文 Figure 8四个长程任务,自上而下:放全部水果、一个水果放桌布再把另一个放进碗、依次放杯子和苹果、放三个方块;每个任务上排 third(第三人称)、下排 wrist(腕部)。论文称长程任务需要“双臂操作多个物体”,但这些关键帧里看到的都是同一只手臂在动。附录说补充材料里有未剪辑的实时视频。

读懂它

这篇真正说明了什么

关键 insight

1. 记忆可以接在“初值”上,不必进上下文

GPM 和 LCM 都只改 Xt,不加 token、不动 VLM 的输入分布、不改 flow policy 权重。阶段 II、III 合计 2000 步小模块训练,就在 π0.5 上拿到表 4 里 +4.0(LIBERO-Long)、+10.0(真机泛化)的增益。

2. 一个标量同时调噪声和计算量

s 既决定 λ(多大程度相信检索均值),又决定 N(走几步)。这是一个很便宜的“置信度 → 计算预算”接口,图 6 里同一条 episode 的 N 在 1 到 4 之间变化。

3. LCM 学的是“检索均值差多少”

目标是 A* − μ,所以完美的 LCM 会把起点直接推到正确动作附近。它只看动作历史,靠 Mamba 状态跨块累积信息,这是它能区分“看起来一样的两个阶段”的唯一来源。

4. 好处来自多条轨迹的统计量

k = 1 比不用 GPM 还差,k = 8 最好,每任务只存 1 条、混入别的任务反而比单条同任务好(表 5)。GPM 更像一个“按语义加权的动作均值与方差估计器”,而不是示范回放。

容易误解的地方

  • “2.9× 加速”不是墙钟时间。那是真机 NFE 之比;对 π0.5 的实测时间比是 1.19×(真机)和 1.46×(LIBERO)。
  • 摘要里的百分比多是相对值。CALVIN +13.5%(4.45 / 3.92)、真机 +42.9% / +52.4%(对 π0),表 4 括号里的降幅也是相对值。
  • flow policy 没有在先验起点上训练过。附录 B.1 明确说训练时 𝒫0 = 𝒩(0, I),GPM 只在推理时替换起点;这和同专题 RA-VLA 训练时就用检索均值初始化不同。
  • “训练效率”图比的是推理时外挂模块。见上面图 4 的疑点。
  • 记忆库不是在线积累的。库是阶段 II 之后从训练数据离线建好的,部署中不增不删;论文把在线更新、遗忘列为未来工作。

FAQ

GPM 是不是就是把最像的示范拿来回放?

不完全是。起点是 k 条轨迹在当前进度处的加权均值加上 λ 倍的标准差噪声,之后还要经 flow policy 去噪 N 步,并叠加 LCM 偏置。表 5 也说明单条轨迹(k = 1)的效果最差。但它确实依赖训练集里有同类任务:LIBERO 评测的就是训练任务(换初始状态),库里一定有同任务轨迹;附录 A 也承认任务偏离已有经验时检索先验会误导策略。

NFE 从 10 降到 3.2,为什么时间只从 57 ms 降到 39 ms?

每次推理的大头是 VLM 处理图像和语言的前缀,这部分 OptimusVLA 一点没省,还多了 Prior Head 和 LCM。按图 5 的数字粗算,LIBERO 上一个去噪步约 2.6 ms,固定部分约 30 ms;真机上分别约 3.2 ms 和 101 ms。

LCM 不看图像,凭什么知道苹果放没放好?

凭动作历史。Mamba 的内部状态累积了本条 episode 执行过的所有动作块,“已经做过一次放下动作”会体现在状态里,即使两帧图像几乎一样。论文对这一点的证据只有图 6 下半的定性例子,没有专门的阶段歧义任务或定量指标。

CALVIN 换了环境,检索还能找到“同类”吗?

库来自 A、B、C 三个训练环境,测试在 D。CALVIN 的任务类型在各环境间相同,所以检索返回的是别的环境里做同一类任务的轨迹。论文称这是“语义锚定”:在旧动作先验上变形而不是从头生成。增益是 4.26 → 4.45(对复现的 π0.5),表 4 中去掉 GPM 时为 4.28。

进度 ρt 从哪来?LCM 不是负责推断进度吗?

论文没有说。GPM 取块用的 ρt 被描述为“维护的一个进度标量”,没有说明是按步数除以预期长度、还是由某个模块预测。LCM 被描述为推断任务进度,但它输出的是动作偏置,不是 ρt。两者之间没有写明的接口。

局限与疑点

作者承认的,和我们读出来的

论文自己提到的(附录 A)

  • GPM 的效果受记忆库的覆盖面和质量限制;当前任务或场景与库里经验差别大时,检索到的先验可能误导策略。
  • LCM 只建模局部、以动作为中心的一致性,且按固定长度的块工作;对需要很长时间跨度、多阶段依赖或延迟效应的任务可能不够。
  • 未来工作:在线更新的记忆库(巩固、遗忘、带不确定性的检索);GPM、LCM 与 flow policy 端到端联合训练。

我们读出来的

  • 疑点“2.9× 推理加速”是 NFE 之比;图 5 的 6.5×、4.9× 是对 OpenVLA;对 π0.5 的墙钟加速为 1.46×(LIBERO)和 1.19×(真机)。
  • 疑点缺少“π0.5 用高斯起点走 3–4 步”的对照。flow policy 只在高斯源上训练,理想速度场在 t = 0 与起点无关,N = 1 时起点不起作用;积分起始时刻未披露。
  • 疑点RoboTwin 摘要数字 38% 来自主表 8 个任务,全部 16 个任务为 30%;附录 8 个任务上与 π0 基本持平(22.1 vs 21.3)。
  • 疑点CALVIN 表中 OptimusVLA、π0.5†、π0 三行的 Avg. Len 不等于五档之和(4.434 / 4.243 / 3.835 vs 4.45 / 4.26 / 3.92),其余基线都一致。
  • 疑点图 4 的“训练效率”实为推理时外挂模块对未训够检查点的补偿。
  • 疑点Session 级缓存与图 6 中逐帧变化的 s 矛盾;ρt 的来源、键取 episode 哪一帧都未披露。
  • “去掉 GPM、保留 LCM”的配置怎么定义 LCM 的目标和起点,未说明。
  • 记忆库规模 6500 = 130 × 50,疑似包含 LIBERO-90,库的来源未说明。
  • k、τs、λ 与 N 的范围、H0、Δ、σ2min、pcold、LCM 结构尺寸、推理硬件全部未披露。
  • LIBERO 上与 MemoryVLA 的比较输入条件不同(后者只用第三人称 RGB)。
  • 真机只有一个平台、8 个任务,长程任务每个 25 次;关键帧里看到的都是单臂操作。
  • tex 源码里留着一版被注释掉的旧摘要:RoboTwin 2.0 平均 82.6%、真机比 π0 高 12% / 14%、推理快 2.3×、CALVIN 比 π0 高 14%,与正式版差别很大,改动原因未说明。

放到专题里看

唯一把记忆接在“起点”上的一篇

在 Harness for Robotics 专题里,OptimusVLA 归在 Persistent State / Memory:它改的是“记什么”。但两块记忆的性质不同:LCM 是真正跨步保留的状态(本条 episode 已执行动作的 Mamba 状态);GPM 存的是训练集里的整条轨迹,机制上更接近检索,和 Context Architecture 那一组里的 RA-VLA 最像。两者共同的特点是都不改模型看到的 token,只改 flow 从哪里出发、走几步。

OptimusVLAMemoryVLASOMAHiMeRA-VLAActiveVLATIC-VLA
类别MemoryMemoryMemoryMemoryContextContextContext
记住 / 看到什么训练集整条动作轨迹(GPM);本条 episode 已执行动作块(LCM)本条 episode 每步的 VLM 感知 token(256)与认知 token(1),最多 16 条(真机长程 256),相邻相似条目合并场景里物体实例:DINOv3 外观特征 + VGGT 估计的 3D 框 + 类别,头部相机扫描建立,执行中门控 EMA 更新Planner 维护的多模态键值库(图像 + 文本,如物体状态、人类偏好)和语言子目标清单,支持增、改、删新任务 1–5 条示范切成的片段(预编码 VLM 特征 + 状态 + 动作块)点云渲染的正交投影,主动选视角并做 3D 放大延迟到达的 VLM KV cache + 延迟时长、自车位移元数据
接在哪里flow policy 的初值 Xt 与步数 N检索结果与当前 token 门控融合,作为扩散动作专家的条件记忆 token 经交叉注意力增强 VLM 的视觉语言 token策略外部,经语言子目标传给执行器动作头逐层交叉注意力;并用检索动作块均值初始化 flowVLM 的图像输入本身动作专家交叉注意力的 KV
记忆跨度跨 episode(GPM)+ 本 episode(LCM)本 episode本 episode 的场景整个长程任务跨 episode(示范库)当前时刻几秒内的延迟
训练π0.5 微调后冻结;两个小模块各 1000 步7B Prismatic 上端到端训练VLM + DiT 动作头,以 GR00T N1.5 为主要基线;除 VLM 语言解码器外全训只微调执行器(基于 π0.5);Sentry、Planner 用现成 VLM 零样本训检索器 + 微调策略;新任务免训练PaliGemma 主干,预测热力图InternVL3-1B;注入延迟的模仿学习 + 在线 RL

同类(Memory)的比较

  • 和 MemoryVLA:都用“工作记忆 + 长期记忆”的认知科学比喻,但内容完全不同。MemoryVLA 的长期记忆是本条 episode 的 VLM 特征历史,作为动作专家的条件;OptimusVLA 的长期记忆是跨 episode 的动作轨迹库,工作记忆只有动作。OptimusVLA 在相关工作里批评这类工作记忆“每次更新都要跑一次完整的 VLM 前向,成为吞吐瓶颈”;而 MemoryVLA 附录报告记忆模块只让延迟增加约 3.6%(RTX 4090 上 0.194 s),而且两种 VLA 本来每步都要跑一次 VLM,这条批评与 MemoryVLA 自己报告的开销对不上。OptimusVLA 表 1 里把 MemoryVLA 列为对比,输入条件不同(见结果部分)。
  • 和 SOMA:SOMA 记的是“东西在哪”(视野外物体的外观和 3D 位置),OptimusVLA 记的是“同类任务怎么动、我刚才怎么动”。SOMA 解决的是看不见目标的问题,OptimusVLA 解决的是起点太远和阶段歧义,两者没有交集,原则上可以叠加。
  • 和 HiMe:HiMe 把记忆放在策略外面,用大模型以低频维护符号化的知识(语言子目标、带文字描述的记忆条目),执行器本身无状态;OptimusVLA 把数值化的记忆直接接在动作生成器上,每次推理都参与。前者擅长“记住规则和偏好、出错后改”,后者只管运动层面的连续性。

跨类的点到为止

  • RA-VLA 是 GPM 最直接的参照:同样用对比学习训检索器、同样从库里取动作块,也同样把检索动作块的均值作为 flow 的初值。区别在于 RA-VLA 训练时就用这个初值(论文写它“加速训练收敛”),并把检索片段作为上下文喂给动作头;面向的是库里只有新任务几条示范的测试时适应。OptimusVLA 的库是训练集本身,flow policy 从未在先验起点上训练。
  • ActiveVLA 改的是看哪个视角、看多细;TIC-VLA 改的是怎样看待过时的语义结果(把延迟作为显式输入)。它们都在“模型看到什么”这一侧,和 OptimusVLA 的接入点不重叠。

和(3)结构化执行、(4)评估与反馈两类

  • 和 ACoT-VLA:两篇都在 π0.5 上做,LIBERO 基线同为 96.9(Long 92.4),提升也都集中在 Long:ACoT-VLA 98.5(Long 97.0),OptimusVLA 98.6(Long 96.4)。两篇都给动作头一段动作空间的先验,来源和训练方式不同:ACoT-VLA 用自己的 EAR 生成一段 15 点粗轨迹,训练时用真值未来轨迹做 teacher forcing;OptimusVLA 从训练集检索轨迹当去噪起点,flow policy 只在高斯起点上训练过。解读「动作头到底有没有依赖这段先验」,两篇都没有干净的对照;同类问题里只有 RA-VLA 的 margin 损失消融(LIBERO-Goal 0.532 → 0.098)给了直接证据。
  • 和 τ₀-VLA、MotorMind:这两篇也存执行历史,但存在高层、写成文本,记的是任务进行到哪个阶段;OptimusVLA 的 LCM 存在低层,是已执行动作块上的 Mamba 隐状态,管的是相邻动作块的连贯和进度。解读两种记忆针对的时间尺度不同,原则上可以叠加。
  • 和 TT-VLA:TT-VLA 的测试时 RL 只适用于离散 token 的自回归 VLA,π0.5 这类 flow 动作头不在它的适用范围内;OptimusVLA 测试时不改权重,只改 flow 的起点和步数。

术语表

读这篇会遇到的词

展开术语表
NFE
Number of Function Evaluations,生成一个动作块时调用 flow policy 的次数,即 Euler 步数 N。π0、π0.5 固定为 10。
CFM / OT 路径
条件 flow matching;本文用直线路径 xt = (1 − t)x0 + t x1,目标速度 x1 − x0。t = 0 为噪声,t = 1 为动作。
GPM
Global Prior Memory,全局先验记忆:Prior Head + Memory Bank + Prior-Aware Sampler。
LCM
Local Consistency Memory,局部一致性记忆:Consistency Layer + Dynamic Awareness Module。图 2 图注误作 LBM。
Prior Head
2 层 MLP,把 VLM 前缀 token 的均值投影成检索键 zre。
Memory Bank
键值库:键为归一化任务嵌入,值为整条动作轨迹及元数据;用 FAISS IndexFlatIP 做最近邻检索。
s
检索相似度的 softmax 加权平均,取值 [−1, 1],作为置信度控制 λ 和 N。
τs / τc
检索加权的温度(未披露)/ InfoNCE 的温度(0.07)。
λ
起点噪声尺度:X = μ + λ ε⊙√Var。
ρt
任务进度标量,用来决定从每条检索轨迹的哪个窗口取动作块;来源未披露。
H0 / Δ
取块滑动窗口的长度和步长;H0 ≠ H 时插值。
Moment-matched Gaussian
用加权均值和对角方差把 k 个块的混合近似成一个高斯。
MemorySession
Session 级缓存:每个 episode 只检索一次,缓存 top-k 索引与权重。
Mamba / SSM
选择性状态空间模型,线性复杂度地建模长序列;LCM 用它跨动作块更新状态。
cold start / pcold
训练 LCM 时以概率 pcold 把上一块动作置零,模拟 episode 开头没有历史。
Task-Pair Batch Sampler
按任务 ID 组 batch,保证每个 batch 里同一任务至少两条轨迹,使 InfoNCE 总有正样本。
Avg. Len
CALVIN 指标:5 个任务连做时平均连续完成的个数,等于五档成功率之和。
RoboTwin 2.0 Hard
带杂物、光照、纹理、桌面高度强随机化的评测设置。