前言
过去的半个多月
- deepseek火爆全球,我对其的解读也成了整整一个系列
详见《火爆全球的DeepSeek系列模型》,涉及对GRPO、MLA、V3、R1的详尽细致深入的解读
某种意义来讲,deepseek 相当于把大模型的热度 又直接拉起来了——相当于给大模型续命,不然,去年大模型的热度 还不如具身智能 - deepseek之外,具身智能也一直在稳定加速,但如果不小心 则会漏掉很多重要信息——比如π0「详见《π0——用于通用机器人控制的VLA模型:一套框架控制7种机械臂(基于PaliGemma和流匹配的3B模型)》」到底还是开源了,开源于25年2.4日..
如此,我也算是被打脸了,因为我曾在发表于25年1.11日的这篇《一文通透OpenVLA及其源码剖析》文章里说
“一个多月前,有朋友曾说,一个月内,π0 会开源来着,当时虽然觉得不太可能,但还是抱着期待,可还是没开..
没开源必然是有点遗憾,故这两天我一直在考虑、对比,看目前哪个vla最逼近π0,然后借鉴π0的思路,去改造该vla”
且顺藤摸瓜,才发现,原来π0背后公司还发布了一个FAST版的模型:π0_FAST,且也把其一块开源了
本次π0开源的blog介绍:Open Sourcing π0
本次π0及π0-FAST的GitHub地址:github.com/Physical-Intelligence/openpi 本文便来解读下这个π0_FAST,之后再解读下他们的源码——相当于π0系列 也会至少写三篇文章,上一个有3篇或以上文章的具身系列则是iDP3,这两个架构 我个人都非常看好,落地潜力都很大
进一步讲,以上的「大模型和具身」这两大热点是否可以结合呢?当然可以的,比如deepseek也是可以赋能具身智能的——其与具身结合潜力比较大的一点是:其推理速度比标准transformer更快
- 我司七月在线在q1会尝试一些相关工作,毕竟应用落地爆发 才能真正推动社会,大模型与具身的结合,便是一大应用方向
- 而对于本文的主角π0及π0-FAST,他俩的开源意味着我们今年q1在具身方面的一些落地工作,对于被微调模型的选择上,便多了一个——如此,好事一件啊
最后,写本文的时候,和解读其他模型一样,内容上 我并没有严格按照原论文本身的顺序来,原因在于
- 一般论文的摘要、引言、相关工作都是一个个独立的部分,是可以单独拎出来理解的,所以这几个部分之间 会不可避免的有所重叠或重复
- 而本文是作为一个整体呈现在大家面前的,所以会去掉这类重复,尽可能简洁、紧凑、清晰
可能这也是很多人喜欢看我博客 胜过喜欢看原论文的原因之一吧
第一部分 π0-FAST:针对VLA模型的高效动作token化技术
1.1 背景与整体介绍
1.1.1 VLA模型及其动作表示
最近,多项研究开发了通用机器人策略[9-RT-1,51-Octo,6-Roboagent,10-Rt-2,20- Scaling cross-embodied learning:One policy for manipulation, navigation,39-Openvla,62-Scaling proprioceptive-visual learning with heterogeneous pre-trained transformers,11- Gr-2]
这些策略是在越来越大的机器人学习数据集,比如
- 52-Open-X
- 38-Droid: A large-scale inthe-wild robot manipulation dataset
- 60- BridgeData v2: A dataset for robot learning at scale
- 24-Rh20t: A comprehensive robotic dataset for learning diverse skills in one-shot
- 47-Roboturk
- 35-Dexmimicgen
上进行训练的
训练通用策略的一种有前途的方法是视觉-语言-动作模型VLAs,包括且不限于
- 10-Rt-2
- 17- Open X-Embodiment: Robotic learning datasets and RT-X models
- 39-Openvla
- 67-Robotic control via embodied chain-of-thought reasoning
- 7-π0
- 63-Tinyvla
- 73-Tracevla: Visual trace prompting enhances spatial-temporal awareness for generalist robotic policies
- 71- 3dvla: A 3d vision-language-action generative world model
- 13-NaVILA: Legged Robot VisionLanguage-Action Model for Navigation
- 11-GR-2
这些模型是在互联网上规模庞大的图像和文本数据上预训练的,用于机器人控制
上面大部分模型 都已在本博客中详尽深入细致的解读过,详见:视觉语言动作机器人:从Robotics VLM到VLA
这有多个好处:
- 使用具有数十亿参数的大型视觉-语言模型骨干,为拟合大型机器人数据集提供了必要的表达能力
- 重用在互联网规模数据集上预训练的权重还提高了VLAs遵循多样化语言命令和泛化的能力,例如,适应新对象和场景背景[10,39,67,63,36- Beyond sight: Finetuning generalist robot policies with heterogeneous sensors via language grounding]
总之,大型、高容量的Transformer模型在从头开始捕获复杂且可泛化的机器人行为方面可以非常有效[8-Rt-1,69-ALOHA ACT,51-Octo,6-Roboagent,20-Scaling cross-embodied learning: One policy for manipulation, navigation, locomotion and aviation,62-Scaling proprioceptive-visual learning with heterogeneous pre-trained transformers]
可以使用在互联网规模的图文语料库上预训练用于下一个token预测的模型[10-Rt-2,39-Openvla——这两都是使用下一个token预测技术独立预测动作token,63-Tinyvla-将一个基于扩散的头部附加到预训练的多模态模型上,以直接输出机器人动作,7-π0,65-Latent action pretraining from videos]
然而,这些模型需要选择连续动作信号的分词方式,这决定了模型预测的离散符号需要考虑如何映射到连续的机器人动作[64-Elastictok:Adaptive tokenization for image and video,34-Efficient long video tokenization via coordinated-based patch reconstruction,41-Behavior generation with latent actions,12-Beats: Audio pre-training with acoustic tokenizers]
关于分词——分词方法的选择对模型训练和下游性能有显著影响[55]。虽然有多项研究探索“无分词”语言模型的训练[28,53-Byte latent transformer: Patches scale better than tokens],这些模型直接在bit流上操作,但目前大多数语言模型在训练前依赖文本分词阶段
1.1.2 此前的分词技术及其遇到的挑战
对于VLA训练的动作表示,先前的研究探索了用于训练机器人策略的各种动作参数化,包括VLA
- 一种研究方向使用“语义”动作表示,例如语言子任务[21-Palme,2-2-Do as i can and not as i say: Grounding language in robotic affordances,4-Rt-h: Action hierarchies using language]
或关键点
50-Pivot: Iterative visual prompting elicits actionable knowledge for vlms
32-Rekep: Spatio-temporal reasoning of relational keypoint constraints for robotic manipulation
25-Moka: Open-world robotic manipulation through mark-based visual prompting
19-Keypoint action tokens enable in-context imitation learning in robotics
这种方法通常可以从少量示例中学习,甚至可以在没有任何机器人示例的情况下零样本执行任务[50,32,25],但需要手工设计的低级控制器来执行任务,限制了其通用性 - 另一种方法是直接训练VLA以在给定图像和语言指令输入时输出低级机器人控制命令
最常见的设计是将动作直接嵌入到离散的token中,可以通过标准自回归序列模型生成,就像任何流行的视觉语言模型一样
而好的分词选择对序列模型的性能至关重要[55-GPT2,57-Neural machine translation of rare words with subword units]
此类先前的机器人策略通常使用基于每维度、每时间步的分箱方案的简单分词策略[9,10-Rt-2,39-Openvla]——将连续的机器人动作映射到离散的动作token
但作者发现,当学习具有高频控制的灵巧技能时,这种方法表现不佳「即这种方案在扩展到高频机器人控制任务时遇到了困难」(见下图图2,右) 且作者注意到,在预测未来动作序列(即动作“组块”)时,时间步之间的相关性对于简单的token化策略来说是一个重大挑战,这在高频控制中很常见
因为高度相关的动作token会削弱自回归视觉语言模型中使用的下一个token预测目标的效果
直观地说,在这种情况下,低token预测损失通常可以通过简单地复制最近的动作token来实现,这使得模型处于较差的局部最优状态
相比之下,作者提出了一种基于时间序列压缩技术的新的FAST token化方案,允许在高频数据上训练自回归VLA - 此外,虽然还有许多研究也提出了token化的替代方案,例如通过使用回归头或引入新的权重进行扩散解码[20-Scaling cross-embodied learning:One policy for manipulation, navigation, locomotion and aviation,7,41-Behavior generation with latent actions,63-Tinyvla]
但作者的方法不需要修改底层的预训练变压器模型,可以轻松应用于任何预训练的自回归变压器模型,并在许多任务上实现了与最先进的基于扩散的VLA[7-即π0]相媲美的性能,同时训练时计算效率显著提高 - 另一组相关研究探索了向量量化动作表示[41-Behavior generation with latent actions,3-Minivla: A better vla with a smaller footprint,49-Quest: Self-supervised skill abstractions for learning continuous control]
这些方法训练了一个向量量化的编码器-解码器网络,其重建质量对超参数选择和结构敏感[66-Magvit: Masked generative video transformer]
可结果发现这些方法在粗略、低保真重建任务中表现良好,但在需要细粒度控制的高频任务中失败
相比之下,FAST token化方案具有很少的超参数,并且能够在提供强大压缩特性的同时高精度地重建动作
1.1.3 高效分词技术:能在灵巧和高频率机器人数据下训练自回归VLA
总之,在这项工作中,作者从基本原理出发,提出了一种新的分词策略
- 他们的关键见解是机器人动作信号在训练前需要被压缩,以减少连续token之间的相关性
从基于压缩的分词策略中汲取灵感,比如语言模型常用的字节对编码方法[27,57]——通过合并频繁出现的token序列为新token来压缩输入文本 - 然而,由于机器人动作是连续的,相应的压缩策略应相应选择。因此,他们的方法基于离散余弦变换(DCT)编码,这种方法广泛用于压缩连续信号,如图像(例如 JPEG 压缩)
且发现如此所得的分词方法,频率空间动作序列分词(FAST),使他们能够通过简单的下一个token预测(见上图图 2,左)训练自回归 VLA 策略,用于高灵巧度和高频率任务——而对应的标准离散化方法完全失败 - 此外,FAST 首次实现了在最近引入的DROID 数据集 [38] 上高效的 VLA 训练,这是一个大规模多任务“野外”机器人操控数据集
所得策略是第一个可以在未见环境中成功进行零样本评估的语言条件通用操控策略,只需用自然语言提示即可 - 且基于FAST,作者还开发了FAST+,一种通用的机器人动作分词器,训练于100 万真实机器人动作轨迹,涵盖了多种机器人形态、动作空间和控制频率
他们证明了FAST+分词器能够有效地对各种机器人动作序列进行分词,从单臂到双臂和移动机器人,并且是训练自回归VLA 模型的良好现成分词器
另,当与π0 VLA 集成时,基于FAST 的自回归VLA 可以扩展到训练10000 小时的机器人数据,并在各种任务中实现与基于扩散的VLA 相当的性能,同时将训练时间减少多达5 倍
1.2 从问题表述到token化如何影响VLA训练
1.2.1 初步准备与问题表述
首先,作者的目标是训练策略,将观察映射到未来机器人动作序列
- 他们假设策略输出一个”动作块”[69-ALOHA ACT,40-Action chunking as conditional policy compression],即H 个动作的序列[15-Diffusion policy,7-π0,69]
这使得产生时间一致的动作更容易,并减少复合错误 - 动作tokenization的目标是定义一个映射,从连续动作序列(维度为|A|)到大小为|V| 的词汇表中的n 个离散token
注意,token的数量n 可能在动作序列之间不同,就像长度相同的句子可能被tokenized为可变数量的文本token一样
其次,对于基于分箱的动作tokenization
动作tokenization中最常用的方法是简单的分箱离散化方案[8,10-Rt-2,39-Openvla,72-3dvla,56-A generalist agent]
- 对于给定的动作a,该方法独立地对每个维度进行离散化,将训练数据集中的值范围划分为N 个均匀的箱,最常用的是使用N =256
- 对于一个D 维动作序列a1:H,这种标记方案将应用于每个时间步,最终得到的token序列为
对于高频率的机器人数据,这种tokenization方案是次优的:它很容易为每个动作块产生数百个token,从而使训练变得具有挑战性并导致推理速度缓慢
For high-frequency robot data, this tokenization scheme is sub-optimal:it can easily produce hundreds of tokens per action chunk,which make training challenging and lead to slow inference
1.2.2 案例研究:token化如何影响VLA训练
为了更好的说明,对于RT-2和OpenVLA使用那种动作tokenization方法训练自回归策略的所面临挑战,作者举了一个案例「这个案例问题反映了在高频动作块上训练的策略所面临的挑战,这些策略必须在给定某些条件信息的情况下预测一系列连续动作」
- 首先,创建一个合成时间序列数据集,其目标是预测一个立方样条,该样条插值四个随机生成的点(见图3,底部)
下图左侧是以前的自回归 VLA(如 RT-2 [10]、RT-2-X [52] 和OpenVLA [39])使用的每维度分箱方案进行比较——那种方案被称native tokenization
下图右侧是FAST所采取的tokenization - 如果使用以前VLA策略中采用的简单tokenization方案对目标序列进行tokenize,该方案将序列中的每个元素分别离散化为256个区间中的一个
然后,训练一个小型自回归transformer策略,在给定条件点的情况下预测tokenized信号
他们针对目标信号的不同采样率重复此实验,从每个序列的25到800个时间步长不等,而不更改基础数据集,这模拟了在不同频率收集的动作数据上训练自回归策略
在不同频率下训练的自回归模型的平均预测均方误差(MSE)如下图图3顶部所示(“简单”)——可以看出来,在DCT压缩目标token上训练自回归模型在各种采样频率下始终保持较低的预测误差 - 他们观察到,使用分箱tokenization的模型在低采样率下实现了良好的预测性能(即低MSE)
但随着采样率的增加,预测误差急剧增加,直到最终模型仅复制第一个动作,如下图图3左下角的定性可视化所示 请注意,这个问题不能归因于数据本身:底层数据分布的复杂性没有改变,作者预计具有相同容量并在相同步数下训练的模型将在所有采样率下实现可比的性能
the complexity of the underlying data distribution does not change, and we would expect a model with the same capacity trained for the same number of steps to achieve comparable performance across all sampling rates
那么,究竟发生了什么
要理解分词方案如何影响学习性能,需要查看学习目标本身。从根本上说,自回归模型被训练为在给定所有先前token的情况下预测下一个token
因此,它们的学习信号与 给定的边际信息内容成正比
- 关键是,当使用简单的每时间步分词方案时,随着训练信号的控制频率增加,这种边际信息趋近于零
对于平滑信号,随着时间步变短,每个时间步的变化按比例减少。这极大地减慢了训练期间的收敛速度,并可能使拟合复杂的高频数据集具有挑战性 - 实际上,此类挑战在之前的工作中已有观察。例如,OpenVLA 在低频的BridgeV2 和RT-1 数据集上效果良好,但在拟合高频的DROID 数据集时遇到了困难[39]
因此,这个案例的研究结果强调了为机器人动作设计更好分词方案的重要性
1.3 通过时间序列压缩实现高效动作Tokenization
经过上文可知,高频动作轨迹中的冗余可能导致每个动作token的边际信息量低,从而导致训练性能不佳
为了解决这个问题,需要一种tokenization方法,将高度冗余的动作信号压缩成较少数量的高信息量token
在本节中,按照原论文的描述,将首先介绍一种压缩连续时间序列的简单方法,然后使用它来设计一个动作tokenization算法,最后解释我们如何训练一个通用的机器人动作tokenizer
1.3.1 基于离散余弦变换的时间序列压缩
关于有效压缩连续时间序列的研究已有丰富的工作,从将信号转换到频域后进行压缩的方法[18,1,61] 到基于矢量量化的学习压缩方法[59,48]
他们工作的一个关键结论是,任何足够有效的压缩方法在应用于动作目标时,都适合于提高VLA模型的训练速度。在实践中,仍有一些因素可能导致作者偏向于某些压缩算法而非其他算法,例如训练分词器的复杂性,以及其在动作的分词和去分词上的效率如何
在π0-FAST中,作者使用了一种基于离散余弦变换(DCT)的压缩算法[1-Discrete cosine transform]。DCT是一种频域变换,它将连续信号表示为各种频率的余弦元素之和
- 低频捕捉信号的整体形状,而高频分量反映出急剧的跳变。由于其简单性和计算效率,以及对实际图像的强压缩特性,DCT是一种常用的压缩算法转换,例如用于JPEG图像压缩[61-The jpeg still picture compressionstandard]
- 且因为像素通常变化平滑,DCT通常可以用少数系数表示输入信号的大部分信息。信号可以通过省略低权重的频率分量来压缩
总之,与基于矢量量化的学习压缩方法相比,基于DCT的压缩是一种解析方法,因此极其简单和快速
1.3.2 FAST分词算法:结合离散余弦变换DCT和字节对编码BPE压缩动作块
如此,作者使用离散余弦变换来设计FAST,这是一种快速有效的机器人动作tokenization方法。我们在下图图4 中详细介绍了从原始机器人动作到动作tokens的步骤「给定一个标准化的动作块,应用离散余弦变换(DCT)将信号转换到频域。然后,对DCT系数进行量化,并使用字节对编码(BPE)将每个维度的DCT系数扁平化序列压缩成最终的动作token序列」
- 首先对输入动作进行标准化,使得每个动作维度在训练数据集中第1 和第99百分位的值映射到范围[−1, . . . , 1]
这个初始标准化步骤有助于将数据带入指定范围,并且还使得具有不同动作尺度的跨实体数据集的标记化更为容易
且使用分位数来应对大型机器人数据集中偶尔出现的异常动作 - 在数据标准化后,作者对每个动作维度分别应用离散余弦变换DCT
为了压缩DCT 转换后的信号,可以简单地省略不重要的系数,这通过一个缩放和舍入操作来实现,其中缩放系数是一个超参数,用于在tokenization操作的损失性和压缩率之间进行权衡 - 在舍入操作之后,DCT系数矩阵通常是稀疏的,大多数条目为零,每个动作维度仅保留少数几个重要系数
- 为了真正实现压缩,必须将这个稀疏矩阵转换为一系列密集的token
故将矩阵展平为一个一维的整数向量,通过首先包括所有低频分量来交错动作维度,并训练一个字节对编码(BPE)分词器 [27] 来无损地压缩成密集的动作token - BPE 步骤“压缩”了零值分量,并在动作维度上合并了频繁出现的系数组合
当然了,之所以选择 BPE来压缩 DCT 矩阵,因为有许多高效的实现,并且它可以生成一个固定大小的输出词汇表,可以轻松集成到现有的视觉-语言模型词汇表中以进行VLA 训练
此外,其他无损压缩算法,如霍夫曼编码[33] 或 Lempel-Ziv 方法 [75](gzip 压缩方法背后的算法)也可以使用——作者表示 将来考虑
另,作者在算法1中简要总结了他们的tokenization方法,并在原论文的第VI节测试了FAST tokenization在机器人控制问题上的有效性
此外,请注意,在BPE编码之前对DCT系数矩阵进行展平的顺序可能对策略训练产生重大影响——即上述步骤的第4步
且其有两种选择:
- 列优先展平,即首先连接每个维度的最低频率分量
- 或者行优先展平,即首先连接单个动作维度的所有频率分量
作者选择前者,因为他们发现,在自回归预测期间首先预测表征输出序列整体形状的低频分量会导致更稳定的策略展开——We choose the former, since we find that predicting the low-frequency components, that characterize the overall shape of the output sequence, first during autoregressive prediction leads to more stable policy rollouts.
如此,tokenization流程中的所有操作都易于逆转,允许快速解码预测的动作
tokenizer只有两个超参数:在舍入之前应用于DCT系数的比例和BPE压缩步骤的词汇量大小。作者发现这两个参数都不太敏感,并且在所有的单数据集tokenization实验中使用相同的值(舍入比例10,BPE词汇量大小1024)。这与依赖于矢量量化的端到端学习压缩模块形成对比
这些网络通常训练起来很繁琐,并且需要仔细选择特定于数据集的超参数才能实现良好的重建效果。作者的实验表明,作者基于DCT的标记化方法比基于VQ的方法训练出性能更高的策略,同时显著更简单且更容易调整
且通过实验证明了在「1.2.2 案例研究:token化如何影响VLA训练」的研究示例中,基于DCT的tokenization的好处
下图图3显示,在DCT压缩目标token上训练自回归模型在各种采样频率下始终保持较低的预测误差
1.3.3 通用机器人动作tokenizer:FAST+
FAST分词器的唯一学习组件是 BPE 编码器的词汇表,这需要为每个新数据集进行训练,以便应用该分词器
虽然这个学习过程很快(通常只需几分钟),但它增加了使用 FAST 分词的额外负担。因此作者希望再训练一个通用动作分词器,它可以对来自任何机器人的动作片段进行编码
- 为此,作者使用上述流程在一个大型跨形态机器人动作数据集上训练分词器,该数据集由大约一百万个1秒的动作片段组成,涵盖单臂、双手和移动操作机器人,具有关节和末端执行器控制动作空间以及各种控制频率——他们在附录A中详细列出了用于训练通用分词器的数据混合物
对于许多数据集,他们包括了多个动作空间参数化版本:联合空间、末端执行器世界框架和末端执行器摄像头框架,以确保生成的分词器的通用性。Open X-Embodiment [52]、DROID [38] 和 Bridge V2 [60] 以其原始形式包含在内
另,在分词之前,所有动作都填充到32维,以适应不同维度的动作空间 - 一旦训练完成,通用动作分词器FAST+可以作为一个黑箱分词器应用于任何机器人设置的1秒动作序列。且实验评估显示,它与为单个数据集调优的分词器具有竞争力
且发布了该预训练通用动作分词器的代码,在一个方便的HuggingFaceAutoProcessor类中,使得在三行代码中轻松将分词器应用于任何新的机器人动作块:
为了获得最佳压缩效果,作者建议将输入动作通过分位数归一化方法标准化到范围[-1, ..., 1],如第V-B节《1.3.2 FAST分词算法》所述,并一次性对1秒的动作块进行tokenizingfrom transformers import AutoProcessor tokenizer = AutoProcessor.from_pretrained("physical-intelligence/fast",trust_remote_code=True ) tokens = tokenizer(action_chunk)
他们的模块还使得在给定的数据集中训练新的FAST tokenizer变得容易from transformers import AutoProcessor tokenizer = AutoProcessor.from_pretrained("physical-intelligence/fast",trust_remote_code=True ) new_tokenizer = tokenizer.fit(action_dataset)
第二部分 实验:对FAST标准版和通用版的评估
在他们的实验中,他们使用两个VLA 主干测试FAST:π0 [7] 和OpenVLA [39]。且将FAST 与替代动作tokenization方案进行比较,并分析关键设计决策
然后,将使用FAST tokenization训练的π0 模型与最先进的π0 流匹配(扩散)VLA 进行比较,并使用 FAST 对具有 10000 小时灵巧机器人操作数据的大型跨实体数据集进行自回归 VLA 训练的扩展性测试——
即test the scaling of autoregressive VLA training with FAST to large, cross-embodied datasets with 10k hours of dexterous robot manipulation data.
2.1 实验设置
2.1.1 policy实施
作者基于流行的VLA骨干网络,对于自回归VLA训练测试不同的分词方案
- 在作者的大多数实验中,作者使用π0[7],如本文开头所述,这是一种基于PaliGemma-3B [5]的VLA
- 且还测试了OpenVLA[39],它基于Prismatic 7B [37]构建
在训练过程中,作者对1秒的动作片段进行分词,并按照先前的VLA [10-Rt-2,39-Openvla]的做法,用结果动作token覆盖VLM词汇表中使用最少的token——这句话 我感觉反过来 更合适
且作者微调用于机器人动作预测的VLA模型,不冻结权重
作者在附录C中提供了有关策略训练设置的更多详细信息
- 具体而言,作者使用π0[7]和OpenVLA[39]骨干网络训练策略。根据任务的不同,策略依赖于两个或三个输入图像(一个第三人称摄像机和每个机器人手臂一个腕部摄像机),使用224x224像素的分辨率
- VLA骨干网络通过预训练的视觉编码器分别编码每个图像,并将生成的tokens连接起来。且还基于自然语言任务指令和机器人的本体感受状态进行条件设置
- 两者都通过LLMs语言分词器进行分词,将它们视为字符串
对于本体感受状态,我们应用了一种类似于RT-2动作分词[10]的bin分词预处理,将其离散化为256个bins,然后将整数作为文本输入序列的一部分进行分词
请注意,对于本体感受状态,一个简单的bin分词方案就足够了,因为它是一个输入到策略(相对于需要高级tokenization的操作输出) - 使用短线性学习率预热(1k 步)来训练所有策略,然后使用常数学习率5e −5
且使用AdamW 优化器[45](b1 = 0.9, b2 = 0.95),不进行权重衰减,将梯度幅度裁剪到1,并计算网络权重的EMA,权重为0.999
推理的时候,使用简单的自回归解码,除了双手机器人任务(T 恤折叠、从烤面包机取出吐司、洗衣折叠)——即During inference, we use simple greedy autoregressive ecoding, except for the bi-manual robot tasks (T-shirt folding,toast out of toaster, laundry folding),作者发现使用较小的温度β = 0.7 有助于使策略从初始位置移动(因为一些数据包含了机器人在训练开始时悬停在初始位置的静止动作段)
2.1.2 评估任务
作者开发了一套7个评估任务(6个真实机器人,1个模拟;见下图图5),旨在测试VLA在高度灵巧的任务(如折叠洗衣物)和泛化任务(如在未见过的环境中0-shot执行桌面操作)上的性能
- Libero:在Libero [43]模拟基准套件上进行测试。测量Libero-Spatial、Libero-Object、Libero-Goal和Libero-10的平均性能
- 桌面清理[7] (20 Hz):一个UR5单臂机器人需要清理桌面,将12个物体分类到垃圾桶中和一个塑料容器(用于放置盘子、碗、杯子和餐具)。该任务需要精确抓取各种物体
- 更多任务见原论文..
2.1.3 实验中涉及对FAST与FAST+的比较
作者测试了
- FAST,如上所述,这是一种基于 DCT 的动作tokenization方法,分别在每个评估数据集上进行训练
- 以及FAST+,通用的基于 DCT 的动作tokenization器,训练在一个包含 100 万个动作序列的大型数据集上
请注意,在能够组装的最具多样性的真实机器人数据集上训练了通用tokenization器,其中包括来自作者真实机器人评估任务的数据
然后,作者将这两种tokenization器与以前的自回归 VLA(如 RT-2 [10]、RT-2-X [52] 和OpenVLA [39])使用的每维度分箱方案进行比较——那种方案被称native tokenization,且将binning tokenization 应用于动作块中的每个时间步,然后进行串联
当然了,虽然作者的方法提供了无需训练任何单独模型的压缩tokenization,但也可以考虑一种替代的压缩方案
- 比如训练一个模型以生成动作的量化表示——chunk viaFSQ[48],这是 VQ-VAE[59] 的一种更简单的替代方案
- 这种tokenization策略以前用于标记高维图像数据[48,66],可以视为作者基于压缩的方法的消融,该方法利用压缩表示,但采用一种更复杂的基于学习的替代方案,而不是相对简单的基于DCT的方法
2.2 FAST标准版与FAST通用版
2.2.1 FAST标准版:相比其他VLA训练的动作分词器,更适合高频
首先在下表表I中提供了作者提出的FAST分词器与先前工作中使用的简单分箱方案之间的压缩率比较,他们使用来自具有不同动作维度和控制频率的数据集的1秒动作块
对于以上的这两种方法,使用默认的超参数,这些参数具有可比的分词错误。可以看到
- FAST在所有数据集上都实现了输入动作序列的显著压缩。对于高频动作数据的数据集,压缩优势尤为明显
- 有趣的是,FAST在每个领域中始终为每个机器人臂块生成大约30个动作token(即,双手设置中为60个token)
这表明FAST找到了一个表示,该表示近似于底层动作信号的复杂性,并且在很大程度上与动作数据的频率无关
且注意到,这种压缩并不是完全无损的,在压缩比和重建精度之间存在权衡,这由算法1中的尺度参数决定
表I中的数据在可比的重建精度下列出——具体请参见附录B中的图表,展示我们比较的每个分词器在压缩和保真度之间的权衡
接下来,使用上文2.1节(对应于原论文VI-A节)中描述的策略架构和分词方法训练策略——在图6中报告结果
总体而言,可以发现之前工作中应用的简单分词在学习高频机器人数据的有效策略方面表现不佳——这在作者评估的最高频任务中特别明显:Table Bussing(20Hz) and T-Shirt Folding (50Hz)
在这两个任务中,使用简单分词训练的策略无法在任务上取得进展。相比之下,作者发现基于压缩的分词可以导致有效的训练
此外,值得注意的是
- FAST tokenization首次成功在DROID数据集[38]上训练出强大的通用策略,该策略可以在未见过的环境中进行零样本评估,而无需微调,只需用自然语言提示即可
- 而所有先前的工作,包括原始的DROID论文[38]和OpenVLA[39],都没有展示零样本结果,而是完全专注于共同训练或微调评估
作者通过在各种桌面操作任务上测试我们的DROID策略,展示了其通用性
2.2.2 FAST+通用版:通用动作Tokenizer FAST+ 的性能评估
在本节中,作者评估了他们的通用动作标记器 FAST+ 的性能,该tokenizer在 100 万个真实机器人动作序列上进行了训练——见1.3.3 通用机器人动作tokenizer:FAST+
为了测试tokenizer的通用性,作者组装了一组多样化的小型测试数据集。该数据集涵盖了广泛的机器人形态、动作空间和控制频率(见图 8,完整的数据集列表见表 III)
请注意,这些数据集中没有任何一个是tokenizer训练集的一部分。因此,它们测试了一个场景:将分词器应用于全新的机器人设置 而无需重新计算分词
- 作者发现FAST+ 分词器在各种机器人数据集上都取得了良好的压缩性能,将所有数据集的动作token数量减少了2倍,在某些数据集上的减少幅度更大
- 且还测试了通用分词器在策略训练中的性能,并在图6中报告了与每个数据集分词器的结果 在所有任务中,通用分词器的表现与数据集特定的FAST分词器非常接近,这表明通用分词器可以作为机器人动作分词的强大默认选择
2.3 FAST标准版的消融研究、训练速度、扩展
2.3.1 对FAST标准版的消融研究
接下来,重点研究两个关键方面:
- FAST分词方法是否独立于基础的VLA骨架?
- BPE压缩步骤有多重要,这是FAST分词流程中唯一的学习组件
为了回答第一个问题,作者在具有挑战性的高频T恤折叠数据集上训练了一个OpenVLA策略[39],比较了最初在OpenVLA中使用的native tokenization方法和FAST+tokenizer
为了符合任务设置,作者修改了OpenVLA模型代码以接受多个输入图像并预测1秒的动作片段
- 下图的结果表明,FAST能够显著提升OpenVLA的性能,使其能够有效地在高频机器人操作数据上进行训练。这表明,作者的tokenization独立于底层模型骨干,并且可以轻松应用于各种预训练的自回归transformer模型
- 其次,作者在桌面整理和T恤折叠任务中对BPE编码步骤进行了消融实验,下面的图表显示,没有BPE编码的策略在展开性能上表现更差(但仍优于native tokenization)
直观地,DCT变换仍然将信号的大部分信息集中在少数几个token中,从而改善学习信号
然而,在没有BPE中存在大量重复的0-token,这会稀释学习信号并显著减慢推理速度,因为模型需要自回归地预测数百个动作token,最终导致策略性能变差
2.3.2 FAST标准版与扩散π0的比较:自回归π0训练快,而扩散π0推理快
在本节中,作者将最先进的扩散VLA π0 与结合了FAST 的模型进行比较,并使用自回归解码。作者比较了两种模型在第VI-B节任务上的表现,作者在图9 中报告了结果
作者发现,在小数据集(Libero,T-Shirt Folding; <50h)上,两个VLA 的表现相当
- 然而,在如Table Bussing 这样的大数据集上,他们发现基于FAST 的VLA 收敛速度显著更快,达到高性能所需的训练步骤比扩散变体的π0 少3x
- 此外,他们发现使用FAST tokenization训练的自回归π0 模型更紧密地遵循语言指令:在DROID 评估中,扩散π0 模型经常忽略语言指令,导致得分较低。作者将把对扩散和自回归VLA 语言跟随能力的详细研究留待未来工作
- 自回归VLA 的一个当前限制是其推理速度:
虽然使用扩散的π0 通常可以在NVIDIA 4090 GPU 上在100ms 内预测一秒的动作块
while π0 with diffusion typically predicts onesecond action chunks with in 100ms on an NVIDIA 4090 GPU
但使用FAST 分词的π0 模型每个块需要大约750 ms 的推理时间,因为它必须执行更多的自回归解码步骤(通常需要解码30-60 个动作tokens,而扩散π0需要10 个扩散步骤)
the π0 model with FAST tokenization needs approximately750ms of inference time per chunk, since it must perform more autoregressive decoding steps (typically 30-60 action tokens need to be decoded, vs. 10 diffusion steps for diffusionπ0)
并使用完整的2 B 参数语言模型骨干进行自回归解码(而扩散π0 使用的是300M 参数的” 动作专家”)
and use the full 2B parameter language model backbone for autoregressive decoding (vs. a 300M parameter “actionexpert” for diffusion π0)
虽然没有发现这种较慢的推理会对评估的静态操作任务的性能造成影响,但它确实使评估显著变慢
虽然有许多技术可以加速离散、自回归变压器模型的推理,这些技术在LLM 文献中被广泛使用(例如,推测性解码、量化、自定义推理内核等),但作者表示只能把对此的研究留待未来工作
对于上面第3点,我个人当时的第一反应是可以结合deepseek 试下,因为deepseek 的推理速度 还是比较快的——当然,mamba也比标准transformer的推理速度 更快,所以出来了RoboMamba
// 待更
2.3.3 将FAST标准版的自回归VLAs扩展到大型机器人数据集
上文已经展示了FAST在单个机器人数据集上训练自回归VLAs的有效性,但它是否能扩展到训练灵巧的通用策略?
为了测试这一点,我们在上一节中使用的π0-FAST模型上训练了跨多种身体结构的机器人数据混合数据集,这是迄今为止最大的灵巧机器人操作数据集
它包括来自我们自己数据集的903M时间步。此外,训练混合数据集中有9.1%由开源数据集BRIDGE v2 [60]、DROID [38]和OXE [52]组成
作者将零样本性能与Black 等人[7] 任务中的扩散π0 模型进行比较,如下图图11 所示
总体而言,可以发现自回归π0-FAST 模型在性能上与扩散π0 模型相当,包括在最具挑战性的折叠衣物任务上,同时训练所需的计算量显著减少
同时在展示π0-FAST 执行折叠衣物任务的一个定性例子时,发现π0-FAST 的收敛速度明显快于扩散π0 模型:在上述评估中,该模型的训练所需GPU 小时数比Black 等人[7] 的π0 模型少5x
作者在下图图1 中展示了训练过程中多个检查点的机器人评估结果(在两个代表性任务:清理桌子和折叠T 恤上的平均性能)
- 结果清楚地表明π0-FAST 显著更快地实现了高性能。对于通常需要数千GPU 小时的最先进VLA 训练运行来说,计算需求减少5× 是非常显著的。
- 且在附录图15 中包含了所有任务的计算匹配π0 检查点的完整比较,发现相同的结论成立:由于更快的收敛,π0-FAST 明显优于计算匹配的π0
总之,作者已经证明了FAST tokenizer使得能够在复杂、灵巧的机器人任务上训练自回归VLA,而之前的tokenization方案在这些任务上完全失败
且作者还展示了当FAST 与诸如π0 等最先进的VLA 结合时,可以扩展到训练通用的、跨身体的策略,其性能可与最佳扩散VLA 相媲美,同时训练速度显著更快
第三部分 π0及π0-FAST的开源
3.1 π0及π0-FAST的开源
25年2.4日,几个月前推出π0的公司Physical Intelligence (π)宣布正式开源π0及π0-FAST,如之前所介绍的,他们对用超过 10,000 小时的机器人数据进行了预训练
该GitHub代码仓库包括4个方面:简言之,就是π0本身的代码和权重、特定平台上特定任务的微调checkpoint、推理代码、微调代码
具体而言,则如下
- 预训练模型π0、π0-FAST的代码和模型权重
扩散π0
s3://openpi-assets/checkpoints/pi0_base
基于FAST分词器的自回归π0-FAST
s3://openpi-assets/checkpoints/pi0_fast_base - 专门为ALOHA和DROID平台上一些简单任务做的微调的checkpoint,相当于在ALOHA 和 DROID 收集的相对较小的数据集上进行微调的
several checkpoints that are fine-tuned for a few simple tasks on a few widely available platforms such as ALOHA and DROID - 在多个显示世界和仿真机器人平台上推理运行的示例代码
example code to run inference on several real-world and simulated robot platforms - 用于根据用户自身任务和平台微调π0的代码——这个微调π0的代码 个人觉得很有价值
code for fine-tuning the base π0 model for your own tasks and platforms
且huggingface上有相应的pytorch接口
Physical Intelligence (π)认为,1 到 20 小时的数据足以微调各种任务
且如本文开头所述:后面会专门解读下 π0及π0-FAST的代码
3.2 支持的平台和checkpoint
3.2.1 支持的平台
- DROID
基于 Franka 的单臂系统,附带开源数据集。以下视频展示了 openpi 在训练数据中从未见过的环境中运行,这些环境遍布世界各地,包括蒙特利尔大学、华盛顿大学、韩国科学技术研究院等 - ALOHA
适合灵巧操作的低成本双臂系统。下面的视频展示了 openpi 在训练数据中未见过的 ALOHA 平台上新位置的运行情况
3.2.2 checkpoint
提供各种预先训练的检查点,下面列出一些重点
- π0 base
s3://openpi-assets/checkpoints/pi0_droid
这是标准的预训练π 0模型,该模型在 OXE 和他们的 7 个机器人平台上进行训练。它是为微调而设计的,但它可以在零样本中用于预训练数据中存在的任务,例如“从烤面包机中取出面包”任务 - π0-FAST base
s3://openpi-assets/checkpoints/pi0_fast_droid
该模型使用FAST tokenizer通过自回归离散化实现控制。它提供了更好的语言跟踪性能,但推理成本更高(根据他们的经验,大约高出 4-5 倍)
如果您更喜欢使用discretization而不是流匹配,这是一个不错的选择
且他们还提供了一些经过微调的演示检查点。这些检查点并非用于后续微调,但可以提供开箱即用的演示。这些检查点可能适用于您的特定机器人,也可能不适用。由于这些检查点是在使用更广泛使用的机器人(例如 ALOHA 和 DROID Franka 设置)收集的相对较小的数据集上进行微调的,因此它们可能无法推广到您的特定设置,尽管我们发现其中一些检查点(尤其是 DROID 检查点)在实践中具有相当广泛的推广性: - π0-FAST DROID and π0 DROID
相当于提供了两种针对机器人数据集,该数据集由 Franka 机械臂在不同环境中执行的不同任务组成。这些是第一批能够在全新环境中使用 DROID 平台成功遵循指令的模型,正如他们在FAST 论文中推荐的那样,向在 DROID 或类似 DROID 平台和任务上工作的人推荐这些模型 - π0 ALOHA
毛巾折叠、食物舀取和其他任务:提供了一套针对 ALOHA 平台上的任务进行微调的检查点openpi 代码库文档中提供了有关如何设置 ALOHA 系统以正确运行这些检查点的说明
这些检查点可能对整体机器人设置非常敏感,但能够在完全未出现在训练数据中的全新 ALOHA 站点上运行它们 - π0 Libero
此检查点针对 Libero 基准进行了微调,并且可以在 Libero 任务上进行开箱即用的评估
3.3 安装与运行
要运行此存储库中的模型,需要至少具有以下规格的 NVIDIA GPU。这些估算假设单个 GPU,但您也可以通过fsdp_devices
在训练配置中进行配置来使用具有模型并行性的多个 GPU,以减少每个 GPU 的内存要求。另请注意,当前的训练脚本尚不支持多节点训练
模式 | 所需内存 | 示例 GPU |
---|---|---|
推理 | > 8 GB | RTX 4090 |
微调(LoRA) | > 22.5 GB | RTX 4090 |
微调(完整版) | > 70 GB | A100(80GB)/H100 |
PS,他们说该 repo 已在 Ubuntu 22.04 上测试过,其他操作系统可能不支持
以下是安装过程
- 克隆此 repo 时,请确保更新子模块:
git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git# Or if you already cloned the repo: git submodule update --init --recursive
- 使用uv来管理 Python 依赖项。可参阅uv 安装说明进行设置
安装 uv 后,运行以下命令设置环境:
注意:GIT_LFS_SKIP_SMUDGE=1需要将 LeRobot 作为依赖项GIT_LFS_SKIP_SMUDGE=1 uv sync
Docker:作为 uv 安装的替代方案,他们还提供了使用 Docker 安装 openpi 的说明
如果在系统设置中遇到问题,还可以考虑使用 Docker 来简化安装,详情请参阅Docker 设置
以下是跑π0-FAST-DROID模型的预训练检查点
from openpi.training import config
from openpi.policies import policy_config
from openpi.shared import downloadconfig = config.get_config("pi0_fast_droid")
checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_fast_droid")# Create a trained policy.
policy = policy_config.create_trained_policy(config, checkpoint_dir)# Run inference on a dummy example.
example = {"observation/exterior_image_1_left": ...,"observation/wrist_image_left": ...,..."prompt": "pick up the fork"
}
action_chunk = policy.infer(example)["actions"]
且也可以在示例笔记本中测试这一点
还提供了在DROID和ALOHA机器人上运行预先训练的检查点的推理的详细分步示例
远程推理:他们提供了示例和代码,用于远程运行模型推理:模型可以在不同的服务器上运行,并通过 websocket 连接将操作传输到机器人。这样可以轻松在机器人外使用更强大的 GPU,并将机器人和策略环境分开
无需机器人即可测试推理:提供无需机器人即可测试推理的脚本。此脚本将生成随机观察并使用模型运行推理。有关更多详细信息,请参阅此处
3.4 根据自己的数据微调基础模型
自己的数据上微调基础模型,只需以下三个步骤即可:
- 将数据集转换为LeRobot数据集v2.0格式
作者提供了一个脚本convert_aloha_data_to_lerobot.py,用于将 Libero 数据转换为 LeRobot 数据集 v2.0 格式——可以轻松修改它以转换您自己的数据
比如从此处examples/libero/convert_libero_data_to_lerobot.py下载原始 Libero 数据集,然后使用以下命令运行脚本
且作为示例,已将 BiPlay 代码库中的 aloha_pen_uncap_diverse_raw 数据集转换,并将其上传至 HuggingFace Hub,地址为 physical-intelligence/aloha_pen_uncap_diverseuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/libero/data
- 定义使用自定义数据集的训练配置,并运行训练
提供pi0_aloha_pen_uncap 配置作为示例。您应该参考根README以了解如何使用新配置运行训练
比如下面是带有详细注释的 Libero 示例配置,可以根据自己的数据集进行修改:
LiberoInputs和LiberoOutputs:定义从 Libero 环境到模型的数据映射,反之亦然——将用于训练和推理
LeRobotLiberoDataConfig:定义了如何处理来自 LeRobot 数据集的原始 Libero 数据以用于训练
TrainConfig:定义微调超参数、数据配置和权重加载器 - 启动策略服务器并运行推理
训练完成后,可以通过启动策略服务器,然后从 Libero 评估脚本中查询它来运行推理。启动模型服务器很容易(他们在此示例中使用迭代 20,000 的检查点,根据需要进行修改)uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_libero --policy.dir=checkpoints/pi0_fast_libero/my_experiment/20000
更多请参阅原GitHub:github.com/Physical-Intelligence/openpi,或者后续我对 π0及π0-FAST源码的解读