Robotics
LeRobot
Safetensors
pi05
so101
imitation-learning
File size: 2,589 Bytes
84b551a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
---
license: apache-2.0
library_name: lerobot
pipeline_tag: robotics
tags:
  - lerobot
  - robotics
  - pi05
  - so101
  - imitation-learning
datasets:
  - CoRL2026-CSI/SO101-teleop_sort_blocks_100epi
base_model: lerobot/pi05_base
---

# π0.5 — SO-101 `sort_blocks`

Fine-tuned [`lerobot/pi05_base`](https://huggingface.co/lerobot/pi05_base) on 100 teleop episodes of the SO-101 `sort_blocks` task.

## Model

- **Architecture**: π0.5 (PaliGemma-2B VLM + Gemma-300M action expert, flow matching, 10 inference steps)
- **Cameras**: `base_0_rgb`, `left_wrist_0_rgb`, `right_wrist_0_rgb` (224×224)
- **State / Action dim**: 32 (padded) / 6 (SO-101)
- **Action chunk**: 50
- **dtype**: bfloat16

Camera key rename (dataset → policy):
```
observation.images.top   → observation.images.base_0_rgb
observation.images.wrist → observation.images.left_wrist_0_rgb
```
`right_wrist_0_rgb` is an empty camera slot for this single-arm setup.

Action features (SO-101): `shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper` (`.pos`).
Normalization: `ACTION/STATE = MEAN_STD`, `VISUAL = IDENTITY`.

## Data

[`CoRL2026-CSI/SO101-teleop_sort_blocks_100epi`](https://huggingface.co/datasets/CoRL2026-CSI/SO101-teleop_sort_blocks_100epi) — 100 episodes, 94,568 frames, 30 fps, human teleop.

## Training

| | |
|---|---|
| Hardware | 4 × GPU (DDP, 🤗 Accelerate) |
| Per-device batch | 32 |
| Gradient accumulation | 2 |
| Effective global batch | 256 |
| Steps | 18,500 (~50 epochs) |
| Optimizer | AdamW, β=(0.9, 0.95), wd=0.01, grad clip 1.0 |
| LR | cosine decay, peak 2.5e-5 → 2.5e-6, warmup 1000, decay 30000 |
| Gradient checkpointing | on |
| Image aug | ColorJitter (brightness/contrast/saturation/hue), SharpnessJitter, RandomAffine — `max_num=3`, random order |
| Seed | 1000 |

Training script: [`scripts/train_pi05_sort_blocks.sh`](https://github.com/HyeonseokE/train_with_lerobot/blob/main/scripts/train_pi05_sort_blocks.sh).

## Usage

```python
from lerobot.policies.pi05.modeling_pi05 import PI05Policy

policy = PI05Policy.from_pretrained("CoRL2026-CSI/pi05_teleop_sort_block").to("cuda").eval()
```

```bash
lerobot-eval --policy.path=CoRL2026-CSI/pi05_teleop_sort_block --env.type=<env> --eval.n_episodes=20
```

## Limitations

- Single task, single seed; no quantitative success rate reported here.
- Trained on a single-arm SO-101; the right-wrist camera slot is empty.
- 100 episodes only — sensitive to camera/lighting domain shift.

## License

Apache 2.0 (inherits from [`lerobot/pi05_base`](https://huggingface.co/lerobot/pi05_base)).