LeRobot documentation

Çok Görevli DiT Politikası

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

Çok Görevli DiT Politikası

Çok Görevli Difüzyon Transformer (DiT) Politikası, metin ve görme koşullandırması kullanarak büyük bir DiT'den yararlanan ve çok görevli robot öğrenme için tasarlanmış, orijinal Difüzyon Politikası mimarisinin bir evrimidir. Bu uygulama, eylem üretimi için hem difüzyon hem de akış eşleştirme hedeflerini destekleyerek robotların dil talimatlarına koşullu olarak çeşitli manipülasyon görevlerini gerçekleştirmesini sağlar.

Model Genel Bakış

Model şunları kullanır:

  • CLIP Görüntü Kodlayıcısı: Birden fazla kamera görüşünden gelen RGB görüntülerini işler
  • CLIP Text Encoder: Dil görevi talimatlarını kodlar (öğrenilebilir projeksiyona sahip donmuş ağırlıklar)
  • Diffusion Transformer: Gözlemlere ve dile göre koşullandırılmış eylem dizilerini tahmin eder
  • İki Hedef: Aksiyon üretimi için hem difüzyonu (DDPM/DDIM) hem de akış eşleştirmesini destekler

Bu model, yalnızca ~450M parametre ve çok daha az eğitimle, milyarlarca parametreye sahip VLAlar ile rekabet edebilecek düzeyde son derece yüksek çeviklik elde edilebildiği için heyecan vericidir.

Kurulum Gereksinimleri

Multitask DiT Policy ek bağımlılıklara sahiptir. Şu komutla yükleyin:

pip install 'lerobot[multi_task_dit]'

Bu, CLIP modelleri için HuggingFace Transformers kütüphanesi dahil olmak üzere tüm gerekli bağımlılıkları yükleyecektir.

Kullanım

LeRobot yapılandırmanızda Multitask DiT'i kullanmak için politika türünü şu şekilde belirtin:

policy.type=multi_task_dit

Eğitim

Temel Eğitim Komutu

Veri setinizde Multitask DiT eğitmek için tam bir eğitim komutu:

lerobot-train \
  --dataset.repo_id=YOUR_DATASET \
  --output_dir=./outputs/multitask_dit_training \
  --batch_size=32 \
  --steps=5000 \
  --save_freq=500 \
  --log_freq=100 \
  --policy.type=multi_task_dit \
  --policy.device=cuda \
  --policy.repo_id="HF_USER/multitask-dit-your-robot" \
  --trackio.enable=true

Önerilen Hiperparametreler ve Veri Seti Detayları (30Hz Kontrol Sıklığı)

Güvenilir performans için bu önerilen varsayılan hiperparametrelerle başlayın:

lerobot-train \
  --dataset.repo_id=YOUR_DATASET \
  --output_dir=./outputs/mutitask_dit_training \
  --batch_size=320 \
  --steps=30000 \
  --policy.type=multi_task_dit \
  --policy.device=cuda \
  --policy.horizon=32 \
  --policy.n_action_steps=24 \
  --policy.objective=diffusion \
  --policy.noise_scheduler_type=DDPM \
  --policy.num_train_timesteps=100 \
  --policy.repo_id="HF_USER/multitask-dit-your-robot" \
  --trackio.enable=true

Önemli Parametreler:

  • Toplam Boyutu: 192-320 - Bunu destekleyebilecek bir GPU'ya erişiminiz varsa, en iyi eğitim dinamiklerini elde edersiniz
  • Horizon: 32 - tahmin edilecek eylem adımı sayısı, 30Hz'de ~1,0 sn
  • n_action_steps: 24 - 30Hz'de ~0,8 saniye
  • Amaç: diffusion - diffusion ile başlayın ve üretim kalitesi düşükse flow matching ile deneyin
  • Eğitim Adımları: Tek bir görev için 30 binden fazla adım önerilir

Eğitim Yapılandırma Parametreleri

Hedef Seçimi

Difüzyon ve akış eşleştirmesi arasında seçim yapın:

# Diffusion objective (default)
--policy.objective=diffusion \
--policy.noise_scheduler_type=DDPM \
--policy.num_train_timesteps=100 \
--policy.num_inference_steps=10 \
--policy.beta_schedule=squaredcos_cap_v2 \
--policy.prediction_type=epsilon \
--policy.clip_sample=true \
--policy.clip_sample_range=1.0

# Flow matching objective
--policy.objective=flow_matching \
--policy.timestep_sampling_strategy=beta \
--policy.num_integration_steps=100 \
--policy.integration_method=euler \
--policy.sigma_min=0.0
BayrakNotlar
--policy.noise_scheduler_typeDDPM veya DDIM
--policy.num_inference_stepsDaha az adım, daha hızlı çıkarım sağlar
--policy.beta_scheduleGürültü zaman çizelgesi türü
--policy.prediction_typeepsilon (gürültü tahmini) veya sample (temiz veri tahmini)
--policy.clip_sampleGürültü azaltma sırasında örnekleri kırp
--policy.clip_sample_rangeKesme aralığı [-x, x]
--policy.timestep_sampling_strategybeta veya uniform; beta stratejisi pratikte çok daha iyi çalışıyor gibi görünüyor
--policy.integration_methodeuler veya rk4
--policy.sigma_minAkış interpolasyon yolundaki minimum gürültü

Transformer Mimarisi

Veri seti boyutuna göre model kapasitesini ayarlayın:

# Small datasets (< 100 examples)
--policy.num_layers=4 \
--policy.hidden_dim=512 \
--policy.num_heads=8  # should ideally be hidden_dim // 64

# Medium datasets (100-5k examples) - default
--policy.num_layers=6 \
--policy.hidden_dim=512 \
--policy.num_heads=8  # should ideally be hidden_dim // 64

# Large datasets (> 5k examples)
--policy.num_layers=8 \
--policy.hidden_dim=512 \
--policy.num_heads=8   # should ideally be hidden_dim // 64

Konumsal Kodlama Seçenekleri:

Model, eylem dizileri için iki konumsal kodlama yöntemini destekler:

# Rotary Position Embedding (RoPE) - default, recommended
--policy.use_rope=true \
--policy.rope_base=10000.0  # Base frequency for RoPE

# Absolute positional encoding
--policy.use_positional_encoding=true  # Disables RoPE when true

Diğer Transformer Parametreleri:

--policy.dropout=0.1  # Dropout rate for DiT blocks (0.0-1.0)
--policy.timestep_embed_dim=256  # Timestep embedding dimension

Görüntü Kodlayıcı Yapılandırması

# Use different CLIP model for more expressivity at the cost of inference time
# experiment with larger or smaller models depending on the complexity of your tasks and size of dataset
--policy.vision_encoder_name=openai/clip-vit-large-patch14

# Use separate vision encoder per camera
# This may be useful when cameras have significantly different characteristics, but
# be wary of increased VRAM footprint.
--policy.use_separate_rgb_encoder_per_camera=true

# Image preprocessing (you may need to resize your images for inference speed ups)
--policy.image_resize_shape=[XXX,YYY] \
--policy.image_crop_shape=[224,224] \
--policy.image_crop_is_random=true  # Random during training, center at inference

Metin Kodlayıcı Yapılandırması

# Use different CLIP text encoder model
# same as vision: experiment with larger or smaller models depending on the
# complexity of your tasks and size of dataset
--policy.text_encoder_name=openai/clip-vit-large-patch14

Öğrenme Hızı Yapılandırması

Görüntü kodlayıcı, ayrı bir öğrenme hızı çarpanı kullanır; ideal başlangıç noktası olarak 1/10'unun önerildiği bilinmektedir:

--policy.optimizer_lr=2e-5 \
--policy.vision_encoder_lr_multiplier=0.1  # Vision encoder LR = 0.1 * optimizer_lr

Eğitim Ayarları Kılavuzu

1. Beta Örnekleme ile Akış Eşleştirme

Buradaki orijinal difüzyon uygulaması, TRI’nin LBM makalesinde açıklanan çalışmaya dayanmaktadır.

Ayrıca, Boston Dynamics blog yazısında yüksek düzeyde açıklanan bir akış eşleştirme (flow-matching) hedefi uyguladık.

Göreviniz için akış eşleştirme hedefini test etmeyi ve performans farklarını değerlendirmeyi düşünün:

--policy.objective=flow_matching \
--policy.timestep_sampling_strategy=beta \
--policy.timestep_sampling_alpha=1.5 \
--policy.timestep_sampling_beta=1.0 \
--policy.timestep_sampling_s=0.999

Bu, her kullanıcı senaryosunda kesin bir çözüm olduğu kanıtlanmamış olsa da, zaman zaman daha akıcı ve tutarlı sonuçlar elde edilmesine olanak tanır.

2. Transformer Katman Sayısı

Model kapasitesini veri seti boyutunuza göre ayarlayın:

  • Küçük veri kümeleri (< 100 örnek): 4 katmana indirin
  • Büyük veri kümeleri (> 5k örnek): 8 katmana artırın

3. horizon Ayarlama

Model, seçtiğiniz ufka duyarlı olabilir. Kontrol frekansınıza göre yaklaşık 1 saniyelik bir ufaktan başlayın:

  • 30 Hz frekans: horizon=30
  • 10 Hz frekans: horizon=10

Sonra oradan başlayarak artırmayı deneyin. Ufuk, modelin eylemleri gelecekte ne kadar uzağa tahmin ettiğini belirler.

4. n_action_steps Hassasiyeti

Model, n_action_steps parametresine karşı da oldukça hassas olabilir. Kontrol sıklığınıza göre yaklaşık 0,8 saniye olacak şekilde başlayıp oradan ayarlayın:

  • Daha düşük değerler: Daha tepkisel ancak uzun vadeli görevler için potansiyel olarak daha az kararlı
  • Daha yüksek değerler: Uzun vadeli yürütme için daha iyi ancak açık döngü hatalarının kurtarma kapasitesi sınırlıdır

Çıkarım Ayarları

Daha hızlı çıkarım için daha az örneklem adımıyla DDIM kullanın:

--policy.noise_scheduler_type=DDIM \
--policy.num_inference_steps=10

Eğitimi Devam Ettirme

Bir kontrol noktasından eğitim devam ettirmek için:

lerobot-train \
  --config_path=./outputs/mutitask_dit_training/checkpoints/last/pretrained_model/train_config.json \
  --resume=true

Kontrol noktası dizini, model.safetensors ve config.json dosyalarını içermelidir (eğitim sırasında otomatik olarak kaydedilir). Devam ettirirken yapılandırma kontrol noktasından yüklendiğinden, diğer parametreleri belirtmenize gerek yoktur.

Yaygın Hata Modları ve Hata Ayıklama

Bu modellerin eğitimi hassas olabilir. İşte yaygın hata modları ve hata ayıklama yaklaşımları:

Boşta Çalışma / Hareket Yok

Model, çıkarım sırasında “çökebilir” ve bu durum statik veya hareketsiz bir sonuca yol açabilir. Bu, aşağıdaki durumlarda ortaya çıkabilir:

  1. Eğitim verisi yetersiz: Sadece 20-50 örneğiniz varsa, veri seti boyutunu yaklaşık olarak ikiye katlamayı deneyin. 300'den fazla örneğe sahip olmanıza rağmen bu durumu hâlâ görüyorsanız, görev çok karmaşık olabilir.

  2. Birbirine benzeyen birden fazla görev: Veri setiniz birden fazla benzer görev içerdiğinde (ör. 2 farklı nesneyi alma), model, yeterince zengin olmayan dil koşullandırmaya aşırı bağımlı hale gelebilir.

Hata ayıklama ipuçları:

  • Veri seti boyutunu artırın (300 örneğin üzerine çıkana kadar iki katına çıkarın)
  • Kayıp düzleşse bile, 100k adımı aşan daha uzun süreler boyunca eğitim yapın
  • Modelin uygun dil talimatlarını alıp almadığını kontrol edin veya talimat çeşitliliğini artırın

Yanlış Görevin Çalıştırılması

Bazen robot, talimatınızı tamamen görmezden gelip başka bir görevi yerine getirebilir. Bu genellikle yalnızca birden fazla görev üzerinde eğitim yaptıysanız gerçekleşir.

Olası nedenler:

  • Dil talimatı belirsizliği
  • Göreve özgü eğitim verisinin yetersizliği
  • Çok görevli veri setinde benzer görevler arasında model karışıklığı

Hata ayıklama ipuçları:

  • Özellikle birden fazla görev arasında açıklamalar benzerse, dil talimatının özgüllüğünü doğrulayın
  • Eğitim veri setinizdeki görev dağılımını kontrol edin ve başarısız/yanıt dışı bırakılan göreve ağırlık ekleyin
  • Göreve özgü ince ayarı göz önünde bulundurun

Eğitim Kararsızlığı

Eğitim kaybı kararsızsa veya sapıyorsa:

  • Öğrenme hızını 1e-5 ile 3e-4 arasında ayarlamayı deneyin
  • Mümkünse batch boyutunu artırın
  • Veri seti normalizasyonunuzun doğru olduğunu kontrol edin
  • Görsel ön işlemenin doğru çalıştığını doğrulayın

Performans Düşünceleri

GPU Gereksinimleri

  • Çıkarım: Makul hız performansı için en az bir RTX 5070 Ti (veya eşdeğer GPU) önerilir
  • Eğitim: 64'ten büyük parti boyutlarını yükleyecek kadar VRAM'e sahip bir GPU idealdir; bu, görüntü gözlemlerinin sayısı gibi faktörlere göre değişir

Toplu Boyut Önerileri

  • Minimum: 64 (bundan düşük değerler istikrarsız eğitime yol açabilir)
  • Önerilen: 256-320 (en iyi performans, daha büyük GPU gerektirir)

Örnek: Özel Veri Setinde Eğitim

Özel bir veri setinde eğitim için tam bir örnek:

lerobot-train \
  --dataset.repo_id=YOUR_DATASET \
  --output_dir=./outputs/mutitask_dit_training \
  --batch_size=320 \
  --steps=30000 \
  --save_freq=1000 \
  --log_freq=100 \
  --env_eval_freq=1000 \
  --policy.type=multi_task_dit \
  --policy.device=cuda \
  --policy.horizon=32 \
  --policy.n_action_steps=24 \
  --policy.objective=diffusion \
  --policy.noise_scheduler_type=DDPM \
  --policy.num_layers=6 \
  --policy.hidden_dim=512 \
  --policy.vision_encoder_name=openai/clip-vit-base-patch16 \
  --policy.image_resize_shape=[320,240] \
  --policy.image_crop_shape=[224,224] \
  --policy.repo_id="HF_USER/multitask-dit-your-robot" \
  --trackio.enable=true \
  --trackio.project=multitask_dit

Libero Sonuçları

lerobot-train \
  --dataset.repo_id=HuggingFaceVLA/libero \
  --policy.type=multi_task_dit \
  --policy.push_to_hub=false \
  --output_dir="./outputs/multitask_dit_libero" \
  --job_name="multitask-dit-libero" \
  --trackio.enable=true \
  --trackio.project=multitask_dit_libero \
  --dataset.image_transforms.enable=true \
  --dataset.image_transforms.max_num_transforms=4 \
  --dataset.image_transforms.tfs='{"brightness":{"type":"ColorJitter","kwargs":{"brightness":[0.75,1.25]}},"contrast":{"type":"ColorJitter","kwargs":{"contrast":[0.6,1.4]}},"saturation":{"type":"ColorJitter","kwargs":{"saturation":[0.8,1.2]}},"hue":{"type":"ColorJitter","kwargs":{"hue":[-0.05,0.05]}},"sharpness":{"type":"SharpnessJitter","kwargs":{"sharpness":[0.6,1.4]}},"rotation":{"type":"RandomRotation","kwargs":{"degrees":[-5,5]}},"translation":{"type":"RandomAffine","kwargs":{"degrees":0,"translate":[0.1,0.1]}}}' \
  --dataset.video_backend=torchcodec \
  --policy.use_amp=true \
  --policy.horizon=48 \
  --policy.n_obs_steps=2 \
  --policy.use_rope=true \
  --policy.use_positional_encoding=false \
  --policy.hidden_dim=768 \
  --policy.num_layers=8 \
  --policy.num_heads=12 \
  --policy.dropout=0.1 \
  --policy.timestep_embed_dim=256 \
  --policy.objective=diffusion \
  --policy.optimizer_lr=3e-4 \
  --policy.optimizer_weight_decay=0 \
  --policy.scheduler_warmup_steps=0 \
  --policy.vision_encoder_name=openai/clip-vit-base-patch16 \
  --policy.image_resize_shape=[256,256] \
  --policy.image_crop_is_random=true \
  --policy.text_encoder_name=openai/clip-vit-base-patch16 \
  --policy.vision_encoder_lr_multiplier=0.1 \
  --policy.device=cuda \
  --num_workers=8 \
  --save_freq=4000 \
  --log_freq=100 \
  --steps=100000 \
  --batch_size=320

Sonuçlar:

LIBERO UzamsalLIBERO NesneLIBERO HedefLIBERO 10Ortalama
87.098.293.883.290.6

Referanslar

Teknik uygulama ve mimari hakkında daha fazla ayrıntı için bkz:

Update on GitHub