一、整体架构思想

UniVLA的核心创新是使用**潜在动作模型(Latent Action Model)**从视频中提取任务相关的动作表示,而不是直接预测具体的机器人动作。

为什么这样设计?
传统VLA模型的问题:

  • 不同机器人的动作空间不同(7轴 vs 14轴)
  • 不同任务的动作定义不同
  • 需要大量标注的动作数据

UniVLA的解决方案:

  • 创建一个统一的潜在动作空间
  • 所有机器人、所有任务都映射到这个统一空间
  • 可以利用无标注的视频数据

二、训练分为三个阶段

阶段0:潜在动作模型训练(LAM Training)

这是UniVLA独特的部分,训练一个能从视频中提取"抽象动作"的模型。

Stage 1 - 学习任务无关的潜在动作:

输入:大量视频(机器人 + 人类)
目标:学习通用的运动模式
方法:VQ-VAE(Vector Quantized VAE)
- 把连续的动作压缩成离散的token
- 建立一个"动作词典"(codebook)

Stage 2 - 学习任务相关的潜在动作:

输入:视频 + 语言指令
目标:让潜在动作与任务目标对齐
方法:在DINO特征空间中训练
- 结合视觉特征和语言信息
- 生成"任务驱动"的抽象动作

训练数据:

  • OpenX机器人数据集
  • Ego4D人类视频
  • 导航数据集

阶段1:VLA预训练(Generalist Policy Pre-training)

训练一个能理解视觉、语言并预测潜在动作的大模型。

架构:

  • Backbone: Prismatic-7B(视觉-语言模型)
  • 输入: 图像 + 语言指令
  • 输出: 潜在动作token序列
# 训练过程伪代码
for batch in training_data:
    image = batch['observation']
    instruction = batch['language']
    
    # 1. 用LAM把真实动作转换为潜在动作token
    latent_actions = LAM.encode(batch['video'])
    # latent_actions 是离散的 token,例如 [ACT_42, ACT_156, ACT_89, ...]
    
    # 2. VLA模型预测潜在动作
    predicted_tokens = VLA(image, instruction)
    
    # 3. 下一个token预测损失
    loss = CrossEntropy(predicted_tokens, latent_actions)
    loss.backward()

**关键点:潜在动作被映射为特殊token {ACT_0, ACT_1, …, ACT_C},就像语言token一样

阶段2:LIBERO微调(Downstream Fine-tuning)

在特定任务上微调,添加机器人特定的action decoder。

新增组件:Action Decoder(仅12M参数)

功能:把潜在动作转换为机器人的实际控制信号
输入:潜在动作 token + 视觉特征
输出:7维动作(LIBERO的情况)

训练配置:

# 训练设置
- 使用LoRA (rank=32) 微调VLA backbone
- 训练Action Decoder(从头开始)
- 总可训练参数:约123M(仅占总参数的1.6%# LIBERO-specific
- Spatial/Object/Goal: 30k steps
- Long (LIBERO-10): 40k steps
- Batch size: 128
- 只使用第三人称相机 + 语言指令

训练流程:

# 微调伪代码
for batch in libero_dataset:
    image = batch['observation']
    instruction = batch['task_description']
    real_action = batch['action']  # 7维真实动作
    
    # 1. VLA预测潜在动作(冻结或LoRA微调)
    latent_action_tokens = VLA(image, instruction)
    
    # 2. 获取潜在动作的embedding
    latent_embedding = LAM.get_embedding(latent_action_tokens)
    
    # 3. Action Decoder解码为真实动作
    predicted_action = ActionDecoder(latent_embedding, visual_features)
    
    # 4. 监督损失
    loss = MSE(predicted_action, real_action)
    loss.backward()

三、数据流动全流程

训练时:
视频帧 → LAM Encoder → 潜在动作token → VLA学习预测这些token

微调时:
观察图像 + 指令 → VLA → 潜在动作token → LAM Embedding → 
Action Decoder → 机器人动作

推理时:
相机图像 + 任务指令 → VLA → 潜在动作token → 
Action Decoder → 执行动作 → 环境反馈 → 下一帧

四、为什么这样设计有效?

1. 跨机器人泛化:

  • 不同机器人通过各自的Action Decoder连接到统一的潜在空间
  • VLA backbone可以共享,只需训练12M的decoder

2. 数据效率:

  • 可以使用人类视频(无动作标注)预训练
  • 潜在动作捕捉了"任务本质"而非"机器人特定"的知识

3. 计算效率:

  • 仅需OpenVLA 5%的预训练算力(960 GPU小时)
  • 微调时只更新很少的参数

4. 语言对齐:

  • 潜在动作在DINO特征空间训练,与视觉语义对齐
  • 更容易理解自然语言指令

五、LIBERO训练的具体要点

# 你需要准备的
1. 预训练模型:univla-7b (通用VLA模型)
2. 潜在动作模型:lam-stage-2.ckpt
3. LIBERO数据集:轨迹数据(图像+动作+指令)

# 训练时发生的事
1. 冻结LAM(已经训好)
2. LoRA微调VLA backbone(学习LIBERO任务特征)
3. 从头训练Action Decoder(学习解码到7维动作空间)

# 关键超参数
- max_steps: 30k (Spatial/Object/Goal) 或 40k (Long)
- batch_size: 根据GPU显存调整
- LoRA rank: 32
- learning_rate: 通常5e-4

这个设计的精妙之处在于:潜在动作作为中间表示,既保留了任务相关信息,又抽象掉了机器人特定细节,这使得模型能高效地在不同机器人和任务间迁移!

有什么具体环节需要我详细解释吗?

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐