单帧 VLA 容易遇到两类时间问题:它既不知道当前画面之前发生了什么,也无法判断正在运动的场景接下来会怎样变化。按钮按下前后几乎一样,需要过去记忆;传送带上的物体仍在移动,需要对未来位置做预判。MemoryVLA++ 的核心思路是把时间建模拆成过去、现在、未来三部分:当前观测形成工作记忆,感知-认知记忆库保存并检索历史,视频世界模型在潜空间提取未来动态,最后由扩散动作专家统一生成连续动作。

  • 过去记忆:PCMB 分开保存低层感知细节和高层认知语义,通过时间位置编码、交叉注意力、门控融合与相邻条目合并维护长时序上下文。
  • 未来想象:1.5B Stable Video Diffusion 先在机器人操作视频上适配;VLA 训练时冻结该模型,只做部分去噪并读取多尺度 UNet 潜特征,不解码未来 RGB 图像。
  • 选择性融合:记忆增强的感知 token 查询想象 token,再通过门控抑制与当前决策无关或不可靠的未来信息。
  • 动作生成:7B Prismatic VLM 与约 300M 参数的 DiT 动作专家组成策略,推理使用 10 步 DDIM 和 1.5 CFG,输出连续 7-DoF 动作序列。
  • 主要结果:LIBERO 平均成功率 98.4%,SimplerEnv 73.9%,Mikasa-Robo 44.4%,CALVIN 平均完成 4.29 个任务;真机想象依赖任务得分 77%,比 CogACT 高 28 个百分点。

论文MemoryVLA++: Temporal Modeling via Memory and Imagination in Vision-Language-Action Models
项目主页MemoryVLA++ Project
官方仓库shihao1895/MemoryVLA
代码状态:MemoryVLA 与 MemoryVLA+ 已公开;MemoryVLA++ 新增的世界模型、想象模块、完整训练和推理代码尚未公开。

在这里插入图片描述

图 1 上半部分给出了两个不同失败模式。按钮任务缺的是过去状态,传送带抓取缺的是未来动态;下半部分则把当前感知、过去记忆、未来想象和动作专家放到一条数据流中。它不是把视频帧简单堆给 VLM,而是让不同时间方向承担不同职责。

1、从 MemoryVLA 到 MemoryVLA++

1.1、单帧状态为什么会有歧义

给定一个或多个相机视角的 RGB 观测 I = { I v } v = 1 V I=\{I^v\}_{v=1}^{V} I={Iv}v=1V 和语言指令 L L L,策略预测动作序列:

A = ( a 1 , … , a T ) = π ( I , L ) A=(a_1,\ldots,a_T)=\pi(I,L) A=(a1,,aT)=π(I,L)

单臂动作定义为:

a t = [ Δ x , Δ y , Δ z , Δ θ x , Δ θ y , Δ θ z , g ] ⊤ a_t=[\Delta x,\Delta y,\Delta z,\Delta\theta_x,\Delta\theta_y,\Delta\theta_z,g]^\top at=[Δx,Δy,Δz,Δθx,Δθy,Δθz,g]

符号 含义 在策略中的作用
I v ∈ R H × W × 3 I^v\in\mathbb{R}^{H\times W\times3} IvRH×W×3 v v v 个相机视角 提供当前视觉观测
V V V 相机视角数量 支持单视角或多视角输入
L L L 自然语言指令 规定任务目标与语义条件
A A A 长度为 T T T 的动作块 一次策略调用生成的连续控制序列
Δ x , Δ y , Δ z \Delta x,\Delta y,\Delta z Δx,Δy,Δz 末端执行器相对位移 控制平移
Δ θ x , Δ θ y , Δ θ z \Delta\theta_x,\Delta\theta_y,\Delta\theta_z Δθx,Δθy,Δθz 欧拉角相对旋转 控制姿态
g ∈ { 0 , 1 } g\in\{0,1\} g{0,1} 二值夹爪状态 控制张开或闭合

这个公式表面上只含当前观测,但真实操作是序列决策。对于 Change Food,空盘当前帧无法说明哪种食物刚被移走;对于高速传送带,物体当前坐标也不是机械臂到达时的抓取坐标。前者要回答已经发生什么,后者要回答即将发生什么。

1.2、三个版本的边界

在这里插入图片描述

模型 当前感知 过去信息 未来信息 主要边界
典型单帧 VLA VLM 编码当前图像与指令 无显式长期记忆 无显式未来建模 容易出现时间状态混淆
MemoryVLA 当前工作记忆 PCMB 检索过去的感知与认知 token 解决过去信息缺失
MemoryVLA++ 当前工作记忆 继承 PCMB 世界模型潜空间想象 覆盖过去、现在与未来

MemoryVLA++ 不是简单把 MemoryVLA 的名字加长。真正新增的是一条测试时会参与动作决策的未来分支:世界模型产生想象潜特征,记忆增强感知 token 对其做交叉注意力,融合结果继续条件化 DiT。换句话说,未来信息不只是训练期辅助损失,而是进入推理动作链路。

这里也要避免一个常见误读:论文虽然用完整去噪结果展示未来画面,但策略实际使用的是部分去噪阶段的多尺度 UNet 潜特征。它们是用于控制的未来动态表示,不是可解释的未来 RGB 子目标。

2、整体架构:现在、过去、未来、动作

在这里插入图片描述

整体架构可以沿图 3 从左到右分成四段:

  1. 当前 RGB 与指令进入 7B Prismatic VLM,形成感知 token p p p 和认知 token c c c
  2. p p p c c c 查询 PCMB,取回历史 H p H^p Hp H c H^c Hc,经门控形成记忆增强表示 p ~ \tilde p p~ c ~ \tilde c c~
  3. 冻结世界模型对未来视频潜变量做部分去噪,多尺度特征经 FPN 和 Imagination Former 压缩为 z i m g z_{\mathrm{img}} zimg p ~ \tilde p p~ 负责筛选其中相关内容。
  4. 完整时间感知 token { p ˉ , c ~ } \{\bar p,\tilde c\} {pˉ,c~} 条件化 DiT,逐步去噪得到连续动作块。

2.1、当前工作记忆

视觉侧并行使用 DINOv2 与 SigLIP,拼接两路视觉特征。感知分支经过 SE-bottleneck 压缩,保留局部几何、物体边界和纹理;认知分支把视觉 token 与语言 token 送入 LLaMA-7B,取 EOS 位置隐藏状态作为高层语义摘要。

M w k = { p ∈ R N p × d p ,   c ∈ R 1 × d c } M_{\mathrm{wk}}=\{p\in\mathbb{R}^{N_p\times d_p},\ c\in\mathbb{R}^{1\times d_c}\} Mwk={pRNp×dp, cR1×dc}

符号 含义 作用
p p p 当前感知 token 保留动作控制所需的细粒度视觉线索
N p N_p Np 感知 token 数量 对应压缩后的视觉空间位置
d p d_p dp 感知通道维度 同时也是想象 token 对齐的维度
c c c 当前认知 token EOS 隐藏状态,压缩图像与指令的高层语义
d c d_c dc VLM 隐藏维度 与认知记忆、动作专家认知条件对齐

这里的 cognitive token 不是可读的思维链。它是一个隐藏向量,表示当前任务阶段和语义上下文;perceptual token 则保留精确抓取所需的视觉细节。两种信息分别存储和检索,避免一个单向量同时承担语义与空间细节。

2.2、为什么不直接堆叠视频帧

多帧拼接看起来最直接,但有三个代价:视觉 token 数量随帧数增长,自注意力成本迅速上升;预训练 VLM 的单帧输入分布被改变;固定窗口只能看到最近历史,无法保证保留早期关键状态。PCMB 把历史移出 VLM 主序列,世界模型把未来压缩在潜空间,两者都在控制序列长度的同时提供时间信息。

3、过去建模:感知-认知记忆库

在这里插入图片描述

PCMB 包含感知和认知两条独立记忆流:

M p c m b = { m x ∣ x ∈ { p , c } } , m x = { m i x ∈ R N x × d x } i = 1 L M_{\mathrm{pcmb}}=\{m^x\mid x\in\{p,c\}\},\qquad m^x=\{m_i^x\in\mathbb{R}^{N_x\times d_x}\}_{i=1}^{L} Mpcmb={mxx{p,c}},mx={mixRNx×dx}i=1L

L L L 是容量, N c = 1 N_c=1 Nc=1。每个 m i p m_i^p mip 保存一组低层视觉 token,每个 m i c m_i^c mic 保存一个高层语义 token;条目按 episode 时间排序。

3.1、带时间位置编码的检索

当前 token 作为 query,历史内容作为 key/value。时间编码只加到 key:

K x = [ m 1 x + T E ( t 1 ) ; … ; m L x + T E ( t L ) ] , V x = [ m 1 x ; … ; m L x ] K^x=[m_1^x+\mathrm{TE}(t_1);\ldots;m_L^x+\mathrm{TE}(t_L)],\qquad V^x=[m_1^x;\ldots;m_L^x] Kx=[m1x+TE(t1);;mLx+TE(tL)],Vx=[m1x;;mLx]

H ^ x = s o f t m a x ( q x ( K x ) ⊤ d x ) V x , q q u a d x ∈ { p , c } \hat H^x=\mathrm{softmax}\left(\frac{q^x(K^x)^\top}{\sqrt{d_x}}\right)V^x,qquad x\in\{p,c\} H^x=softmax(dx qx(Kx))Vx,qquadx{p,c}

符号 含义 直观作用
q p = p , q c = c q^p=p,q^c=c qp=p,qc=c 当前感知或认知查询 从各自历史流取回相关信息
m i x m_i^x mix i i i 个历史条目 保存过去某一时刻的表示
t i t_i ti episode 内时间索引 区分内容相似但顺序不同的状态
T E \mathrm{TE} TE 正弦时间嵌入 把先后关系注入注意力匹配
K x , V x K^x,V^x Kx,Vx 历史键和值 key 含时间,value 保留原始内容
H ^ x \hat H^x H^x 一层注意力取回结果 后续再经 FFN,两层后得到 H x H^x Hx

这种设计不是按时间平均历史,而是让当前任务状态主动查询。Shell Game Touch 中,球被杯子盖住以后,最有用的不是最近帧,而是最初暴露球位置的帧。

3.2、门控融合

检索结果不一定始终可靠,因此模型学习逐元素门控:

g x = σ ( M L P ( c o n c a t [ x , H x ] ) ) g^x=\sigma(\mathrm{MLP}(\mathrm{concat}[x,H^x])) gx=σ(MLP(concat[x,Hx]))

x ~ = g x ⊙ H x + ( 1 − g x ) ⊙ x \tilde x=g^x\odot H^x+(1-g^x)\odot x x~=gxHx+(1gx)x

σ \sigma σ 是 sigmoid, ⊙ \odot 是逐元素乘法, g x g^x gx 决定当前 token 与历史 token 在每个位置和通道上的权重, x ~ \tilde x x~ 是记忆增强表示。相比固定相加,门控可以在当前画面已经足够明确时弱化历史,在出现遮挡或阶段歧义时增强历史。

3.3、相邻条目合并

记忆容量满后,模型只比较时间相邻条目,合并最相似的一对:

i x ∗ = arg ⁡ max ⁡ i = 1 , … , L − 1 cos ⁡ ( m i x , m i + 1 x ) i_x^*=\arg\max_{i=1,\ldots,L-1}\cos(m_i^x,m_{i+1}^x) ix=argi=1,,L1maxcos(mix,mi+1x)

m i x ∗ x ← 1 2 ( m i x ∗ x + m i x ∗ + 1 x ) m_{i_x^*}^x\leftarrow\frac{1}{2}\left(m_{i_x^*}^x+m_{i_x^*+1}^x\right) mixx21(mixx+mix+1x)

i x ∗ i_x^* ix 是被选中相邻对的起点, cos ⁡ \cos cos 是余弦相似度。合并后删除后一项,使条目数恢复到容量内。这种 Token Merge 指的是记忆条目压缩,不是 VLM 内部的通用 token 剪枝;它保留 episode 内的有限历史,也不构成跨 episode 的长期知识库。

4、未来建模:潜空间世界模型想象

在这里插入图片描述

MemoryVLA++ 使用 1.5B Stable Video Diffusion 作为世界模型。作者先用机器人操作视频对其适配,使网络从通用视频先验转向机械臂、物体运动和操作过程。之后在 VLA 训练中冻结世界模型,避免动作损失破坏已经学到的视觉动态先验。

4.1、世界模型适配

给定当前观测 I I I、指令 L L L 和真实未来视频 x 0 x_0 x0,扩散加噪为:

x τ = α ˉ τ x 0 + 1 − α ˉ τ ϵ , q q u a d ϵ ∼ N ( 0 , 1 ) x_\tau=\sqrt{\bar\alpha_\tau}x_0+\sqrt{1-\bar\alpha_\tau}\epsilon,qquad \epsilon\sim\mathcal{N}(0,1) xτ=αˉτ x0+1αˉτ ϵ,qquadϵN(0,1)

世界模型训练目标写为:

L w m = E ( I , L , x 0 ) , ϵ , τ [ ∥ W ϕ ( x τ , τ , I , L ) − x 0 ∥ 2 2 ] \mathcal{L}_{\mathrm{wm}}=\mathbb{E}_{(I,L,x_0),\epsilon,\tau}\left[\left\|W_\phi(x_\tau,\tau,I,L)-x_0\right\|_2^2\right] Lwm=E(I,L,x0),ϵ,τ[Wϕ(xτ,τ,I,L)x022]

符号 含义 注意事项
x 0 x_0 x0 真实未来视频序列 只在世界模型适配阶段作为监督
x τ x_\tau xτ 扩散时间 τ \tau τ 的加噪未来视频 不是机器人真实物理时刻
α ˉ τ \bar\alpha_\tau αˉτ 累积噪声调度 控制保留信号与加入噪声的比例
ϵ \epsilon ϵ 高斯噪声 与视频潜变量形状一致
W ϕ W_\phi Wϕ 经过操作视频适配的世界模型 同时由当前观测与指令条件化
L w m \mathcal{L}_{\mathrm{wm}} Lwm 世界模型重建损失 与后续 VLA 动作损失分阶段优化

论文描述 L L L 由 CLIP 编码并通过交叉注意力注入时空 UNet。世界模型通常训练 20k-40k step:LIBERO、SimplerEnv 和 Libero-Plus 为 40k,Mikasa-Robo 与真机任务为 20k;CALVIN 直接遵循 VPP 设定。

4.2、部分去噪与多尺度潜特征

VLA 训练和推理时不需要生成完整未来视频。世界模型只执行部分去噪,并从 S S S 个 UNet 尺度读取中间特征:

z = F P N ( { U s } s = 1 S ) , z ∈ R K × N z × d p z=\mathrm{FPN}(\{U_s\}_{s=1}^{S}),\qquad z\in\mathbb{R}^{K\times N_z\times d_p} z=FPN({Us}s=1S),zRK×Nz×dp

z ˉ = z + e t i m e \bar z=z+e_{\mathrm{time}} zˉ=z+etime

符号 含义 作用
U s ∈ R K × C s × H s × W s U_s\in\mathbb{R}^{K\times C_s\times H_s\times W_s} UsRK×Cs×Hs×Ws s s s 个 UNet 尺度特征 同时包含空间层次与未来时间维度
S S S 特征尺度数量 由 FPN 聚合多尺度信息
K K K 想象未来步数 默认消融最优配置为 16
N z N_z Nz 每个未来步的潜 token 数 把二维特征图转换为 token
d p d_p dp 感知 token 维度 方便与 p ~ \tilde p p~ 做交叉注意力
e t i m e e_{\mathrm{time}} etime 可学习未来时间嵌入 区分不同想象时刻

Imagination Former 再用可学习 query 压缩空间 token,并显式建模未来步之间的关系:

q ^ k = S p a t A t t n ( q k , z ˉ k , z ˉ k ) , z i m g = F F N ( T e m p A t t n ( q ^ 1 : K ) ) \hat q_k=\mathrm{SpatAttn}(q_k,\bar z_k,\bar z_k),\qquad z_{\mathrm{img}}=\mathrm{FFN}(\mathrm{TempAttn}(\hat q_{1:K})) q^k=SpatAttn(qk,zˉk,zˉk),zimg=FFN(TempAttn(q^1:K))

q k q_k qk 是第 k k k 个未来步的可学习查询,Spatial Attention 在单个未来步内选择空间内容,Temporal Attention 跨 K K K 个未来步建模演化,最终 z i m g z_{\mathrm{img}} zimg 是紧凑未来动态表示。

4.3、记忆引导的想象融合

世界模型可能生成与控制无关的背景变化,也可能对未来做出错误猜测。MemoryVLA++ 不直接把 z i m g z_{\mathrm{img}} zimg 相加,而是让已经包含过去信息的 p ~ \tilde p p~ 查询未来:

h = F F N ( C r o s s A t t n ( p ~ , z i m g , z i m g ) ) h=\mathrm{FFN}(\mathrm{CrossAttn}(\tilde p,z_{\mathrm{img}},z_{\mathrm{img}})) h=FFN(CrossAttn(p~,zimg,zimg))

g = σ ( M L P ( c o n c a t [ h , p ~ ] ) ) , p ˉ = g ⊙ p ~ + ( 1 − g ) ⊙ h g=\sigma(\mathrm{MLP}(\mathrm{concat}[h,\tilde p])),\qquad \bar p=g\odot\tilde p+(1-g)\odot h g=σ(MLP(concat[h,p~])),pˉ=gp~+(1g)h

F t e m p = { p ˉ , c ~ } F_{\mathrm{temp}}=\{\bar p,\tilde c\} Ftemp={pˉ,c~}

h h h 是从未来潜特征中取回的信息, g g g 是融合门, p ˉ \bar p pˉ 同时包含当前视觉、过去记忆和筛选后的未来动态;认知分支 c ~ \tilde c c~ 保持为高层任务语义。消融中直接相加得到 41.2%,记忆引导融合达到 44.4%,说明选择未来信息本身和生成未来信息同样重要。

5、训练与推理:两个阶段、两种时间

5.1、训练阶段

MemoryVLA++ 需要区分两个训练阶段:

  1. 世界模型适配:输入当前图像、语言和真实未来视频,训练 SVD 学习机器人操作动态,优化 L w m \mathcal{L}_{\mathrm{wm}} Lwm
  2. VLA 策略训练:冻结世界模型;有序 episode 帧依次更新 PCMB,世界模型输出部分去噪潜特征,动作专家使用真实未来动作监督。
阶段 输入 训练参数 输出或监督
世界模型适配 当前观测、语言、真实未来视频、扩散噪声时间 世界模型与条件模块 未来视频重建目标
VLA 训练 有序观测、语言、episode 时间、真实动作块 VLM/记忆/想象整合/动作专家;世界模型冻结 连续动作预测 MSE
VLA 推理 当前观测、语言、内部 PCMB 状态 全部参数冻结 DDIM 生成动作块

训练数据必须保留 episode 顺序。LIBERO、Mikasa-Robo 和 CALVIN 使用 grouped sampling,同组帧来自同一 episode 并按时间排序;SimplerEnv 流式展开 episode,尽量让一个 batch 延续同一轨迹。若训练时随机打乱时间,记忆检索和时间位置编码都会失去前提。

5.2、动作专家

在动作扩散时间 τ \tau τ,认知 token 与噪声动作先做 cognition attention:

h c = C o g A t t n ( [ c ~ + T E ( τ ) ; A τ ] ) h_c=\mathrm{CogAttn}([\tilde c+\mathrm{TE}(\tau);A_\tau]) hc=CogAttn([c~+TE(τ);Aτ])

随后读取完整时间感知 token:

A ^ 0 = F F N ( P e r A t t n ( h c , p ˉ , p ˉ ) ) \hat A_0=\mathrm{FFN}(\mathrm{PerAttn}(h_c,\bar p,\bar p)) A^0=FFN(PerAttn(hc,pˉ,pˉ))

A τ A_\tau Aτ 是动作扩散过程中的噪声动作序列, T E ( τ ) \mathrm{TE}(\tau) TE(τ) 表示生成模型内部去噪步;它与 episode 的真实时间 t i t_i ti、未来想象步 k k k 是三个不同时间轴。 h c h_c hc 获得高层任务条件,Perception Attention 再注入精细视觉和时间动态,最后经 MLP 输出连续 7-DoF 动作。

论文采用 DDIM 10 步采样与 CFG 1.5。这里的世界模型部分去噪和动作专家 10 步去噪也是两条不同生成过程:前者产生未来潜特征,后者产生控制动作。

5.3、具体任务:传送带扫描抓取

Conveyor Scan-Pick 为例,一次决策链可以拆成:

  1. 当前相机看到物体正沿传送带移动,VLM 产生 p p p c c c
  2. PCMB 检索此前物体运动轨迹和已经扫描过的物体,形成 p ~ \tilde p p~ c ~ \tilde c c~
  3. 冻结世界模型在潜空间想象未来 16 步的物体与机械臂演化;部分去噪已经提供运动趋势,不必解码清晰视频。
  4. p ~ \tilde p p~ 查询想象 token,保留与即将到达的抓取位置相关内容,抑制背景或错误预测。
  5. DiT 生成抓取、送到扫描器、再放入箱子的连续动作块;下一次策略调用继续利用已积累记忆。

这类任务同时需要过去与未来:只做未来预测会忘记物体是否已经扫描,只做记忆又难以补偿传送带运动。

6、论文可视化告诉了什么

在这里插入图片描述

Change Food 中,当前帧出现两个食物和空盘时,注意力峰值落在此前的运动趋势与歧义形成前的关键帧;Shell Game Touch 中,峰值落在球仍可见的初始帧。这个结果说明 PCMB 不只是保留最近图像,而会取回能消除当前歧义的历史。

在这里插入图片描述

图 11 比较真实未来、30 步完整去噪和 1 步部分去噪。30 步结果更适合视觉展示,但 1 步结果即使画面噪声较大,仍保留物体运动、机械臂轨迹和场景语义变化。动作策略读取的是潜空间特征,因此不要求生成图像达到视频展示质量。表 VIII 也显示 Mikasa-Robo 上 1、3、5 步分别为 44.4%、44.6%、43.6%,更多去噪没有形成稳定收益。

7、源码解析与开源边界

7.1、当前公开内容

官方仓库公开了两个可运行版本:

MemoryVLA/
├── openvla-codebase/              # MemoryVLA,Prismatic/OpenVLA 基线
│   ├── vla/memory_vla.py          # VLM、双流 PCMB、训练和推理
│   ├── action_model/              # DiT、扩散损失、DDIM/DDPM
│   ├── training/                  # FSDP 训练循环
│   ├── evaluation/                # LIBERO、SimplerEnv 等评测
│   ├── script/train/              # 数据集训练入口
│   └── script/eval/               # 仿真与真机评测入口
└── dexbotic-codebase/             # MemoryVLA+,Qwen2.5/Dexbotic 基线

MemoryVLA++ 的新增世界模型、FPN、Imagination Former、记忆引导融合以及完整两阶段训练/推理代码尚未公开。因此,源码部分只能对继承自 MemoryVLA 的公开路径给出代码证据;新增模块以论文公式和结构图为准,不能虚构类名、函数名或配置项。

7.2、论文模块与证据状态

论文模块 当前官方证据 可确认内容
Prismatic VLM 与双 token openvla-codebase/vla/memory_vla.py DINOv2+SigLIP 特征、SE 压缩、EOS 认知 token
PCMB 检索、门控与合并 CogMemBankPerMemBankGateFusion 历史堆叠、时间编码、两层交叉注意力、detach、容量控制
DiT 动作专家 action_model/action_model.pymodels.py DiT-L、认知条件、感知 attention、噪声 MSE、DDIM/DDPM
数据与训练 train.pytraining/strategies/base_strategy.py、RLDS 有序 episode、FSDP、梯度裁剪、checkpoint
世界模型适配 论文式 (13)-(14) SVD、操作视频、当前观测与语言条件
想象生成与融合 论文式 (15)-(22) 部分去噪、多尺度 UNet、FPN、空间/时间 attention、门控
MemoryVLA++ 完整推理 论文结构与实验说明 世界模型在测试时前向并接入动作专家;具体调用接口未公开

7.3、公开 MemoryVLA 如何初始化继承模块

下面代码来自公开的 MemoryVLA 实现,只能证明 MemoryVLA++ 所继承的 VLM、PCMB 和动作专家基础结构:

# openvla-codebase/vla/memory_vla.py :: MemoryVLA.__init__
self.per_compr = BottleneckSE(
    C_in=self.vision_dim,
    C_mid=self.per_token_size * 2,
    C_out=self.per_token_size,
)
self.cog_mem_bank = CogMemBank(token_size=self.cog_token_size, ...)
self.per_mem_bank = PerMemBank(token_size=self.per_token_size, ...)
self.action_model = ActionModel(
    model_type=action_model_type,
    token_size=token_size,
    in_channels=action_dim,
    future_action_window_size=future_action_window_size,
    use_per_attn=True,
    per_token_size=per_token_size,
)

per_compr 把拼接视觉特征压到感知维度;两类 memory bank 参数独立;ActionModel 接收认知 token、感知 token 和连续动作维度。代码中不存在 MemoryVLA++ 的 world model 或 imagination constructor,不能从这个构造函数推断新增模块的实现名称。

7.4、公开实现如何产生当前 token

# openvla-codebase/vla/memory_vla.py :: MemoryVLA.forward
last_hidden_state = output.hidden_states[-1]
last_hidden_state = last_hidden_state[:, num_patch:]
cumulative_sum = attention_mask.cumsum(dim=1)
last_true_indices = (
    cumulative_sum == cumulative_sum.max(dim=1, keepdim=True)[0]
).float().argmax(dim=1)
cog_tokens = last_hidden_state.gather(
    1, last_true_indices[:, None, None].expand(-1, 1, last_hidden_state.size(-1))
)
vision_feats = self.vlm.vision_feats
per_tokens = self.per_compr(vision_feats)

训练时先排除视觉 patch 对应的 LLM 输出,再根据 attention_mask 找最后一个有效文本位置,形成认知 token。感知 token 不从 LLM 最终隐藏状态提取,而是直接压缩视觉 backbone 特征,因此保留更细的空间信息。

7.5、公开 PCMB 的检索、融合和梯度边界

# openvla-codebase/vla/memory_vla.py :: CogMemBank.process_batch
episode_mem = torch.stack(hist_feats).reshape(-1, D).unsqueeze(0)
pe = self.timestep_encoder(hist_timesteps).unsqueeze(0)
pe = pe.repeat_interleave(N, dim=1)
query = working_mem
for block in self.retrieval_blocks:
    query = block(query, episode_mem + pe, episode_mem)
retrieved_episode_mem = query
fused_feats = self.gate_fusion_blocks(working_mem, retrieved_episode_mem)
self._memory_consolidate(eid, tokens[i], timestep_i)

历史从 [ L , N , D ] [L,N,D] [L,N,D] 展平为 [ 1 , L N , D ] [1,LN,D] [1,LN,D],时间编码重复到每组视觉 token 并只加入 key。两层检索输出与当前 token 形状一致,随后进入门控。写回路径调用 _memory_consolidate,公开默认值写入原始当前 token,而论文文字描述的是融合表示写回,这是复现时需要固定配置的差异。

# openvla-codebase/vla/memory_vla.py :: CogMemBank._memory_consolidate
self.bank[episode_id].append((timestep, feat.detach().clone()))
while len(self.bank[episode_id]) > self.mem_length:
    if self.consolidate_type == "fifo":
        self.bank[episode_id] = self.bank[episode_id][-self.mem_length:]
    elif self.consolidate_type == "tome":
        self._consolidate_with_token_merge(episode_id)

detach().clone() 切断跨历史帧反向传播,防止长 episode 保存完整计算图。检索和门控仍从当前动作损失获得梯度,但已经写入的旧特征作为无梯度记忆读取。

7.6、公开动作专家的损失与采样

# openvla-codebase/action_model/action_model.py :: ActionModel.loss
noise = torch.randn_like(x)
timestep = torch.randint(
    0, self.diffusion.num_timesteps, (x.size(0),), device=x.device
)
x_t = self.diffusion.q_sample(x, timestep, noise)
noise_pred = self.net(x_t, timestep, z, per_token=per_token)
assert noise_pred.shape == noise.shape == x.shape
loss = ((noise_pred - noise) ** 2).mean()

输入 x x x 是归一化真实动作块;代码随机采样动作扩散时间和高斯噪声,DiT 预测噪声并计算 MSE。这个公开路径证明继承动作专家的训练目标,但不能证明 MemoryVLA++ 新增模块的梯度连接细节。

# openvla-codebase/vla/memory_vla.py :: MemoryVLA.predict_action
if episode_first_frame == "True":
    self.cog_mem_bank.reset()
    self.per_mem_bank.reset()
    self.cur_timestep = 0

noise = torch.randn(B, self.future_action_window_size + 1,
                    self.action_model.in_channels, device=cog_tokens.device)
self.action_model.create_ddim(ddim_step=num_ddim_steps)
samples = self.action_model.ddim_diffusion.ddim_sample_loop(
    sample_fn, noise.shape, noise, model_kwargs=model_kwargs, eta=0.0, ...
)

新 episode 第一帧必须显式重置记忆,否则会跨任务污染。MemoryVLA++ 同样需要管理 PCMB 生命周期,同时还多一次世界模型前向;具体 API、缓存与并行策略尚无公开代码可核对。

7.7、最小环境与复现边界

公开 MemoryVLA 可按仓库 README 准备 RLDS 数据、模型 checkpoint,并从 train.pyscript/eval/* 与真机 deploy.sh 进入。典型训练使用 8 张 A100、全局 batch 256、学习率 2 × 10 − 5 2\times10^{-5} 2×105;论文新版本使用 8 张 A100 或 H20、每卡 26-32 个样本、全局 batch 208-256。

MemoryVLA++ 暂时不能仅凭公开仓库完整复现,缺失项包括:

  • SVD 操作视频适配数据处理和训练入口;
  • 部分去噪时抽取哪些 UNet 层、尺度与噪声步;
  • FPN、Imagination Former 和记忆引导融合的具体超参数;
  • 世界模型、VLA 与动作专家的 checkpoint 组合及加载逻辑;
  • 新增训练/推理脚本、显存优化和 benchmark 配置。

这不影响论文方法与实验数字的解读,但意味着不能把公开 MemoryVLA checkpoint 加载后直接称为 MemoryVLA++。

8、实验结果怎么读

在这里插入图片描述

论文覆盖 5 个仿真 benchmark、3 个机器人平台和 3 类真机任务,合计接近 200 个任务。不同结果的协议并不相同:LIBERO 每任务 50 次,SimplerEnv 每任务 24 次,Mikasa-Robo 每任务 100 episode,CALVIN 为 1000 条 rollout;真机长时序任务采用 10 次左右试验与分步计分。因此,真机 77 分不能直接解释为与仿真 77% 完全相同的二值成功率。

8.1、仿真主结果

在这里插入图片描述

Benchmark MemoryVLA++ MemoryVLA 关键口径
LIBERO 5 suites 98.4% 96.5% 130 个任务;MemoryVLA++ 对 CogACT +5.2
SimplerEnv 73.9% 71.9% BridgeData-v2;4 任务各 24 次
Mikasa-Robo 44.4% 41.2% 5 个时间任务,各 100 episode
CALVIN ABC→D 4.29 4.09 1000 rollout;平均连续完成任务数
Libero-Plus 零样本 73.1% 70.2% 7 类分布外变化
Libero-Plus SFT 82.7% 81.9% 混入 Libero-Plus 数据联合训练

LIBERO 的 98.4% 来自 Spatial 99.8、Object 100.0、Goal 98.2、Long-10 96.0 和 Long-90 97.8 的平均。SimplerEnv 四项为 83.3、66.7、45.8、100.0,平均精确值 73.9%;摘要中的 74.0% 是四舍五入。

Mikasa-Robo 更能检验时间建模:单帧输入的 MemoryVLA++ 在 Shell Game Touch 达到 97%,MemoryVLA 为 88%,此前最强单帧 VLA 为 47%。但 RememberColor5/9 上 MemoryVLA++ 为 19%/16%,并没有全面超过 MemoryVLA 的 30%/20%,说明未来想象不会自动解决所有纯记忆任务。

8.2、真机结果

在这里插入图片描述

类别 报告模型 平均得分 相对 CogACT 解释
通用操作 6 任务 MemoryVLA 85 +9 主要检验短时操作与视觉语义
记忆依赖 6 任务 MemoryVLA 83 +26 检验顺序、计数、遮挡和任务阶段
想象依赖 5 任务 MemoryVLA++ 77 +28 检验传送带运动、扫描流程和软包操作

论文只在想象依赖真机任务上报告 MemoryVLA++。通用和记忆依赖两行是 MemoryVLA 结果,不应把 85/83/77 写成 MemoryVLA++ 在三类任务的统一评测。想象依赖任务中,MemoryVLA 为 65,加入未来想象后提升到 77;其中 Conveyor Scan-Pick 从 63 到 75,Bag Pack & Zip 从 60 到 73。

8.3、想象模块消融

在这里插入图片描述

设计 对照 默认或最好结果 结论
部分去噪步数 1 步 44.4,5 步 43.6 3 步 44.6 更多去噪不稳定增益;1 步已足够有竞争力
想象 horizon 4 步 43.4,8 步 43.8 16 步 44.4 更长未来覆盖略有帮助
世界模型更新 不冻结 42.8 冻结 44.4 动作训练中保留预训练动态先验更好
融合方式 Add 41.2 Mem-Guided 44.4 需要用历史上下文筛选未来信息

记忆模块消融沿用 MemoryVLA:SimplerEnv 上认知记忆 63.5、感知记忆 64.6、二者结合 71.9;固定相加 67.7、门控 71.9;FIFO 66.7、相邻 Token Merge 71.9。真机长时序默认记忆长度 256 得分 84,64 和 512 分别为 78 和 81,容量同样不是越大越好。

8.4、效率

在这里插入图片描述

效率数据在 bfloat16、单视角输入、动作块 16、300 次运行下统计:

方法 RTX 4090 延迟 RTX 4090 吞吐 H20 延迟 H20 吞吐 显存
Baseline 0.187 s 85.6 Hz 0.236 s 67.8 Hz 15.8 GB
MemoryVLA 0.194 s 82.5 Hz 0.246 s 65.0 Hz 16.6 GB
MemoryVLA++ 0.241 s 66.4 Hz 0.301 s 53.2 Hz 21.7 GB

从 MemoryVLA 到 MemoryVLA++,RTX 4090 单次动作块延迟增加 0.047 s,显存增加 5.1 GB,主要代价来自测试时世界模型前向。表中的吞吐是动作块长度 16 换算出的动作步吞吐,不等于每秒完成 66 次完整 VLM 和世界模型推理。

9、方法价值、局限与工程判断

MemoryVLA++ 最有价值的地方,是把过去与未来设计成互补而非平行堆叠:PCMB 不仅解决状态歧义,还作为想象过滤器;世界模型不需要输出清晰视频,只需提供动作决策相关的潜特征。这样,过去、现在、未来最终在同一感知 token 空间对齐。

适合的任务包括:

  1. 当前画面无法判断已经完成到哪一步的长流程操作;
  2. 关键物体会被遮挡、移出视野或需要持续计数;
  3. 目标持续运动,抓取位置取决于到达时刻而非当前时刻;
  4. 软体物体或多阶段流程需要预估后续状态变化;
  5. 已有单帧 VLA,希望保留其视觉语言能力并增加时间建模。

局限也很明确:

  • 世界模型适配需要操作视频和 1.5B 视频扩散模型,训练与推理成本显著高于轻量记忆。
  • 想象是潜空间控制特征,不保证生成物理上精确或人眼清晰的未来;PSNR、SSIM、LPIPS、FVD 与动作成功率也不是同一指标。
  • 记忆依赖正确的 episode 边界与时间顺序,重置信号错误会造成跨任务污染。
  • PCMB 通过平均合并相似相邻条目,罕见但关键的早期信息仍可能被稀释。
  • 未来想象在 RememberColor5/9 等纯记忆任务上没有稳定优势,模块收益取决于任务是否真的需要未来动态。
  • MemoryVLA++ 新增代码、权重与数据尚未公开,论文级复现目前缺少关键配置和实现证据。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐