LeRobot 文件
向後相容性
立即開始
教學課程
機器人模仿學習使用自備策略 (Bring Your Own Policies)使用自備硬體 (Bring Your Own Hardware)以增強學習訓練機器人在模擬環境中訓練增強學習多 GPU 訓練人機協作 (Human-in-the-Loop) 資料收集使用 PEFT(例如 LoRA)進行訓練使用 Rename Map 與空白相機
資料集 (Datasets)
策略
獎勵模型
推論
模擬
基準測試 (Benchmarks)
機器人處理器
機器人
遙控操作員
感測器
支援的硬體
資源
關於
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
向後相容性
策略標準化遷移 (PR #1452)
重大變更 (Breaking Change):LeRobot 策略不再將標準化層嵌入權重中。標準化現在由外部的 PolicyProcessorPipeline 元件處理。
有什麼改變?
| PR #1452 之前 | PR #1452 之後 | |
|---|---|---|
| 標準化位置 | 嵌入在模型權重中 (normalize_inputs.*) | 外部的 PolicyProcessorPipeline 元件 |
| 模型狀態字典 (Model State Dict) | 包含標準化統計數據 | 僅乾淨權重 - 無標準化參數 |
| 用法 | policy(batch) 處理所有事項 | preprocessor(batch) → policy(...) → postprocessor(...) |
對現有模型的影響
- 在 PR #1452 之前訓練的模型,其權重中嵌入了標準化參數
- 這些模型需要進行遷移,才能與新的
PolicyProcessorPipeline系統搭配運作 - 遷移過程會提取標準化統計數據,並建立獨立的處理器管線 (processor pipelines)
遷移舊模型
使用遷移指令碼來轉換具有嵌入式標準化的模型
python src/lerobot/processor/migrate_policy_normalization.py \
--pretrained-path lerobot/act_aloha_sim_transfer_cube_human \
--push-to-hub \
--branch migrated該指令碼會:
- 提取模型權重中的標準化統計數據
- 建立外部預處理器與後處理器管線
- 移除模型權重中的標準化層
- 儲存乾淨的模型 + 處理器管線
- 推送到 Hub 並自動建立 PR
使用已遷移的模型
# New usage pattern (after migration)
from lerobot.policies.factory 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)硬體 API 重新設計
PR #777 改進了 LeRobot 校準,但不向後相容。以下概述了變更內容,以及如何繼續使用在此 PR 之前建立的數據集。
有什麼改變?
| PR #777 之前 | PR #777 之後 | |
|---|---|---|
| 關節範圍 | 角度 -180...180° | 標準化範圍 關節:–100...100 夾爪:0...100 |
| 零點位置 (SO100 / SO101) | 手臂完全水平伸展 | 每個關節範圍的中間 |
| 邊界處理 | 軟體防護機制,用於偵測 ±180° 迴繞 (wrap-arounds) | 由於零點位於範圍中間,無需迴繞邏輯 |
對現有數據集的影響
- PR #777 之前記錄的軌跡,如果直接載入將無法正確重播
- 關節角度會產生偏移且標準化不正確。
- 任何直接在舊數據上進行微調或訓練的模型,都需要轉換其輸入和輸出。
使用舊校準系統製作的數據集
我們提供了一個遷移範例指令碼,用於重播使用先前校準錄製的片段:examples/backward_compatibility/replay.py。以下我們將說明範例指令碼中為使舊校準數據集能正常運作所進行的修改。
+ 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讓我們深入解析。新的代碼庫使用 .pos 後綴作為位置觀測,並且我們移除了 main_ 前綴。
key = f"{name.removeprefix('main_')}.pos"對於 "shoulder_lift" (id = 2),0 位置變更了 -90 度,且方向與舊校準/代碼相比已反轉。
action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)對於 "elbow_flex" (id = 3),0 位置與舊校準/代碼相比變更了 -90 度。
action["elbow_flex.pos"] -= 90若要使用度數標準化,我們接著將 --robot.use_degrees 選項設定為 true。
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使用舊校準系統訓練的策略
策略輸出動作的格式與數據集相同 (torch.Tensors)。因此,應應用相同的轉換。
要找到這些轉換,我們建議先嘗試使用上述章節的方法,重播一個您的策略所訓練過的數據集片段。然後,將這些相同的轉換新增到您的推論指令碼中(如 record.py 指令碼所示)。
action_values = predict_action(
observation_frame,
policy,
get_safe_torch_device(policy.config.device),
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)如果您有任何疑問或遇到遷移問題,歡迎隨時在 Discord 上提問。
在 GitHub 上更新