LeRobot documentation
Geriye dönük uyumluluk
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 önce | PR #1452'den sonra | |
|---|---|---|
| Normalizasyon Konumu | Model ağırlıklarına gömülü (normalize_inputs.*) | Harici PolicyProcessorPipeline bileşenleri |
| Model Durum Sözlüğü | Normalizasyon istatistiklerini içerir | Sadece temiz ağırlıklar - normalizasyon parametreleri yok |
| Kullanım | policy(batch) her şeyi işler | preprocessor(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
PolicyProcessorPipelinesistemiyle ç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 migratedBetik:
- Extracts model ağırlıklarından normalizasyon istatistiklerini çıkarır
- Oluşturur harici ön işleyici ve son işleyici boru hatları
- Model ağırlıklarından normalizasyon katmanlarını kaldırır
- Saves temiz model + işlemci boru hatları
- 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 önce | PR #777'den sonra | |
|---|---|---|
| Ortak aralık | Dereceler -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 önlemleri | Orta 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"] -= 90Bunu 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"] -= 90Derece 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