LeRobot documentation

Dil sütunları ve tarifler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Dil sütunları ve tarifler

LeRobot veri setlerinin çoğu, bölüm başına tek bir task dizesiyle birlikte gelir; bu, kısa süreli ve tek talimatlı beceriler için yeterlidir ancak alanın yöneldiği daha uzun ufuklu, çok modlu robot politikaları (yüksek düzey planlama, bellek, araya girmeler, VQA, araç kullanımı) için yeterli değildir. Bu politikaları veri seti biçimini dallandırmadan desteklemek için LeRobot, LeRobotDataset sınıfını iki isteğe bağlı dil sütunu ve bu satırları anlık olarak sohbet tarzı eğitim örneklerine dönüştüren küçük bir tarif katmanı ile genişletir.

Tasarım, temiz bir şekilde üç katmana ayrılır:

  1. Veri setindeki veriler — data/chunk-*/file-*.parquet içinde karelerin yanında saklanan dil etiketleri, iki isteğe bağlı sütun olarak (language_persistent ve language_events). Bu sütunlara sahip olmayan veri setleri mevcut davranışlarını korur.
  2. Reçete — hangi etiketleme satırlarının bağlanacağını ve bunların sohbet turları olarak (role, content, isteğe bağlı görseller, isteğe bağlı araç çağrıları) nasıl yerleştirileceğini bildiren bir YAML dosyası. Reçeteler saf yapılandırma dosyalarıdır; yeni bir tane eklemek için Python gerekmez.
  3. Eğitim biçimi — örnek zamanında, RenderTrainingMessagesStep tarifi kare başına ek açıklamalarla eşleştirir ve politika işleyicilerin tükettiği HF tarzı messages ile LeRobot'a özgü yan dosyaları (message_streams, target_message_indices) üretir.

Bu sayfa, her katmanı sırayla açıklar.

Katman 1 — veri setindeki dil sütunları

İsteğe bağlı iki sütun, data/chunk-*/file-*.parquet içindeki kare verilerinin yanında yer alır:

  • language_persistent: bir bölümdeki her kareye yayılan, subtask, plan ve memory gibi aktif kalan durum için satırlardan oluşan bir liste.
  • language_events: bir olayın yayımlandığı tam karede yalnızca o karede bulunan satırlardan oluşan bir liste, örneğin interjection, vqa ve konuşma araç çağrıları.

Her iki sütun da aynı satır biçimini paylaşır (olay satırları, satırın oturduğu çerçevenin zaten bunu sağladığı için timestamp alanını atlar):

role: string
content: string | null
style: string | null
timestamp: float32        # persistent rows only
camera: string | null     # observation.images.* feature key, view-dependent rows only
tool_calls: list[Json] | null

camera alanı, content değeri belirli bir kamera görünümüne dayanan satırları etiketler. Görünüme bağımlı stillerin (vqa ve trace) satırları, camera değerini eşleşen observation.images.* özellik anahtarına ayarlamalıdır. Diğer tüm stillerin satırları — eklem / Kartezyen terimlerde robot çerçevesi ilkelini tanımlayan motion dahil — camera değerini null olarak bırakmalıdır. Pipeline yazarları ve doğrulayıcı, bunu validate_camera_field(style, camera) aracılığıyla uygular.

meta/tasks.parquet görev için kanonik kaynak olmaya devam eder. Özel ${task} recipe bağlaması her zaman o görev dizgesini okur ve dil anotasyonlarına bağlı değildir.

Mimari

Dil yığını kendisi, 1. katmanı destekleyen üç iç modüle sahiptir:

  1. lerobot.datasets.language, şema, stil kayıt defteri ve column_for_style öğesini tanımlar.
  2. lerobot.datasets.language_render satırları çözümler ve mesajları oluşturur.
  3. RenderTrainingMessagesStep, veri seti örneklerini messages, message_streams ve target_message_indices olarak dönüştürür.

LeRobotDataset tariften bağımsızdır. language_persistent ve language_events alanları mevcut olduğunda bunları olduğu gibi iletir ve etiketlenmemiş veri setleri mevcut davranışlarını korur.

Katman 2 — tarif anatomisi

Recipes, lerobot.datasets.recipe içindeki TrainingRecipe ve MessageTurn tarafından desteklenen YAML dosyalarıdır. Hangi etiketleme satırlarının çekileceğini (bindings aracılığıyla) ve bunların sohbet turlarına (messages) nasıl birleştirileceğini tanımlarlar.

messages:
  - { role: user, content: "${task}", stream: high_level }
  - { role: assistant, content: "${subtask}", stream: low_level, target: true }

Bir tarif, alt tariflerin ağırlıklı bir karışımına da dallanabilir. Örnek alma sırasında, örnek dizisinden deterministik olarak tam olarak bir dal seçilir; böylece farklı kareler farklı hedefleri (ör. bellek güncellemeleri, düşük seviyeli yürütme, VQA) herhangi bir Python bağlantısı olmadan eğitir.

Zamansal anlambilim

Kalıcı stiller, değiştirilene kadar yayımlandıktan sonra etkin kalır:

  • active_at(t, style=subtask)
  • nth_prev(style=memory, offset=1)
  • nth_next(style=subtask, offset=1)

Olay stilleri yalnızca tam zaman damgalarında var olur:

  • emitted_at(t, style=interjection)
  • emitted_at(t, style=vqa, role=user, camera=observation.images.top)
  • emitted_at(t, role=assistant, tool_name=say)

Tam olay eşleştirmesinde tolerans penceresi yoktur, bu nedenle yazarlar olay satırlarını parquet verisinden gelen kare zaman damgalarıyla işaretlemelidir.

Görüşe bağlı çözünürlük

Görüşe bağlı stiller (vqa ve trace) için çözümleyici, role= ve tool_name= ile paralel olarak bir camera= filtresi kazanır. Birden fazla kameraya sahip veri setleri genellikle aynı zaman damgasında kamera başına bir (vqa, user) + (vqa, assistant) çifti yayar; camera= olmadan bu çözümleyiciler iki eşleşme görür ve bir belirsizlik hatası fırlatır. Tarifler, her kamerayı kendi bağlaması ve eşleşen bir görüntü bloğu aracılığıyla tüketir, örneğin

ask_vqa_top:
  route: vqa
  bindings:
    vqa_query: "emitted_at(t, style=vqa, role=user, camera=observation.images.top)"
    vqa: "emitted_at(t, style=vqa, role=assistant, camera=observation.images.top)"
  messages:
    - role: user
      stream: high_level
      if_present: vqa_query
      content:
        - { type: image, feature: observation.images.top }
        - { type: text, text: "${vqa_query}" }
    - {
        role: assistant,
        content: "${vqa}",
        stream: high_level,
        target: true,
        if_present: vqa,
      }

Veri setinin kaydettiği her kamera için birer alt tarif ekleyin. Açık route: vqa işareti, eşleşen seyrek VQA anotasyonunun normal ağırlıklı karışım seçiminden önce tercih edilmesini sağlar; bileşen adları tamamen tanımlayıcıdır.

Katman 3 — eğitim biçimi

Render edilen örnekler, HF tarzı sohbet mesajları ve LeRobot yan araçlarını kullanır:

sample["messages"]
sample["message_streams"]
sample["target_message_indices"]

Render, bir tokenizer sohbet şablonu uygulamaz. Politika işleyicileri, mesajların omurgaları için nasıl serileştirileceğine karar verir; bu sayede aynı veri seti, OpenAI tarzı sohbet mesajları bekleyen SmolVLA, Pi0.5 ve gelecekteki herhangi bir VLM arasında kullanılabilir kalır.

Karışımlar

Blend tarifleri, örnek indeksinden ağırlıklı bir alt tarifi deterministik olarak seçer. recipes/subtask_mem.yaml, kompakt çekirdek blend'ini eğitir: yüksek düzeyde alt görev tahmini, düşük düzeyde yürütme ve bellek. recipes/subtask_mem_vqa_speech.yaml, VQA ve sözlü araya girme yanıtlarını da ekleyen daha kapsamlı varyanttır.

recipes/subtask_joint.yaml, ağırlıklı bir karışım yerine ortak dizilim eğitimini gösterir. Aynı örnek için, asistan alt görevi low_level akışında metin çapraz entropisi ile denetlenirken eylem tahmini aktif kalmaya devam eder; bu da π0.5 makalesindeki ortak kurulumla eşleşir. Şimdilik yalnızca eğitim içindir: çalışma zamanı, çıkarım sırasında bu ortak öneki henüz yeniden oluşturmaz.

Zarif yokluk

Her iki dil sütunu da eksikse, None ise veya boşsa, RenderTrainingMessagesStep uygun olduğunda görev dizgisini düşük düzeyde denetim olarak kullanır, aksi halde örneği değiştirmez. İşaretlenmiş bir örnekte, hiçbir tarif dalı uygulanmıyorsa ve görev yedeği yoksa, işleme None döndürür ve bir yükleyicinin başka bir örneği yeniden denemesine izin verir.

Update on GitHub