From Vision-Language-Action Models to a Real-World Robot Learning Stack
Python
309
10 commits
updated Aug 4, 2026
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
[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, the Hy-Embodied-0.5-VLA-UMI and Hy-Embodied-0.5-VLA-RoboTwin models, and the Hy-Embodied-0.5-VLA-Data egocentric UMI dataset (2K+ hours)!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.
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)
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
pip install -r requirements.txt
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
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.
| 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.
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 |
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).
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
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.
| 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.
First, we represent the RoboTwin frames in the UMI world:
$$ W = \begin{bmatrix} 0 & 1 & 0 \ -1 & 0 & 0 \ 0 & 0 & 1 \end{bmatrix} $$
$$ P = \begin{bmatrix} 0 & 0 & 1 \ 1 & 0 & 0 \ 0 & 1 & 0 \end{bmatrix} $$
Let $p_{\text{native}}$ and $R_{\text{native}}$ be the position vector and rotation matrix in RoboTwin, and $q_{\text{native}}$ be its quaternion. The mapping to UMI ($p_{\text{umi}}$, $R_{\text{umi}}$, $q_{\text{umi}}$) is:
Since $W$ and $P$ are orthogonal matrices, their inverses are simply their transposes ($W^{-1} = W^T$, $P^{-1} = P^T$). The inverse mapping is:
Hy-VLA supports multiple training workflows, each with corresponding evaluation results.
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
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 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.
| 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:
| 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.
| 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.
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:
| 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.
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.
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.
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}
}
Released under the Apache-2.0 License. See LICENSE for full terms.
171 followers ยท starred Aug 2026
2,136 followers ยท starred Aug 2026
46 followers ยท starred Jun 2026
44 followers ยท starred Jul 2026
From Vision-Language-Action Models to a Real-World Robot Learning Stack
Python
309
10 commits
updated Aug 4, 2026
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
[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, the Hy-Embodied-0.5-VLA-UMI and Hy-Embodied-0.5-VLA-RoboTwin models, and the Hy-Embodied-0.5-VLA-Data egocentric UMI dataset (2K+ hours)!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.
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)
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
pip install -r requirements.txt
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
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.
| 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.
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 |
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).
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
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.
| 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.
First, we represent the RoboTwin frames in the UMI world:
$$ W = \begin{bmatrix} 0 & 1 & 0 \ -1 & 0 & 0 \ 0 & 0 & 1 \end{bmatrix} $$
$$ P = \begin{bmatrix} 0 & 0 & 1 \ 1 & 0 & 0 \ 0 & 1 & 0 \end{bmatrix} $$
Let $p_{\text{native}}$ and $R_{\text{native}}$ be the position vector and rotation matrix in RoboTwin, and $q_{\text{native}}$ be its quaternion. The mapping to UMI ($p_{\text{umi}}$, $R_{\text{umi}}$, $q_{\text{umi}}$) is:
Since $W$ and $P$ are orthogonal matrices, their inverses are simply their transposes ($W^{-1} = W^T$, $P^{-1} = P^T$). The inverse mapping is:
Hy-VLA supports multiple training workflows, each with corresponding evaluation results.
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
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 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.
| 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:
| 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.
| 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.
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:
| 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.
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.
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.
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}
}
Released under the Apache-2.0 License. See LICENSE for full terms.
171 followers ยท starred Aug 2026
2,136 followers ยท starred Aug 2026
46 followers ยท starred Jun 2026
44 followers ยท starred Jul 2026