LeRobot documentation

Geriye dönük uyumluluk

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Geriye dönük uyumluluk

Policy Normalization Göçü (PR #1452)

Kırıcı Değişiklik: LeRobot politikaları artık ağırlıklarına gömülü yerleşik normalizasyon katmanlarına sahip değildir. Normalizasyon artık harici PolicyProcessorPipeline bileşenleri tarafından yönetilir.

Ne değişti?

PR #1452'den öncePR #1452'den sonra
Normalizasyon KonumuModel ağırlıklarına gömülü (normalize_inputs.*)Harici PolicyProcessorPipeline bileşenleri
Model Durum SözlüğüNormalizasyon istatistiklerini içerirSadece temiz ağırlıklar - normalizasyon parametreleri yok
Kullanımpolicy(batch) her şeyi işlerpreprocessor(batch) → policy(...) → postprocessor(...)

Mevcut modeller üzerindeki etki

  • PR #1452'den önce eğitilen modellerin ağırlıklarında normalizasyon gömülüdür
  • Bu modellerin yeni PolicyProcessorPipeline sistemiyle çalışabilmesi için göç gerektirir
  • Göç işlemi, normalizasyon istatistiklerini çıkarır ve ayrı işleyici hatları oluşturur

Eski modelleri taşıma

Gömülü normalizasyona sahip modelleri dönüştürmek için migrasyon betiğini kullanın:

python src/lerobot/processor/migrate_policy_normalization.py \
    --pretrained-path lerobot/act_aloha_sim_transfer_cube_human \
    --push-to-hub \
    --branch migrated

Betik:

  1. Extracts model ağırlıklarından normalizasyon istatistiklerini çıkarır
  2. Oluşturur harici ön işleyici ve son işleyici boru hatları
  3. Model ağırlıklarından normalizasyon katmanlarını kaldırır
  4. Saves temiz model + işlemci boru hatları
  5. Hub'a otomatik PR oluşturma ile Pushes

Migre edilmiş modelleri kullanma

# New usage pattern (after migration)
from lerobot.policies import make_policy, make_pre_post_processors

# Load model and processors separately
policy = make_policy(config, ds_meta=dataset.meta)
preprocessor, postprocessor = make_pre_post_processors(
    policy_cfg=config,
    dataset_stats=dataset.meta.stats
)

# Process data through pipeline
processed_batch = preprocessor(raw_batch)
action = policy.select_action(processed_batch)
final_action = postprocessor(action)

Donanım API'si yeniden tasarımı

PR #777 LeRobot kalibrasyonunu iyileştirir ancak geriye dönük uyumlu değildir. Aşağıda, bu çekme isteğinden önce oluşturulan veri setleriyle çalışmaya devam edebilmeniz için neyin değiştiğinin bir özeti yer almaktadır.

Ne değişti?

PR #777'den öncePR #777'den sonra
Ortak aralıkDereceler -180...180°Normalize edilmiş aralık Eklem: –100...100 Gripper: 0...100
Sıfır konumu (SO100 / SO101)Kol tamamen yatay olarak uzatılmışHer eklem için aralığın ortasında
Sınır işleme±180 ° sarmaları tespit etmek için yazılım önlemleriOrta aralık sıfırı nedeniyle sarma mantığına gerek yoktur

Mevcut veri setleri üzerindeki etki

  • Kaydedilen yörüngeler oluşturuldu önce PR #777 doğrudan yüklendiğinde yanlış şekilde yeniden oynatılır:
    • Birleşik açıları kaydırılmış ve yanlış şekilde normalize edilmiştir.
  • Eski veriler üzerinde doğrudan ince ayarlanmış veya eğitilmiş tüm modellerin girdileri ve çıktıları dönüştürülmelidir.

Önceki kalibrasyon sistemiyle oluşturulan veri setlerini kullanma

Önceki kalibrasyonla kaydedilmiş bir bölümü yeniden oynatmak için bir göç örneği betiği sunuyoruz: examples/backward_compatibility/replay.py. Aşağıda, önceki kalibrasyon veri setlerinin çalışmasını sağlamak için örnek betikte yapılan değişiklikleri adım adım inceliyoruz.

+   key = f"{name.removeprefix('main_')}.pos"
    action[key] = action_array[i].item()
+   action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+   action["elbow_flex.pos"] -= 90

Bunu parçalara ayıralım. Yeni kod tabanı, konum gözlemleri için .pos son ekini kullanıyor ve main_ önekini kaldırdık:

key = f"{name.removeprefix('main_')}.pos"

"shoulder_lift" (id = 2) için 0 konumu, eski kalibrasyon/koda göre -90 derece değiştirilir ve yön tersine çevrilir.

action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)

"elbow_flex" (id = 3) için 0 konumu, eski kalibrasyon/koda göre -90 derece değiştirilmiştir.

action["elbow_flex.pos"] -= 90

Derece normalizasyonunu kullanmak için --robot.use_degrees seçeneğini true olarak ayarlarız.

python examples/backward_compatibility/replay.py \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460814411 \
    --robot.id=blue \
+   --robot.use_degrees=true \
    --dataset.repo_id=my_dataset_id \
    --dataset.episode=0

Önceki kalibrasyon sistemiyle eğitilen politikaları kullanma

Policies, veri kümeleriyle aynı formatta (torch.Tensors) eylemler üretir. Bu nedenle, aynı dönüşümler uygulanmalıdır.

Bu dönüşümleri bulmak için, yukarıdaki bölümü kullanarak politikanızın eğitildiği veri setinden bir bölümü yeniden oynatmanızı öneririz. Ardından, bu aynı dönüşümleri çıkarım betiğinize ekleyin (burada, examples/ içindeki evaluate.py örneklerinde olduğu gibi predict_action çağıran bir betik için gösterilmektedir):

action_values = predict_action(
    observation_frame,
    policy,
    get_safe_torch_device(policy.config.device),
    preprocessor,
    postprocessor,
    policy.config.use_amp,
    task=single_task,
    robot_type=robot.robot_type,
    )
    action = {key: action_values[i].item() for i, key in enumerate(robot.action_features)}

+   action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+   action["elbow_flex.pos"] -= 90
    robot.send_action(action)

Sorularınız varsa veya geçiş sorunlarıyla karşılaşırsanız, bunları Discord üzerinde sormaktan çekinmeyin.

Update on GitHub