# Ç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 VLA'larla rekabet edebilecek düzeyde son derece yüksek çeviklik elde edilebildiği için heyecan verici.

## Kurulum Gereksinimleri

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

```bash
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:

```python
policy.type=multi_task_dit
```

## Eğitim

### Temel Eğitim Komutu

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

```bash
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:

```bash
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:

```bash
# 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:

```bash
# 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:

```bash
# 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:**

```bash
--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ı

```bash
# 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ı

```bash
# 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:

```bash
--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](https://arxiv.org/abs/2507.05331) açıklanan çalışmaya dayanmaktadır.

Ayrıca, [Boston Dynamics blog yazısında](https://bostondynamics.com/blog/large-behavior-models-atlas-find-new-footing/) 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:

```bash
--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ı eylemlerle sonuçlanabilir.

#### 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` Ayarı

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:

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

### Eğitimi Devam Ettirme

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

```bash
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:

```bash
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 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](https://arxiv.org/abs/2507.05331)
- [Büyük Davranış Modelleri ve Atlas Yeni Bir Zemin Buluyor](https://bostondynamics.com/blog/large-behavior-models-atlas-find-new-footing/)
- [Çok Görevli Difüzyon Dönüştürücü Politikasını Ayrıştırma ve Açık Kaynağa Açma](https://brysonkjones.substack.com/p/dissecting-and-open-sourcing-multitask-diffusion-transformer-policy)

