![]()
你有没有想过,一个机器人为什么会记不住三秒钟前发生的事?
这听起来像个笑话,但2025年之前几乎所有顶尖的机器人操作模型都是这样的健忘症患者。你让机器人玩"猜猜哪个杯子藏着球"的游戏,杯子晃来晃去之后停下,它连哪个杯子刚刚动过都不知道,因为它压根就没在看"刚才",它只盯着"现在"这一帧画面做判断。
这不是危言耸听。当前最先进的视觉-语言-动作模型(VLA*:Vision-Language-Action Model,一种把摄像头画面、文字指令和机器人动作打通训练的端到端模型,输入图像和指令,输出机器人该怎么动)比如π0.5,走的都是单帧路线。每次决策,模型只看当前这一张照片,加上一句任务指令,然后吐出动作。过去发生了什么,完全不管。
这篇来自香港大学团队的论文,名字叫StreamPI,就是冲着这个毛病去的。他们的目标很直接:让VLA模型拥有"流式记忆",但不增加一个多余的参数,训练成本也不能爆炸。
单帧模型的两个硬伤
先说说单帧模型到底差在哪。
第一个硬伤是没法处理需要"回忆"的任务。想象一个三杯猜球的经典把戏:魔术师把球藏在其中一个杯子底下,然后快速交换杯子的位置,最后让你猜球在哪。这个任务的关键信息不在当前这一帧画面里,而在于你有没有一直追踪杯子的移动轨迹。单帧模型每次只能看到杯子摆放的"当前状态",它连"哪个杯子曾经被动过手脚"这个历史事实都无法获取,就像一个失忆的观众突然被拽进电影院看到第五分钟的画面,你让他判断男主角为什么生气,他两眼一抹黑。
第二个硬伤更隐蔽,是空间感知精度不够。自动驾驶领域早就证明了一件事:把连续多帧画面拼起来看,比孤立地看一帧的深度估计准得多,因为物体的运动视差(不同角度看同一个物体产生的位置偏移)能提供额外的立体线索。这个道理放到机械臂抓取上同样成立,比如把一支笔精准插进一个很窄的瓶口,单帧图像给出的深度信息往往不够精确,你需要通过多帧观察积累出更靠谱的三维判断。
那为什么不直接把历史帧全部拼起来喂给模型?
答案是,会死得很难看。
直接堆多帧为什么行不通
论文里提到了一类"窗口式"多帧VLA方法,做法很朴素:把过去K帧图像一股脑塞进模型。这带来了两个连锁问题。
第一,计算开销随时间线性增长。序列越长,处理一帧要付出的代价越大,实时控制根本用不起。
第二,也是更致命的一点,语言指令会被"淹没"。
模型在训练时把语言指令编码成固定数量的文本token(*token*:模型处理文本或图像时切分出来的最小信息单元,可以理解成一个个"词块"或"像素块"),随着历史帧越堆越多,视觉token的数量会远远超过文本token,指令的存在感被视觉信息不断稀释,模型渐渐"忘了自己要干什么"。这就是论文里说的"指令遗忘"问题。
打个比方,这就像开一个持续三小时的会议,会议室里源源不断有人进来汇报各种琐碎细节,而会议最初设定的核心议题只被念了一遍就再也没人提起。到了会议尾声,与会者早就绕到不知道哪里去了,谁还记得最初到底要讨论什么。如果不做任何设计上的补救,模型的"注意力预算"会被视觉细节全部吃掉,指令这条主线彻底断掉。
正是这个观察,让StreamPI团队想到了他们方法的核心:把语言指令和每一帧视觉观察死死绑在一起,而不是让指令单独漂浮在序列开头孤立无援。
核心设计一:把每一帧和指令捆绑成"原子单位"
StreamPI最关键的设计,叫做指令锚定的时序建模(instruction-anchored temporal modeling)。
具体做法是,不再把"过去所有帧"和"一句指令"分开处理,而是把每一个时间步的视觉观察和语言指令打包成一个不可分割的整体,论文里称之为原子时序单元(atomic temporal unit)。
用公式表达就是,第t时刻的输入是ut = (Vt, lt),其中Vt是当前多视角的视觉观察(前视摄像头加左右手腕摄像头),lt是语言指令。注意这里的下标t,意味着即便是历史上很久之前的一帧,也依然带着一份完整的指令拷贝,而不是只在最初出现一次。
在处理这些单元的时候,StreamPI用了两种不同的注意力机制。
第一种叫双向注意力(bidirectional attention,指序列中任意两个位置的信息都可以互相看到、互相影响,不受先后顺序限制),应用在每个原子单元内部,让图像token和文本token充分互相交流,确保当前这一帧的视觉内容和指令语义能深度融合。
第二种叫因果注意力(causal attention,指信息只能从前往后流动,后面的内容看得到前面的,前面的看不到后面的,语言模型生成文字时用的就是这套逻辑),应用在不同时间单元之间,保证时序上的先后关系不被打乱,未来的信息不会泄露给过去。
这个设计的精妙之处在于,语言指令因为跟着每一帧走,永远保持"在场",不会被稀释掉。
如果打个比方,这有点像给每一份历史档案都单独附上一张便签写着"本案调查目标是什么",而不是只在档案柜最外面贴一张总说明。档案越堆越多的时候,你翻到第五十份卷宗依然能立刻看到便签提醒自己在查什么,而不需要跑回柜子最外面重新确认目标。
论文的消融实验(ablation study:通过去掉或替换某个组件,观察性能变化,从而验证该组件到底有没有用的实验方法)验证了这一点的重要性。在LIBERO仿真基准上,把原子单元内部的双向注意力换成因果注意力,随着流式帧数T从3增加到5,性能下降越来越明显,在LIBERO-Long这个长程任务集上足足掉了5.6个百分点。这说明因果注意力会阻止视觉token回头看指令,语义耦合被打断了,指令遗忘的问题又冒出来了。
核心设计二:像语言模型一样流式推理,KV缓存省下大量计算
光有指令锚定还不够,因为如果每次推理都要重新计算历史所有帧的表示,计算量还是会随时间线性增长。
StreamPI借鉴了自然语言处理领域已经很成熟的一套技巧,叫KV缓存(Key-Value Cache,把之前算过的中间结果"键"和"值"存下来,之后需要用到的时候直接调取,不用重新计算,语言模型生成长文本时普遍用这个技巧省时间)。
具体流程是这样:在最初时刻t0,模型处理当前帧,预测出动作,同时把这一帧融合后的表示存进缓存里。到了下一个时刻t1,模型只需要编码新到达的这一帧,然后让它去"查询"缓存里存好的历史表示,通过跨时间的注意力机制获取历史上下文,不需要把t0那一帧从头算一遍。算完之后,新的表示继续被追加进缓存,供未来时刻复用。
这个思路其实和NLP领域里StreamingLLM那篇论文的"注意力汇聚"(attention sink)现象和滑动窗口机制有异曲同工之处,本质上都是在解决"如何让模型处理无限长序列而不让计算量爆炸"这个问题。
这就像你去银行办业务,每次都要重新出示身份证、重新核验一遍所有历史记录,效率极低。而有了这套缓存机制,相当于银行系统提前把你之前验证过的身份信息存好了,你下次只需要提供新的那部分材料,系统自动帮你把新旧信息拼接起来判断,不用每次都从零验证。
论文里给出了具体的实测数据。在单块NVIDIA RTX 4090显卡上跑20次试验,单帧推理耗时94.4±3.4毫秒,扩展到3帧只多花了3.5毫秒,5帧多花9.2毫秒,8帧和10帧分别多花16.5毫秒和23.5毫秒左右。这意味着即便把时序上下文拉长到10帧,推理延迟依然可控,不会拖累机器人实时反应的能力。
如果不用这套流式缓存设计,直接对所有历史帧做全量重复计算,那么随着任务执行时间变长,机器人的反应速度会越来越慢,最终慢到没法在真实世界里用。
核心设计三:训练时故意加入随机时间间隔
这一部分其实是整篇论文里我觉得最"接地气"的设计,因为它解决的是一个非常朴素的工程矛盾:训练环境和真实部署环境不一样。
在实验室训练时,模型看到的历史帧往往是按固定的时间间隔采样的,比如每隔3帧取一个样本。但真实机器人部署的时候,摄像头传回来的数据流是异步的,帧与帧之间的时间间隔会受到各种硬件延迟、网络抖动的影响,根本不可能像训练时那样精确整齐。
如果模型训练时只见过"标准节奏",它就会对这个节奏产生依赖,一旦现实中的节奏乱了套,模型的判断也会跟着乱套。
StreamPI的解决方案叫随机间隔流式训练(random-interval streaming training)。具体做法是,设定一个基础帧间隔δ,然后在每次采样的时候加上一个随机扰动ε,扰动范围在[–Δ, +Δ]之间,得到实际使用的间隔δ = δ + ε,并且这个δ会被限制在[δmin, δmax]的范围内,论文里实际用的区间是[3, 7]。
除了随机间隔采样,StreamPI还加了一个叫时序掩码(temporal masking)的技巧:给定完整的T帧序列,随机决定要遮掉最早的k帧,只留下最近的T–k帧可见,模拟真实流式推理中"信息逐渐到达"的场景。
这就好比训练一个急救医生,如果平时演练时救护车永远精确掐着5分钟一班准时到达,医生形成的反应节奏就会锁死在这个假设上。真到了大堵车、救护车忽早忽晚的时候,医生反而会因为节奏被打乱而手忙脚乱。而如果训练时故意让救护车到达的时间随机变化,医生练出来的判断力自然更能适应现实里各种意外情况。
实验数据证实了这个设计的价值。在LIBERO基准上,固定间隔δ=1训练出来的模型,在流式帧数T=3时平均成功率是96.4%,而用随机间隔训练之后提升到97.5%,T=5时更是从97.0%提升到98.3%,长程任务上的提升尤其明显。
一个没有增加任何新参数的架构
这里有个容易被忽略但其实非常关键的细节:StreamPI没有引入任何新的网络参数。
它的整套时序建模能力,完全是通过重新设计注意力掩码(attention mask,控制序列中哪些位置可以互相看见、哪些位置被屏蔽的一张"遮罩")实现的,本质上是在原有的π0.5骨干网络上做"重新布线",而不是嫁接一个额外的视频编码器。
这一点为什么重要?因为很多多帧方法为了压缩时序信息,会额外引入一个专门的视频编码模块,但新模块的参数初始化和特征分布往往和原本强大的预训练模型对不上,容易破坏掉预训练阶段辛苦学到的视觉语言对齐能力,论文里称之为"表示污染"问题。
StreamPI绕开了这个坑,靠的是大语言模型骨干本身具备的长度外推能力(length extrapolation,指模型在训练时只见过较短的序列,但推理时能够处理比训练时更长的序列,依然保持合理表现的能力)。具体做法是扩展输入token序列的位置编码,让模型自然地把多帧输入当成一个更长的序列来处理,同时用前面讲到的那套层级注意力掩码,约束模型只能按时间顺序因果地看待这些帧。
这样一来,StreamPI可以直接继承π0.5所有的预训练权重,不需要从头训练,也不需要担心新参数带来的分布偏移问题,而且天然支持灵活的单帧和多帧推理切换,同一个模型既能像原来的π0.5一样单帧跑,也能开启多帧模式获得时序增益。
真实机器人实验:记忆类任务和精细操作任务都有明显提升
论文在真实机械臂(AgileX PiperX六自由度机械臂,采用Aloha式的主从臂设计,一个前视摄像头加两个手腕摄像头)上做了四个任务的对比实验,分成两大类。
第一类叫记忆依赖型任务。第一个任务是"猜杯子游戏"(Shell Game),机器人先看到一个物体被藏在某个杯子下面,杯子被打乱位置之后,机器人要凭着记忆找出正确的那个杯子。π0.5在这个任务上的成功率是46.7%,StreamPI提升到了80.0%,提升幅度33.3个百分点。第二个任务是抓取滚动的物体,机器人需要追踪一个持续移动的瓶子并在合适时机出手抓住,π0.5成功率26.7%,StreamPI提升到63.3%,提升36.6个百分点。
第二类叫精细感知依赖型任务。一个是把笔精准插进窄瓶口,π0.5成功率40.0%,StreamPI提升到66.7%。另一个是把纸杯精准放进杯套里,π0.5成功率60.0%,StreamPI提升到92.0%,尤其是在杯套位置比较远的情况下,π0.5几乎判断不准距离,而StreamPI依然能保持较高准确率。
这四个任务的提升幅度都在26到37个百分点之间,这不是那种"提升了0.5%可以忽略不计"的小打小闹,而是实打实的能力跃迁。
仿真基准和长程任务测试
除了真实机器人,团队还在两个业内公认的仿真基准上做了系统评测。
在LIBERO基准(包含Spatial、Object、Goal、Long四个任务套件,每个套件10个任务,每个任务测50次)上,StreamPI在T=5配置下取得了98.3%的平均成功率,比π0.5的96.9%高出1.4个百分点。这个提升听起来不大,但要知道LIBERO基准已经被各路方法刷到接近饱和了,π0.5本身就已经站在95%以上的高位,在这种情况下再往上挤出1.4个百分点其实相当不容易。而且提升最明显的地方正好是LIBERO-Long,这个套件专门考察需要执行多个连续子任务的长程记忆能力,StreamPI在这上面比π0.5高出2.6个百分点,恰好印证了论文的核心主张:时序记忆能力对长程任务的帮助是实实在在的。
有意思的是,LIBERO-Spatial套件上StreamPI没有提升。作者的解释是,这个套件的任务成功与否往往取决于静态的空间关系,这些信息单帧图像已经能提供得很充分,额外引入的时序上下文反而可能带来一些和最终判断无关的中间运动噪声。这个诚实的负面结果挺难得的,说明时序建模不是万能药,得看任务本身需不需要"回忆"。
在CALVIN基准(一个要求连续执行最多5个子任务的长程操作测试集)上,StreamPI的表现更加突出。平均连续完成的任务长度达到4.547,明显超过π0.5的4.313和另一个专门做记忆机制的方法MemoryVLA的4.090。更值得注意的是,随着任务序列往后推进,MemoryVLA的成功率下降得特别厉害,从第一个任务的94.8%一路跌到第五个任务的69.4%,而StreamPI在第五个任务上依然保持85.0%的成功率。这说明有些专门设计的记忆机制在长序列上会积累误差,反而不如StreamPI这种更简洁的因果流式结构稳健。
跨帧数泛化:训练时用5帧,推理时能不能少用几帧
论文还测试了一个很实际的问题:如果模型训练的时候用的是T=5帧,那么部署时如果因为某些原因只能提供更少的帧数(比如T=3或T=1),模型还能不能正常工作?
结果显示,用T=5训练的模型在T=3时评测,性能只有轻微下降,说明模型确实学到了一些能够在信息不完整时依然发挥作用的时序模式。在T=1(相当于退化成单帧模式)时性能下降更明显一些,但依然优于原始的π0.5单帧基线。这说明即便在推理时没有历史帧可用,训练阶段学到的时序结构依然能提供一些残余收益,模型不会因为部署条件变化而彻底失灵。
这篇论文之后,会往哪个方向走
StreamPI这篇论文本身建立在几条脉络之上。
比如π0系列本身,2024年的π0首次把flow-matching动作头和VLM骨干解耦,实现了兼顾语义推理和高频灵巧控制的能力,2025年的π0.5进一步扩大数据规模和任务泛化性,但两者都停留在单帧范式上。StreamPI正是在π0.5的基础上做时序扩展,这也是为什么论文反复强调"零新增参数"和"完全继承预训练权重",因为它本质上是给π0.5打了一个时序补丁,而不是另起炉灶。
另一条脉络是CronusVLA(2026年AAAI),这篇工作系统性地探索了多帧VLA的设计空间,证明历史观察确实能给需要空间精度的任务带来实质收益,但它没有解决指令随时间被稀释的问题。还有MemoryVLA,专门设计了感知认知记忆机制,但从CALVIN基准的实验结果看,这类专门记忆模块在长序列上反而更容易积累误差,这恰恰反衬出StreamPI那种"指令随帧走"的朴素设计的稳健性。
论文作者自己也坦承了局限。训练阶段需要把所有帧都加载进显存,如果要处理超过100帧的超长时序窗口,训练成本会变得难以承受。另外,随机间隔训练虽然提升了对帧率变化的鲁棒性,但没能完全覆盖真实部署中极端的异步情况。他们提到未来打算引入自适应KV缓存剪枝,在超长时序场景下维持表示质量,同时把额外推理开销压到最低。
写在后面
读完这篇论文,最让我意外的一点是,解决"机器人没有记忆"这个听起来需要复杂新架构的问题,答案居然是重新设计一张注意力掩码。没有新的编码器,没有新的记忆模块,就是把语言指令和每一帧图像死死绑在一起,再借用语言模型早就有的KV缓存机制。有时候最难的不是造一个新轮子,而是想明白问题出在旧轮子的哪个螺丝上。
另一个让我反复琢磨的细节是LIBERO-Spatial上没有提升那部分。研究者完全可以对这个结果闭口不谈,或者找个理由圆过去,但他们诚实地写出了"静态空间关系单帧已经够用"这个解释。这种愿意承认方法边界的态度,比一味吹嘘全面提升更让人信服。
如果一个方法真的有效,它应该在有需要的地方发光,在不需要的地方保持沉默,而不是到处都号称提升。这或许才是判断一项技术是不是真扎实的一个朴素标准。
Q&A
Q1:StreamPI是什么?
A:StreamPI是香港大学团队提出的一种流式多模态时序建模框架,能让原本只处理单帧图像的π0.5等视觉-语言-动作模型获得记忆历史观察和精细空间感知的能力,而且不需要增加任何新的模型参数。
Q2:StreamPI是如何解决"指令被遗忘"这个问题的?
A:StreamPI把每一帧视觉观察和语言指令打包成一个不可分割的原子单元,指令始终跟随每一帧存在,不会因为历史帧越堆越多而被稀释掉,同时用双向注意力做帧内融合、因果注意力做跨帧建模。
Q3:StreamPI相比π0.5单帧模型在真实机器人任务上提升有多大?
A:在猜杯子游戏、抓取滚动物体、插笔入瓶、杯子入套四个真实任务上,StreamPI的成功率比π0.5分别提升了33.3、36.6、26.7和32.0个百分点,在LIBERO和CALVIN仿真基准上也均有稳定提升。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.