Instructions to use aailabkaist/pi05_recovery_2task_full_10k with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use aailabkaist/pi05_recovery_2task_full_10k with LeRobot:
- Notebooks
- Google Colab
- Kaggle
restore detailed card and figures
Browse files
README.md
CHANGED
|
@@ -1,70 +1,109 @@
|
|
| 1 |
---
|
| 2 |
-
|
| 3 |
library_name: lerobot
|
| 4 |
-
license: apache-2.0
|
| 5 |
-
model_name: pi05
|
| 6 |
pipeline_tag: robotics
|
| 7 |
tags:
|
| 8 |
- lerobot
|
| 9 |
-
- pi05
|
| 10 |
- robotics
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
---
|
| 12 |
|
| 13 |
-
#
|
| 14 |
|
| 15 |
-
|
|
|
|
|
|
|
| 16 |
|
|
|
|
|
|
|
| 17 |
|
| 18 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
|
| 21 |
|
| 22 |
-
|
| 23 |
|
| 24 |
-
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
-
|
| 27 |
|
|
|
|
|
|
|
| 28 |
|
| 29 |
-
|
| 30 |
-
See the full documentation at [LeRobot Docs](https://huggingface.co/docs/lerobot/index).
|
| 31 |
|
| 32 |
-
-
|
|
|
|
|
|
|
| 33 |
|
| 34 |
-
##
|
| 35 |
|
| 36 |
-
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
-
|
| 40 |
|
| 41 |
-
|
| 42 |
-
lerobot-train \
|
| 43 |
-
--dataset.repo_id=${HF_USER}/<dataset> \
|
| 44 |
-
--policy.type=act \
|
| 45 |
-
--output_dir=outputs/train/<desired_policy_repo_id> \
|
| 46 |
-
--job_name=lerobot_training \
|
| 47 |
-
--policy.device=cuda \
|
| 48 |
-
--policy.repo_id=${HF_USER}/<desired_policy_repo_id>
|
| 49 |
-
--wandb.enable=true
|
| 50 |
-
```
|
| 51 |
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
| 53 |
|
| 54 |
-
##
|
| 55 |
|
| 56 |
-
```
|
| 57 |
-
lerobot
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
--policy.path=<hf_user>/<desired_policy_repo_id> \
|
| 61 |
-
--episodes=10
|
| 62 |
```
|
| 63 |
|
| 64 |
-
|
| 65 |
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
-
|
| 69 |
|
| 70 |
-
-
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
license: gemma
|
| 3 |
library_name: lerobot
|
|
|
|
|
|
|
| 4 |
pipeline_tag: robotics
|
| 5 |
tags:
|
| 6 |
- lerobot
|
|
|
|
| 7 |
- robotics
|
| 8 |
+
- pi0.5
|
| 9 |
+
- pi05
|
| 10 |
+
- vla
|
| 11 |
+
- so101
|
| 12 |
+
- manipulation
|
| 13 |
+
- full-finetune
|
| 14 |
+
base_model:
|
| 15 |
+
- lerobot/pi05_base
|
| 16 |
+
datasets:
|
| 17 |
+
- aailabkaist/so101_recovery_2task
|
| 18 |
---
|
| 19 |
|
| 20 |
+
# π0.5 · SO-101 pick & place (2-task) — **full fine-tune**, 10,000 steps
|
| 21 |
|
| 22 |
+
A [π0.5](https://www.physicalintelligence.company/blog/pi05) (`pi05`) vision-language-action policy
|
| 23 |
+
fine-tuned on an SO-101 arm for a two-task cup manipulation setup: pick a cup up from the table and
|
| 24 |
+
place it onto a blue circle.
|
| 25 |
|
| 26 |
+
**The entire model was trained** — PaliGemma VLM (vision encoder + language model) and the action
|
| 27 |
+
expert together (`train_expert_only=false`, `freeze_vision_encoder=false`).
|
| 28 |
|
| 29 |
+
- **Base model:** [`lerobot/pi05_base`](https://huggingface.co/lerobot/pi05_base) — the last
|
| 30 |
+
pre-relative-actions revision, matching LeRobot `0.4.x`
|
| 31 |
+
- **Dataset:** [`aailabkaist/so101_recovery_2task`](https://huggingface.co/datasets/aailabkaist/so101_recovery_2task)
|
| 32 |
+
(749 episodes · 151,255 frames · 30 fps · 8 operators)
|
| 33 |
+
- **Checkpoint:** step **10,000** of a 10,000-step run (batch 64 → **640,000** samples ≈ **4.2 epochs**)
|
| 34 |
+
- **Framework:** [LeRobot](https://github.com/huggingface/lerobot)
|
| 35 |
+
- **Robot:** SO-101, 6-DoF, two RGB cameras (`front`, `wrist`, 480×640)
|
| 36 |
+
- **Siblings:** `expert 5K` · `expert 10K` · `full 5K` — see the
|
| 37 |
+
[two-task collection](https://huggingface.co/collections/nevertmr/so-101-cup-blue-circle-two-task-6a5f8e25fbd8c0bccda23cd7)
|
| 38 |
|
| 39 |
+
## Task and data
|
| 40 |
|
| 41 |
+
Two instructions, both used at training time verbatim:
|
| 42 |
|
| 43 |
+
```
|
| 44 |
+
pick up the cup near the blue circle
|
| 45 |
+
place the cup on the blue circle
|
| 46 |
+
```
|
| 47 |
|
| 48 |
+

|
| 49 |
|
| 50 |
+
Pick-episode cup start positions (394 episodes, per-operator colors, anonymized). The cups form a
|
| 51 |
+
ring around the blue circle rather than covering the workspace uniformly.
|
| 52 |
|
| 53 |
+

|
|
|
|
| 54 |
|
| 55 |
+
Place-episode transport vectors, start → placed (350 of 355 place episodes — 5 excluded where the
|
| 56 |
+
cup is fully occluded by the gripper in the start frame). Endpoints converge tightly on the
|
| 57 |
+
blue circle; the release target is nearly constant across the dataset.
|
| 58 |
|
| 59 |
+
## Training
|
| 60 |
|
| 61 |
+
| | |
|
| 62 |
+
|---|---|
|
| 63 |
+
| Trainable parameters | **3.617 B (100 %)** |
|
| 64 |
+
| Frozen | none |
|
| 65 |
+
| Steps | 10,000 (run stopped early at 10K; config said 20K) |
|
| 66 |
+
| Batch size | 64 |
|
| 67 |
+
| Precision | bfloat16, `gradient_checkpointing=true` |
|
| 68 |
+
| Optimizer | AdamW · lr 2.5e-5 · wd 0.01 · betas (0.9, 0.95) · grad-clip 1.0 |
|
| 69 |
+
| Schedule | cosine decay with warmup — auto-scaled by LeRobot (20K steps < 30K decay): warmup 1,000→666, decay 30,000→20,000; peak 2.5e-5, LR at this checkpoint ≈1.4e-5 (configured floor 2.5e-6 never reached — run stopped at 10K) |
|
| 70 |
+
| Chunk | `chunk_size=50`, `n_action_steps=50`, `n_obs_steps=1` |
|
| 71 |
+
| Seed | 1000 |
|
| 72 |
+
| Hardware | 1× NVIDIA RTX PRO 6000 Blackwell (97 GB) |
|
| 73 |
+
| VRAM / speed | 45.4 GB · 4.93 s/step |
|
| 74 |
+
| **Final loss at this checkpoint** | **0.039** |
|
| 75 |
|
| 76 |
+

|
| 77 |
|
| 78 |
+

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
|
| 80 |
+
Both runs used identical data, batch size and dtype — the only difference is what was trainable, so
|
| 81 |
+
the two curves are directly comparable. `expert-only` is essentially flat after warmup (~step 1K):
|
| 82 |
+
0.129 → 0.087 over the remaining ~3.8 epochs; full fine-tuning keeps descending. The run was stopped
|
| 83 |
+
at 10K rather than the configured 20K on the strength of these curves.
|
| 84 |
|
| 85 |
+
## Usage
|
| 86 |
|
| 87 |
+
```python
|
| 88 |
+
from lerobot.policies.pi05.modeling_pi05 import PI05Policy
|
| 89 |
+
|
| 90 |
+
policy = PI05Policy.from_pretrained("aailabkaist/pi05_recovery_2task_full_10k")
|
|
|
|
|
|
|
| 91 |
```
|
| 92 |
|
| 93 |
+
Or serve it for async inference:
|
| 94 |
|
| 95 |
+
```bash
|
| 96 |
+
python -m lerobot.async_inference.policy_server --host=0.0.0.0 --port=8080 --fps=30
|
| 97 |
+
python -m lerobot.async_inference.robot_client \
|
| 98 |
+
--server_address=<host>:8080 \
|
| 99 |
+
--policy_type=pi05 --pretrained_name_or_path=aailabkaist/pi05_recovery_2task_full_10k \
|
| 100 |
+
--task="pick up the cup near the blue circle" \
|
| 101 |
+
--actions_per_chunk=50 --chunk_size_threshold=0.2 \
|
| 102 |
+
--aggregate_fn_name=weighted_average --fps=30
|
| 103 |
+
```
|
| 104 |
|
| 105 |
+
---
|
| 106 |
|
| 107 |
+
*A single-task variant of this setup — one instruction covering the whole pick-and-place motion,
|
| 108 |
+
with a plain white cup — lives in the
|
| 109 |
+
[SO-101 · cup → blue circle (single-task) collection](https://huggingface.co/collections/nevertmr/so-101-cup-blue-circle-single-task-6a58a5ef4ebe2dc6c028f093).*
|