LeRobot documentation

SARM: Aşama Farkındalıklı Ödül Modelleme

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SARM: Aşama Farkındalıklı Ödül Modelleme

SARM (Stage-Aware Reward Modeling), uzun vadeli robot manipülasyon görevleri için video tabanlı bir ödül modelleme çerçevesidir. Bu kılavuz, SARM ödül modellerinin nasıl eğitileceğini ve isteğe bağlı olarak Reward-Aligned Behavior Cloning (RA-BC) ile nasıl kullanılacağını kapsar.

Makale: SARM: Stage-Aware Reward Modeling for Long Horizon Robot Manipulation

An overview of SARM

Neden Ödül Modelleri?

Standart davranış klonlama, tüm gösterim karelerini eşit olarak ele alır, ancak gerçek dünya robot veri setleri dağınıktır. Bunlar tereddütleri, düzeltmeleri ve değişken kalitede yörüngeleri içerir. Ödül modelleri, gösterimlerden görev ilerlemesine dair genellenebilir bir kavram öğrenerek bunu çözer: video kareleri ve bir görev açıklaması verildiğinde, robotun görevi tamamlamaya ne kadar yakın olduğunu (0→1) tahmin ederler. Bu öğrenilen “ilerleme sinyali” birden fazla şekilde kullanılabilir; iki umut verici uygulama şunlardır: (1) ağırlıklı taklit öğrenimi (RA-BC), burada yüksek ilerlemeye sahip kareler politika eğitimi sırasında daha fazla ağırlık alır ve (2) pekiştirmeli öğrenme, burada ödül modeli çevrimiçi veya çevrimdışı politika iyileştirmesi için yoğun ödüller sağlar.

Genel Bakış

SARM aşağıdaki özelliklere sahiptir:

  1. Aşama farkında mimari: Yüksek düzey görev aşamasını ve her aşama içindeki ince taneli ilerlemeyi birlikte tahmin eder
  2. Alt görev açıklamaları: Tutarlı ilerleme etiketleri türetmek için doğal dil alt görev açıklamalarını kullanır
  3. Zaman oranları: Değişken uzunluktaki gösterimlerde ilerlemeyi normalize etmek için her alt görevin veri seti düzeyindeki öncüllerini (α̅_k) hesaplar

SARM, her kare için kompakt bir stage+tau hedefi üzerinde eğitim alır:

  • stage: tamsayır evre indeksi k ∈ {0, ..., K-1}
  • τ (tau): aşama içi ilerleme τ ∈ [0, 1]
  • hedef kodlama: y = k + τ (bu, veri seti işleyicisinin ürettiğidir)

Çıkarım zamanında (ve aşağı akış RA-BC'de), SARM ham k + τ değerini, veri seti düzeyindeki zaman oranlarını α̅_k (meta/temporal_proportions_*.json içinde saklanır) kullanarak [0, 1] aralığında normalize edilmiş ilerlemeye dönüştürür.

Bu, makaledeki Formül (2) ile eşleşir:

progress_t = P_{k-1} + α̅_k × τ_t

Burada:

  • τ_t = (t - s_k) / (e_k - s_k), alt görev içi normalize edilmiş zamanı ifade eder
  • P_{k-1} kümülatif öncedir (önceki alt görev oranlarının toplamı)
  • α̅_k, alt görev k için zamansal orandır

Bu, farklı uzunluklardaki gösterimlerde bile aynı görev durumlarının tutarlı ilerleme değerlerine eşlenmesini sağlar.

Girdiler ve Hedefler (Yeni kodun bekledikleri)

SARM, işlemcisi (src/lerobot/rewards/sarm/processor_sarm.py) aracılığıyla eğitilir; bu işlemci:

  • Encodes CLIP (ViT-B/32) ile görüntüleri ve görev metnini video_features ve text_features olarak kodlar
  • Robot durumunu state_features içine (en fazla max_state_dim) doldurur/kısaltır
  • Hedefler, y = k + τ aşama+tau kodlamasını kullanarak sparse_targets (ve dense_only/dual içinde dense_targets) olarak oluşturulur
  • Masklar, örnek başına lengths tensörü kullanarak kareleri geri sarar (geri sarma, eğitim zamanı artırmadır)

En azından, her eğitim örneği şunlara ihtiyaç duyar:

  • task (string): görev açıklaması
  • Veri setindeki reward_model.image_key görüntüleri ve reward_model.state_key durumları

Etiketleme Modları

İlerleme etiketlerinin nasıl hesaplanacağını belirleyen 3 etiketleme modundan birini seçebilirsiniz:

ModGerekli AnnotasyonlarBaşlarKullanım Senaryosu
single_stageNoneYalnızca seyrekBasit görevler, hızlı deneyler, VLM gerekmez
dense_onlyYoğun (VLM)Çift (seyrek otomatik oluşturulmuş)Yüksek düzey aşamalar tanımlamadan ayrıntılı alt görev takibi
dualSeyrek + Yoğun (VLM)ÇiftHer iki granülerlik ile tam SARM makalesi kurulumu

Mod Detayları

single_stage
dense_only
dual

Etiketleme gerekmez. Tüm bölüm, "task" adlı tek bir aşama olarak ele alınır ve ilerleme, bölüm süresi boyunca 0'dan 1'e doğru doğrusaldır.

  • Sparse head: 1 aşama (“task”), doğrusal ilerleme
  • Dense head: Kullanılmıyor
  • En uygun olduğu durumlar: Basit görevler, hızlı deneyler veya VLM etiketlemesinin kullanılamadığı senaryolar

Ortamınızı Yapılandırın

  1. LeRobot'u Yükleme Kılavuzumuz’u takip ederek yükleyin.
  2. Aşağıdaki komutu çalıştırarak SARM bağımlılıklarını yükleyin:
pip install -e ".[sarm]"

İş akışı:

1. Train SARM → 2. Visualize predictions → 3. (Optional) Train policy with RA-BC

Adım 1: Alt Görev İşaretleme

single_stage
dense_only
dual

Etiketleme gerekmez! Bu adımı tamamen atlayın. Model, bölümün görev açıklamasını kullanacak ve doğrusal ilerlemeyi otomatik olarak hesaplayacaktır.

Etiketleme Argümanları

ArgümanAçıklama
--repo-idHuggingFace veri seti deposu kimliği
--sparse-subtasksVirgülle ayrılmış yüksek düzey alt görev adları listesi
--dense-subtasksVirgülle ayrılmış ince taneli alt görev adları listesi
--dense-onlyYalnızca yoğun (dense) anotasyonlar oluştur (seyrek “task” aşamasını otomatik olarak oluşturur)
--video-keyKullanılacak kamera/video anahtarı (ör. observation.images.top)
--num-workersParalel GPU işçisi sayısı (varsayılan: 1)
--episodesAnnotate edilecek belirli bölüm dizinleri (varsayılan: tümü)
--skip-existingZaten etiketlere sahip olan bölümleri atla
--modelVLM modeli (varsayılan: Qwen/Qwen3-VL-30B-A3B-Instruct)
--num-visualizationsEtiketleme sonrası görselleştirilecek bölüm sayısı (varsayılan: 5, atlamak için 0 olarak ayarlayın)

Not: İşaretleme tamamlandıktan sonra, varsayılan olarak 5 bölüm otomatik olarak görselleştirilir. Bu adımı atlamak için --num-visualizations 0 kullanın.


Adım 2: Etiketlemeleri Doğrulayın

single_stage
dense_only
dual

Doğrulama gerekmez! Bu adımı atlayın.

Bu, alt görev sınırlarının üzerine bindirildiği video karelerini ve alt görevlerin zaman çizelgesini gösteren görselleştirmeleri oluşturur.

Görselleştirme Argümanları

ArgümanAçıklama
--visualize-onlyYalnızca mevcut etiketleri görselleştir (üretim yok)
--num-visualizationsGörselleştirilecek bölüm sayısı (varsayılan: 5)
--visualize-typeGörselleştirilecek anotasyon türü: sparse, dense veya both

Tip: İşaretlemeler (annotations) doğru değilse, alt görev açıklamalarınızı daha spesifik hale getirin ve işlemi yeniden çalıştırın.


Adım 3: SARM'ı eğitin

single_stage
dense_only
dual

Etiket olmadan eğitim yapın - 0'dan 1'e doğrusal ilerleme kullanır:

lerobot-train \
  --dataset.repo_id=your-username/your-dataset \
  --reward_model.type=sarm \
  --reward_model.annotation_mode=single_stage \
  --reward_model.image_key=observation.images.base \
  --output_dir=outputs/train/sarm_single \
  --batch_size=32 \
  --steps=5000 \
  --trackio.enable=true \
  --trackio.project=sarm \
  --reward_model.repo_id=your-username/your-model-name

Çoklu GPU Eğitimi

Eğitim için birden çok GPU kullanmak için accelerate launch --multi_gpu --num_processes=4 ekleyin.

Eğitim Argümanları

ArgümanAçıklamaVarsayılan
--reward_model.annotation_modesingle_stage, dense_only veya dualsingle_stage
--reward_model.image_keyGörseller için kamera anahtarıobservation.images.top
--reward_model.state_keyOrtak durumlar için anahtarobservation.state
--reward_model.n_obs_stepsGözlem geçmişi adımları (toplam gözlem kareleri = n_obs_steps + 1)8
--reward_model.frame_gapÖrnekleme yapılan gözlemler arasındaki fark (kare cinsinden) (30 fps'de: 30 ≈ 1 sn)30

Adım 4: Tahminleri Görselleştir

compute_rabc_weights.py dosyasını --visualize-only ile kullanarak, bir parquet dosyası yazmadan model tahminlerini (ve varsa, etiketlerden türetilen hedefleri) görselleştirebilirsiniz.

single_stage
dense_only
dual
python -m lerobot.rewards.sarm.compute_rabc_weights \
  --dataset-repo-id your-username/your-dataset \
  --reward-model-path your-username/sarm-model \
  --visualize-only \
  --num-visualizations 5 \
  --head-mode sparse \
  --output-dir ./sarm_viz

Görselleştirme şunları gösterir:

  • İlerleme grafiği: Tahmini ilerleme (ve mevcut olduğunda ve --stride 1 kullanıldığında isteğe bağlı, notlardan türetilen “GT”)
  • Aşama olasılıkları: Tahmin edilen aşama olasılıklarının yığılmış alan grafiği
  • Örnek kareler: Bölümden, ilerleme/aşama etiketlerine sahip ana kareler

Görselleştirme Argümanları

ArgümanAçıklama
--visualize-onlyYalnızca tahminleri görselleştir (RABC hesaplama yok)
--num-visualizationsGörselleştirilecek bölüm sayısı (varsayılan: 5)
--head-modeKullanılacak SARM başı: sparse, dense veya both
--strideHer N karede hesapla, kalanını içsel olarak doldur (varsayılan: 1)

Adım 5 (İsteğe bağlı): RA-BC ile Politikayı Eğitin

Reward-Aligned Behavior Cloning (RA-BC), eğitimlenmiş SARM modelini, tahmini ilerleme iyileştirmesine dayalı olarak eğitim örneklerini ağırlıklandırmak için kullanır. Bunun için iki adım gereklidir:

  1. Eğitilmiş SARM modelini kullanarak tüm kareler için ilerleme değerlerini önceden hesaplayın
  2. Önceden hesaplanan değerleri kullanarak RA-BC ağırlamasıyla politika eğitimi

RA-BC Nasıl Çalışır

Her eğitim örneği için RA-BC, ilerleme farkını hesaplar:

r_i = φ(o_{t+Δ}) - φ(o_t)

Burada φ, SARM ilerleme tahminini ve Δ, politikanın chunk_size değerini temsil eder. Pozitif ilerlemeye sahip örnekler (iyi gösterimler) daha yüksek ağırlıklar alırken, negatif veya sıfır ilerlemeye sahip örneklerin ağırlıkları düşürülür.

Ağırlıklandırma, makaledeki 8-9 numaralı denklemleri takip eder:

  • Yumuşak ağırlık: w̃_i = clip((r_i − (μ − 2σ)) / (4σ + ε), 0, 1)
  • Son ağırlık: w_i = 𝟙{r_i > κ} + 𝟙{0 ≤ r_i ≤ κ} × w̃_i

Adım 5a: SARM İlerleme Değerlerini Hesapla

Öncelikle, ilerleme değerlerini hesaplamak için SARM modelini veri setinizdeki tüm karelerde çalıştırın:

python -m lerobot.rewards.sarm.compute_rabc_weights \
  --dataset-repo-id your-username/your-dataset \
  --reward-model-path your-username/sarm-model \
  --head-mode sparse \
  --num-visualizations 5 \
  --push-to-hub

Bu betik:

  • Tüm kareleri işler ve ilerleme değerlerini hesaplar
  • İlerleme değerlerini, diskteki veri setinin yanındaki bir parquet dosyasına kaydeder (varsayılan olarak <dataset_root>/sarm_progress.parquet)
  • İlk N bölümün (varsayılan: 5) görselleştirmelerini oluşturur

Argümanlar:

ArgümanAçıklamaVarsayılan
--reward-model-pathEğitilmiş SARM modelinin yolu(gerekli)
--head-modeKullanılacak SARM başı: sparse, dense veya bothsparse
--deviceÇıkarım için cihazcuda
--visualize-onlyYalnızca tahminleri görselleştir (RA-BC hesaplama yok)false
--num-visualizationsGörselleştirilecek bölüm sayısı (varsayılan: 5, atlamak için 0 olarak ayarlayın)5

Çıktı biçimi (sarm_progress.parquet):

SütunAçıklama
indexVeri setindeki küresel çerçeve indeksi
episode_indexBölüm numarası
frame_indexBölüm içindeki yerel kare indeksi
progress_sparseSeyrek baş ilerleme değeri [0, 1]
progress_denseYoğun baş ilerleme değeri [0, 1] (hesaplandıysa)

Adım 5b: RA-BC ile Politikayı Eğitin

İlerleme dosyasına sahip olduğunuzda, politikayı RA-BC ağırlamasıyla eğitin. İlerleme dosyası, açıkça belirtilmediği takdirde veri seti yolundan otomatik olarak algılanır (sarm_progress.parquet). Şu anda RA-BC ile PI0, PI0.5, SmolVLA ve FastWAM desteklenmektedir:

lerobot-train \
  --dataset.repo_id=your-username/your-dataset \
  --policy.type=pi0 \
  --sample_weighting.type=rabc \
  --sample_weighting.head_mode=sparse \
  --sample_weighting.kappa=0.01 \
  --output_dir=outputs/train/policy_rabc \
  --batch_size=32 \
  --steps=40000

Eğitim betiği otomatik olarak:

  • Parquet dosyasından önceden hesaplanmış ilerleme değerlerini yükler
  • Politikanın chunk_size değerini kullanarak ilerleme farklarını (Δ) hesaplar
  • İlerleme iyileştirmesine dayalı örnek ağırlıklarını hesaplar
  • Eğitim sırasında ağırlıklı kayıp uygular

RA-BC Argümanları:

ArgümanAçıklamaVarsayılan
--sample_weighting.typeAğırlıklandırma stratejisi türü (rabc veya uniform)rabc
--sample_weighting.progress_pathİlerleme parquet dosyasının yolusarm_progress.parquet
--sample_weighting.head_modeHangi SARM başının ilerlemesinin kullanılacağı: sparse veya densesparse
--sample_weighting.kappaYüksek kaliteli örnekler için κ eşiği0.01
--sample_weighting.epsilonSayısal kararlılık için küçük bir sabit1e-6

RA-BC Kappa Ayarları

kappa parametresi, tam ağırlık (w=1) alan örnekleri belirleyen eşiktir. RA-BC'nin etkili bir şekilde çalışabilmesi için bu parametrenin nasıl ayarlanacağının anlaşılması kritik öneme sahiptir.

Ağırlıklandırmanın çalışma şekli:

KoşulAğırlık
delta > kappa1.0 (sert eşik)
0 ≤ delta ≤ kappaDenk. 8'den yumuşak ağırlık
delta < 00.0 (negatif ilerleme)

Kappa sorunlarını teşhis etme:

Eğitim sırasında bu Trackio metriklerini izleyin:

MetrikSağlıklı AralıkSorun Göstergesi
sample_weight_mean_weight0.3 - 0.8≈ 1.0, kappa çok düşük anlamına gelir
sample_weighting/delta_mean> 0Pozitif olmalıdır
sample_weighting/delta_std> 0Veri kalitesindeki değişkenlik

sample_weight_mean_weight ≈ 1.0 ise: Kappa değeriniz çok düşük. Örneklerin çoğu delta > kappa koşulunu sağlıyor ve yumuşak ağırlıklandırmayı tamamen atlıyor. RA-BC, standart BC ile eşdeğer hale geliyor.

Verilerinize göre kappa ayarlama:

Varsayılan kappa=0.01, makalenin T-shirt katlama görevi için (~90 sn'lik 30fps bölümler) ayarlanmıştır. Veri setiniz için, kaydedilen sample_weighting/delta_mean ve sample_weighting/delta_std değerlerini kontrol edin:

# If delta_mean ≈ 0.03 and delta_std ≈ 0.02:
# Most deltas fall in range [0.01, 0.05]

# Option 1: Set kappa = delta_mean (medium selectivity)
--sample_weighting.kappa=0.03

# Option 2: Set kappa = delta_mean + delta_std (high selectivity)
--sample_weighting.kappa=0.05

# Option 3: Set kappa = delta_mean + 2*delta_std (very selective)
--sample_weighting.kappa=0.07

RA-BC'nin yardımcı olmayabileceği durumlar:

Veri setiniz zaten yüksek kalitedeyse (tüm gösterimlerde tutarlı ilerleme), filtrelenmesi gereken bir şey olmadığı için RA-BC çok fazla fayda sağlamayacaktır.

RA-BC ile Çoklu GPU Eğitimi

accelerate launch \
  --multi_gpu \
  --num_processes=4 \
  src/lerobot/scripts/lerobot_train.py \
  --dataset.repo_id=your-username/your-dataset \
  --policy.type=pi0 \
  --sample_weighting.type=rabc \
  --sample_weighting.kappa=0.01 \
  --output_dir=outputs/train/policy_rabc \
  --batch_size=32 \
  --steps=40000

İpuçları & En İyi Uygulamalar

Bir Mod Seçme

  • Hızlı deneyler için single_stage ile başlayın - etiketleme yükü yok
  • Görevlerin net yüksek düzey aşamaları yoksa ancak ayrıntılı ilerleme takibi istiyorsanız dense_only kullanın
  • Hem kaba hem de ince taneli ilerlemenin anlamlı olduğu karmaşık görevler için dual kullanın

Etiketleme Kalitesi

  1. Alt görev adlarında spesifik olun: “katla” yerine “yakın kenarı tutun ve merkeze doğru katlayın” kullanın
  2. Görselleştirme ile doğrulayın: Eğitimden önce birkaç bölümü mutlaka kontrol edin
  3. Tutarlı adlandırma: Tüm bölümlerde aynı alt görev adlarını kullanın

RA-BC

  1. Önce SARM'ı eğitin: RA-BC kalitesi tamamen SARM kalitesine bağlıdır
  2. sample_weight_mean_weight değerini izleyin: ≈ 1.0 ise kappa değerini artırın (bkz. RA-BC Kappa Ayarı)

Atıf

@article{chen2025sarm,
  title={SARM: Stage-Aware Reward Modeling for Long Horizon Robot Manipulation},
  author={Chen, Qianzhong and Yu, Justin and Schwager, Mac and Abbeel, Pieter and Shentu, Yide and Wu, Philipp},
  journal={arXiv preprint arXiv:2509.25358},
  year={2025}
}
Update on GitHub