LeRobot documentation

X-VLA: Herhangi bir robot, herhangi bir görev için tasarlanmış ilk yumuşak istemli robot temel modeli

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

X-VLA: Herhangi bir robot, herhangi bir görev için tasarlanmış ilk yumuşak istemli robot temel modeli

Genel Bakış

Yıllardır robotik, doğal insan talimatlarını takip edebilen ve birçok ortamda ve robot gövdesinde çevik bir şekilde çalışabilen ajanlar inşa etmeyi hedeflemektedir. LLM ve VLM alanındaki son çığır açıcı gelişmeler, bu temel model mimarilerini eylemlere dayandırarak bedensel kontrole genişletme yoluyla ilerleme yolunu işaret etmektedir. Bu durum, geniş semantik anlama ile sağlam manipülasyon becerilerini birleştirebilecek tek bir genelci model umuduyla, Görüntü-Dil-Eylem (VLA) modellerinin yükselişine yol açmıştır.

Ancak bu tür modelleri eğitmek zordur. Robot verileri, platformlar, sensörler, gövde yapıları ve toplama protokolleri arasında parçalanmış durumdadır. Heterojenlik her yerde kendini gösterir: farklı kol yapılandırmaları, farklı eylem uzayları, farklı kamera kurulumları, farklı görsel alanlar ve farklı görev dağılımları. Bu tutarsızlıklar, ön eğitimi istikrarsız kılan ve uyarlama işlemini güvenilir olmayan hale getiren büyük dağılım kaymalarına yol açar.

Meta öğrenme ve prompt öğrenmesinden ilham alarak şu soruyu soruyoruz: “Bir VLA modeli, LLM’lerin görevleri öğrenme biçiminde olduğu gibi, promptlar aracılığıyla her robotun ve veri setinin yapısını öğrenebilseydi ne olurdu?”

X-VLA, her donanım kurulumunu bir “görev” olarak ele alan ve bunu küçük bir öğrenilebilir gömme kümesiyle kodlayan, yumuşak istemli (soft-prompted) bir akış eşleştirme (flow-matching) VLA çerçevesidir. Bu Yumuşak İstemler, vücut (embodiment) ve alan bazlı farklılıkları yakalayarak Transformer'ı çok modlu füzyonun en erken aşamalarından itibaren yönlendirir. Bu mekanizma sayesinde X-VLA, çeşitli robot morfolojilerini, veri türlerini ve sensör kurulumlarını tek bir birleşik mimari içinde uzlaştırabilir.

XVLA Architecture

Saf Transformer kodlayıcılarından inşa edilen X-VLA, model boyutu ve veri seti çeşitliliğiyle doğal olarak ölçeklenir. 6 simülasyon benchmark'ı ve 3 gerçek robot üzerinde, Soft Prompts, donanım ve alan farklılıklarını ele alma konusunda mevcut yöntemleri tutarlı bir şekilde geride bırakır. Yedi robotik platformu kapsayan 290K bölüm üzerinde eğitilen X-VLA-0.9B, Faz I'da vücut bağımsız (embodiment-agnostic) genelci bir politika öğrenir ve Faz II'da, omurgayı (backbone) dondurarak yalnızca yeni bir prompt seti öğrenerek yeni robotlara verimli bir şekilde uyarlanır.

XVLA Architecture 2

Parametrelerin yalnızca %1'i (9M) ayarlanarak, X-VLA-0.9B, 300 kat daha az eğitilebilir parametre kullanmasına rağmen LIBERO ve Simpler-WidowX üzerinde π₀'a yakın performans elde eder. Ayrıca, iki dakikadan kısa sürede kumaş katlama dahil olmak üzere, minimal gösterimlerle güçlü gerçek dünya çevikliği sergiler.

XVLA fold visualization

X-VLA, genelci robot zekasının giderek daha karmaşık mimariler gerektirmediğini, yalnızca heterojenliği doğru şekilde emme yöntemini gerektirdiğini göstermektedir. Soft Prompts, çeşitli robotik verileri birleştirmek için basit ve ölçeklenebilir bir mekanizma sunarak, uyarlanabilir ve gövde arası (cross-embodiment) robot temel modellerine giden yolu açmaktadır.

Kurulum

LeRobot'u kurduktan sonra X-VLA bağımlılıklarını kurun:

pip install -e ".[xvla]"

PyPI'den LeRobot kurduysanız:

pip install 'lerobot[xvla]'

Hızlı Başlangıç

Temel Kullanım

LeRobot yapılandırmanızda X-VLA'yı kullanmak için politika türünü şu şekilde belirtin:

policy.type=xvla

Önceden Eğitilmiş Kontrol Noktalarını Değerlendirme

LIBERO ile örnek değerlendirme:

lerobot-eval \
  --policy.path="lerobot/xvla-libero" \
  --env.type=libero \
  --env.task=libero_spatial,libero_goal,libero_10 \
  --env.control_mode=absolute \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --env.episode_length=800 \
  --seed=142

Mevden Kontroller

🎯 Temel Model

lerobot/xvla-base

Dikkatli bir şekilde tasarlanmış bir veri işleme ve öğrenme tarifiyle eğitilmiş, 0.9B parametreli bir X-VLA örneği. Eğitim hattı iki aşamadan oluşur:

  • Faz I: Ön Eğitim - Droid, Robomind ve Agibot'tan gelen 290K epizot üzerinde, beş farklı robotik kol türünü (tek kollu yapılandırmalardan çift kollu yapılandırmalara) kapsayan yedi platformda ön eğitim alındı. Vücut yapısına özgü varyasyonları yumuşak istemlerle (soft prompts) emerek, model vücut yapısından bağımsız (embodiment-agnostic) genelci bir politika öğrenir.

  • Faz II: Alan Uyarlaması - Hedef alanlara dağıtılabilir politikalar için uyarlanır. Yeni bir yumuşak istem (soft prompt) seti tanıtılır ve optimize edilir; bu set, yeni alanın donanım yapılandırmasını kodlarken önceden eğitilmiş omurga (backbone) dondurulmuş olarak kalır.

Simülasyon Kontrol Noktaları

lerobot/xvla-libero

LIBERO testlerinde %93 başarı oranına ulaşır. Simülasyon görevleri için temel modelden ince ayarlanmıştır.

lerobot/xvla-widowx

Kompakt WidowX platformlarında pick-and-place deneyleri için BridgeData üzerinde ince ayar yapılmıştır. Sağlam manipülasyon yetenekleri sergiler.

🤖 Gerçek Dünya Kontrol Noktaları

lerobot/xvla-folding

Yüksek kaliteli Soft-FOLD kumaş katlama veri setinde eğitilmiş, ince ayarı yapılmış çevik manipülasyon modeli. 2 saatlik sürekli kumaş katlama boyunca %100 başarı oranına ulaşır.

lerobot/xvla-agibot-world

AgileX robotun çevik manipülasyon görevleri için optimize edilmiştir.

lerobot/xvla-google-robot

Google Robot platformları için uyarlandı.

X-VLA Eğitimi

Önerilen Eğitim Yapılandırması

Yeni bir vücut veya görev için X-VLA'yı ince ayar yaparken, VLM'yi dondurmamanızı ve OOM hatalarına takılmamak için policy.dtype=bfloat16 ayarını yapmanızı öneririz.

lerobot-train \
  --dataset.repo_id=YOUR_DATASET \
  --output_dir=./outputs/xvla_training \
  --job_name=xvla_training \
  --policy.path="lerobot/xvla-base" \
  --policy.repo_id="HF_USER/xvla-your-robot" \
  --policy.dtype=bfloat16 \
  --policy.action_mode=auto \
  --steps=20000 \
  --policy.device=cuda \
  --policy.freeze_vision_encoder=false \
  --policy.freeze_language_encoder=false \
  --policy.train_policy_transformer=true \
  --policy.train_soft_prompts=true

Eğitim Parametreleri Açıklaması

ParametreVarsayılanAçıklama
freeze_vision_encoderfalseVLM görme kodlayıcısının ağırlıklarını dondurmayın
freeze_language_encoderfalseVLM dil kodlayıcısı ağırlıklarını dondurmayın
train_policy_transformertruePolitika dönüştürücü katmanlarının eğitim almasına izin ver
train_soft_promptstrueYumuşak istemlerin eğitim almasına izin ver

💡 En İyi Uygulama: Yeni vücutlara yönelik Faz II uyarlama için VLM kodlayıcılarını dondurmayın; politika dönüştürücüsünü ve yumuşak istemleri de eğitin.

Örnek: İki Ellikli Robot Üzerinde Eğitim

lerobot-train \
  --dataset.repo_id=<USER>/bimanual-so100-handover-cube \
  --output_dir=./outputs/xvla_bimanual \
  --job_name=xvla_so101_training \
  --policy.path="lerobot/xvla-base" \
  --policy.dtype=bfloat16 \
  --policy.repo_id="YOUR_USERNAME/xvla-biso101" \
  --steps=3000 \
  --policy.device=cuda \
  --policy.action_mode=so101_bimanual \
  --policy.freeze_vision_encoder=false \
  --policy.freeze_language_encoder=false \
  --policy.train_policy_transformer=true \
  --policy.train_soft_prompts=true

💡 En İyi Performans: Yeterli hesaplama kaynaklarınız varsa ve en iyi X-VLA ince ayar performansını elde etmek istiyorsanız, resmi ince ayar stratejisini izlemelisiniz:

🔥 Özel bir öğrenme hızı şemasıyla tüm bileşenleri tam ince ayar yapın

Kararlı optimizasyon sağlamak için, Görsel-Dil Modeli (VLM) yalnızca temel öğrenme hızının 1/10'u ile eğitilmelidir; diğer tüm bileşenler tam öğrenme hızını kullanır. Bu öğrenme hızı oranı, güçlü ve kararlı ince ayar performansı elde etmek için kritiktir. Bu, varsayılan olarak sizin için zaten yapılmıştır. ❕Not

Resmi olarak raporlanan performansı tamamen eşleştirmek, yumuşak istemler için ek bir ısınma LR zamanlaması gerektirebilir ve bu, küçük iyileştirmeler sağlayabilir. Optimal sonuçlar için bunu özelleştirilmiş eğitim hattınızda uygulamanızı öneririz.

Temel Kavramlar

1. Eylem Modları

X-VLA, farklı eylem uzaylarını ve vücut yapılarını (embodiment) işlemek için Action Registry sistemi kullanır. action_mode parametresi, eylemlerin nasıl işlendiğini, hangi kayıp fonksiyonlarının kullanıldığını ve tahminlerin nasıl son işlemden geçirildiğini tanımlar.

Kullanılabilir Eylem Modları

Eylem ModuEylem BoyutuAçıklamaKullanım Senaryosu
ee6d20xyz, 6D rotasyon, kavrama (gripper) içeren uç efektorMekânsal kontrollü çift kollu kurulumlar
joint14Tutucu ile ortak uzayDoğrudan eklem kontrolü robotları
agibot_ee6d20MSE kaybı içeren AGI-bot varyantıAGI-bot platformları
so101_bimanual20 (model), 12 (gerçek)SO101 iki kollu robotİki elle manipülasyon görevleri
auto20 (model), otomatik (gerçek)Eylem boyutunu veri setinden otomatik olarak algılarYeni robotlar için önerilen

Eylem Modlarının Neden Önemli Olduğu

lerobot/xvla-base gibi action_dim=20 ile eğitilmiş önceden eğitilmiş bir kontrol noktasına sahipseniz ve farklı bir eylem boyutuna sahip bir veri setinde (örneğin, çift kollu kollar için 14) eğitim yapmak istiyorsanız, eylem boyutunu basitçe kırpamazsınız. Eylem modu şunları koordine eder:

  1. Kayıp Hesaplama: Farklı eylem bileşenleri için farklı kayıp fonksiyonları (eklemler için MSE, kavrayıcılar için BCE vb.)
  2. Önişleme: Gripper kanallarının sıfırlanması, boyutların doldurulması
  3. İşleme sonrası: Gripper logitlerine sigmoid uygulanması, dolgu kesme

Örnek: BimanualSO101 Eylem Uzayı

so101_bimanual eylem modu, model çıktısı (20B) ile gerçek robot kontrolü (12B) arasındaki uyumsuzluğu ele alır:

# Model outputs 20 dimensions for compatibility
dim_action = 20

# Real robot only needs 12 dimensions
# [left_arm (6), right_arm (6)] = [joints (5) + gripper (1)] × 2
REAL_DIM = 12

# Preprocessing: Pad 12D actions to 20D for training
# Postprocessing: Trim 20D predictions to 12D for deployment

Ayrıntılar için action_hub.py uygulamasına bakın.

Otomatik Eylem Modu (Önerilen)

auto eylem modu, X-VLA'yı herhangi bir robotla kullanmanın en kolay yoludur. Veri setinizin eylem boyutunu otomatik olarak algılar ve dolgu/kırpma işlemlerini yönetir:

lerobot-train \
  --policy.path="lerobot/xvla-base" \
  --policy.action_mode=auto \
  --policy.max_action_dim=20 \
  ...

Nasıl çalışır:

  • Veri setinizden action_feature.shape[-1] değerini okur (örneğin, Franka için 7)
  • Model çıktısı, önceden eğitilmiş uyumluluk için max_action_dim (varsayılan 20) değerini üretir
  • Kayıp sadece gerçek boyutlar üzerinde hesaplanır: MSE(pred[:,:,:real_dim], target[:,:,:real_dim])
  • Postprocess, robot kontrolü için çıktıyı real_dim boyutuna geri kırpıyor

Bu, çoğu robot için özel eylem modları oluşturma ihtiyacını ortadan kaldırır.

2. Alan Kimlikleri

Domain ID'leri, farklı robot yapılandırmaları ve kamera kurulumları için öğrenilebilir tanımlayıcılardır. Bunlar X-VLA'nın aşağıdakiler arasında ayrım yapmasını sağlar:

  • Farklı robotlar (Robot 1 ve Robot 2)
  • Farklı kamera yapılandırmaları (cam1 vs cam2)
  • Farklı kombinasyonlar (Robot1-cam1-cam2 vs Robot1-cam1 vs Robot2-cam1)

Alan Kimliklerini Ayarlama

Eğitim Sırasında: Varsayılan olarak, genel eğitim için domain_id 0 olarak ayarlanır.

Değerlendirme Sırasında: Kontrol noktanızın eğitim yapılandırmasıyla eşleşen domain_id değerini belirtin.

# Example: LIBERO checkpoint uses domain_id=3
domain_id = 3

domain_id, ön işleme hattındaki XVLAAddDomainIdProcessorStep tarafından gözlemlere otomatik olarak eklenir.

lerobot/xvla-base modeli aşağıdaki alan kimlikleri üzerinde eğitilmiştir. Robotunuz/yapılandırmanızla en çok benzeyen birini seçmeniz önerilir:

İnce Ayar Veri Setleri

Veri Seti AdıAlan Kimliği
Köprü0
RT11
Calvin2
libero3
widowx-air4
AIR-AGILEX-HQ5
robotwin2_abs_ee6
robotwin2_clean6
robocasa-human7
VLABench8
AGIBOT-challenge9
AIR-AGILEX10
AIRBOT18

3. İşleyici Adımları

X-VLA'nın düzgün çalışması için belirli ön işleme ve son işleme adımları gereklidir.

Gerekli Ön İşleme Adımları

  1. XVLAImageToFloatProcessorStep: Görselleri [0, 255] aralığından [0, 1] aralığına dönüştürür
  2. XVLAImageNetNormalizeProcessorStep: ImageNet normalizasyonu uygular (VLM omurgası için gereklidir)
  3. XVLAAddDomainIdProcessorStep: Gözlemlere domain_id ekler

Örnek Özel İşleyici

LIBERO ortamları için özel bir işlemci, belirli gözlem biçimini ele alır:

from lerobot.policies.xvla.processor_xvla import LiberoProcessorStep

processor = LiberoProcessorStep()
# Handles robot_state dictionary, converts rotation matrices to 6D representation
# Applies 180° image rotation for camera convention

4. Yapılandırma Parametreleri

X-VLA için ana yapılandırma parametreleri:

# Observation and action
n_obs_steps: int = 1          # Number of observation timesteps
chunk_size: int = 32           # Action sequence length
n_action_steps: int = 32       # Number of action steps to execute

# Model architecture
hidden_size: int = 1024        # Transformer hidden dimension
depth: int = 24                # Number of transformer layers
num_heads: int = 16            # Number of attention heads
num_domains: int = 30          # Maximum number of domain IDs
len_soft_prompts: int = 32     # Length of soft prompt embeddings

# Action space
action_mode: str = "ee6d"      # Action space type (use "auto" for auto-detection)
use_proprio: bool = True       # Use proprioceptive state
max_state_dim: int = 32        # Maximum state dimension
max_action_dim: int = 20       # Max action dim for padding (used by "auto" mode)

# Vision
num_image_views: int | None    # Number of camera views
resize_imgs_with_padding: tuple[int, int] | None  # Target image size with padding

# Training
num_denoising_steps: int = 10  # Flow matching denoising steps

Özel Eylem Modları Oluşturma

Robotunuz benzersiz bir eylem uzayına sahipse, özel bir eylem modu oluşturabilirsiniz:

Adım 1: Eylem Alanınızı Tanımlayın

from lerobot.policies.xvla.action_hub import BaseActionSpace, register_action
import torch
import torch.nn as nn

@register_action("my_custom_robot")
class MyCustomActionSpace(BaseActionSpace):
    """Custom action space for my robot."""

    dim_action = 15  # Your robot's action dimension
    gripper_idx = (7, 14)  # Gripper channel indices

    def __init__(self):
        super().__init__()
        self.mse = nn.MSELoss()
        self.bce = nn.BCEWithLogitsLoss()

    def compute_loss(self, pred, target):
        """Define your loss computation."""
        # Example: MSE for joints, BCE for grippers
        joints_loss = self.mse(pred[:, :, :7], target[:, :, :7])
        gripper_loss = self.bce(pred[:, :, self.gripper_idx],
                                target[:, :, self.gripper_idx])

        return {
            "joints_loss": joints_loss,
            "gripper_loss": gripper_loss,
        }

    def preprocess(self, proprio, action, mode="train"):
        """Preprocess actions before training."""
        # Example: Zero out grippers in proprioception
        proprio_m = proprio.clone()
        action_m = action.clone() if action is not None else None
        proprio_m[..., self.gripper_idx] = 0.0
        if action_m is not None:
            action_m[..., self.gripper_idx] = 0.0
        return proprio_m, action_m

    def postprocess(self, action):
        """Post-process predictions for deployment."""
        # Example: Apply sigmoid to gripper logits
        action[..., self.gripper_idx] = torch.sigmoid(action[..., self.gripper_idx])
        return action

Adım 2: Özel Eylem Modunuzu Kullanın

lerobot-train \
  --policy.action_mode=my_custom_robot \
  --dataset.repo_id=YOUR_DATASET \
  --policy.path="lerobot/xvla-base" \
  ...

Gelişmiş Konular

Çoklu Kamera Desteği

X-VLA, num_image_views parametresi sayesinde birden fazla kamera görünümünü destekler:

# Configure for 3 camera views
policy.num_image_views=3

# Add empty cameras if you have fewer physical cameras
policy.empty_cameras=1  # Adds 1 zero-padded camera view

Özel Ön İşleme Hattı

Ortamınız için özel bir ön işleme hattı oluşturun:

from lerobot.processor import PolicyProcessorPipeline
from lerobot.policies.xvla import (
    XVLAImageToFloatProcessorStep,
    XVLAImageNetNormalizeProcessorStep,
    XVLAAddDomainIdProcessorStep,
)

# Build custom pipeline
preprocessor = PolicyProcessorPipeline(
    steps=[
        YourCustomProcessorStep(),  # Your custom processing
        XVLAImageToFloatProcessorStep(),  # Required: convert to float
        XVLAImageNetNormalizeProcessorStep(),  # Required: ImageNet norm
        XVLAAddDomainIdProcessorStep(domain_id=5),  # Your domain ID
    ]
)

Farklı Eylem Boyutlarını İşleme

Veri setinizin, önceden eğitilmiş modelden daha az eylem boyutu varsa:

Seçenek 1 (Önerilen): auto eylem modunu kullanın

# Automatically detects your dataset's action dimension
# Works with any robot without custom code
policy.action_mode=auto
policy.max_action_dim=20  # Match pretrained model

Seçenek 2: Yerleşik dolguya sahip önceden tanımlı bir eylem modu kullanın

# Model expects 20D, dataset has 12D
# Action mode handles padding internally
action_mode = "so101_bimanual"  # Pads 12 → 20

Seçenek 2: Boyutları açıkça eşleyen özel bir işlem modu oluşturun

@register_action("my_mapped_action")
class MappedActionSpace(BaseActionSpace):
    dim_action = 20
    REAL_DIM = 12

    def _pad_to_model_dim(self, x):
        # Custom padding logic
        ...

Sorun Giderme

Sık Karşılaşılan Sorunlar

Sorun: “Action boyutu uyumsuzluğu”

  • Çözüm: action_mode'in robotunuzun eylem uzayıyla eşleştiğinden emin olun. Gerekirse özel bir eylem modu oluşturun.

Sorun: “[0, 1] aralığının dışındaki görüntü değerleri”

  • Çözüm: Normalizasyon öncesinde görüntülerin XVLAImageToFloatProcessorStep ile ön işlenmesini sağlayın.

Sorun: “Domain ID bulunamadı”

  • Çözüm: XVLAAddDomainIdProcessorStep'in doğru domain_id ile ön işleme hattınızda olduğundan emin olun.

Sorun: “Yeni vücutlandırma üzerinde düşük başarı oranı”

  • Solution:
    1. action_mode'ün doğru olduğunu doğrulayın
    2. Yumuşak istemlerin eğitildiğinden emin olun (train_soft_prompts=True)
    3. Doğru ön işleme (ImageNet normalizasyonu, domain_id) sağladığınızdan emin olun
    4. Eğitim adımlarını artırmayı düşünün

Sorun: “Eğitim sırasında bellek yetersizliği”

  • Solution:
    1. chunk_size değerini azaltın (ör. 32'den 16'ya)
    2. Gradyan denetleme noktalarını etkinleştir
    3. Toplu işlem boyutunu azaltın
    4. Daha fazla bileşeni dondur

Atıf

Araştırmanızda X-VLA kullanıyorsanız, lütfen şu şekilde atıfta bulunun:

@article{zheng2025x,
  title   = {X-VLA: Soft-Prompted Transformer as Scalable Cross-Embodiment Vision-Language-Action Model},
  author  = {Zheng, Jinliang and Li, Jianxiong and Wang, Zhihao and Liu, Dongxiu and Kang, Xirui
             and Feng, Yuchun and Zheng, Yinan and Zou, Jiayin and Chen, Yilun and Zeng, Jia and others},
  journal = {arXiv preprint arXiv:2510.10274},
  year    = {2025}
}

Ek Kaynaklar

Katkıda Bulunma

Katkılarınızı memnuniyetle karşılıyoruz! Robotunuz için yeni bir eylem modu veya işlemci uyguladıysanız, topluluğa yardımcı olmak için bir PR göndermeyi düşünün.

Update on GitHub