LeRobot documentation

Yayın Video Kodlama Kılavuzu

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Yayın Video Kodlama Kılavuzu

1. Genel Bakış

Video akış kodlaması, video veri seti kaydı sırasında geleneksel PNG gidiş-dönüşünü ortadan kaldırır. Bunun yerine:

  1. Kare yakala -> PNG'yi diske yaz -> (epizot sonunda) PNG'leri oku -> MP4'e kodla -> PNG'leri sil

Kareler, yakalama sırasında gerçek zamanlı olarak kodlanabilir:

  1. Kare yakala -> kodlayıcı iş parçacığına kuyruğa al -> doğrudan MP4'e kodla

Bu, save_episode() işlemini neredeyse anında hale getirir (video, bölüm bitmeden önce zaten kodlanmıştır) ve özellikle uzun bölümlerde birden fazla kamera kullanıldığında bölümler arasında daha önce yaşanan engellenen bekleme süresini ortadan kaldırır.

2. Ayar Parametreleri

ParametreCLI BayrağıTürVarsayılanAçıklama
streaming_encoding--dataset.streaming_encodingboolFalseYakalama sırasında gerçek zamanlı kodlamayı etkinleştirin
vcodec--dataset.rgb_encoder.vcodecstr"libsvtav1"Video codec. "auto" en iyi donanım kodlayıcısını algılar
encoder_threads--dataset.encoder_threadsint \| NoneNone (otomatik)Her kodlayıcı örneği için iş parçacığı sayısı. None, vcoded'in karar vermesine izin verir
encoder_queue_maxsize--dataset.encoder_queue_maxsizeint30Kamera başına tamponlanan maksimum kare sayısı (~30fps'de 1 sn). RAM tüketir

3. Performans Düşünceleri

Streaming kodlama, CPU'nun videoyu yakalama döngüsünün içinde, sonrasında değil kodladığı anlamına gelir. Bu, aşağıdakiler arasında paylaşılması gereken bir CPU bütçesi oluşturur:

  • Kontrol döngüsü (kameraları okuma, robotu kontrol etme, video dışı verileri yazma)
  • Encoder iş parçacıkları (kamera başına bir havuz)
  • Görselleştirmeyi yeniden çalıştır (eğer etkinse)
  • İşletim sistemi ve diğer süreçler

Çözünürlük ve Kamera Sayısının Etkisi

KurulumGeçirgenlik (px/sn)CPU Kodlama YüküNotlar
2camsx 640x480x3 @30fps55MDüşükÇoğu sistemde çalışır
2camsx 1280x720x3 @30fps165MOrtaModern sistemlerde rahat
2camsx 1920x1080x3 @30fps373MYüksekGüçlü, üst düzey bir CPU gerektirir

encoder_threads Ayarları

Bu parametre, her kodlayıcı örneğinin içsel olarak kaç iş parçacığı kullandığını kontrol eder:

  • Daha yüksek değerler (ör. 4-5): Daha hızlı kodlama, ancak kamera başına daha fazla CPU çekirdeği kullanır. Çekirdeği çok olan üst düzey sistemler için uygundur.
  • Daha düşük değerler (ör. 1-2): Kamera başına daha az CPU kullanımı, çekim ve görselleştirme için çekirdekleri serbest bırakır. Düşük çözünürlüklü görüntüler ve yetenekli CPU'lar için uygundur.
  • None (varsayılan): Kararı codec'in vermesini sağlar. Codec günlüklerinde mevcut bilgiler.

Backpressure ve Kare Düşürme

Her kameranın sınırlı bir kuyruğu vardır (encoder_queue_maxsize, varsayılan 30 kare). Kodlayıcı yetişemediğinde:

  1. Kuyruk dolar (RAM tüketir)
  2. Yeni kareler atılır (bloklanmaz) — yakalama döngüsü kesintisiz devam eder
  3. Bir uyarı kaydedilir: "Encoder queue full for {camera}, dropped N frame(s)"
  4. Bölüm sonunda, kamera başına toplam düşen kareler raporlanır

Encoder'ın Geride Kalmasının Belirtileri

  • Sistem takılıyor ve donuyor: tüm CPU'lar %100
  • Kayıt edilen veri setinde beklenenden düşük kare/FPS veya günlükte atlanan kare uyarıları
  • Titrek robot hareketi: CPU aşırı yüklüyse, yakalama döngüsü bile etkilenebilir
  • Biriken yeniden çalıştırma gecikmesi: Görselleştirme gerçek zamanlılığı geride kalır

4. Donanım Hızlandırmalı Kodlama

Ne Zaman Kullanılır

Aşağıdaki durumlarda HW kodlamayı kullanın:

  • CPU darboğaz oluşturuyor (kare düşmesi, takılan robot, rerun gecikmesi)
  • Uyumlu donanımınız var (GPU veya özel kodlayıcı)
  • Yüksek verimle (yüksek çözünürlükte veya çok sayıda kamera ile) kayıt yapıyorsunuz

Kodlayıcı Seçimi

CodecCPU KullanımıDosya BoyutuKaliteNotlar
libsvtav1 (varsayılan)YüksekEn küçükEn iyiVarsayılan. En iyi sıkıştırma ancak en yüksek CPU yoğunluğu
h264Orta~%30-50 daha büyükİyiYazılım H.264. Daha düşük CPU
Donanım kodlayıcılarıÇok DüşükEn büyükİyiÖzel donanıma aktarır. CPU kısıtlamalı sistemler için en iyisidir

Kullanılabilir Donanım Kodlayıcıları

EncoderPlatformDonanımCLI Değeri
h264_videotoolboxmacOSApple Silicon / Intel--dataset.rgb_encoder.vcodec=h264_videotoolbox
hevc_videotoolboxmacOSApple Silicon / Intel--dataset.rgb_encoder.vcodec=hevc_videotoolbox
h264_nvencLinux/WindowsNVIDIA GPU--dataset.rgb_encoder.vcodec=h264_nvenc
hevc_nvencLinux/WindowsNVIDIA GPU--dataset.rgb_encoder.vcodec=hevc_nvenc
h264_vaapiLinuxIntel/AMD GPU--dataset.rgb_encoder.vcodec=h264_vaapi
h264_qsvLinux/WindowsIntel Quick Sync--dataset.rgb_encoder.vcodec=h264_qsv
autoHerhangiSistemde kullanılabilir donanım kodlayıcılarını sorgular. Donanım kodlayıcı bulunamazsa libsvtav1 kullanılır--dataset.rgb_encoder.vcodec=auto

HW hızlandırmalı kodlayıcıları kullanmak için GPU sürücülerinizi yükseltmeniz gerekebilir.

libsvtav1, en iyi eğitim performansını sağladığı için varsayılandır; diğer vcodecs CPU kullanımını azaltabilir ve daha hızlı olabilir, ancak genellikle daha büyük dosyalar üretir ve eğitim süresini etkileyebilir.

5. Sorun Giderme

BelirtiMuhtemel NedenDüzelt
Sistem donması veya robot hareketinin takılması veya Rerun görselleştirme gecikmesiCPU aç (yükleme kullanımı %100)Diğer uygulamaları kapatın, kodlama verimliliğini azaltın, encoder_threads değerini düşürün, h264 kullanın, display_data=False kullanın. CPU yine de %100'de kalıyorsa, bu durum kurulumunuz için yetersiz olabilir; --dataset.streaming_encoding=false veya donanım kodlamasını (--dataset.rgb_encoder.vcodec=auto) düşünün.
Veri setinde “Encoder queue full” uyarıları veya düşen karelerEncoder yetişemiyor (Kuyruk taşması)CPU %100'de değilse: encoder_threads değerini artırın, encoder_queue_maxsize değerini artırın veya donanım kodlamasını kullanın (--dataset.rgb_encoder.vcodec=auto).
Yüksek RAM kullanımıKuyruk, kodlamadan daha hızlı doluyorencoder_threads çok düşük veya CPU yetersiz. encoder_queue_maxsize değerini azaltın veya donanım kodlaması kullanın
Büyük video dosyalarıHW kodlayıcı veya H.264 kullanmaBeklenen ödünleşim. CPU izin veriyorsa libsvtav1'e geçin
save_episode() hâlâ yavaşstreaming_encoding False değerine ayarlanmıştır--dataset.streaming_encoding=true değerini ayarlayın
Encoder iş parçacığı çökmesiKodlayıcı kullanılamıyor veya geçersiz ayarlarvcodec'in yüklü olduğunu kontrol edin, --dataset.rgb_encoder.vcodec=auto deneyin
Kaydedilen veri setinde kareler eksikCPU/GPU açlığı veya ara sıra yük sıçramalarıKarelerin ~%5'i eksikse, sisteminiz büyük olasılıkla aşırı yüklüdür — yukarıdaki önerileri izleyin. Daha az kare eksikse (~%2), bunlar muhtemelen ara sıra oluşan geçici yük sıçramalarından (genellikle başlangıçta) kaynaklanmaktadır ve beklenen bir durum olarak kabul edilebilir.

6. Önerilen Yapılandırmalar

Bu tahminler muhafazakârdır; bunları kendi kurulumunuzda test etmenizi öneririz—düşük bir yükle başlayıp kademeli olarak artırın.

Yüksek Uçlu Sistemler: modern 12+ çekirdek (24+ iş parçacığı)

CPU'da ~250-500M px/sn aralığında bir bant genişliği rahat olmalıdır. Daha iyi sonuçlar için, kullanılabilirse HW kodlamayı deneyin.

# 3camsx 1280x720x3 @30fps: Defaults work well. Optionally increase encoder parallelism.
# 2camsx 1920x1080x3 @30fps: Defaults work well. Optionally increase encoder parallelism.
lerobot-record --dataset.encoder_threads=5 ...

# 3camsx 1920x1080x3 @30fps: Might require some tuning.

Orta Segment Sistemler: modern 8+ çekirdek (16+ iş parçacığı) veya Apple Silicon

CPU'da ~80-300M px/sn arasında bir bant genişliği mümkün olmalıdır.

# 3camsx 640x480x3 @30fps: Defaults work well. Optionally decrease encoder parallelism.
# 2camsx 1280x720x3 @30fps: Defaults work well. Optionally decrease encoder parallelism.
lerobot-record --dataset.encoder_threads=2 ...

# 2camsx 1920x1080x3 @30fps: Might require some tuning.

Düşük Kaynaklı Sistemler: modern 4+ çekirdek (8+ iş parçacığı) veya Raspberry Pi 5

Çok kısıtlı sistemlerde, akış kodlaması yakalama döngüsüyle aşırı derecede çelişebilir. Bu özelliği devre dışı bırakmak, kodlamanın bölümler arasında gerçekleştiği PNG tabanlı yönteme geri düşülmesini sağlar (engelleyici olsa da yakalamayı etkilemez). Alternatif olarak, hem yakalama hem de kodlama yükünü azaltmak için daha düşük bir verimle kayıt yapın. Ayrıca, kodeği h264 olarak değiştirmeyi ve toplu kodlamayı kullanmayı da düşünün.

# 2camsx 640x480x3 @30fps: Requires some tuning.

# Use H.264, disable streaming, consider batching encoding
lerobot-record --dataset.rgb_encoder.vcodec=h264 --dataset.streaming_encoding=false ...

7. Kapanış notu

Performans, kesin kurulumunuza bağlıdır: kare/saniye, çözünürlük, CPU çekirdek sayısı ve yükü, kullanılabilir bellek, bölüm uzunluğu ve seçtiğiniz kodlayıcı. Hedef iş yükünüzle her zaman test edin, CPU & sistem yeteneklerinizi göz önünde bulundurun ve encoder_threads, encoder_queue_maxsize ile vcodec değerlerini makul bir şekilde ayarlayın. Bununla birlikte, yaygın bir pratik yapılandırma (birçok uygulama için) 640×480x3 @30fps çözünürlükte üç kameradır; bu, modern sistemlerde varsayılan akış video kodlama ayarlarıyla genellikle sorunsuz çalışır. Kaydedilen veri setinizin sağlıklı olduğunu, video süresini CLI bölüm süresiyle karşılaştırarak ve satır sayısının FPS × CLI süresine eşit olduğunu doğrulayarak her zaman kontrol edin.

Update on GitHub