aailabkaist commited on
Commit
b72b0e4
·
verified ·
1 Parent(s): 316fca9

restore detailed card and figures

Browse files
Files changed (1) hide show
  1. README.md +79 -40
README.md CHANGED
@@ -1,70 +1,109 @@
1
  ---
2
- datasets: aailabkaist/so101_recovery_2task
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
- # Model Card for pi05
14
 
15
- <!-- Provide a quick summary of what the model is/does. -->
 
 
16
 
 
 
17
 
18
- **π₀.₅ (Pi05) Policy**
 
 
 
 
 
 
 
 
19
 
20
- π₀.₅ is a Vision-Language-Action model with open-world generalization, from Physical Intelligence. The LeRobot implementation is adapted from their open source OpenPI repository.
21
 
22
- **Model Overview**
23
 
24
- π₀.₅ represents a significant evolution from π₀, developed by Physical Intelligence to address a big challenge in robotics: open-world generalization. While robots can perform impressive tasks in controlled environments, π₀.₅ is designed to generalize to entirely new environments and situations that were never seen during training.
 
 
 
25
 
26
- For more details, see the [Physical Intelligence π₀.₅ blog post](https://www.physicalintelligence.company/blog/pi05).
27
 
 
 
28
 
29
- This policy has been trained and pushed to the Hub using [LeRobot](https://github.com/huggingface/lerobot).
30
- See the full documentation at [LeRobot Docs](https://huggingface.co/docs/lerobot/index).
31
 
32
- ---
 
 
33
 
34
- ## How to Get Started with the Model
35
 
36
- For a complete walkthrough, see the [training guide](https://huggingface.co/docs/lerobot/il_robots#train-a-policy).
37
- Below is the short version on how to train and run inference/eval:
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- ### Train from scratch
40
 
41
- ```bash
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
- _Writes checkpoints to `outputs/train/<desired_policy_repo_id>/checkpoints/`._
 
 
 
53
 
54
- ### Evaluate the policy/run inference
55
 
56
- ```bash
57
- lerobot-record \
58
- --robot.type=so100_follower \
59
- --dataset.repo_id=<hf_user>/eval_<dataset> \
60
- --policy.path=<hf_user>/<desired_policy_repo_id> \
61
- --episodes=10
62
  ```
63
 
64
- Prefix the dataset repo with **eval\_** and supply `--policy.path` pointing to a local or hub checkpoint.
65
 
66
- ---
 
 
 
 
 
 
 
 
67
 
68
- ## Model Details
69
 
70
- - **License:** apache-2.0
 
 
 
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
+ ![cup start positions](pick_start_positions_anon.png)
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
+ ![cup transport](place_transport_anon.png)
 
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
+ ![loss curve](loss_curve.png)
77
 
78
+ ![loss curve, log scale](loss_curve_log.png)
 
 
 
 
 
 
 
 
 
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).*