StarVLA中的动作生成范式Action_Model
1.当前StarVLA中封装的视觉语言模型(VLM)骨干
位于starVLA\starVLA\model\modules\vlm\__init__.py
def get_vlm_model(config):
vlm_name = config.framework.qwenvl.base_vlm
if "Qwen2.5-VL" in vlm_name or "nora" in vlm_name.lower(): # temp for some ckpt
from .QWen2_5 import _QWen_VL_Interface
return _QWen_VL_Interface(config)
elif "Qwen3-VL" in vlm_name:
from .QWen3 import _QWen3_VL_Interface
return _QWen3_VL_Interface(config)
elif "Qwen3.5" in vlm_name:
from .QWen3_5 import _QWen3_5_VL_Interface
return _QWen3_5_VL_Interface(config)
elif "gemma-4" in vlm_name.lower() or "gemma4" in vlm_name.lower():
from .Gemma4 import _Gemma4_VL_Interface
return _Gemma4_VL_Interface(config)
elif "molmo2" in vlm_name.lower():
from .Molmo2 import _Molmo2_VL_Interface
return _Molmo2_VL_Interface(config)
elif "minicpm-v" in vlm_name.lower() or "minicpmv" in vlm_name.lower():
from .MiniCPM_V import _MiniCPM_VL_Interface
return _MiniCPM_VL_Interface(config)
elif "florence" in vlm_name.lower(): # temp for some ckpt
from .Florence2 import _Florence_Interface
return _Florence_Interface(config)
elif "cosmos-reason2" in vlm_name.lower():
# Cosmos-Reason2 is architecturally Qwen3-VL (VLM), but implemented
# in world_model/ for historical reasons. Import directly.
from starVLA.model.modules.vlm.CosmosReason2 import _CosmosReason2_Interface
return _CosmosReason2_Interface(config)
elif "egovla" in vlm_name.lower() or "ego_vla" in vlm_name.lower() or "vila" in vlm_name.lower():
# EgoVLA (VILA): SigLIP-384 + Qwen2-1.5B + mlp_downsample projector.
from starVLA.model.modules.vlm.VILA import _EgoVLA_VILA_Interface
return _EgoVLA_VILA_Interface(config)
else:
raise NotImplementedError(f"VLM model {vlm_name} not implemented")
统一工厂 get_vlm_model() 支持:
- Qwen2.5-VL(含 Nora 类检查点)
- Qwen3-VL
- Qwen3.5
- Gemma 4
- Molmo2
- MiniCPM-V
- Florence-2
- Cosmos-Reason2
- EgoVLA / VILA
此外,PI0/PI0.5 专用组合使用 PaliGemma,实现在:
starVLA\starVLA\model\modules\vlm\OpenPIPaliGemma.py
2.当前StarVLA中封装的世界模型骨干
世界模型与VLM都是骨干网络模型
def get_world_model(config):
"""Factory for world model backends.
Routes to the correct world-model wrapper based on
``config.framework.world_model.base_wm`` (or falls back to
``config.framework.qwenvl.base_vlm`` for backward compatibility).
Every world-model wrapper exposes:
- ``forward(**kwargs)`` → model outputs with hidden_states
- ``build_inputs(images, instructions)`` → dict of tensors
- ``generate(**kwargs)`` → generation (optional)
"""
# Prefer explicit world_model config; fall back to qwenvl for compat
wm_cfg = config.framework.get("world_model", None)
if wm_cfg is not None:
wm_name = wm_cfg.get("base_wm", "")
else:
wm_name = config.framework.qwenvl.base_vlm
if "cosmos-reason2" in wm_name.lower():
from ..vlm.CosmosReason2 import _CosmosReason2_Interface
return _CosmosReason2_Interface(config)
elif "cosmos-predict2" in wm_name.lower() or "cosmos-predict2" in wm_name.lower():
from .CosmoPredict2 import _CosmoPredict2_Interface
return _CosmoPredict2_Interface(config)
elif "wan2" in wm_name.lower() or "ti2v" in wm_name.lower():
from .Wan2 import _Wan2_Interface
return _Wan2_Interface(config)
else:
raise NotImplementedError(f"World model {wm_name} not implemented")
统一工厂 get_world_model() 支持:
- Cosmos-Predict2
- Wan2 / Wan TI2V
- Cosmos-Reason2(兼容入口;本质更接近 VLM)
3.当前StarVLA中封装的动作头Action_Model
3.1当前 framework 中实际接入的动作头
动作头统一存放目录:starVLA\starVLA\model\modules\action_model
动作头没有集中式总工厂;每种动作头在自己的文件中提供 get_action_model(),例如:
- OFT/MLP:
get_action_model() - FAST:
get_action_model() - PI/Flow Matching:
get_action_model() - GR00T:
get_action_model() - DiT 扩散:
get_action_model()
当前实际接入了:
- FAST:自回归离散动作 token
- MLP / OFT:并行连续动作回归
- LayerwiseFM / PI:逐层 Flow Matching
- GR00T:DiT Flow-Matching 双系统动作头
- DiT diffusion:扩散动作头
- LayerwiseDD:逐层离散扩散
- AML Flow Matching:ABot-M0 风格
- VLA Adapter:L1 回归适配器
- EgoVLA trajectory decoder
- OpenPI0 action head
- OpenPI0.5 action head
注意:不是任意骨干和动作头都能只改配置以自由组合。Qwen、世界模型与 FAST/OFT/PI/GR00T 的组合较模块化;PaliGemma、EgoVLA、ABot 等存在专用接口,通常要修改对应 framework 的特征维度、token 或调用逻辑。
3.2覆盖了当前主流且较先进的大部分动作生成范式,但不能说囊括所有最新 SOTA 方案。
已覆盖的核心路线:
- 自回归离散动作:FAST
- 并行连续回归:OFT / MLP
- 扩散策略:DiT diffusion、离散扩散
- Flow Matching:PI、GR00T、AML
- 双系统架构:VLM 高层语义 + 动作专家低层控制
- 专用轨迹解码器与适配器:EgoVLA、VLA Adapter
这几类基本代表现代 VLA 动作头的主要技术谱系,尤其 Flow Matching、FAST 和双系统方案属于当前重点方向。
但仓库并未完整覆盖:
- 基于 consistency/rectified-flow 的少步或单步动作生成
- 更完整的分层规划器与技能 token 动作头
- 显式 3D、SE(3)、点云或几何等变动作头
- 基于 MPC、价值函数或强化学习在线优化的动作选择器
- 各闭源模型及刚发布论文中的专用实现
- 多机器人 embodiment 路由、MoE 动作专家等新方案
因此更准确的评价是:它是一套覆盖面较完整的前沿动作头研究平台,而不是所有 SOTA 动作方案的全集。 对学习和横向实验而言已经很有代表性;若针对精细操作、3D 几何控制或在线强化学习,还需要扩展。
3.3 Action_Model简略介绍
-
FAST(自回归离散) 先将连续动作压缩、量化为 token z,再建模 p(z|c)=∏ₖp(zₖ|z<ₖ,c),以交叉熵 L=−Σlog p(zₖ*|z<ₖ,c) 训练。优点是复用语言模型、能表达多峰分布;缺点是串行解码慢,存在量化误差和误差累积。实现见
fast_ActionHeader.py。 -
OFT/MLP(并行回归) 一次输出 Â=fθ(c)∈R^(T×D),常用 L1:L=||Â−A||₁。速度最快、训练稳定;但点估计容易把多种可行动作平均化。见
L1RegressionActionHead。 -
DiT 扩散 前向加噪:xₜ=√ᾱₜA+√(1−ᾱₜ)ε;网络预测 εθ(xₜ,t,c),损失 E||ε−εθ||²;推理从高斯噪声逐步去噪。多峰能力强但采样较慢。见
ActionModel。离散扩散则先把动作量化成 bin,再通过掩码/离散转移迭代恢复,量化公式见continuous_to_bins()。 -
PI/Flow Matching 取 ε~N(0,I),xₜ=(1−t)ε+tA,真实速度 v=A−ε;学习 L=E||vθ(xₜ,t,c)−v||²,推理积分 dx/dt=vθ。路径比扩散更直接,通常可减少采样步数。见
LayerwiseFlowmatchingActionHead。 -
GR00T/双系统 System 2 的 VLM 提供语义上下文;System 1 的 DiT/Flow-Matching 动作专家高速生成连续动作。GR00T是条件注入与系统组合,不是全新概率目标。AML改为预测终点 Â,再算 v̂=(Â−xₜ)/(1−t),见
FlowmatchingActionHead。 -
EgoVLA/VLA Adapter EgoVLA用动作查询交叉关注完整VLM记忆和本体状态,分左右手输出专用轨迹,见
TransformerSplitActV2。VLA Adapter通过轻量注意力融合动作/本体与视觉特征,再用L1回归;参数效率高,但通用性弱于生成式动作头。
4.FAST(自回归离散)
FAST 不是逐时刻、逐维分箱,而是先压缩整段动作的时间结构,再离散化。设动作块 A∈R^(T×D)。
-
归一化:通常以数据分位数把各维缩放至
[-1,1],降低异常值影响。 -
DCT 时域压缩:对每个动作维度沿时间轴变换:
C[k,d]=α(k)Σₜ A[t,d]cos[π(2t+1)k/(2T)]低频系数描述整体运动趋势,高频系数描述快速细节。机器人轨迹通常平滑,因此多数高频系数接近零。 -
量化与展平:将 DCT 系数量化为整数,按低频优先次序展平。量化步长越小,精度越高但 token 更多。
-
BPE 压缩:统计整数序列中的高频相邻模式,将其合并成一个 token。最终每个动作块通常只需约 30–60 个 token,相比逐元素分箱可压缩约 10 倍。
-
自回归学习:给定视觉、语言条件
c:p(z|c)=∏ₖp(zₖ|z₍<k₎,c)训练采用 teacher forcing 与交叉熵:L=−Σₖlog pθ(zₖ*|z₍<k₎*,c) -
解码:生成 token → BPE 逆变换 → 反量化 → IDCT → 反归一化,恢复
[T,D]连续动作。
StarVLA 中编码器见 Fast_Action_Tokenizer,训练映射见 forward(),生成和解码见 predict_action()。
优势:训练快、复用 VLM、兼顾精细动作与多峰性。
局限:自回归推理较慢、存在量化误差、错误会沿 token 序列累积。
连续动作 → 离散 token → Transformer 自回归生成
5.OFT/MLP 并行回归
给定图像、语言指令及可选机器人状态,VLM 先输出条件特征。系统为未来每个动作时刻放置一个动作查询 token:
H=[h₁,h₂,…,h_T],H∈R^(T×hidden_dim)
每个查询特征经过共享 MLP,直接回归连续动作:
â_t=MLP(h_t)∈R^D
因此整个动作块一次前向即可得到:
Â=[â₁,…,â_T]∈R^(T×D)
训练通常采用 L1 损失:
L_L1=(1/(TD)) ΣₜΣ_d |â_(t,d)−a_(t,d)|
例子
若预测未来 4 帧、每帧 7 维机械臂动作:
4 个动作 token → VLM → [4, hidden_dim]
→ 共享 MLP
→ [4, 7]
4 帧动作同时产生,不像 FAST 那样逐 token 生成,也不需要扩散模型多步去噪。
StarVLA 实现
- 动作查询提取与并行预测:
forward() - MLP 残差网络:
MLPResNet - 连续动作头:
L1RegressionActionHead - 并行形状变换:
predict_action() - L1 损失计算:
QwenOFT.py
优点:推理快、结构简单、训练稳定、无量化误差。
缺点:L1 倾向预测条件中位数;当同一场景存在多种合理动作时,可能产生“平均动作”,多模态表达能力通常弱于扩散、Flow Matching 或离散自回归方法。
VLM隐藏特征 → MLP/OFT → 一次性直接回归整个动作轨迹
6.DiT 扩散动作头
DiT(Diffusion Transformer)用 Transformer 充当扩散去噪器。它不是直接回归动作,而是学习把高斯噪声逐步还原成完整连续动作块。
1. 前向加噪
真实动作块为 x₀∈R^(T×D),在随机扩散时刻 t 加噪:
x_t = √ᾱ_t x₀ + √(1−ᾱ_t) ε,ε~N(0,I)
随着 t 增大,动作结构逐渐消失,最终接近纯高斯噪声。StarVLA 在 forward() 中随机采样噪声和时刻,并通过 q_sample 构造 x_t。
2. 条件去噪网络
DiT 接收:
- 含噪动作
x_t - 扩散时刻
t - VLM 产生的视觉、语言条件
c
预测噪声:
ε̂ = DiTθ(x_t,t,c)
动作序列内部通过 self-attention 建模时间依赖,动作与 VLM 条件可通过 cross-attention 或条件调制融合。StarVLA 调用位置是 ActionModel.forward()。
3. 训练目标
采用噪声预测均方误差:
L = E[x₀,t,ε] ||ε−ε̂θ(x_t,t,c)||²
对应 loss()。随机抽一个 t 就能训练,不需要在一次训练中执行完整去噪链。
4. 推理
从纯噪声开始:
x_K~N(0,I)
反复执行:
x_K → x_(K−1) → ... → x₀
每一步 DiT 都根据当前含噪动作、时刻和 VLM 条件预测噪声,再由调度器更新动作。最终一次生成整个 [T,D] 动作块。StarVLA 默认扩散训练步数为 100,并提供 create_ddim() 构造约 10 步的 DDIM 快速采样器。
5. 简单例子
目标是预测未来 8 帧、每帧 7 维动作:
训练:真实动作 [B,8,7]
→ 随机加噪
→ 含噪动作 [B,8,7]
+ VLM 条件 [B,L,H]
+ 时刻 t
→ DiT
→ 预测噪声 [B,8,7]
→ 与真实噪声计算 MSE
推理:随机噪声 [B,8,7]
→ DiT/DDIM 多步去噪
→ 连续动作 [B,8,7]
6. 与 MLP、FAST 的区别
- MLP/OFT:一次直接回归,速度最快,但容易产生平均动作。
- FAST:动作离散化后逐 token 生成,训练简单,但有量化误差和自回归延迟。
- DiT 扩散:连续空间、多步生成,能表达多种合理轨迹且没有离散量化误差,但推理需要多次网络前向。
DiT 特别适合存在多解的任务。例如绕过障碍物时,“从左绕”和“从右绕”都合理;扩散模型可以从不同初始噪声采样出不同完整轨迹,而普通 L1 回归可能输出两条轨迹之间的不安全平均路线。
7.PI / Flow Matching
PI 一般指 π₀ 系列使用的“VLM + Flow Matching 动作专家”方案。VLM 理解图像和指令;动作专家生成连续动作块。
1. 构造噪声到动作的路径
真实动作块记为 x₁∈R^(T×D),采样高斯噪声:
x₀~N(0,I)
选择时间 t∈[0,1],用线性插值构造中间状态:
x_t=(1−t)x₀+t x₁
其中 t=0 是纯噪声,t=1 是真实动作。该实现位于 forward()。
2. 目标速度场
对路径求导:
dx_t/dt=x₁−x₀=v*
动作专家接收当前轨迹、时间与视觉语言条件 c,预测速度:
v̂θ(x_t,t,c)
训练目标为:
L_FM=E||v̂θ(x_t,t,c)−(x₁−x₀)||²
StarVLA 中目标速度构造见 LayerwiseFM_ActionHeader.py,MSE 见 LayerwiseFM_ActionHeader.py。
3. 条件动作专家
动作专家通常使用 DiT:
当前含噪动作 x_t
+ 时间嵌入 t
+ 可选机器人状态
+ VLM 多层视觉语言特征
→ 条件 DiT
→ 速度场 v̂
它同时建模动作序列内部的时间关系,并通过交叉注意力读取 VLM 条件。StarVLA 的条件 DiT 调用见 LayerwiseFM_ActionHeader.py。
4. 推理:求解 ODE
从随机噪声开始:
x(0)~N(0,I)
求解常微分方程:
dx/dt=v̂θ(x,t,c)
最简单的 Euler 更新为:
x_(k+1)=x_k+Δt·v̂θ(x_k,t_k,c)
迭代到 t=1 得到连续动作块。StarVLA 的完整过程在 predict_action(),Euler 更新位于 LayerwiseFM_ActionHeader.py。
5. 示例
预测未来 8 帧、每帧 7 维动作:
训练:真实动作 x₁ [B,8,7] + 噪声 x₀ [B,8,7]
→ 随机选 t
→ 得到 x_t
→ DiT 预测速度
→ 对比目标 x₁−x₀
推理:噪声 [B,8,7]
→ 速度更新 1
→ 速度更新 2
→ ...
→ 动作 [B,8,7]
6. 与扩散模型的区别
- 扩散:定义随机加噪过程,常预测噪声或 score,并按噪声调度反向去噪。
- Flow Matching:直接学习概率路径上的确定性速度场,再通过 ODE 积分生成样本。
- 两者都能表达多模态连续动作,也都需要多步推理;Flow Matching 的目标与采样路径通常更直接,较少步骤也可能获得良好结果。
与 MLP 相比,PI/Flow Matching 不会简单平均多种合理动作;与 FAST 相比,它在连续空间生成,没有动作量化误差,但需要多次动作专家前向。
8.GR00T / 双系统
GR00T 将策略拆成两个协同部分:
System 2:视觉语言骨干
图像 + 指令 → 场景理解、目标推理、语义特征
System 1:连续动作专家
语义特征 + 本体状态 + 含噪动作 → 高频动作块
“快慢双系统”主要是功能类比:System 2 负责高层语义,System 1 负责低层运动生成;不一定意味着代码中按两个固定频率独立运行。
1. System 2:高层语义条件
VLM 将图像和语言编码为:
C=VLM(I,L)∈R^(N×H)
这些特征表达物体、空间关系、任务意图等,不直接作为电机指令。StarVLA 在 Qwen_GR00T.forward() 中提取 Qwen 最后一层隐藏状态,在 QwenGR00T.py 得到 last_hidden。
2. System 1:Flow Matching 动作专家
真实动作块为 a,高斯噪声为 ε:
x_t=(1−t)ε+t·a
目标速度:
v*=a−ε
条件 DiT 预测:
v̂θ(x_t,t | C,s,e)
其中 s 是机器人关节等本体状态,e 是机器人形态或类别信息。损失为:
L=E||v̂θ−(a−ε)||²
StarVLA 的路径与目标速度位于 FlowmatchingActionHead.forward(),损失位于 GR00T_ActionHeader.py。
3. 两系统如何融合
动作专家内部包含三类 token:
机器人状态 token
+ 未来规划 token
+ 当前含噪动作 token
DiT 通过 self-attention 建模动作时序,再通过 cross-attention 读取 System 2 的视觉语言特征:
ActionExpert(x_t,t,s) ←CrossAttention→ VLM(I,L)
对应 FlowmatchingActionHead 和条件融合位置 GR00T_ActionHeader.py。
4. 推理过程
从完整动作块噪声开始:
x₀~N(0,I)
循环预测速度并积分:
x_(k+1)=x_k+Δt·v̂θ(x_k,t_k|C,s,e)
最终得到 [B,T,D] 连续动作块。StarVLA 的采样入口是 predict_action(),Euler 更新位于 GR00T_ActionHeader.py。
5. 多机器人统一
GR00T 的重要目标是跨 embodiment:不同机器人具有不同关节数、动作含义和控制方式。可通过:
- 统一最大动作维度并使用 mask;
- 机器人类别嵌入;
- 类别专属输入/输出投影;
- 共享中间动作语义空间。
StarVLA 提供类别专属层 CategorySpecificLinear 和多形态编码器 MultiEmbodimentActionEncoder。
6. 示例
输入“用右手拿起红杯子”:
System 2:识别红杯、右手、抓取意图及空间关系
↓ 语义特征 C
System 1:结合当前关节状态,从噪声生成
↓
未来 16 帧 × 7 维连续动作
7. 与 PI 的关系
两者都可采用 Flow Matching 动作专家。主要差异不在基础公式,而在系统设计:GR00T 更强调通用机器人基础模型、多机器人形态适配以及显式的视觉语言推理层与动作专家分工;PI/π₀ 更常用于概括 Physical Intelligence 的 VLM + Flow Matching 策略路线。StarVLA 中 GR00T 是这一思想的可组合实现,并不等同于 NVIDIA 官方完整 GR00T 训练系统。
非双系统的 VLM 和 Action Head 是紧耦合的。
VLM负责:
- 看懂环境
- 理解任务
- 提取动作相关信息
然后交给动作头。
双系统VLM输出不再直接面向动作。
它输出:高层认知结果
例如:
输入:
拿起桌上的红色杯子
以前:
可能输出:
action token
或者
action feature
GR00T:
输出:
目标:
grasp cup
对象:
red cup
位置:
table
约束:
avoid obstacle
任务阶段:
reach → grasp → lift
9.EgoVLA:双手专用轨迹解码
核心是 TransformerSplitActV2.forward():
- 将动作查询从
[B·T,H]还原为[B,T,H]。 - 可把位置、旋转、指尖本体状态投影为 token,拼入查询序列。
- 将 VLM memory 与动作查询共同送入 Transformer,使动作查询获得视觉语言条件。
- 偶数查询输出左手,奇数查询输出右手: [ A_L=f_L(H_{0,2,4...}),\quad A_R=f_R(H_{1,3,5...}) ]
- 每只手 24 维:3 平移 + 6D 旋转 + 15 手部姿态;双手共 48 维。
它是确定性连续轨迹回归,优势是左右手结构先验明确;不足是任务和动作格式较专用。
VLA Adapter:逐层轻量条件融合
入口是 predict_action()。它初始化每个未来时刻的可学习动作块查询,再经过 24 层残差注意力模块,同时融合:
- 动作查询特征
h_a - 视觉任务特征
h_t - 本体状态
p - 动作块自身特征
x
基本注意力可写为: [ Y=\operatorname{softmax}(Q_x[K_x,K_t,gK_a]^T/\sqrt d)[V_x,V_t,V_a] ] 其中可学习门控 g=tanh(α) 控制条件注入强度。Pro 版本还加入 RoPE 和独立的视觉、Adapter 投影,见 MLPResNetBlock_Pro.forward()。最后直接输出 [B,T,D] 连续动作并以 L1 训练。
区别:EgoVLA 强调双手结构化解码;VLA Adapter 强调从 VLM 多层特征中逐层提取并融合控制信息。两者都不是扩散或 Flow Matching,无需迭代采样,推理通常更快,但多模态动作表达能力弱于生成式动作头。
10.StarVLA中的framework
10.1 VLM4A:Vision-Language Model for Action
输入通常为图像、语言、状态;VLM负责视觉语言对齐,动作头负责控制:
图像+指令 → VLM token特征 → 动作查询/动作专家 → [B,T,D]
例如 Qwenvl_OFT.forward() 插入动作 token,从Qwen隐藏状态提取查询,再以MLP和L1预测动作。该类还覆盖FAST、PI/Flow Matching、GR00T、Adapter、EgoVLA等。
优点:语义理解、开放词汇和任务泛化强。缺点:模型大、延迟和训练成本高。
10.2 VM4A:Vision Model for Action
这里不是VLM,而是传统视觉策略;目前主要是ACT和Diffusion Policy:
图像+机器人状态 → CNN/策略编码器 → 动作块
ACT.forward() 使用LeRobot ACT;DiffusionPolicy.forward() 使用ResNet18、条件1D UNet和DDPM。
优点:结构紧凑、闭集任务高效。缺点:基本不理解自然语言,跨任务迁移弱。
10.3 WM4A:World Model for Action
以视频/物理推理世界模型替代普通VLM骨干:
图像/视频+指令 → 时空世界特征 → OFT/PI/GR00T动作头
CosmoPredict2_OFT.forward() 提取世界模型隐藏状态,经池化生成动作查询并做L1回归。当前组合包括CosmoPredict2或Wan与OFT、PI、GR00T。
优点:时序动态和物理预测潜力更强。缺点:计算最重,且“世界模型特征更丰富”不等于当前框架显式预测未来视频。
选择原则:语言泛化选VLM4A;固定任务和低成本选VM4A;强调动态、物理与长时序建模选WM4A。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)