开源双臂 VLA 全栈 Hy-VLA 论文解读:flow matching 动作专家 + delta-chunk 跨具身 + 2K 小时双臂数据,RoboTwin 90.9 / 真机跨具身 90%

0 阅读9分钟

论文:Hy-Embodied-0.5-VLA: From Vision-Language-Action Models to a Real-World Robot Learning Stack(完全开源,arxiv 预印 2026,73 stars) 会议:arxiv 预印 2026 链接:arxiv.org/abs/2606.14… GitHub:Tencent-Hunyuan/Hy-Embodied-0.5-VLA | 73 stars 作者:He Zhang, Lingzhu Xiang, Haitao Lin, Zeyu Huang, Minghui Wang 等(Tencent Robotics X、Tencent Hy Team)

目录

一、这篇论文解决了什么问题

VLA 模型发展到今天,一个尴尬的现实是:大多数工作只做了模型这一环,数据怎么来、训练怎么组织、部署怎么跑,全靠各家自己拼凑。你在 paper 里看到一个漂亮的 benchmark 数字,拿回自己实验室复现,发现从数据格式到推理框架全是坑。

腾讯 Robotics X 和 Hy 团队这回做了一件很实在的事——把「数据采集 → 模型设计 → 预训练 → SFT → RL 后训练 → 真机部署」整条链路打通,开源了每一个环节。Hy-Embodied-0.5-VLA(简称 Hy-VLA)不是一个只刷榜的模型,而是一套能跑起来的机器人学习栈。

更具体地说,它要解决的三个痛点:

  1. 跨具身迁移:同一个策略,能不能只在一个平台上采数据训练,换一台形态不同的机器人照样用?Hy-VLA 用 delta-chunk action representation 把动作从具体运动学参数里解耦出来。
  2. 长时序操作的时序上下文丢失:传统 VLA 只看当前帧,遇到需要回忆「刚才把东西放哪了」的场景就瞎了。Hy-VLA 用 parameter-free 的时序-空间注意力做 compact memory encoder,K 帧历史压缩进当前帧 token,不涨参数量。
  3. 大规模双臂数据的采集瓶颈:双臂协调操作的数据采集精度要求极高,Hy-VLA 搭了一套指尖 UMI + 光学动捕的采集方案,累计 10000+ 小时,开源 2000+ 小时。

二、关键方法

Hy-Embodied-0.5 MoT 骨干

Hy-VLA 的 VLM 塔继承自 Hy-Embodied-0.5,一个 Mixture-of-Transformers(MoT)架构。核心思路是视觉 token 和语言 token 各走自己的参数子集,只在共享 self-attention 层做跨模态交互。视觉编码器用的是 Hy-ViT 2.0,以原始分辨率编码图像,不做固定 crop。

MoT 的路由策略:每个 transformer block 里,视觉 token 经过 vision-specific FFN,文本 token 经过 language FFN,但 QKV 投影是共享的。这比全共享参数省计算,又比完全分离保留足够的跨模态对齐。

双塔 Flow-Matching Action Expert

这是 Hy-VLA 和 π₀ 系列、OpenVLA 最根本的区别。没有把动作离散化成语言 token,而是单独训练了一个 370M 参数的 action expert tower,用 conditional flow matching 建模连续动作分布。

训练时,flow matching 的目标函数:

LFM=Et,x0,x1[vθ(xt,t,c)(x1x0)2]\mathcal{L}_{FM} = \mathbb{E}_{t, x_0, x_1} \left[ \| v_\theta(x_t, t, c) - (x_1 - x_0) \|^2 \right]

其中 x0N(0,I)x_0 \sim \mathcal{N}(0, I) 是噪声,x1x_1 是目标动作 chunk,xt=(1t)x0+tx1x_t = (1-t)x_0 + t x_1cc 是 VLM 塔输出的条件向量(通过共享 cross-attention 注入),vθv_\theta 是待学的速度场。

推理时,从 x0x_0 出发沿速度场做 10 步 Euler 积分,observation prefix 用 KV-cache 加速。VLM 塔和 action expert 共享 attention 层,语言-视觉的 grounded context 能直接引导连续动作生成。

Delta-Chunk Action Representation

动作表示为相对当前帧末端执行器的 delta chunk:Δa=at:t+Hat\Delta a = a_{t:t+H} - a_t,其中 H=50H=50(10 Hz 下 5 秒的 horizon)。16 维状态空间 = [xyz(3) + rot6d(6) + gripper(1)] × 2(双臂)。

这种表示有两个好处:一是去掉了不同机器人的基座坐标系差异,使得 UMI 采的数据天然适配 JAKA K1、Astribot S1 这类形态完全不同的平台;二是 delta 量级小,flow matching 的速度场更容易学。

Compact Memory Encoder

在 ViT encoder 内部插入时序-空间交错注意力,把 K 帧多视角历史压缩到当前帧 token 里:

  • 时序注意力(帧间 causal):当前帧 token 只 attend 到之前帧的对应空间位置
  • 空间注意力(帧内 bidirectional):同一帧内的 token 做 full self-attention

关键设计:时序注意力和空间注意力复用同一组 QKV 投影——零新增参数。历史帧 token 在时序混合后直接丢弃,VLM 塔的 token 数量恒定,不受 K 影响。SFT 阶段激活 K=6。

FlowPRO RL 后训练

SFT 之后,Hy-VLA 支持 FlowPRO 做偏好优化——一种无 critic 的方法,直接对比「好」和「坏」的 action chunk。流程:

  1. 遥操作介入失败 rollout,收集 (preferred, dispreferred) 对
  2. Smooth Interpolation 把稀疏修正信号变成稠密的 per-state tuple
  3. RPRO loss 在混合 batch 上优化,对称 proximal 正则项防止 reward hacking

LRPRO=logσ(βlogπθ(a+s)πref(a+s)βlogπθ(as)πref(as))\mathcal{L}_{RPRO} = -\log \sigma \left( \beta \log \frac{\pi_\theta(a^+ | s)}{\pi_{ref}(a^+ | s)} - \beta \log \frac{\pi_\theta(a^- | s)}{\pi_{ref}(a^- | s)} \right)

FlowPRO 代码暂未开源(标注 under review)。 在这里插入图片描述

三、实验结果

RoboTwin 2.0 仿真基准

50 个双臂操作任务,每个任务 100 次 rollout:

方法CleanRandomized
π₀65.958.4
ABot-M081.280.4
π₀.₅82.776.8
Qwen-VLA86.187.2
starVLA88.288.3
JoyAI-RA90.589.3
Hy-VLA90.990.1

Clean 和 Randomized 两个设定下都是 SOTA。Randomized 设定下,π₀.₅ 从 82.7 掉到 76.8(掉了 6 个点),Hy-VLA 只掉 0.8 个点——鲁棒性差距明显。

真机 Track A:同具身(Dobot X-Trainer)

方法Set the TableFold & Store GlassesZip Up the Pen CaseInsert Bottles
π₀79%67%48%80%
π₀.₅88%75%57%84%
Hy-Embodied (w/o UMI)80%65%43%70%
Hy-VLA83%94%73%94%

注意「Fold & Store Glasses」和「Zip Up the Pen Case」这两个精细操作任务:去掉 UMI 预训练的 ablation 只有 65% 和 43%,加了 UMI 数据后跳到 94% 和 73%。Set the Table 上 π₀.₅ 比 Hy-VLA 高 5 个点,说明大规模 UMI 数据对粗粒度任务收益有限,但精细任务依赖它。

真机 Track B:跨具身迁移

方法JAKA K1 · Organize AccessoryAstribot S1 · Clean Up Table
π₀88%87%
π₀.₅81%89%
Hy-Embodied (w/o UMI)38%44%
Hy-VLA90%89%

没有 UMI 预训练的版本直接崩到 38%/44%,几乎不可用。这证实了大规模 UMI 数据是跨具身迁移的根基——不是架构起作用,是数据。

FlowPRO 后训练效果

方法BottleCapUSBZip
DAgger93% / 27s88% / 29s86% / 25s83% / 55s
π₀.₆95% / 24s95% / 27s95% / 23s89% / 45s
RPRO99% / 16s99% / 21s98% / 22s94% / 37s

3 轮 FlowPRO 之后,四个任务接近 ceiling,完成时间也大幅缩短。

失败模式

论文 ablation 透露的典型失败 case:

  1. 精细抓取对初始姿态敏感:Fold & Store Glasses 任务中,当眼镜初始朝向不利时,抓取成功率骤降。这是 delta-chunk 表示的固有限制——大范围旋转调整需要多步累积,误差会叠加。
  2. 长 horizon 任务遗忘初始指令:SFT 阶段 K=6 帧记忆在超长任务(超过 10 秒)中仍会丢失早期上下文,导致后半段偏离任务目标。
  3. 跨具身姿态空间不对齐:JAKA K1 和 Astribot S1 的关节限位不同,某些极限位姿 delta chunk 超出物理范围,action 被裁剪后轨迹偏移。

在这里插入图片描述

四、本地部署全流程

环境要求

  • OS:Linux(推荐)
  • Python:3.12
  • CUDA:12.x
  • PyTorch:≥ 2.4
  • GPU:≥ 16 GB VRAM(推理),训练需多卡(64 × A100 用于预训练)
  • 精度:bfloat16 推理
  • Action chunk size:H=50(10 Hz,5 秒 horizon)
  • 控制频率:30 FPS 采集,10 Hz 动作输出
  • 历史帧:K=6(SFT 阶段)

Step 1:克隆仓库

git clone https://github.com/Tencent-Hunyuan/Hy-Embodied-0.5-VLA
cd Hy-Embodied-0.5-VLA

Step 2:安装依赖

推荐用 uv:

curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync

或 pip:

pip install -r requirements.txt

注意:Hy-VLA 依赖一个 transformers 的定制 fork(支持 Hy-Embodied MoT backbone),pinned commit 在 requirements.txtpyproject.toml 里指定。如果 fork URL 访问不到,hy_vla/hunyuan_vl_mot/ 目录有 vendor 副本作 fallback。

Step 3:下载预训练模型

from huggingface_hub import snapshot_download

# UMI 预训练 checkpoint(通用起点)
snapshot_download("tencent/Hy-Embodied-0.5-VLA-UMI")

# RoboTwin 后训练 checkpoint
snapshot_download("tencent/Hy-Embodied-0.5-VLA-RoboTwin")

两个 checkpoint 都是自包含的,内置 tokenizer.jsonvlm_config_dictchat_template.jinja 和预计算的归一化统计 norm_stats.pkl

Step 4:推理验证

import torch
from hy_vla import HyVLA, HyVLAConfig

ckpt = snapshot_download("tencent/Hy-Embodied-0.5-VLA-RoboTwin")
config = HyVLAConfig.from_pretrained(ckpt)
policy = HyVLA.from_pretrained(ckpt, config=config)
policy.enable_video_encoder_if_needed()
policy = policy.to(device="cuda", dtype=torch.bfloat16).eval()

img = torch.zeros(1, 6, 3, 224, 224, device="cuda", dtype=torch.bfloat16)
state = torch.zeros((1, config.max_state_dim), device="cuda", dtype=torch.bfloat16)
batch = {
    "observation.images.top_head":   img,
    "observation.images.hand_left":  img,
    "observation.images.hand_right": img,
    "observation.state": state,
    "task": ["pick up the bottle"],
}

with torch.no_grad():
    actions = policy.forward_evaluate(batch)["pred"]
    actions = actions[..., : config.action_feature.shape[0]]
print(actions.shape)

或一键 smoke test:

python scripts/quick_start.py

Step 5:训练

预训练(需要 64 GPU,200K steps,batch size 1024):

export CHIEF_IP=<chief-ip> INDEX=0
bash scripts/train_umi_vlm.sh

单表快速迭代:

export TABLE_NAME=table_001
bash scripts/train_table_vlm.sh

SFT(60K steps,batch size 32 真机 / 128 RoboTwin):

bash scripts/train_robotwin_umi.sh   # 从 Hy-VLA-UMI fine-tune

Step 6:RoboTwin 评估

export ROBOTWIN_DIR=/path/to/RoboTwin
export CKPT_PATH=tencent/Hy-Embodied-0.5-VLA-RoboTwin

# 快速回归(6 tasks × 10 rollouts)
bash scripts/eval_robotwin_test.sh

# 全量评估(50 tasks × 100 rollouts,8 GPU)
bash scripts/eval_robotwin_full.sh

eval 脚本会自动把 robotwin_eval/ 软链到 RoboTwin 的 policy 目录,无需手动配置。

Step 7:自定义数据归一化

发布的 checkpoint 自带 norm_stats.pkl。如果你用自定义数据训练:

python scripts/compute_norm_lance.py \
    --lance-source tencent/Hy-Embodied-0.5-VLA-Data \
    --output norm_stats.pkl

关键训练超参

参数预训练SFT(真机)SFT(RoboTwin)
Steps200K60K-
Batch size102432128
Action horizon H505050(stride 3 下采样)
History K166
Flow matching steps--10(推理)
精度bfloat16bfloat16bfloat16
GPU64×A100多卡多卡

五、为什么重要

Hy-VLA 的意义不在于刷了几个点的 benchmark,而在于它验证了一条完整的技术路线:大规模人类示教数据 → flow matching 连续动作建模 → delta-chunk 跨具身 → 无参数记忆压缩 → RL 偏好优化 → 异步部署

这条路线里每一个环节都有代码、有权重、有数据。做 VLA 研究的人可以直接拿 Hy-UMI-10K 的 2K+ 小时双臂数据做预训练实验,拿 Hy-VLA-UMI checkpoint 做微调起点,拿 RoboTwin eval 脚本做对标。这比大多数「代码附在 appendix」的 paper 实在得多。

另一个值得关注的信号:跨具身迁移的 ablation 结果。没有 UMI 预训练的版本只有 38%/44%,加了以后跳到 90%/89%。这直接说明——不是架构创新让跨具身成为可能,是大规模示教数据。对整个领域来说,这个结论比任何消融实验都重要。

六、适用场景与机器人平台

最适合

  • 双臂协调操作(折叠、插拔、装配类任务)
  • 需要从 UMI 遥操作数据迁移到不同真机平台的场景
  • RoboTwin 2.0 benchmark 的复现和改进
  • 需要 flow matching 连续动作输出的精细操作

已验证平台

  • Dobot X-Trainer(同具身 SFT + 部署)
  • JAKA K1(跨具身,只用 UMI 数据微调)
  • Astribot S1(跨具身,同上)
  • UMI 指尖采集设备(数据采集端)

数据格式:Lance(LeRobot v3.0 schema),22 张表,3 视角(head + left_wrist + right_wrist),240×424 分辨率,30 FPS。兼容 LeRobot、lancedb 生态。

不太适合

  • 单臂操作(模型为双臂设计,state dim 固定 16D)
  • 非操作类移动任务(导航、巡逻等)
  • 4DoF 以下简单夹爪(模型假设至少 6DoF + gripper 的末端表示)

七、局限

  1. 双臂绑定:16 维 state 空间写死了双臂结构,单臂或更多臂都要改模型代码。
  2. FlowPRO 未开源:RL 后训练部分只给了文字描述和结果,代码标注 under review,目前无法复现 99% 的后训练数字。
  3. 数据只开源了 1/5:训练用 10K+ 小时,开源 2K+ 小时。虽然 2K 小时在 VLA 领域已经很大了,但和完整训练集的差距意味着直接复现 SOTA 数字需要自己补数据。
  4. 训练成本高:预训练 200K steps × batch 1024 需要 64 张 A100,SFT 也要多卡。个人实验室跑全量预训练不太现实。
  5. 分辨率偏低:数据集图像 240×424,对需要极细视觉特征的任务(比如读刻度盘、辨识微小标记)可能不够。
  6. 长 horizon 仍受限于 K=6:记忆编码只看 6 帧(约 0.6 秒历史),对超过 10 秒的长任务仍有遗忘问题,论文自己也承认了这一点。

关注我,每周更新论文深度解读 + 本地部署指南。

有什么论文想看解读?评论区告诉我。