LeRobot 文件
SmolVLA
並獲得增強的文件體驗
開始使用
SmolVLA
SmolVLA 是 Hugging Face 推出的機器人輕量級基礎模型。它專為在 LeRobot 資料集上進行輕鬆微調而設計,能協助加速您的開發進程!
圖 1. SmolVLA 的輸入包括 (i) 多個攝影機視角,(ii) 機器人當前的感覺運動狀態,以及 (iii) 自然語言指令,這些輸入被編碼為情境特徵,用來在產生動作區塊(action chunk)時調節動作專家模型。
設置您的環境
請遵循我們的安裝指南來安裝 LeRobot。
執行以下指令以安裝 SmolVLA 的相依套件
pip install -e ".[smolvla]"
收集資料集
SmolVLA 是一個基礎模型,因此為了在您的設置中獲得最佳效能,需要使用您自己的資料進行微調。我們建議以錄製約 50 個任務片段(episodes)作為起點。請按照我們的指南開始:錄製資料集
在您的資料集中,請確保針對您引入的每一種變體(例如:如果是立方體拿取放置任務,則為立方體在桌上的位置),擁有足夠的演示數據。
我們建議查看下方連結的資料集,這是 SmolVLA 論文中所使用的參考資料:
在此資料集中,我們記錄了橫跨 5 個不同立方體位置的 50 個任務片段。對於每個位置,我們收集了 10 個拿取與放置互動的片段。這種將每個變體重複多次的結構,有助於模型實現更好的泛化。我們曾嘗試過使用 25 個片段的類似資料集,結果發現數據不足,導致效能不佳。因此,資料的品質與數量絕對是關鍵。當您的資料集在 Hub 上準備好後,您就可以使用我們的微調腳本來將 SmolVLA 應用於您的應用程式。
在您的資料上微調 SmolVLA
使用我們的預訓練 450M 模型 smolvla_base,並在您的資料上進行微調。在單個 A100 GPU 上,將模型訓練 20k 個步驟大約需要 4 小時。您應該根據效能需求和您的用例來調整步驟數。
如果您沒有 GPU 裝置,可以使用我們在以下連結的筆記本進行訓練:
請使用 --dataset.repo_id 將您的資料集傳遞給訓練腳本。如果您想測試安裝是否成功,請執行以下指令,其中我們使用了為 SmolVLA 論文收集的資料集之一。
cd lerobot && lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=${HF_USER}/mydataset \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--wandb.enable=true您可以從較小的批次大小(batch size)開始,並在 GPU 效能允許的情況下逐步增加,前提是載入時間保持在合理範圍內。
微調是一門藝術。如需微調選項的完整總覽,請執行
lerobot-train --help
圖 2:SmolVLA 在任務變體間的比較。從左到右:(1) 立方體拿取放置計數,(2) 立方體拿取放置計數,(3) 在擾動情況下的立方體拿取放置計數,以及 (4) 使用真實世界 SO101 進行樂高積木拿取放置的泛化測試。
評估微調後的模型並即時執行
與記錄片段時一樣,建議您登入 HuggingFace Hub。您可以按照對應步驟操作:錄製資料集。一旦登入,即可透過以下方式在您的環境中執行推論
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \ # <- Use your port
--robot.id=my_blue_follower_arm \ # <- Use your robot id
--robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras
--dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording
--dataset.repo_id=${HF_USER}/eval_DATASET_NAME_test \ # <- This will be the dataset name on HF Hub
--dataset.episode_time_s=50 \
--dataset.num_episodes=10 \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.vcodec=auto \
# <- Teleop optional if you want to teleoperate in between episodes \
# --teleop.type=so100_leader \
# --teleop.port=/dev/ttyACM0 \
# --teleop.id=my_red_leader_arm \
--policy.path=HF_USER/FINETUNE_MODEL_NAME # <- Use your fine-tuned model根據您的評估設置,您可以設定持續時間以及要為評估套件記錄的片段數量。
在 GitHub 上更新