LeRobot documentation
SmolVLA
SmolVLA
SmolVLAは、Hugging Faceのロボティクス向けの軽量な基盤モデルです。LeRobotデータセットでのファインチューニングが容易なよう設計されており、開発の高速化を支援します。
図1. SmolVLAは、(i) 複数のカメラの視点、(ii) ロボットの現在の感覚運動状態、および (iii) 自然言語の指示を入力として受け取り、これらをコンテキスト特徴量としてエンコードし、アクションチャンクを生成する際にアクションエキスパートを条件付けするために使用します。
環境のセットアップ
LeRobotのインストールは、インストールガイドに従って行ってください。
以下のコマンドを実行して、SmolVLAの依存関係をインストールします:
pip install -e ".[smolvla]"
データセットを収集する
SmolVLAはベースモデルであるため、ご自身の環境で最適なパフォーマンスを発揮させるには、ご自身のデータでのファインチューニングが必要です。 スタートとして、タスクのエピソードを約50本記録することをお勧めします。以下のガイドに従って始めましょう: データセットの記録
データセットでは、導入する各バリエーション(例: キューブのピック&プレイスタスクにおけるテーブル上のキューブの位置)について、十分なデモレーションが含まれていることを確認してください。
SmolVLA論文で使用された参考用のデータセットとして、以下のリンク先を確認することをお勧めします:
このデータセットでは、5つの異なるキューブの位置に対して合計50エピソードを記録しました。各位置について、ピック&プレイス(掴んで置く)操作のエピソードを10本ずつ収集しました。このように各バリエーションを複数回繰り返す構成により、モデルの汎化性能が向上しました。同様の構成で25エピソードのデータセットも試みましたが、データ量が不足しており、性能が低下しました。したがって、データの品質と量は確実に重要な要素です。 データセットをHubに公開できたら、ファインチューニングスクリプトを使用してSmolVLAをアプリケーションに適用する準備が整います。
Finetune SmolVLA on your data
事前学習済みの450Mモデルであるsmolvla_baseを使用し、ご自身のデータでファインチューニングを行ってください。
モデルを20kステップ学習させるには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいて、ステップ数を調整してください。
GPUデバイスがない場合、のノートブックを使用してトレーニングを行うことができます。
--dataset.repo_id を使用して、データセットを学習スクリプトに渡します。インストールのテストを行う場合は、SmolVLA Paper のために収集したデータセットの1つを使用した以下のコマンドを実行してください。自分のデータでファインチューニングを行う場合は、ご自身のデータセットに置き換えてください。
lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=lerobot/svla_so100_pickplace \
--policy.repo_id=${HF_USER}/my_smolvla \
--rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--trackio.enable=true--policy.repo_idは、ファインチューニングされたモデルがプッシュされる Hub リポジトリです。--rename_mapは、データセットのカメラ名を、smolvla_baseが期待するcamera1、camera2、camera3という名前にマッピングします。これを指定しないと、特徴量の不一致エラーによりトレーニングが停止します。ご自身のカメラ名も同様にマッピングしてください(Rename Map を参照)。
You can start with a small batch size and increase it incrementally, if the GPU allows it, as long as loading times remain short.
ファインチューニングは芸術です。ファインチューニングのオプションの完全な概要については、runを実行してください。
lerobot-train --help
図2: タスクの変動におけるSmolVLAの比較。左から右へ:
(1) pick-place cube counting、(2) pick-place cube counting、(3) 摂動下でのpick-place cube counting、(4) 実世界のSO101を用いたlegoブロックのpick-and-placeにおける汎化。
ファインチューニングされたモデルを評価し、リアルタイムで実行する
エピソードの記録時にも、HuggingFace Hubへのログインが推奨されます。以下の手順に従ってください: データセットの記録。 ログインが完了したら、以下のコマンドを実行して、ご自身の環境で推論を実行できます:
lerobot-rollout \
--strategy.type=base \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_blue_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
--rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
--task="Grasp a lego block and put it in the bin." \
--policy.path=${HF_USER}/FINETUNE_MODEL_NAME--robot.port、--robot.id、--robot.cameras、--policy.pathを、それぞれご自身のポート番号、ロボットID、カメラ(データセットと同じカメラ名と解像度)、ファインチューニング済みモデルに置き換えてください。また、学習時に使用したのと同じ--rename_mapと、データセットの録画時に使用したのと同じ--taskの説明を渡してください。
上記のコマンドに追加できる任意のフラグ:
- RTC(推論が遅い場合、例えば低消費電力ハードウェア上で、より滑らかな動作を実現):
--inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0 - カメラストリームを表示する:
--display_data=true - 自動停止:
--duration=60(秒)。デフォルトでは、Ctrl+C を押すまでポリシーが実行されます。
評価エピソードを記録し、必要に応じてテレオペレーターを介してエピソード間でシーンをリセットするには、代わりに--strategy.type=episodicを使用してください。すべての戦略については、Policy Deploymentを参照してください。