LeRobot documentation

SmolVLA

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SmolVLA

SmolVLAは、Hugging Faceのロボティクス向けの軽量な基盤モデルです。LeRobotデータセットでのファインチューニングが容易なよう設計されており、開発の高速化を支援します。

SmolVLA architecture.
図1. SmolVLAは、(i) 複数のカメラの視点、(ii) ロボットの現在の感覚運動状態、および (iii) 自然言語の指示を入力として受け取り、これらをコンテキスト特徴量としてエンコードし、アクションチャンクを生成する際にアクションエキスパートを条件付けするために使用します。

環境のセットアップ

  1. LeRobotのインストールは、インストールガイドに従って行ってください。

  2. 以下のコマンドを実行して、SmolVLAの依存関係をインストールします:

    pip install -e ".[smolvla]"

データセットを収集する

SmolVLAはベースモデルであるため、ご自身の環境で最適なパフォーマンスを発揮させるには、ご自身のデータでのファインチューニングが必要です。 スタートとして、タスクのエピソードを約50本記録することをお勧めします。以下のガイドに従って始めましょう: データセットの記録

データセットでは、導入する各バリエーション(例: キューブのピック&プレイスタスクにおけるテーブル上のキューブの位置)について、十分なデモレーションが含まれていることを確認してください。

SmolVLA論文で使用された参考用のデータセットとして、以下のリンク先を確認することをお勧めします:

🔗 SVLA SO100 PickPlace

このデータセットでは、5つの異なるキューブの位置に対して合計50エピソードを記録しました。各位置について、ピック&プレイス(掴んで置く)操作のエピソードを10本ずつ収集しました。このように各バリエーションを複数回繰り返す構成により、モデルの汎化性能が向上しました。同様の構成で25エピソードのデータセットも試みましたが、データ量が不足しており、性能が低下しました。したがって、データの品質と量は確実に重要な要素です。 データセットをHubに公開できたら、ファインチューニングスクリプトを使用してSmolVLAをアプリケーションに適用する準備が整います。

Finetune SmolVLA on your data

事前学習済みの450Mモデルであるsmolvla_baseを使用し、ご自身のデータでファインチューニングを行ってください。 モデルを20kステップ学習させるには、単一のA100 GPUで約4時間かかります。パフォーマンスとユースケースに基づいて、ステップ数を調整してください。

GPUデバイスがない場合、Google Colabのノートブックを使用してトレーニングを行うことができます。

--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

Comparison of SmolVLA across task variations.
図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を参照してください。

Update on GitHub