LeRobot 文件
π₀.₅ (Pi05) 策略
並獲得增強的文件體驗
開始使用
π₀.₅ (Pi05) 策略
π₀.₅ 是一款來自 Physical Intelligence,具備開放世界泛化能力(open-world generalization)的視覺-語言-動作模型。其 LeRobot 實作版本改編自該團隊開源的 OpenPI 儲存庫。
模型概覽
π₀.₅ 代表了 π₀ 的重大演進,由 Physical Intelligence 開發,旨在解決機器人領域的一大挑戰:開放世界泛化。儘管機器人能在受控環境中執行令人印象深刻的任務,但 π₀.₅ 的設計目標是泛化到訓練過程中從未見過的全新環境與情境。
泛化挑戰
正如 Physical Intelligence 所解釋的,根本挑戰不在於執行靈敏或精細的任務,而在於「泛化」,即在新的場景中使用新物體正確執行任務的能力。試想一個機器人在不同的住家進行清潔工作:每個家中的物品擺放位置各不相同。泛化必須在多個層次上實現:
- 物理層面:理解如何拾取湯匙(握住把手)或盤子(捏住邊緣),即使是在雜亂環境中面對未曾見過的物體也能應對。
- 語義層面:理解任務語義,例如衣服和鞋子應該放在哪裡(洗衣籃,而不是床上),以及什麼工具適合清理溢出的液體。
- 環境層面:適應「雜亂」的真實世界環境,如住家、雜貨店、辦公室和醫院。
異質數據聯合訓練
π₀.₅ 的突破性創新在於對異質數據來源進行聯合訓練(Co-Training)。該模型從以下來源學習:
- 多模態網路數據:圖像說明、視覺問答、物件偵測。
- 口語指令:人類逐步指導機器人完成複雜任務。
- 子任務指令:高階語義行為標籤(例如:針對沒鋪好的床,指令為「撿起枕頭」)。
- 跨實體機器人數據:來自各種具備不同能力的機器人平台的數據。
- 多環境數據:部署在許多不同住家的靜態機器人數據。
- 移動操作數據:約 400 小時的移動機器人示範數據。
這種多樣化的訓練組合創造了一個「課程」,使其能同時在物理、視覺和語義層面上實現泛化。
安裝需求
請遵循我們的安裝指南來安裝 LeRobot。
安裝 Pi0.5 依賴套件,請執行:
pip install -e ".[pi]"
使用方式
若要在你的 LeRobot 設定中使用 π₀.₅,請將策略類型指定為:
policy.type=pi05訓練
訓練指令範例
以下是針對您自己的資料集微調 π₀.₅ 基礎模型的完整訓練指令:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi05 \
--output_dir=./outputs/pi05_training \
--job_name=pi05_training \
--policy.repo_id=your_repo_id \
--policy.pretrained_path=lerobot/pi05_base \
--policy.compile_model=true \
--policy.gradient_checkpointing=true \
--wandb.enable=true \
--policy.dtype=bfloat16 \
--policy.freeze_vision_encoder=false \
--policy.train_expert_only=false \
--steps=3000 \
--policy.device=cuda \
--batch_size=32訓練關鍵參數
--policy.compile_model=true:啟用模型編譯以加快訓練速度。--policy.gradient_checkpointing=true:顯著減少訓練期間的記憶體佔用。--policy.dtype=bfloat16:使用混合精度訓練以提高效率。--batch_size=32:訓練的批次大小,請根據您的 GPU 記憶體進行調整。--policy.pretrained_path=lerobot/pi05_base:您想要微調的基礎 π₀.₅ 模型,選項包括:- lerobot/pi05_base
- lerobot/pi05_libero (專門針對 Libero 資料集進行訓練)
訓練參數說明
| 參數 | 預設 | 說明 |
|---|---|---|
freeze_vision_encoder (凍結視覺編碼器) | false | 請勿凍結視覺編碼器(vision encoder) |
train_expert_only | false | 請勿凍結 VLM,訓練所有參數 |
💡 提示:設定 train_expert_only=true 會凍結 VLM,僅訓練動作專家(action expert)與投影層,從而以更低的記憶體需求進行微調。
如果您的資料集未使用 quantiles 進行轉換,您可以使用下列指令進行轉換:
python src/lerobot/datasets/v30/augment_dataset_quantile_stats.py \
--repo-id=your_dataset \或者使用此正規化映射(normalization mapping)來訓練 pi05: --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}'
相對動作 (Relative Actions)
預設情況下,π₀.₅ 預測的是絕對動作。您可以啟用相對動作,讓模型預測相對於當前機器人狀態的偏移量。這可以提高某些設定下的訓練穩定性。
若要使用相對動作,請先透過 CLI 在相對空間中重新計算您的資料集統計數據:
lerobot-edit-dataset \
--repo_id your_dataset \
--operation.type recompute_stats \
--operation.relative_action true \
--operation.chunk_size 50 \
--operation.relative_exclude_joints "['gripper']" \
--push_to_hub true或者在 Python 中執行:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
from lerobot.datasets.dataset_tools import recompute_stats
dataset = LeRobotDataset("your_dataset")
recompute_stats(dataset, relative_action=True, chunk_size=50, relative_exclude_joints=["gripper"])
dataset.push_to_hub()chunk_size 應與您策略的 chunk_size 相符(π₀.₅ 預設為 50)。relative_exclude_joints 列出了應保持在絕對空間中的關節名稱(例如夾爪指令)。使用 --push_to_hub true 將更新後的統計數據上傳至 Hub。
然後在啟用相對動作的情況下進行訓練:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi05 \
--policy.use_relative_actions=true \
--policy.relative_exclude_joints='["gripper"]' \
...效能結果
Libero 基準測試結果
π₀.₅ 在 Libero 基準測試套件中展現了強勁的效能。為了比較並驗證其 LeRobot 實作,我們將 libero 基礎模型在 Libero 資料集上額外微調了 6k 步,並將結果與 OpenPI 的參考結果進行了比較。
| 基準測試 | LeRobot 實作 | OpenPI 參考 |
|---|---|---|
| Libero Spatial | 97.0% | 98.8% |
| Libero Object | 99.0% | 98.2% |
| Libero Goal | 98.0% | 98.0% |
| Libero 10 | 96.0% | 92.4% |
| 平均 | 97.5% | 96.85% |
這些結果證明了 π₀.₅ 在各種機器人操作任務中具備強大的泛化能力。若要重現這些結果,您可以依照 Libero 章節中的說明進行操作。
授權
此模型採用 Apache 2.0 授權條款,與原始 OpenPI 儲存庫一致。
在 GitHub 上更新