Normalized dual-arm EEF: [xyz(3) + rot6d(6) + gripper(1)] * 2
July 9, 2026 ยท View on GitHub
Hy-Embodied-0.5-VLA
From Vision-Language-Action Models to a Real-World Robot Learning Stack
Tencent Robotics X ร Tencent Hy Team
https://github.com/user-attachments/assets/fdd1966c-8453-4f6a-9758-238076d08ac4
๐ฅ Updates
[2026-07-09]๐ค Added RoboDojo benchmark support โ including HDF5 dataset loader, training / evaluation scripts, and a policy adapter. Thanks to XPolicyLab for the contribution![2026-06-16]๐ Added ModelScope links for all models and data.[2026-06-15]๐ We have released Hy-Embodied-0.5-VLA โ including the codebase, theHy-Embodied-0.5-VLA-UMIandHy-Embodied-0.5-VLA-RoboTwinmodels, and theHy-Embodied-0.5-VLA-Dataegocentric UMI dataset (2K+ hours)!
๐ Abstract
We introduce Hy-Embodied-0.5-VLA (Hy-VLA) โ an end-to-end Vision-Language-Action system that spans the full robot learning stack: data collection, model design, pre-training, supervised fine-tuning, RL post-training, and real-world deployment. Built on the Hy-Embodied-0.5 MoT backbone, Hy-VLA integrates a flow-matching action expert, a compact memory encoder for multi-frame history, and a delta-chunk action representation decoupled from embodiment-specific kinematics.
Powered by 10,000+ hours of high-fidelity UMI demonstrations collected via a custom fingertip interface with optical motion-capture, Hy-VLA achieves state-of-the-art results on the RoboTwin 2.0 benchmark (90.9% / 90.1% on Clean / Randomized) and demonstrates robust cross-embodiment transfer across four real-world robot platforms. Paired with FlowPRO preference optimization and an asynchronous inference framework, Hy-VLA establishes a scalable paradigm for continuous dexterous manipulation.
โญ Key Features
- ๐ง Unified VLA Architecture: Extends the Hy-Embodied-0.5 MoT backbone with a dual-tower flow-matching action expert. The VLM tower handles vision-language understanding while the action expert generates continuous action chunks โ all tied together through shared cross-modal attention.
- ๐ฏ Delta-Chunk Action Representation: Actions are predicted as relative-to-current-frame end-effector delta chunks, decoupling the policy from embodiment-specific kinematics and enabling seamless cross-embodiment transfer.
- ๐น Compact Memory Encoder: A parameter-free temporal-spatial attention mechanism interleaved within the ViT encoder compresses K-frame multi-view history into current-frame tokens, preserving temporal context without inflating the token budget.
- ๐ Hy-UMI-10K Dataset: 10K+ hours of sub-millimeter precision dual-arm demonstrations across 70+ tasks, collected with a custom fingertip UMI rig tracked by an optical motion-capture system. 2K+ hours are publicly released.
- ๐ FlowPRO Post-Training (under review): A critic-free preference optimization algorithm that converts real-robot failure interventions into rapid policy improvement without reward models.
- โก Asynchronous Deployment Stack: Producer-consumer inference with cubic Bรฉzier chunk stitching enables high-frequency closed-loop control across heterogeneous robot platforms.
๐ฆ Repository Contents
Hy-Embodied-0.5-VLA/
โโโ hy_vla/ # Core model definition, training, and inference
โ โโโ modeling_hy_vla.py # HyVLA model class
โ โโโ modeling_dual_tower.py # Dual-tower transformer (VLM + action expert)
โ โโโ configuration_hy_vla.py # Model configuration
โ โโโ space_time_attention.py # Temporal-spatial attention for memory encoder
โ โโโ data/ # Dataloader and dataset utilities
โ โโโ config/ # YAML configuration files
โ โโโ hunyuan_vl_mot/ # Vendored Hy-Embodied VLM backbone (fallback)
โโโ scripts/ # Training, evaluation, and preprocessing scripts
โ โโโ quick_start.py # Fast smoke-test for a released checkpoint
โ โโโ train_umi_vlm.sh # Stage-1 pre-training launcher
โ โโโ train_robotwin_vlm.sh # Stage-2 SFT from VLM backbone
โ โโโ train_robotwin_umi.sh # Stage-2 SFT from UMI pretrain
โ โโโ train_robodojo_umi.sh # Stage-2 SFT from UMI pretrain on RoboDojo HDF5
โ โโโ train_table_vlm.sh # Single-table fast-iteration training
โ โโโ eval_robotwin_test.sh # Quick RoboTwin regression (6 tasks)
โ โโโ eval_robotwin_full.sh # Full RoboTwin sweep (50 tasks ร 100 rollouts)
โ โโโ compute_norm_umi.py # Pre-compute norm stats from UMI data
โ โโโ compute_norm_robotwin.py # Pre-compute norm stats from RoboTwin data
โ โโโ compute_norm_robodojo.py # Pre-compute norm stats from RoboDojo data
โ โโโ vis_umi_episode.py # Render a UMI episode as MP4
โ โโโ vis_robotwin_episode.py # Render a RoboTwin episode as MP4
โ โโโ vis_robodojo_episode.py # Render a RoboDojo episode as MP4
โโโ robotwin_eval/ # RoboTwin adapter for evaluation
โโโ robodojo_eval/ # RoboDojo adapter for evaluation
โโโ assets/ # Example data and index files
โโโ pyproject.toml # Python project configuration (uv/pip)
๐ ๏ธ Installation
Prerequisites
- ๐ฅ๏ธ OS: Linux (recommended)
- ๐ Python: 3.12 (recommended and tested)
- โก CUDA: 12.x
- ๐ฅ PyTorch: โฅ 2.4
- ๐ฎ GPU: NVIDIA GPU with CUDA support (โฅ 16 GB VRAM recommended)
Install via uv (recommended)
git clone https://github.com/Tencent-Hunyuan/Hy-Embodied-0.5-VLA
cd Hy-Embodied-0.5-VLA
# One-off: install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Materialize the virtual environment
uv sync
Install via pip
pip install -r requirements.txt
๐ Quick Start
The fastest way to verify a fresh install is the bundled smoke test:
import torch
from huggingface_hub import snapshot_download
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()
# (B, K, C, H, W); K=6 history slots
img = torch.zeros(1, 6, 3, 224, 224, device="cuda", dtype=torch.bfloat16)
# Normalized dual-arm EEF: [xyz(3) + rot6d(6) + gripper(1)] * 2
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)
Or simply:
python scripts/quick_start.py
๐ค Model
Hy-VLA follows the Vision-Language-Action paradigm built on three components:
Backbone โ Hy-Embodied-0.5 MoT. A Mixture-of-Transformers architecture with modality-adaptive computation. Visual tokens are routed through dedicated vision-specific parameters while text tokens use the original language parameters; cross-modal interaction is limited to shared self-attention layers. The backbone encodes images at native resolution via Hy-ViT 2.0.
Action Expert โ Dual-Tower Flow Matching. Rather than discretizing actions into language tokens, a dedicated 370M-parameter action expert models the continuous action distribution via conditional flow matching. The VLM tower and action expert tower share attention, allowing grounded vision-language context to guide continuous action generation. At inference, actions are generated by integrating the learned velocity field over 10 Euler steps with KV-cached observation prefixes.
Compact Memory Encoder. Interleaved temporal-spatial attention within the ViT encoder compresses K-frame multi-view history. Temporal attention (causal across frames) and spatial attention (bidirectional within each frame) reuse the same QKV projections โ zero new parameters relative to the single-image encoder. Past-frame tokens are discarded after temporal mixing, keeping the VLM token count constant regardless of history length.
Released Checkpoints
| Model | HuggingFace | ModelScope | Description |
|---|---|---|---|
| Hy-VLA-UMI | tencent/Hy-Embodied-0.5-VLA-UMI | Tencent-Hunyuan/Hy-Embodied-0.5-VLA-UMI | Pre-trained on the Hy-UMI-10K corpus; intended as a generalist starting point for fine-tuning |
| Hy-VLA-RoboTwin | tencent/Hy-Embodied-0.5-VLA-RoboTwin | Tencent-Hunyuan/Hy-Embodied-0.5-VLA-RoboTwin | Post-trained on the RoboTwin 2.0 50-task benchmark |
Both checkpoints are self-contained โ they ship their own tokenizer.json, vlm_config_dict, chat_template.jinja, and pre-computed normalization statistics (norm_stats.pkl). If needed, you can regenerate normalization stats on your own data using scripts/compute_norm_umi.py.
๐ Data
Hy-VLA is pre-trained on Hy-Embodied-0.5-VLA-Data, a large-scale bimanual manipulation dataset with 250K+ episodes spanning 10K+ hours of dual-arm teleoperation trajectories, wiht 2K+ hours released. The open-source release contains approximately one-fifth of the full training corpus, partitioned into 22 Lance-format tables compatible with LeRobot v3.0.
| Attribute | Value |
|---|---|
| Format | Lance (LeRobot v3.0 schema) |
| Resolution | 240 ร 424 px |
| Cameras | cam_high (head), cam_left_wrist, cam_right_wrist |
| State | 16-dim dual-arm EEF (pos + quat + gripper per arm) |
| FPS | 30 |
| Total Episodes | 250K+ |
| Total Duration | 2000+ hours |
Data Loading Quick Start
LanceTableReader reads a single Lance table (local or HF Hub):
from hy_vla.data.umi_dataset import LanceTableReader
# Local directory
reader = LanceTableReader(root="./table_000")
# HF Hub
reader = LanceTableReader(
repo_id="tencent/Hy-Embodied-0.5-VLA-Data",
table_name="table_000",
)
# Access
frame = reader[42] # single frame dict
episode = reader.get_episode(3) # all frames of episode 3
Also compatible with raw
lance,lancedb, andlerobot-lancedb(LeRobotLanceDataset).
Example Episode Visualization
https://github.com/user-attachments/assets/d135a30a-fc5f-43e1-8cfd-616440e7180d
You can render any episode locally:
# Use the HF Hub dataset, pick table_000 episode 666
python scripts/vis_umi_episode.py -t table_000 -e 666
# Local Lance root
python scripts/vis_umi_episode.py /path/to/Hy-Embodied-0.5-Data -e 0 --no-3d
๐ Coordinate System
Below we document the axis mappings and provide a reference transform for converting between the UMI and RoboTwin systems.
The transform below is provided as a reference for aligning with the UMI coordinate system. Our released checkpoints do not apply any special pre-processing โ the network naturally adapts to different coordinate conventions after sufficient training iterations.
Axis Mapping
| Dataset | World Forward | World Left | World Up | Local Forward | Local Left | Local Up | Gripper Open | Gripper Close |
|---|---|---|---|---|---|---|---|---|
| UMI | +X | +Y | +Z | +Z | +X | +Y | 0 | 90 |
| RoboTwin | +Y | -X | +Z | +X | +Y | +Z | 1 | 0 |
Note: The gripper value represents the travel distance of the parallel gripper in millimeters (mm).
0indicates the gripper is fully open, and90indicates it is fully closed.
Coordinate Transform
First, we represent the RoboTwin frames in the UMI world:
- World Rotation Matrix (): Aligns the global world frames.
- Local Permutation Matrix (): Permutes the local axes to redefine the end-effector's local orientation.
From RoboTwin to UMI
Let and be the position vector and rotation matrix in RoboTwin, and be its quaternion. The mapping to UMI (, , ) is:
- Position:
- Rotation Matrix:
- Quaternion: (where denotes quaternion multiplication)
From UMI to RoboTwin (Inverse Transform)
Since and are orthogonal matrices, their inverses are simply their transposes (, ). The inverse mapping is:
- Position:
- Rotation Matrix:
- Quaternion:
๐๏ธ Training & Evaluation
Hy-VLA supports multiple training workflows, each with corresponding evaluation results.
Pre-training
The VLM tower is initialized from tencent/HY-Embodied-0.5 and the action expert is randomly initialized. Training uses the full 10K-hour UMI corpus under the flow-matching objective (Eq. 1) with history length K=1 and action chunk horizon H=50 at 10 Hz. The model is trained for 200K steps with a global batch size of 1,024.
# Single-table fast iteration
export TABLE_NAME=table_001
bash scripts/train_table_vlm.sh
# Full corpus (64 GPUs)
export CHIEF_IP=<chief-ip> INDEX=0
bash scripts/train_umi_vlm.sh
Supervised Fine-Tuning
Starting from the pre-trained checkpoint, SFT activates the compact memory encoder (K=6 frames) and fine-tunes on task-specific demonstrations. For real-world deployment, we train for 60K steps with batch size 32; for RoboTwin 2.0, we use batch size 128 with action downsampling (stride 3).
# --- Training ---
export CHIEF_IP=<chief-ip> INDEX=0
bash scripts/train_robotwin_umi.sh # Fine-tune from Hy-VLA-UMI on RoboTwin
bash scripts/train_robodojo_umi.sh # Fine-tune from Hy-VLA-UMI on RoboDojo HDF5
# --- Evaluation ---
export ROBOTWIN_DIR=/path/to/RoboTwin
export CKPT_PATH=tencent/Hy-Embodied-0.5-VLA-RoboTwin
# Quick regression (6 tasks ร 10 rollouts)
bash scripts/eval_robotwin_test.sh
# Full sweep (50 tasks ร 100 rollouts, 8 GPUs)
bash scripts/eval_robotwin_full.sh
Note: The eval scripts automatically symlink
Hy-VLA/robotwin_eval/โRoboTwin/policy/hy_vla, so that RoboTwin'seval_policy.pycan discover the Hy-VLA policy adapter without any manual configuration.
RoboDojo โ Simulated Bimanual Manipulation
RoboDojo fine-tuning uses the HDF5 layout consumed by
hy_vla.data.robodojo_dataset.RoboDojoVLADataset and the config
hy_vla/config/dataset/robodojo_hdf5.yaml. Generate normalization statistics
with scripts/compute_norm_robodojo.py, then launch SFT:
python scripts/compute_norm_robodojo.py \
--hdf5-dir /path/to/robodojo/hdf5 \
--output /path/to/experiments/hy_vla_robodojo_umi/norm_stats.pkl \
--downsample-rate 1 \
--chunk-size 25 \
--umi-coord-frame
CHIEF_IP=127.0.0.1 INDEX=0 NUM_MACHINES=1 NPROC_PER_NODE=8 \
HDF5_DIR=/path/to/robodojo/hdf5 \
EXP_ROOT=/path/to/experiments \
NORM_PATH=/path/to/experiments/hy_vla_robodojo_umi/norm_stats.pkl \
bash scripts/train_robodojo_umi.sh
For RoboDojo evaluation, use robodojo_eval/deploy_policy.yml and the
robodojo_eval.deploy_policy hooks in your RoboDojo runner. The adapter packs
RoboDojo observations into Hy-VLA batches and returns RoboDojo EE action
dictionaries.
RoboTwin 2.0 โ Simulated Bimanual Manipulation
| Method | Clean | Randomized |
|---|---|---|
| ฯโ | 65.9 | 58.4 |
| ABot-M0 | 81.2 | 80.4 |
| ฯโ.โ | 82.7 | 76.8 |
| Qwen-VLA | 86.1 | 87.2 |
| LingBot-VLA | 86.5 | 85.3 |
| starVLA | 88.2 | 88.3 |
| Motus | 88.7 | 87.0 |
| JoyAI-RA | 90.5 | 89.3 |
| Hy-VLA | 90.9 | 90.1 |
Success rate (%) averaged over 100 rollouts per task ร 50 tasks. Best in bold.
We validate SFT across two deployment tracks:
- Track A (Intra-Embodiment): Fine-tune and evaluate on the same robot (Dobot X-Trainer, 4 tasks)
- Track B (Cross-Embodiment): Fine-tune only on UMI demonstrations and deploy to morphologically different robots (JAKA K1, Astribot S1)
Track A โ X-Trainer Real-World Tasks
| Method | Set the Table | Fold & Store Glasses | Zip Up the Pen Case | Insert Bottles |
|---|---|---|---|---|
| ฯโ | 79% | 67% | 48% | 80% |
| ฯโ.โ | 88% | 75% | 57% | 84% |
| Hy-Embodied (w/o UMI pretrain) | 80% | 65% | 43% | 70% |
| Hy-VLA (Ours) | 83% | 94% | 73% | 94% |
Four bimanual tasks on the Dobot X-Trainer. UMI pre-training provides significant gains on precision-critical tasks (glasses folding, zipper manipulation) compared to the baseline without UMI data.
Track B โ Cross-Embodiment Transfer
| Method | JAKA K1 ยท Organize Accessory | Astribot S1 ยท Clean Up Table |
|---|---|---|
| ฯโ | 88% | 87% |
| ฯโ.โ | 81% | 89% |
| Hy-Embodied (w/o UMI pretrain) | 38% | 44% |
| Hy-VLA (Ours) | 90% | 89% |
Cross-embodiment deployment to JAKA K1 and Astribot S1, fine-tuned only on UMI demonstrations without any target-robot teleoperation data. The ablation without UMI pre-training collapses, confirming that the large-scale UMI corpus is essential for embodiment-agnostic action priors.
RL Post-Training with FlowPRO
Beyond standard SFT, Hy-VLA supports FlowPRO โ a critic-free preference optimization algorithm (under review, code coming soon) that converts real-robot failure interventions into policy improvement. The RPRO loss directly contrasts preferred and dispreferred action chunks per state, with a symmetric proximal regularizer that prevents reward hacking.
FlowPRO operates iteratively:
- Collect preference pairs via teleoperated intervention-and-rollback
- Convert sparse corrections into dense per-state tuples via Smooth Interpolation
- Optimize with the RPRO loss on mixed batches
FlowPRO Results โ X-Trainer Real-World Tasks
| Method | Bottle | Cap | USB | Zip |
|---|---|---|---|---|
| DAgger | 93 ยฑ 2.1% / 27s | 88 ยฑ 1.8% / 29s | 86 ยฑ 2.4% / 25s | 83 ยฑ 2.0% / 55s |
| ฯโ.โ* | 95 ยฑ 1.5% / 24s | 95 ยฑ 1.2% / 27s | 95 ยฑ 1.4% / 23s | 89 ยฑ 1.6% / 45s |
| RPRO (Ours) | 99 ยฑ 0.6% / 16s | 99 ยฑ 0.7% / 21s | 98 ยฑ 0.9% / 22s | 94 ยฑ 1.1% / 37s |
Success rate (mean ยฑ std over 3 seeds, 100 rollouts each) and mean completion time after K=3 rounds of post-training on four X-Trainer bimanual tasks. RPRO achieves near-ceiling success rates with substantially shorter completion times.
Pre-Computing Normalization Statistics
Required before the first training run:
python scripts/compute_norm_umi.py \
--lance-source tencent/Hy-Embodied-0.5-VLA-Data \
--output norm_stats.pkl
The released checkpoints already ship with pre-computed norm stats. Use this script only if you are training on custom data.
๐ Acknowledgements
We thank the Hugging Face and LeRobot communities for their infrastructure and tooling. This work builds upon Hy-Embodied-0.5, FlowPRO, OpenPi and the RoboTwin 2.0 benchmark.
๐ Citation
If you find Hy-VLA useful for your research, please cite:
@article{zhang2026hy,
title={Hy-Embodied-0.5-VLA: From Vision-Language-Action Models to a Real-World Robot Learning Stack},
author={Zhang, He and Xiang, Lingzhu and Lin, Haitao and Huang, Zeyu and Wang, Minghui and Zhong, Dingyan and Dong, Yubo and Wu, Yihao and Rao, Yongming and Zhang, Dongsheng and others},
journal={arXiv preprint arXiv:2606.14409},
year={2026}
}
๐ License
Released under the Apache-2.0 License. See LICENSE for full terms.