LeRobot documentation

π₀-FAST (Pi0-FAST)

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

π₀-FAST (Pi0-FAST)

π₀-FAST, sürekli robot eylemlerini modellemek için otoregresif bir sonraki token tahminini kullanan genel robot kontrolü için bir Görsel-Dil-Eylem modelidir.

Model Genel Bakış

π₀-FAST, Görüntü-Dil Modellerinin gücünü, FAST (Frequency-space Action Sequence Tokenization) adlı yeni bir eylem tokenizasyonu yaklaşımıyla birleştirir. Bu sayede, standart binned tabanlı ayrıklaştırma ile imkânsız olan, son derece çevik görevlerde otoregresif VLA'ların eğitimi mümkün hale gelirken, π₀ gibi difüzyon tabanlı yaklaşımlara kıyasla 5 kata kadar daha hızlı eğitim yapılabilir.

An overview of Pi0-FAST

Neden FAST?

Robot eylem tokenizasyonu için standart yaklaşımlar, basit boyut başına ve zaman adımı başına binişleme şemaları kullanır. Basit davranışlar için kabul edilebilir olsa da, hassasiyet ve yüksek frekanslı kontrol gerektiren karmaşık ve çevik beceriler için bu yöntem hızla işlevini yitirir.

FAST, sinyal işleme tekniklerini kullanarak eylem dizilerini sıkıştırarak bu sorunu çözer; bu da dil token'ları gibi otoregresif olarak tahmin edilebilen yoğun bir eylem token'ı dizisiyle sonuçlanır.

FAST Tokenizasyonun Çalışma Şekli

FAST belirleyici, eylem dizilerini aşağıdaki adımlar aracılığıyla sıkıştırır:

  1. Normalize: H ufku ve D eylem boyutuna sahip, (H, D) şeklinde sürekli bir eylem parçası alın. Desteklenen normalizasyon yöntemlerinden biriyle normalizasyon yapın (aykırı değerleri ele almak için Quantiles önerilir).

  2. Discrete Cosine Transform (DCT): DCT'yi (scipy aracılığıyla) her eylem boyutuna ayrı ayrı uygulayın. DCT, görüntü ve ses kodeklerinde (JPEG, MP3) yaygın olarak kullanılan bir sıkıştırma algoritmasıdır.

  3. Kantizasyon: Her eylem boyutu için önemsiz katsayıları yuvarlayıp kaldırarak seyrek bir frekans matrisi oluşturur.

  4. Flatten: Matrisi, düşük frekanslı bileşenler başta olacak şekilde 1B vektöre dönüştürür.

  5. Byte Pair Encoding (BPE): DCT katsayılarını yoğun eylem jetonlarına sıkıştırmak için bir BPE jetonlaştırıcı eğitin; bu, önceki jetonlaştırma yaklaşımlarına kıyasla tipik olarak 10x sıkıştırma sağlar.

Bu yaklaşım, bu FAST tokenlarını tahmin etmesi için eğitilerek mevcut herhangi bir VLM'yi bir VLA'ya dönüştürebilir.

Kurulum Gereksinimleri

  1. LeRobot'u Yükleme Kılavuzumuz’u takip ederek yükleyin.

  2. π₀-FAST bağımlılıklarını yüklemek için şunu çalıştırın:

    pip install -e ".[pi]"

Özel Bir FAST Sözcük Üretici Eğitimi

FAST tokenizer için iki seçeneğiniz var:

  1. Önceden eğitilmiş belirteç ayrıştırıcısını kullanın: lerobot/fast-action-tokenizer belirteç ayrıştırıcısı, 1M+ gerçek robot eylem dizisi üzerinde eğitilmiştir ve genel amaçlı bir belirteç ayrıştırıcısı olarak çalışır.

  2. Kendi tokenizörünüzü eğitin: Belirli veri setinizde maksimum performans için, tokenizörü kendi verileriniz üzerinde ince ayarlayabilirsiniz.

Kendi Tokenizer'ınızı Eğitme

lerobot-train-tokenizer \
    --repo_id "user/my-lerobot-dataset" \
    --action_horizon 10 \
    --encoded_dims "0:6" \
    --vocab_size 1024 \
    --scale 10.0 \
    --normalization_mode QUANTILES \
    --output_dir "./my_fast_tokenizer" \
    --push_to_hub true \
    --hub_repo_id "username/my-action-tokenizer"

Önemli Tokenizer Parametreleri

ParametreAçıklamaVarsayılan
--repo_idLeRobot veri seti deposu kimliğiZorunlu
--action_horizonHer parçadaki gelecek eylemlerin sayısı10
--encoded_dimsKodlanacak virgülle ayrılmış boyut aralıkları (ör., "0:6,7:23")"0:6,7:23"
--vocab_sizeBPE sözlük boyutu1024
--scaleKantizasyon için DCT ölçekleme faktörü10.0
--normalization_modeNormalizasyon modu (MEAN_STD, MIN_MAX, QUANTILES, QUANTILE10, IDENTITY)QUANTILES
--sample_fractionHer bölümde örneklenmesi gereken parça oranı0.1

Kullanım

LeRobot'ta π₀-FAST'ı kullanmak için politika türünü şu şekilde belirtin:

policy.type=pi0_fast

Eğitim

π₀-FAST'ı eğitmek için LeRobot eğitim betiğini kullanabilirsiniz:

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0_fast \
    --output_dir=./outputs/pi0fast_training \
    --job_name=pi0fast_training \
    --policy.pretrained_path=lerobot/pi0fast-base \
    --policy.dtype=bfloat16 \
    --policy.gradient_checkpointing=true \
    --policy.chunk_size=10 \
    --policy.n_action_steps=10 \
    --policy.max_action_tokens=256 \
    --steps=100000 \
    --batch_size=4 \
    --policy.device=cuda

Temel Eğitim Parametreleri

ParametreAçıklamaVarsayılan
--policy.gradient_checkpointing=trueEğitim sırasında bellek kullanımını önemli ölçüde azaltırfalse
--policy.dtype=bfloat16Verimlilik için karma hassasiyetli eğitim kullanınfloat32
--policy.chunk_sizeTahmin edilecek eylem adımı sayısı (eylem ufku)50
--policy.n_action_stepsYürütülecek eylem adım sayısı50
--policy.max_action_tokensEylem parçası başına maksimum FAST jetonu sayısı256
--policy.action_tokenizer_nameKullanılacak FAST tokenizerlerobot/fast-action-tokenizer
--policy.compile_model=trueDaha hızlı eğitim için torch.compile'i etkinleştirinfalse
--policy.optimizer_fused=trueFüzyonlu AdamW kullanılır; devam ettirme sırasında yok sayılırNone

Çıkarım

Hızlı Çıkarım İçin KV-Önbellekleme

π₀-FAST, LLM çıkarımında yaygın olarak kullanılan bir optimizasyon olan KV-caching özelliğini destekler. Bu yöntem, dikkat mekanizmasından gelen anahtar-değer çiftlerini önbelleğe alarak otoregresif çözümleme sırasında gereksiz hesaplamaların önüne geçer.

# KV-caching is enabled by default
policy.use_kv_cache=true

Çıkarım Örneği

from lerobot.policies.pi0_fast import PI0FastPolicy, PI0FastConfig

# Load the policy
policy = PI0FastPolicy.from_pretrained("your-model-path")

# During inference
actions = policy.predict_action_chunk(batch)

Model Mimarisi

π₀-FAST, PaliGemma tabanlı bir mimari kullanır:

  • Görüntü Kodlayıcı: Görüntü anlama için SigLIP görüntü kulesi
  • Dil Modeli: Dil talimatlarını işleme ve eylem jetonlarını tahmin etme için Gemma 2B

Model, girdi olarak görüntüleri, metin talimatlarını ve robot durumunu alır ve sürekli eylemlere geri çözümlenen ayrık FAST jetonlarını çıktı olarak üretir.

Yapılandırma Seçenekleri

ParametreAçıklamaVarsayılan
paligemma_variantVLM omurga varyantı (gemma_300m, gemma_2b)gemma_2b
max_state_dimMaksimum durum vektörü boyutu (dolgulu)32
max_action_dimMaksimum eylem vektörü boyutu (dolgulu)32
temperatureÖrnekleme sıcaklığı (açgözlü için 0.0)0.0
max_decoding_stepsMaksimum çözümleme adımları256
use_kv_cacheDaha hızlı çıkarım için KV önbellekleme etkinleştirintrue

π₀ ile karşılaştırma

Özellikπ₀π₀-FAST
Eylem TemsiliFlow Matching (Difüzyon)Otomatik Geri Dönüşlü Jetonlar (FAST)
Eğitim Hızı1x5 kat daha hızlı
ÇeviklikYüksekYüksek
Çıkarım Yöntemiİteratif Gürültü AzaltmaOtomatik Geri Dönüşlü Çözümleme
KV-ÖnbelleklemeN/ADestekleniyor

π₀Fast sonuçlarını yeniden üretme

LeRobot uygulamasını kullanarak π₀Fast sonuçlarını LIBERO benchmark'unda yeniden üretiyoruz. LeRobot PiFast temel modelini lerobot/pi0fast-base alıp, HuggingFace LIBERO veri seti ile 8 H100 GPU üzerinde 256 batch boyutu ve bfloat16 ile ek 40k adım boyunca ince ayar yapıyoruz.

İnce ayarlanmış model burada bulunabilir:

Aşağıdaki eğitim komutuyla:

lerobot-train \
  --dataset.repo_id=lerobot/libero \
  --output_dir=outputs/libero_pi0fast \
  --job_name=libero_pi0fast \
  --policy.path=lerobot/pi0fast-base \
  --policy.dtype=bfloat16 \
  --steps=100000 \
  --save_freq=20000 \
  --batch_size=4 \
  --policy.device=cuda \
  --policy.scheduler_warmup_steps=4000 \
  --policy.scheduler_decay_steps=100000 \
  --policy.scheduler_decay_lr=1e-5 \
  --policy.gradient_checkpointing=true \
  --policy.chunk_size=10 \
  --policy.n_action_steps=10 \
  --policy.max_action_tokens=256 \
  --policy.empty_cameras=1

Ardından, finetuned modeli LeRobot LIBERO uygulamasını kullanarak aşağıdaki komutu çalıştırarak değerlendiririz:

tasks="libero_object,libero_spatial,libero_goal,libero_10"
lerobot-eval \
  --policy.path=lerobot/pi0fast-libero \
  --policy.max_action_tokens=256 \
  --env.type=libero \
  --policy.gradient_checkpointing=false \
  --env.task=${tasks} \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --rename_map='{"observation.images.image":"observation.images.base_0_rgb","observation.images.image2":"observation.images.left_wrist_0_rgb"}'

Not: Orijinal OpenPI uygulamasına benzer şekilde n_action_steps=10 değerini ayarladık.

Sonuçlar

LIBERO benchmark üzerinde aşağıdaki sonuçları elde ediyoruz:

ModelLIBERO UzamsalLIBERO NesneLIBERO HedefLIBERO 10Ortalama
π₀-fast70.0100.0100.060.082.5

Videolar dahil olmak üzere tam değerlendirme çıktı klasörü burada mevcuttur.

Lisans

Bu model, orijinal OpenPI deposu ile tutarlı olarak Apache 2.0 Lisansı'na uyar.

Referanslar

Update on GitHub