街の新しいロボット: SO-100
アームあたり 110 ドルという、より手頃な価格のロボットを構築する方法に関する新しいチュートリアルを追加しました。
ラップトップだけを使っていくつかの動きを見せて、新しいスキルを教えましょう。
では、自家製ロボットが自律的に行動するのを観察してみてはいかがでしょうか?
SO-100 の完全なチュートリアルへのリンクをクリックしてください。
LeRobot: 現実世界のロボット工学のための最先端の AI
? LeRobot は、PyTorch で現実世界のロボット工学のためのモデル、データセット、ツールを提供することを目的としています。目標は、ロボット工学への参入障壁を低くし、誰もがデータセットと事前トレーニングされたモデルの共有に貢献し、恩恵を受けることができるようにすることです。
? LeRobot には、模倣学習と強化学習に焦点を当てた、現実世界への応用が実証されている最先端のアプローチが含まれています。
? LeRobot は、ロボットを組み立てずに開始できる一連の事前トレーニング済みモデル、人間が収集したデモンストレーションを含むデータセット、およびシミュレーション環境をすでに提供しています。今後数週間で、最も手頃な価格で機能的なロボットの実世界のロボット工学のサポートをさらに追加する予定です。
? LeRobot は、この Hugging Face コミュニティ ページで事前トレーニングされたモデルとデータセットをホストしています: Huggingface.co/lerobot
ALOHA env の ACT ポリシー | SimXArm 環境の TDMPC ポリシー | PushT envの普及方針 |
ソースコードをダウンロードしてください:
git clone https://github.com/huggingface/lerobot.git
cd lerobot
Python 3.10 で仮想環境を作成し、たとえばminiconda
でアクティブ化します。
conda create -y -n lerobot python=3.10
conda activate lerobot
インストール ?ルロボット:
pip install -e .
注:プラットフォームによっては、この手順中にビルド エラーが発生した場合は、依存関係の一部をビルドするために
cmake
とbuild-essential
インストールする必要がある場合があります。 Linux の場合:sudo apt-get install cmake build-essential
シミュレーションの場合、? LeRobot には、追加としてインストールできるジム環境が付属しています。
たとえば、インストールするには? LeRobot はアロハとプッシュを持って、以下を使用します。
pip install -e " .[aloha, pusht] "
実験の追跡に重みとバイアスを使用するには、次のコマンドでログインします。
wandb login
(注: 設定で WandB を有効にする必要もあります。以下を参照してください。)
.
├── examples # contains demonstration examples, start here to learn about LeRobot
| └── advanced # contains even more examples for those who have mastered the basics
├── lerobot
| ├── configs # contains hydra yaml files with all options that you can override in the command line
| | ├── default.yaml # selected by default, it loads pusht environment and diffusion policy
| | ├── env # various sim environments and their datasets: aloha.yaml, pusht.yaml, xarm.yaml
| | └── policy # various policies: act.yaml, diffusion.yaml, tdmpc.yaml
| ├── common # contains classes and utilities
| | ├── datasets # various datasets of human demonstrations: aloha, pusht, xarm
| | ├── envs # various sim environments: aloha, pusht, xarm
| | ├── policies # various policies: act, diffusion, tdmpc
| | ├── robot_devices # various real devices: dynamixel motors, opencv cameras, koch robots
| | └── utils # various utilities
| └── scripts # contains functions to execute via command line
| ├── eval.py # load policy and evaluate it on an environment
| ├── train.py # train a policy via imitation learning and/or reinforcement learning
| ├── control_robot.py # teleoperate a real robot, record data, run a policy
| ├── push_dataset_to_hub.py # convert your dataset into LeRobot dataset format and upload it to the Hugging Face hub
| └── visualize_dataset.py # load a dataset and render its demonstrations
├── outputs # contains results of scripts execution: logs, videos, model checkpoints
└── tests # contains pytest utilities for continuous integration
Hugging Face ハブからデータを自動的にダウンロードするデータセット クラスの使用方法を示す例 1 を確認してください。
コマンド ラインからスクリプトを実行して、ハブ上のデータセットからエピソードをローカルに視覚化することもできます。
python lerobot/scripts/visualize_dataset.py
--repo-id lerobot/pusht
--episode-index 0
または、ルートDATA_DIR
環境変数を使用してローカル フォルダー内のデータセットから (次の場合、データセットは./my_local_data_dir/lerobot/pusht
で検索されます)
DATA_DIR= ' ./my_local_data_dir ' python lerobot/scripts/visualize_dataset.py
--repo-id lerobot/pusht
--episode-index 0
rerun.io
が開き、次のようにカメラ ストリーム、ロボットの状態、アクションが表示されます。
私たちのスクリプトは、遠くのサーバーに保存されているデータセットを視覚化することもできます。詳細な手順については、 python lerobot/scripts/visualize_dataset.py --help
を参照してください。
LeRobotDataset
形式LeRobotDataset
形式のデータセットは非常に簡単に使用できます。これは、たとえばdataset = LeRobotDataset("lerobot/aloha_static_coffee")
を使用するだけで、Hugging Face ハブ上のリポジトリまたはローカル フォルダーからロードでき、Hugging Face および PyTorch データセットと同様にインデックスを付けることができます。たとえば、 dataset[0]
モデルに供給する準備ができている PyTorch テンソルとしての観測とアクションを含む単一の時間フレームをデータセットから取得します。
LeRobotDataset
の特徴は、インデックスによって単一のフレームを取得するのではなく、インデックス付きフレームに対する相対時間のリストdelta_timestamps
に設定することで、インデックス付きフレームとの時間的関係に基づいて複数のフレームを取得できることです。たとえば、 delta_timestamps = {"observation.image": [-1, -0.5, -0.2, 0]}
を使用すると、指定されたインデックスに対して 4 つのフレーム、つまり 3 つの「前の」フレーム、1 秒、0.5 秒、およびインデックス付きフレームの 0.2 秒前、およびインデックス付きフレーム自体 (0 エントリに対応)。 delta_timestamps
の詳細については、例 1_load_lerobot_dataset.py を参照してください。
LeRobotDataset
形式は内部的に、データをシリアル化するためにいくつかの方法を使用しています。この形式をより緊密に使用する予定がある場合は、これを理解しておくと役立ちます。私たちは、カメラとロボットの状態に焦点を当てながら、強化学習とロボット工学、シミュレーションと現実世界に存在するほとんどの種類の特徴と特異性をカバーする、柔軟かつシンプルなデータセット形式を作成しようとしましたが、他の種類の感覚にも簡単に拡張できます。テンソルで表現できる限りの入力。
ここでは、 dataset = LeRobotDataset("lerobot/aloha_static_coffee")
でインスタンス化された典型的なLeRobotDataset
の重要な詳細と内部構造構成を示します。正確な特徴はデータセットごとに異なりますが、主要な側面は変わりません。
dataset attributes:
├ hf_dataset: a Hugging Face dataset (backed by Arrow/parquet). Typical features example:
│ ├ observation.images.cam_high (VideoFrame):
│ │ VideoFrame = {'path': path to a mp4 video, 'timestamp' (float32): timestamp in the video}
│ ├ observation.state (list of float32): position of an arm joints (for instance)
│ ... (more observations)
│ ├ action (list of float32): goal position of an arm joints (for instance)
│ ├ episode_index (int64): index of the episode for this sample
│ ├ frame_index (int64): index of the frame for this sample in the episode ; starts at 0 for each episode
│ ├ timestamp (float32): timestamp in the episode
│ ├ next.done (bool): indicates the end of en episode ; True for the last frame in each episode
│ └ index (int64): general index in the whole dataset
├ episode_data_index: contains 2 tensors with the start and end indices of each episode
│ ├ from (1D int64 tensor): first frame index for each episode — shape (num episodes,) starts with 0
│ └ to: (1D int64 tensor): last frame index for each episode — shape (num episodes,)
├ stats: a dictionary of statistics (max, mean, min, std) for each feature in the dataset, for instance
│ ├ observation.images.cam_high: {'max': tensor with same number of dimensions (e.g. `(c, 1, 1)` for images, `(c,)` for states), etc.}
│ ...
├ info: a dictionary of metadata on the dataset
│ ├ codebase_version (str): this is to keep track of the codebase version the dataset was created with
│ ├ fps (float): frame per second the dataset is recorded/synchronized to
│ ├ video (bool): indicates if frames are encoded in mp4 video files to save space or stored as png files
│ └ encoding (dict): if video, this documents the main options that were used with ffmpeg to encode the videos
├ videos_dir (Path): where the mp4 videos or png images are stored/accessed
└ camera_keys (list of string): the keys to access camera features in the item returned by the dataset (e.g. `["observation.images.cam_high", ...]`)
LeRobotDataset
、各部分に対していくつかの広く普及しているファイル形式を使用してシリアル化されます。
safetensor
テンソルシリアル化形式を使用して保存されたepisode_data_indexsafetensor
tensor シリアル化形式を使用して保存された統計データセットは、HuggingFace ハブからシームレスにアップロード/ダウンロードできます。ローカル データセットを操作するには、データセットの視覚化に関する上記のセクションで説明したように、 DATA_DIR
環境変数をルート データセット フォルダーに設定します。
Hugging Face ハブから事前トレーニングされたポリシーをダウンロードし、対応する環境で評価を実行する方法を示す例 2 を確認してください。
また、同じロールアウト中に複数の環境で評価を並列化するための、より高機能なスクリプトも提供します。以下は、lerobot/diffusion_pusht でホストされている事前トレーニング済みモデルの例です。
python lerobot/scripts/eval.py
-p lerobot/diffusion_pusht
eval.n_episodes=10
eval.batch_size=10
注: 独自のポリシーをトレーニングした後、次の方法でチェックポイントを再評価できます。
python lerobot/scripts/eval.py -p {OUTPUT_DIR}/checkpoints/last/pretrained_model
詳細な手順については、 python lerobot/scripts/eval.py --help
を参照してください。
Python のコア ライブラリを使用してモデルをトレーニングする方法を示す例 3 と、コマンド ラインからトレーニング スクリプトを使用する方法を示す例 4 を確認してください。
一般に、トレーニング スクリプトを使用して、任意のポリシーを簡単にトレーニングできます。以下は、挿入タスクのために人間が Aloha シミュレーション環境で収集した軌跡に基づいて ACT ポリシーをトレーニングする例です。
python lerobot/scripts/train.py
policy=act
env=aloha
env.task=AlohaInsertion-v0
dataset_repo_id=lerobot/aloha_sim_insertion_human
実験ディレクトリは自動的に生成され、ターミナルに黄色で表示されます。 outputs/train/2024-05-05/20-21-12_aloha_act_default
のようになります。この引数をtrain.py
python コマンドに追加することで、実験ディレクトリを手動で指定できます。
hydra.run.dir=your/new/experiment/dir
実験ディレクトリには、次の構造を持つcheckpoints
というフォルダーがあります。
checkpoints
├── 000250 # checkpoint_dir for training step 250
│ ├── pretrained_model # Hugging Face pretrained model dir
│ │ ├── config.json # Hugging Face pretrained model config
│ │ ├── config.yaml # consolidated Hydra config
│ │ ├── model.safetensors # model weights
│ │ └── README.md # Hugging Face model card
│ └── training_state.pth # optimizer/scheduler/rng state and training step
チェックポイントからトレーニングを再開するには、以下をtrain.py
python コマンドに追加します。
hydra.run.dir=your/original/experiment/dir resume=true
トレーニング用に、事前トレーニングされたモデル、オプティマイザー、およびスケジューラーの状態がロードされます。詳細については、こちらのトレーニング再開に関するチュートリアルをご覧ください。
トレーニングと評価曲線のログ記録に wandb を使用するには、ワンタイム セットアップ ステップとしてwandb login
実行していることを確認してください。次に、上記のトレーニング コマンドを実行するときに、以下を追加して構成で WandB を有効にします。
wandb.enable=true
実行の wandb ログへのリンクもターミナルに黄色で表示されます。以下はブラウザでどのように見えるかの例です。ログで一般的に使用されるメトリクスの説明については、こちらもご覧ください。
注: 効率性を高めるため、トレーニング中にすべてのチェックポイントが少数のエピソードで評価されます。 eval.n_episodes=500
使用すると、デフォルトよりも多くのエピソードを評価できます。または、トレーニング後に、さらに多くのエピソードで最高のチェックポイントを再評価したり、評価設定を変更したりすることもできます。詳細な手順については、 python lerobot/scripts/eval.py --help
を参照してください。
設定ファイル ( lerobot/configs
の下にあります) は、それぞれの元の作業で特定のモデル バリアントからの SOTA 結果を再現するように編成されています。単純に実行する:
python lerobot/scripts/train.py policy=diffusion env=pusht
PushT タスクの拡散ポリシーの SOTA 結果を再現します。
事前トレーニングされたポリシーと再現の詳細は、https://huggingface.co/lerobot の「モデル」セクションにあります。
に貢献したい場合は? LeRobot さん、私たちの貢献ガイドをご覧ください。
データセットをハブに追加するには、書き込みアクセス トークンを使用してログインする必要があります。書き込みアクセス トークンは、Hugging Face 設定から生成できます。
huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
次に、生のデータセット フォルダー (例: data/aloha_static_pingpong_test_raw
) をポイントし、次のコマンドでデータセットをハブにプッシュします。
python lerobot/scripts/push_dataset_to_hub.py
--raw-dir data/aloha_static_pingpong_test_raw
--out-dir data
--repo-id lerobot/aloha_static_pingpong_test
--raw-format aloha_hdf5
詳細な手順については、 python lerobot/scripts/push_dataset_to_hub.py --help
を参照してください。
データセット形式がサポートされていない場合は、pusht_zarr、umi_zarr、aloha_hdf5、xarm_pkl などの例をコピーして、 lerobot/common/datasets/push_dataset_to_hub/${raw_format}_format.py
に独自の形式を実装します。
ポリシーをトレーニングしたら、 ${hf_user}/${repo_name}
(lerobot/diffusion_pusht など) のようなハブ ID を使用して、ポリシーを Hugging Face ハブにアップロードできます。
まず、実験ディレクトリ内にあるチェックポイント フォルダーを見つける必要があります (例: outputs/train/2024-05-05/20-21-12_aloha_act_default/checkpoints/002500
)。その中には、 pretrained_model
ディレクトリがあり、次のものが含まれます。
config.json
: ポリシー設定のシリアル化されたバージョン (ポリシーのデータクラス設定に続く)。model.safetensors
: Hugging Face Safetensors 形式で保存されたtorch.nn.Module
パラメーターのセット。config.yaml
: ポリシー、環境、データセット構成を含む統合された Hydra トレーニング構成。ポリシー設定はconfig.json
と正確に一致する必要があります。環境設定は、ポリシーを評価したい人にとって役立ちます。データセット構成は、再現性を確保するための紙の証跡としてのみ機能します。これらをハブにアップロードするには、次のコマンドを実行します。
huggingface-cli upload ${hf_user} / ${repo_name} path/to/pretrained_model
他の人があなたのポリシーをどのように使用するかについては、eval.py を参照してください。
ポリシーの評価をプロファイリングするコード スニペットの例:
from torch . profiler import profile , record_function , ProfilerActivity
def trace_handler ( prof ):
prof . export_chrome_trace ( f"tmp/trace_schedule_ { prof . step_num } .json" )
with profile (
activities = [ ProfilerActivity . CPU , ProfilerActivity . CUDA ],
schedule = torch . profiler . schedule (
wait = 2 ,
warmup = 2 ,
active = 3 ,
),
on_trace_ready = trace_handler
) as prof :
with record_function ( "eval_policy" ):
for i in range ( num_episodes ):
prof . step ()
# insert code to profile, potentially whole body of eval_policy function
必要に応じて、この作品を次のように引用できます。
@misc { cadene2024lerobot ,
author = { Cadene, Remi and Alibert, Simon and Soare, Alexander and Gallouedec, Quentin and Zouitine, Adil and Wolf, Thomas } ,
title = { LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch } ,
howpublished = " url{https://github.com/huggingface/lerobot} " ,
year = { 2024 }
}
さらに、特定のポリシー アーキテクチャ、事前トレーニング済みモデル、またはデータセットのいずれかを使用している場合は、以下に示すように、その作品の元の作成者を引用することをお勧めします。
@article { chi2024diffusionpolicy ,
author = { Cheng Chi and Zhenjia Xu and Siyuan Feng and Eric Cousineau and Yilun Du and Benjamin Burchfiel and Russ Tedrake and Shuran Song } ,
title = { Diffusion Policy: Visuomotor Policy Learning via Action Diffusion } ,
journal = { The International Journal of Robotics Research } ,
year = { 2024 } ,
}
@article { zhao2023learning ,
title = { Learning fine-grained bimanual manipulation with low-cost hardware } ,
author = { Zhao, Tony Z and Kumar, Vikash and Levine, Sergey and Finn, Chelsea } ,
journal = { arXiv preprint arXiv:2304.13705 } ,
year = { 2023 }
}
@inproceedings { Hansen2022tdmpc ,
title = { Temporal Difference Learning for Model Predictive Control } ,
author = { Nicklas Hansen and Xiaolong Wang and Hao Su } ,
booktitle = { ICML } ,
year = { 2022 }
}
@article { lee2024behavior ,
title = { Behavior generation with latent actions } ,
author = { Lee, Seungjae and Wang, Yibin and Etukuru, Haritheja and Kim, H Jin and Shafiullah, Nur Muhammad Mahi and Pinto, Lerrel } ,
journal = { arXiv preprint arXiv:2403.03181 } ,
year = { 2024 }
}