LeRobot documentation
Çok Görevli DiT Politikası
Ç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_ditEğ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| Bayrak | Notlar |
|---|---|
--policy.noise_scheduler_type | DDPM veya DDIM |
--policy.num_inference_steps | Daha az adım, daha hızlı çıkarım sağlar |
--policy.beta_schedule | Gürültü zaman çizelgesi türü |
--policy.prediction_type | epsilon (gürültü tahmini) veya sample (temiz veri tahmini) |
--policy.clip_sample | Gürültü azaltma sırasında örnekleri kırp |
--policy.clip_sample_range | Kesme aralığı [-x, x] |
--policy.timestep_sampling_strategy | beta veya uniform; beta stratejisi pratikte çok daha iyi çalışıyor gibi görünüyor |
--policy.integration_method | euler veya rk4 |
--policy.sigma_min | Akış 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 // 64Konumsal 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 trueDiğer Transformer Parametreleri:
--policy.dropout=0.1 # Dropout rate for DiT blocks (0.0-1.0)
--policy.timestep_embed_dim=256 # Timestep embedding dimensionGö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 inferenceMetin 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_lrEğ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=trueKontrol 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:
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.
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-5ile3e-4arası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_ditLibero 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=320Sonuçlar:
| LIBERO Uzamsal | LIBERO Nesne | LIBERO Hedef | LIBERO 10 | Ortalama |
|---|---|---|---|---|
| 87.0 | 98.2 | 93.8 | 83.2 | 90.6 |
Referanslar
Teknik uygulama ve mimari hakkında daha fazla ayrıntı için bkz:
- Çok Görevli Becerikli Manipülasyon için Büyük Davranış Modellerinin Dikkatli İncelemesi
- Büyük Davranış Modelleri ve Atlas Yeni Bir Zemin Buluyor
- Çok Görevli Difüzyon Dönüştürücü Politikasını Ayrıştırma ve Açık Kaynağa Açma