LeRobot 文件

π₀-FAST (Pi0-FAST)

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

π₀-FAST (Pi0-FAST)

π₀-FAST 是一個用於通用機器人控制的視覺-語言-動作模型 (Vision-Language-Action model),它使用自動回歸下一標記預測 (next-token prediction) 來建立連續機器人動作的模型。

模型概覽

π₀-FAST 將視覺-語言模型的強大功能與名為 FAST (Frequency-space Action Sequence Tokenization,頻域動作序列標記化) 的新型動作標記化方法相結合。這使得在高難度動作任務上訓練自動回歸 VLA 成為可能(這些任務在標準的基於分箱的離散化方法中無法實現),同時其訓練速度比基於擴散 (diffusion) 的方法(如 π₀)快達 5 倍

An overview of Pi0-FAST

為什麼選擇 FAST?

標準的機器人動作標記化方法使用簡單的「逐維度、逐時間步」分箱方案。雖然對於簡單行為還算可行,但對於需要精確和高頻控制的複雜且靈巧的技能,這種方法會迅速崩潰。

FAST 透過使用訊號處理技術壓縮動作序列來解決此問題,從而產生密集的動作標記序列,這些序列可以像語言標記一樣進行自動回歸預測。

FAST 標記化運作原理

FAST 標記化透過以下步驟壓縮動作序列

  1. 標準化 (Normalize):取得一個形狀為 (H, D) 的連續動作區塊,其中 H 是時域寬度 (horizon),D 是動作維度。使用支援的標準化方法之一進行處理(建議使用 Quantiles 以處理離群值)。

  2. 離散餘弦轉換 (Discrete Cosine Transform, DCT):對每個動作維度分別應用 DCT(透過 scipy)。DCT 是一種常用於影像和音訊編解碼器(如 JPEG, MP3)的壓縮演算法。

  3. 量化 (Quantization):對每個動作維度的係數進行四捨五入並移除不顯著的部分,產生一個稀疏的頻率矩陣。

  4. 平坦化 (Flatten):將矩陣展開為一維向量,低頻分量排在前面。

  5. 位元組對編碼 (Byte Pair Encoding, BPE):訓練 BPE 標記器將 DCT 係數壓縮為密集的動作標記,通常與先前的標記化方法相比可實現 10 倍壓縮

這種方法可以透過訓練任何現有的 VLM 預測這些 FAST 標記,進而將其轉化為 VLA。

安裝需求

  1. 請遵循我們的安裝指南來安裝 LeRobot。

  2. 執行以下指令安裝 π₀-FAST 相關依賴

    pip install -e ".[pi]"

訓練自定義 FAST 標記器

對於 FAST 標記器,您有兩個選擇

  1. 使用預訓練的標記器lerobot/fast-action-tokenizer 是在超過 100 萬個真實機器人動作序列上訓練的,可作為通用標記器。

  2. 訓練您自己的標記器:為了在您的特定資料集上獲得最佳效能,您可以在自己的資料上微調標記器。

訓練您自己的標記器

lerobot-train-tokenizer \
    --repo_id "user/my-lerobot-dataset" \
    --action_horizon 10 \
    --encoded_dims "0:6" \
    --vocab_size 1024 \
    --scale 10.0 \
    --normalization_mode QUANTILES \
    --output_dir "./my_fast_tokenizer" \
    --push_to_hub \
    --hub_repo_id "username/my-action-tokenizer"

標記器關鍵參數

參數 說明 預設
--repo_id LeRobot 資料集儲存庫 ID 必要
--action_horizon 每個區塊中的未來動作數量 10
--encoded_dims 以逗號分隔的待編碼維度範圍(例如 "0:6,7:23" "0:6,7:23"
--vocab_size BPE 詞彙表大小 1024
--scale 量化用的 DCT 縮放因子 10.0
--normalization_mode 標準化模式 (MEAN_STD, MIN_MAX, QUANTILES, QUANTILE10, IDENTITY) QUANTILES (分位數)
--sample_fraction 每個片段 (episode) 取樣的區塊比例 0.1

使用方式

若要在 LeRobot 中使用 π₀-FAST,請將策略類型指定為

policy.type=pi0_fast

訓練

若要訓練 π₀-FAST,您可以使用 LeRobot 訓練腳本

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0_fast \
    --output_dir=./outputs/pi0fast_training \
    --job_name=pi0fast_training \
    --policy.pretrained_path=lerobot/pi0_fast_base \
    --policy.dtype=bfloat16 \
    --policy.gradient_checkpointing=true \
    --policy.chunk_size=10 \
    --policy.n_action_steps=10 \
    --policy.max_action_tokens=256 \
    --steps=100000 \
    --batch_size=4 \
    --policy.device=cuda

訓練關鍵參數

參數 說明 預設
--policy.gradient_checkpointing=true 訓練期間顯著減少記憶體使用量 false
--policy.dtype=bfloat16 使用混合精度訓練以提高效率 float32
--policy.chunk_size 要預測的動作步數(動作時域寬度) 50
--policy.n_action_steps 要執行的動作步數 50
--policy.max_action_tokens 每個動作區塊的最大 FAST 標記數 256
--policy.action_tokenizer_name 要使用的 FAST 標記器 lerobot/fast-action-tokenizer
--policy.compile_model=true 啟用 torch.compile 以加快訓練速度 false

推論

用於快速推論的 KV 快取 (KV-Caching)

π₀-FAST 支援 KV 快取,這是 LLM 推論中廣泛使用的優化技術。這會快取來自注意機制 (attention mechanism) 的鍵值對 (key-value pairs),避免在自動回歸解碼過程中進行多餘的計算。

# KV-caching is enabled by default
policy.use_kv_cache=true

推論範例

from lerobot.policies.pi0_fast import PI0FastPolicy, PI0FastConfig

# Load the policy
policy = PI0FastPolicy.from_pretrained("your-model-path")

# During inference
actions = policy.predict_action_chunk(batch)

模型架構

π₀-FAST 使用基於 PaliGemma 的架構

  • 視覺編碼器:SigLIP 視覺塔,用於影像理解
  • 語言模型:Gemma 2B,用於處理語言指令並預測動作標記

模型接收影像、文字指令和機器人狀態作為輸入,並輸出離散的 FAST 標記,這些標記隨後被解碼回連續動作。

配置選項

參數 說明 預設
paligemma_variant VLM 骨幹變體 (gemma_300m, gemma_2b) gemma_2b
max_state_dim 最大狀態向量維度(已填充) 32
max_action_dim 最大動作向量維度(已填充) 32
temperature(溫度) 取樣溫度(0.0 表示貪婪搜尋) 0.0
max_decoding_steps 最大解碼步數 256
use_kv_cache 啟用 KV 快取以加速推論 true

與 π₀ 的比較

特性 π₀ π₀-FAST
動作表示 流匹配 (Flow Matching)(擴散) 自動回歸標記 (FAST)
訓練速度 1x 快 5 倍
靈巧性
推論方法 疊代去噪 自動回歸解碼
KV 快取 不適用 支援

重現 π₀-FAST 結果

我們使用 LeRobot 的實作,在 LIBERO 基準測試上重現了 π₀Fast 的結果。我們採用 LeRobot PiFast 基礎模型 lerobot/pi0fast-base,並使用 HuggingFace LIBERO 資料集,在 8 個 H100 GPU 上,以 256 的批次大小,額外微調 40k 步(bfloat16)。

微調後的模型可以在這裡找到

使用以下訓練指令

lerobot-train \
  --dataset.repo_id=lerobot/libero \
  --output_dir=outputs/libero_pi0fast \
  --job_name=libero_pi0fast \
  --policy.path=lerobot/pi0fast_base \
  --policy.dtype=bfloat16 \
  --steps=100000 \
  --save_freq=20000 \
  --batch_size=4 \
  --policy.device=cuda \
  --policy.scheduler_warmup_steps=4000 \
  --policy.scheduler_decay_steps=100000 \
  --policy.scheduler_decay_lr=1e-5 \
  --policy.gradient_checkpointing=true \
  --policy.chunk_size=10 \
  --policy.n_action_steps=10 \
  --policy.max_action_tokens=256 \
  --policy.empty_cameras=1 \

接著,我們執行以下指令,使用 LeRobot LIBERO 實作來評估微調後的模型

tasks="libero_object,libero_spatial,libero_goal,libero_10"
lerobot-eval \
  --policy.path=lerobot/pi0fast-libero \
  --policy.max_action_tokens=256 \
  --env.type=libero \
  --policy.gradient_checkpointing=false \
  --env.task=${tasks} \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --rename_map='{"observation.images.image":"observation.images.base_0_rgb","observation.images.image2":"observation.images.left_wrist_0_rgb"}'

注意: 我們將 n_action_steps 設為 10,這與原始的 OpenPI 實作類似。

結果

我們在 LIBERO 基準測試中獲得了以下結果

模型 LIBERO Spatial (空間) LIBERO Object (物件) LIBERO Goal (目標) LIBERO 10 平均
π₀-fast 70.0 100.0 100.0 60.0 82.5

完整的評估輸出資料夾(包含影片)可在此處取得 here

授權

此模型採用 Apache 2.0 授權條款,與原始 OpenPI 儲存庫一致。

參考資料

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.