《VLA 系列》MemoryVLA++ | 感知-认知记忆 | 潜空间未来想象 | 论文与源码边界解析
单帧 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} Iv∈RH×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 从左到右分成四段:
- 当前 RGB 与指令进入 7B Prismatic VLM,形成感知 token p p p 和认知 token c c c。
- 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~。
- 冻结世界模型对未来视频潜变量做部分去噪,多尺度特征经 FPN 和 Imagination Former 压缩为 z i m g z_{\mathrm{img}} zimg; p ~ \tilde p p~ 负责筛选其中相关内容。
- 完整时间感知 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={p∈RNp×dp, c∈R1×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={mx∣x∈{p,c}},mx={mix∈RNx×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(dxqx(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~=gx⊙Hx+(1−gx)⊙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,…,L−1maxcos(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) mix∗x←21(mix∗x+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)−x0∥22]
| 符号 | 含义 | 注意事项 |
|---|---|---|
| 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),z∈RK×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} Us∈RK×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ˉ=g⊙p~+(1−g)⊙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++ 需要区分两个训练阶段:
- 世界模型适配:输入当前图像、语言和真实未来视频,训练 SVD 学习机器人操作动态,优化 L w m \mathcal{L}_{\mathrm{wm}} Lwm。
- 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 为例,一次决策链可以拆成:
- 当前相机看到物体正沿传送带移动,VLM 产生 p p p 与 c c c。
- PCMB 检索此前物体运动轨迹和已经扫描过的物体,形成 p ~ \tilde p p~、 c ~ \tilde c c~。
- 冻结世界模型在潜空间想象未来 16 步的物体与机械臂演化;部分去噪已经提供运动趋势,不必解码清晰视频。
- p ~ \tilde p p~ 查询想象 token,保留与即将到达的抓取位置相关内容,抑制背景或错误预测。
- 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 检索、门控与合并 | CogMemBank、PerMemBank、GateFusion |
历史堆叠、时间编码、两层交叉注意力、detach、容量控制 |
| DiT 动作专家 | action_model/action_model.py、models.py |
DiT-L、认知条件、感知 attention、噪声 MSE、DDIM/DDPM |
| 数据与训练 | train.py、training/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.py、script/eval/* 与真机 deploy.sh 进入。典型训练使用 8 张 A100、全局 batch 256、学习率 2 × 10 − 5 2\times10^{-5} 2×10−5;论文新版本使用 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 空间对齐。
适合的任务包括:
- 当前画面无法判断已经完成到哪一步的长流程操作;
- 关键物体会被遮挡、移出视野或需要持续计数;
- 目标持续运动,抓取位置取决于到达时刻而非当前时刻;
- 软体物体或多阶段流程需要预估后续状态变化;
- 已有单帧 VLA,希望保留其视觉语言能力并增加时间建模。
局限也很明确:
- 世界模型适配需要操作视频和 1.5B 视频扩散模型,训练与推理成本显著高于轻量记忆。
- 想象是潜空间控制特征,不保证生成物理上精确或人眼清晰的未来;PSNR、SSIM、LPIPS、FVD 与动作成功率也不是同一指标。
- 记忆依赖正确的 episode 边界与时间顺序,重置信号错误会造成跨任务污染。
- PCMB 通过平均合并相似相邻条目,罕见但关键的早期信息仍可能被稀释。
- 未来想象在 RememberColor5/9 等纯记忆任务上没有稳定优势,模块收益取决于任务是否真的需要未来动态。
- MemoryVLA++ 新增代码、权重与数据尚未公开,论文级复现目前缺少关键配置和实现证据。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)