UniVLA 是什么?它如何让机器人真正理解并执行复杂任务

想象一下,你正在教一个机器人完成”把螺丝刀放回工具箱”这个简单动作。传统方法需要为这台特定机器人编写精确的动作指令:手臂抬升 15 厘米、手腕旋转 30 度、手指闭合力度 2 牛等等。如果换一台机械臂,所有参数都要重新调整。这就像教一个人做事,却必须先告诉他每一块肌肉如何收缩——低效且缺乏通用性。

UniVLA(Unified Vision-Language-Action)要解决的正是这个核心问题。它试图让机器人像人类一样理解任务的本质,而不是死记硬背机械动作。通过创造一个统一的动作空间,UniVLA 能够让机器人”举一反三”,把学到的技能迁移到不同设备、不同场景中。这份技术详解将带你深入了解 UniVLA 的运作机制,以及如何利用它构建真正聪明的机器人系统。

一、三大核心创新:UniVLA 的技术基石

根据项目文档,UniVLA 的突破建立在三个相互关联的创新点上。这些不是简单的功能叠加,而是重构了机器人学习的基本框架。

1.1 统一、与具体形态无关的动作空间

传统机器人策略模型最大的痛点是什么?每个机器人都需要从头训练。机械臂、轮式机器人、人形机器人的动作定义完全不同,导致数据无法共享,经验无法迁移。UniVLA 提出了一个大胆设想:能否创造一个所有机器人都懂的”通用动作语言”?

这个项目通过任务中心的潜在动作实现了这一点。简单说,它不把动作定义为”关节转动多少度”,而是定义为”完成任务的关键步骤”。比如”抓起螺丝刀”这个潜在动作,无论机器人是双指夹爪还是五指灵巧手,都能理解其意图并用自己的方式执行。这种抽象层让跨设备知识迁移成为可能。

1.2 从跨形态视频中提取任务本质

另一个关键挑战是数据稀缺。高质量的机器人操作数据成本极高,但人类操作视频、不同机器人的演示视频却随处可见。UniVLA 设计了一套机制,能从五花八门的视频中提炼出共通的行动逻辑

项目利用了 Open X-Embodiment(OXE)数据集的机器人操纵数据、导航数据,以及 Ego4D 数据集中的人类日常活动视频。通过特殊的学习算法,系统能自动忽略”这个人是用左手还是右手”这类无关细节,专注于”他为什么要先拧开瓶盖再倒水”这类任务核心逻辑。这就像让 AI 学会看懂教学视频中的关键步骤,而不是机械模仿每个动作。

1.3 计算效率的极致优化

说到大模型,大家默认需要海量算力。但 UniVLA 团队明确指出了他们的效率优势:完整训练仅需约 960 个 A100 GPU 小时,是 OpenVLA 的 5%。如果只在 BridgeV2 或纯人类视频数据上训练,更是只需 200 GPU 小时。

这种效率提升不是通过缩水模型实现的,而是得益于潜在动作空间的紧凑表示。因为动作被编码为离散的”意图令牌”而非连续的高维向量,模型不需要浪费资源学习冗余的物理细节。后训练阶段的动作解码器仅有约 1200 万参数,使用 LoRA 微调时总可训练参数仅 1.23 亿——轻量化到可以在普通实验室服务器上运行。

二、技术架构深度拆解:三阶段训练流程

UniVLA 的训练不是一步到位,而是经过精心设计的三个阶段。这种流水线既保证了学习质量,又让每个阶段的目标清晰可验证。

2.1 第一阶段:构建通用动作词汇库

这阶段训练的是潜在动作模型(Latent Action Model),本质上是创造一个”动作词典”。项目采用 VQ-VAE(向量量化变分自编码器)架构,把连续的动作序列压缩成离散的代码本(codebook)条目。

具体怎么操作?文档给出了明确指令:

  • 整体批次大小 512
  • 优化步数 10 万步
  • 训练数据混合了 OXE 的机器人数据、导航数据和 Ego4D 人类视频

这个阶段结束后,模型能将任何视频流转换为紧凑的”动作令牌”序列。就像把句子分词成单词,每个令牌代表一个有明确意图的动作单元(如”抓取”、”移动”、”放置”),但不涉及具体执行方式

2.2 第二阶段:让动作具备任务意识

第一阶段学到的动作令牌是通用的,但可能不够精准。第二阶段在第一阶段 checkpoint 基础上进行任务中心化的微调。关键区别在于损失函数的设计:模型不仅要预测动作序列,还要确保这些序列对完成任务最优。

技术文档强调,第二阶段 checkpoint 才是最终用于策略训练的版本。两阶段分离的好处是,你可以直接使用团队预训练好的模型(qwbu/univla-latent-action-model),跳过最耗时的通用学习过程,直接专注于特定任务的适配。

2.3 第三阶段:让大模型学会”指挥”

有了动作词汇库,下一步是训练高层策略模型。UniVLA 基于 LLaMA 架构,把视觉输入(相机画面)和语言指令(”把苹果放进盘子”)映射成动作令牌序列

这个过程的巧妙之处在于伪标签化:用训练好的潜在动作模型为所有视频数据生成动作令牌标签,然后让 VLA 模型学习”看到什么+听到什么→该做什么”的映射。因为标签是离散的整数序列,可以用标准的下一个令牌预测目标(next-token prediction)来训练,这在语言模型领域已经非常成熟。

技术细节方面,项目将 VQ-VAE 代码本索引映射到 LLaMA 词表中的特殊令牌:{ACT_0, ACT_1, ..., ACT_C}。这样,VLA 模型生成的是类似”ACT_5 ACT_12 ACT_3″的抽象计划,而不是具体的关节角度。

2.4 最后一步:为具体机器人装上”执行器”

预训练的 UniVLA 只会”出主意”,不会”动手”。要让真实机器人执行,需要加装动作解码器。这个过程叫后训练,文档指出三个要点:

  • 解码器极其轻量化(1200 万参数)
  • 使用 LoRA 高效微调(秩为 32)
  • 总可训练参数仅 1.23 亿

这意味着你可以冻结巨大的 VLA 主干网络,只训练这个小解码器来适配特定机器人。比如 LIBERO 数据集需要 30k-40k 步微调,CALVIN 需要 10 万步。这种模块化设计让 UniVLA 能快速部署到新设备上,而无需重训整个系统。

三、从零开始的环境搭建与安装

理论讲得再好,动手才能见真章。UniVLA 团队提供了完整的安装流程,我们整理成可一步步操作的手册。

3.1 基础环境配置

项目推荐用 conda 管理环境,这能避免依赖冲突:

# 创建 Python 3.10 的独立环境
conda create -n univla python=3.10 -y
conda activate univla

接下来安装 PyTorch。文档特别提醒:务必根据你的 CUDA 版本选择正确命令。团队实验使用的是 torch 2.2.0 + cuda 12.1 组合。如果不确定 CUDA 版本,先运行 nvidia-smi 查看。

# 示例:CUDA 12.1 的安装命令
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121

3.2 项目代码与依赖安装

获取源代码并安装项目依赖:

# 克隆仓库(需要配置 SSH 密钥)
git clone git@github.com:OpenDriveLab/UniVLA.git
cd UniVLA
pip install -e .

这里的 -e 参数表示可编辑模式,方便后续修改代码。安装过程会自动下载基础依赖库。

3.3 训练加速组件配置

要训练这么大模型,必须启用 Flash Attention 加速:

# 先安装构建工具
pip install packaging ninja
ninja --version; echo $?  # 验证 Ninja 是否就绪,应返回 0

# 安装 Flash Attention 2.5.5
pip install "flash-attn==2.5.5" --no-build-isolation

这一步可能耗时较长,因为它需要编译 CUDA 内核。如果报错,通常是 CUDA 版本或编译器问题,请核对官方 GitHub issue 区的解决方案。

四、训练你自己的 UniVLA 模型:完整流程

安装完环境,下一步是数据准备和训练。文档提供了详细路径和参数说明,我们梳理成实战指南。

4.1 数据准备:从源头抓起

机器人数据获取

OXE(Open X-Embodiment)数据集是核心训练源。文档推荐了修改过的下载脚本:

# 参考脚本在 rlds_dataset_mod 仓库
wget https://github.com/moojink/rlds_dataset_mod/blob/ad83e6c0efad5823540c0f6d3a05529596ead0b5/prepare_open_x.sh
bash prepare_open_x.sh

这个脚本会自动下载并转换多个机器人数据集到 RLDS(强化学习数据集)格式,这是 UniVLA 训练所需的标准结构。

人类视频数据转换

如果想加入 Ego4D 的人类日常视频,需要额外转换步骤。文档指向了专门的说明文档:

# 转换流程在 vla-scripts/extern/ego4d_rlds_dataset_builder/ego4d/README.md
# 主要步骤包括视频切分、动作标注格式转换等

重要提示:潜在动作模型训练依赖海量数据,但团队强烈建议直接使用他们预训练好的 checkpoint。这能节省数百小时的计算时间,除非是研究数据本身的影响。

4.2 训练潜在动作模型:两阶段实战

阶段一:学习通用动作表示

配置文件在 latent_action_model/config/lam-stage-1.yaml。关键参数包括:

  • data_mix: 数据混合比例,在 prismatic/vla/datasets/rlds/oxe/mixtures.py 中定义
  • 批次大小 512,对应 8 张 GPU 每张 64 的局部批次

启动命令示例(单机 8 卡):

cd latent_action_model
torchrun --standalone --nnodes 1 --nproc-per-node 8 main.py fit \
    --config config/lam-stage-1.yaml \
    2>&1 | tee lam-stage-1.log

训练约需 3-5 天,具体取决于数据量和 GPU 速度。日志会实时显示重建损失、承诺损失等指标。

阶段二:聚焦任务中心动作

修改 lam-stage-2.yaml 中的 stage_one_ckpt 指向第一阶段输出路径,然后:

torchrun --standalone --nnodes 1 --nproc-per-node 8 main.py fit \
    --config config/lam-stage-2.yaml \
    2>&1 | tee lam-stage-2.log

第二阶段训练更快,因为大部分表示学习已完成。输出模型将用于后续 VLA 训练。

4.3 预训练通用策略:让 AI 学会规划

这是整个系统最复杂的部分。文档提供了可直接运行的脚本 vla-scripts/train.sh,我们拆解关键参数:

# 32 卡集群配置示例
GPUS_PER_NODE=8
NNODES=4
MASTER_PORT=28596
MASTER_ADDR="127.0.0.1"
RANK=0

# 启动分布式训练
torchrun --nproc_per_node ${GPUS_PER_NODE} --nnodes ${NNODES} --node_rank ${RANK} \
         --master_addr ${MASTER_ADDR} --master_port ${MASTER_PORT} train.py \
         --vla.type prism-dinosiglip-224px+mx-oxe-magic-soup-plus \
         --run_root_dir "vla_log"

关键参数说明:

  • vla.type: 选择 VLM 主干和训练数据组合。+mx-oxe-magic-soup-plus 表示使用 OXE 全部数据
  • run_root_dir: 日志和 checkpoint 保存路径

如果只训练 BridgeV2 子集,将 vla.type 改为 prism-dinosiglip-224px+mx-bridge;纯人类数据则用 +mx-human

训练完成后,需要将 Prismatic 格式的权重转换为 HuggingFace 标准格式:

python vla-scripts/extern/convert_openvla_weights_to_hf.py \
    --openvla_model_path_or_id /path/to/vla_log/checkpoints/latest.ckpt \
    --ckpt_name final_ckpt.pt \
    --output_hf_model_local_path /path/to/hf_format_model

转换后的模型兼容 AutoModelForVision2Seq,可以用标准 HuggingFace 工具加载和推理。

五、实战部署:从仿真到真机

预训练模型是”通才”,要成为特定场景的”专才”,需要后训练。文档覆盖了四大评估平台,我们选择最具代表性的两个详解。

5.1 LIBERO 仿真基准:厨房场景测试

环境准备

LIBERO 是模拟厨房操作的任务套件,包含 100 个任务,分为四个难度等级:

  • Spatial:空间关系理解(如”把锅放在炉子上”)
  • Object:物体操作(如”打开抽屉”)
  • Goal:目标导向任务(如”把苹果放进盘子”)
  • Long:长程多步骤任务(如”做三明治”)

首先下载转换好的 RLDS 格式数据:

# 从 HuggingFace 下载
git clone https://huggingface.co/datasets/openvla/modified_libero_rlds

微调训练

修改 vla-scripts/finetune_libero.py 中的三个关键路径:

  1. vla_path: 预训练 UniVLA 路径(如 qwbu/univla-7b
  2. lam_path: 第二阶段潜在动作模型路径
  3. data_root_dir: LIBERO RLDS 数据根目录

启动 8 卡训练(以最难的 Long 任务为例):

# 训练 40k 步(其他子集用 30k 步)
torchrun --standalone --nnodes 1 --nproc-per-node 8 finetune_libero.py \
         --dataset_name "libero_10_no_noops" \
         --max_steps 40000 \
         --run_root_dir "libero_log"

评估性能

训练完成后,会得到两个文件:微调后的 VLA 权重和动作解码器。评估脚本会运行 500 次独立试验(每个任务 50 次):

# 安装 LIBERO 环境
pip install -r experiments/robot/libero/libero_requirements.txt

# 开始评估
python experiments/robot/libero/run_libero_eval.py \
    --task_suite_name libero_10 \
    --action_decoder_path /path/to/action_decoder.pt \
    --pretrained_checkpoint /path/to/libero_finetuned_univla \
    --num_trials_per_task 50 \
    --save_video True \
    --seed 7

save_video=True 会录制视频,方便可视化分析失败案例。

5.2 CALVIN 长程任务链:持续操作挑战

CALVIN benchmark 的特点是多步骤任务链,例如”打开抽屉→拿出杯子→放到指定位置→关上抽屉”。这考验模型的长程规划能力状态保持能力

训练配置

同样需要修改 vla-scripts/finetune_calvin.py 中的路径参数。值得注意的是 window_size=12,表示模型能记住最近 12 步的历史,这对理解任务进度至关重要。

启动命令:

torchrun --standalone --nnodes 1 --nproc-per-node 8 finetune_calvin.py \
         --vla_path /path/to/univla-7b \
         --lam_path /path/to/lam-stage-2.ckpt \
         --calvin_root /path/to/calvin_dataset \
         --max_steps 100000 \
         --batch_size 8 \
         --grad_accumulation_steps 2 \
         --window_size 12 \
         --run_root_dir "calvin_log"

分布式评估

CALVIN 评估支持多 GPU 并行,加速大规模测试:

torchrun --standalone --nnodes 1 --nproc-per-node 8 \
         experiments/robot/calvin/run_calvin_eval_ddp.py \
         --calvin_root /path/to/calvin_dataset \
         --action_decoder_path /path/to/action_decoder.pt \
         --pretrained_checkpoint /path/to/calvin_finetuned_univla \
         --seed 7

DDP(分布式数据并行)能将评估时间缩短到单卡的 1/8。

5.3 SimplerEnv:跨平台仿真验证

SimplerEnv 基于 ManiSkill3 引擎,提供高保真物理仿真。UniVLA 的评估覆盖了四个核心任务:

  • Put Spoon on Towel
  • Put Carrot on Plate
  • Stack Green Block on Yellow Block
  • Put Eggplant in Yellow Basket

环境配置

# 安装 ManiSkill3 分支版本
git clone -b maniskill3 https://github.com/simpler-env/SimplerEnv.git
cd SimplerEnv
pip install --upgrade git+https://github.com/haosulab/ManiSkill.git
pip install -e .

# 复制 UniVLA 策略实现
cp -r /path/to/UniVLA/experiments/robot/simpler-bridge/policies/univla \
      simpler_env/policies/
cp /path/to/UniVLA/experiments/robot/simpler-bridge/real2sim_eval_maniskill3.py \
   simpler_env/

单任务评估示例

action_decoder_path="/path/to/univla-7b-224-sft-simpler-bridge/action_decoder.pt"
ckpt_path="/path/to/univla-7b-224-sft-simpler-bridge"

CUDA_VISIBLE_DEVICES=0 XLA_PYTHON_CLIENT_PREALLOCATE=false \
python real2sim_eval_maniskill3.py \
    --model="univla" \
    -e "PutSpoonOnTableClothInScene-v1" \
    -s 0 \
    --num-episodes 24 \
    --num-envs 1 \
    --action_decoder_path ${action_decoder_path} \
    --ckpt_path ${ckpt_path}

XLA_PYTHON_CLIENT_PREALLOCATE=false 防止 JAX 预分配显存,与 PyTorch 冲突。

5.4 真实机器人部署:从仿真到现实

文档专门提供了真实机器人部署指南(docs/real-world-deployment.md),基于 AgiLex 平台。虽然不同平台接口不同,但核心流程一致:

  1. 摄像头校准:确保视觉输入与训练时分布一致
  2. 动作解码器适配:实际机械臂的关节映射
  3. 推理优化:使用 TensorRT 或 vLLM 加速生成
  4. 安全监控:设置动作幅度和力反馈阈值

关键代码片段展示了如何加载模型并实时推理:

from prismatic.vla.action_utils import load_action_decoder
from prismatic.vla.datasets.rlds.utils import prepare_vla_obs

# 加载微调后的 VLA 和解码器
vla = load_vla("/path/to/finetuned_univla")
action_decoder = load_action_decoder("/path/to/action_decoder.pt")

# 循环读取摄像头和语言指令
for obs in robot.camera.stream():
    # 预处理观测
    vla_input = prepare_vla_obs(obs, task_language)
    
    # 生成潜在动作序列
    latent_actions = vla.generate(vla_input, max_new_tokens=20)
    
    # 解码为实际关节动作
    robot_actions = action_decoder.decode(latent_actions, obs)
    
    # 执行并监控安全
    robot.execute(robot_actions, safe_mode=True)

六、性能拆解:数字背后的真实含义

文档给出了三组详细的性能对比,我们逐一解读其实际意义。

6.1 LIBERO 基准:碾压级优势

先看完整数据集训练结果:

模型 LIBERO-Spatial LIBERO-Object LIBERO-Goal LIBERO-Long 平均成功率
Diffusion Policy 78.3% 92.5% 68.3% 50.5% 72.4%
Octo 78.9% 85.7% 84.6% 51.1% 75.1%
OpenVLA 84.7% 88.4% 79.2% 53.7% 76.5%
TraceVLA 84.6% 85.2% 75.1% 54.1% 74.8%
UniVLA (Ours) 96.5% 96.8% 95.6% 92.0% 95.2%

解读:在长程任务(Long)上,UniVLA 的 92.0% 成功率远超其他模型的 50-54% 水平。这说明潜在动作空间对多步骤规划有本质性帮助。其他模型可能在局部操作上表现尚可,但缺乏对任务全局的抽象理解能力。

6.2 数据效率:小样本学习的胜利

更惊人的是数据受限场景下的表现。在 LIBERO-Goal 和 LIBERO-Long 任务中,分别只用 10%、20%、50% 数据训练:

模型 Goal 10% Goal 20% Goal 50% Long 10% Long 20% Long 50%
ATM 64.3% 77.1% 36.5% 39.1%
OpenVLA 61.4% 66.0% 77.0% 11.6% 22.4% 36.6%
OpenVLA-OFT 76.8% 88.2% 91.1% 43.0% 62.2% 77.8%
UniVLA 86.3% 90.4% 93.1% 62.4% 71.4% 87.0%

解读:在仅有 10% 数据时,UniVLA 在最难的 Long 任务上仍能达到 62.4% 成功率,而基础 OpenVLA 只有 11.6%。这表明潜在动作的抽象表示极大降低了对数据量的需求。模型不需要看一万次”打开抽屉”的演示,就能理解这个动作的本质。

6.3 SimplerEnv:物理交互的真实考验

在 SimplerEnv 的四个任务中,评估细分为”抓取成功率”和”最终任务成功率”:

模型 抓取勺子 任务成功 抓取胡萝卜 任务成功 抓取绿块 任务成功 抓取茄子 任务成功 平均
RT-1-X 16.7% 0.0% 20.8% 4.2% 8.3% 0.0% 0.0% 0.0% 1.1%
Octo-Base 34.7% 12.5% 52.8% 8.3% 31.9% 0.0% 66.7% 43.1% 16.0%
Octo-Small 77.8% 47.2% 27.8% 9.7% 40.3% 4.2% 87.5% 56.9% 30.0%
OpenVLA 4.1% 0.0% 33.3% 0.0% 12.5% 0.0% 8.3% 4.1% 1.0%
RoboVLM 54.2% 29.2% 25.0% 25.0% 45.8% 12.5% 58.3% 58.3% 31.3%
UniVLA 76.4% 52.8% 79.2% 55.6% 66.7% 2.8% 93.0% 80.6% 47.9%

注意:在”堆叠绿块到黄块”任务中,所有模型表现都不佳(UniVLA 仅 2.8% 成功率),说明精确堆叠对当前方法仍是挑战。但在抓取和放置任务上,UniVLA 展现了强大的鲁棒性,特别是茄子任务的成功率达到 80.6%,远超其他模型。

七、常见问题深度解答(FAQ)

基于文档内容和用户可能的困惑,我们整理出以下问答。

Q1: UniVLA 和 OpenVLA 的根本区别是什么?

A: 核心区别在于动作表示。OpenVLA 直接预测低层关节动作,像背字典;UniVLA 先预测高层意图(潜在动作),再解码为具体动作,像理解语法再组句。这使得 UniVLA 在跨机器人迁移和数据效率上优势明显。文档明确指出训练成本仅为 OpenVLA 的 5%,但在 LIBERO-Long 上性能提升近一倍。

Q2: 预训练模型支持哪些机器人形态?

A: 完整版 UniVLA(univla-7b)在 OXE 的多个操纵和导航数据集、Ego4D 人类视频上训练,理论上支持任何能提取视觉观测和语言指令的机器人。但真机部署需要微调动作解码器。文档提供了 AgiLex 平台的部署指南,其他平台需要自行适配。

Q3: 如果我的计算资源有限,如何复现结果?

A: 最省资源的路线是:直接使用预训练 checkpoint + 仅微调动作解码器。文档中 LIBERO 和 CALVIN 的微调都支持 8 张 A100 完成。若资源更少,可以:

  • 使用 univla-7b-bridge-ptunivla-7b-human-pt 这种子集预训练模型
  • finetune_libero.py 中减小 batch_size 并增大 grad_accumulation_steps
  • 使用 LoRA 秩更低(如 8 或 16)的设置

Q4: 潜在动作模型的代码本大小如何影响性能?

A: 文档未明确给出代码本大小 C 的具体值,但从动作令牌设计 {ACT_0, ACT_1, ..., ACT_C} 看,这是一个超参数。通常代码本越大,动作表示越精细,但训练难度增加。实践中建议从 512 或 1024 开始,根据重建损失和下游任务表现调整。两阶段训练的设计也让代码本优化更稳定。

Q5: 为什么长程任务(Long)上提升最显著?

A: 因为潜在动作天然适合层级规划。想象一个 10 步任务,低层方法要精确预测每一步关节角度,错误会累积;UniVLA 只需预测 10 个高层意图(如”抓取→移动→放置→返回”),每层意图对应一个短动作序列,规划难度大大降低。这解释了为什么 LIBERO-Long 上 92.0% 对 53.7% 的压倒性优势。

Q6: 如何验证潜在动作的可解释性?

A: 虽然文档没直接给可视化工具,但可以通过以下方式分析:

  1. 固定视频输入,扰动潜在动作令牌,观察解码后的物理动作变化
  2. 在 Ego4D 视频上提取令牌,聚类分析相似动作的令牌分布
  3. 使用 t-SNE 降维可视化代码本向量,看是否能分离出”抓取”、”推动”等语义

Q7: 模型支持多模态输入吗?比如深度图或触觉反馈?

A: 当前文档只提到 RGB 图像和语言指令。但从架构设计看,VQ-VAE 的编码器可以扩展。如果需要加入深度图,可以修改 prepare_vla_obs 函数,将深度作为额外通道输入;触觉数据可以编码为令牌序列与视觉特征拼接。这需要重新训练或微调第一阶段模型。

Q8: 动作解码器的延迟如何?能满足实时控制吗?

A: 文档未提供具体延迟数字,但强调了解码器仅有 1200 万参数。在现代 GPU 上,这个小网络的推理时间通常在 5-10 毫秒级别。主要延迟来自 VLA 主干网络的自回归生成(约 100-200ms)。对于非高速场景(如桌面操作),这已足够实时。

Q9: 如何处理训练数据中不同机器人的动作频率差异?

A: 这是跨机器人学习的关键挑战。潜在动作模型通过离散化天然对齐了不同频率:无论原始数据是 10Hz 还是 50Hz,都被编码为相似长度的令牌序列。文档中”跨形态视频”的学习就是指这个。时间维度的下采样/上采样由 VQ-VAE 的编码器/解码器自动处理。

Q10: 模型能否处理动态环境和移动目标?

A: LIBERO 和 CALVIN 都是静态桌面环境,SimplerEnv 有部分动态物体。从架构看,UniVLA 的 VLM 主干(DINO-SigLIP + LLaMA)具备理解动态场景的能力,因为 Ego4D 训练数据包含大量人体运动。但实际表现取决于微调数据是否覆盖类似分布。要让机器人追移动目标,需要在后训练数据中加入此类示例。

八、总结:UniVLA 的现在与未来

通读整份文档,UniVLA 的核心价值可以概括为:用抽象对抗复杂性。它不试图让机器人记住世界的一切细节,而是学习一种能概括共性的动作语言。这种哲学带来三重实际好处:

  1. 数据效率:用更少的数据达到更高的性能,这对机器人领域至关重要
  2. 迁移能力:一次训练,多处部署,降低每个新场景的边际成本
  3. 可扩展性:轻量化解码器让高校和小型实验室也能参与研究

技术实现上,三阶段流水线清晰分离了表示学习、策略规划和执行适配,每阶段都有明确输入输出,便于调试和改进。模型库中提供的 9 个版本(从基础到各下游任务微调)构成了完整的研究闭环。

当然,挑战依然存在。文档中提到的”堆叠任务”性能不佳、OpenVLA 在某些抓取任务上表现奇怪(仅 4.1% 成功率),都指向当前方法的边界——精细力控和物理推理仍是难点。此外,真实世界部署的复杂性(光照变化、机械磨损、传感器噪声)需要更多工程工作。

对于希望采用 UniVLA 的团队,建议路线是:

  • 研究验证:从 LIBERO 或 CALVIN 微调开始,快速验证算法改进
  • 工业应用:在 BridgeV2 数据上微调,适配 WidowX 等常见机械臂
  • 前沿探索:尝试将潜在动作应用于人形机器人导航-操纵一体化任务

正如团队在致谢中对 OpenVLA 的感谢所示,这个领域是站在巨人肩膀上前进。UniVLA 不是终点,而是让视觉-语言-动作模型走向实用化的关键一步。未来,我们或许能看到机器人真正理解”整理房间”意味着收纳、清扫、归位等一系列意图的组合,而不再是一句空话。


模型下载与代码仓库

  • 预训练模型:https://huggingface.co/qwbu
  • 源代码:https://github.com/OpenDriveLab/UniVLA
  • 技术论文:https://arxiv.org/pdf/2505.06111

如需引用本文内容,请参考:

@article{bu2025univla,
  title={Univla: Learning to act anywhere with task-centric latent actions},
  author={Bu, Qingwen and Yang, Yanting and Cai, Jisong and Gao, Shenyuan and Ren, Guanghui and Yao, Maoqing and Luo, Ping and Li, Hongyang},
  journal={arXiv preprint arXiv:2505.06111},
  year={2025}
}