Pi0.5 LoRA โ Task 002: Pick and Place Objects to X Mark
Fine-tuned Pi0.5 checkpoint using LoRA adapters for multi-object pick-and-place from a square box to an X mark.
Model Details
| Parameter | Value |
|---|---|
| Base model | Pi0.5 (pi05_base) |
| Tuning method | LoRA (low-rank adaptation) |
| Framework | OpenPI + JAX |
| Action dim | 18 (joint-space) |
| Action horizon | 10 steps |
| State dim | 18 (qpos) |
| Image inputs | head_camera (224x224) + wrist_left (224x224) |
Training Configuration
| Parameter | Value |
|---|---|
| GPU | NVIDIA H100 80GB HBM3 |
| Batch size | 4 |
| Training steps | 30,000 |
| Optimizer | AdamW (grad clip norm=1.0) |
| LR schedule | Cosine decay, peak=5e-5, warmup=10k steps |
| Final loss | 0.0506 |
| Final grad norm | ~0.49 |
Dataset
Task T-002: "Pick and Place different objects from a square box to the X Mark"
- Source:
s3://unix-ai-data/teleop_data/task_002/ - Total episodes: 1,553
- Total frames: 913,774
- FPS: 40 Hz
- Format: Converted from Unix-AI HDF5 to LeRobot
Objects (10 unique)
| Object | Episodes |
|---|---|
| Blue box | 149 |
| Foam brick | 150 |
| C clamp | 150 |
| T clamp | 150 |
| USB cable | 149 |
| Plastic clamp | 150 |
| Wooden block | 150 |
| Screwdriver | 151 |
| Timer clock | 206 |
| Rubiks cube | 148 |
Language Commands
Each episode is conditioned on a natural language prompt:
Pick and place blue box to the X mark
Pick and place foam brick to the X mark
Pick and place C clamp to the X mark
Pick and place T clamp to the X mark
Pick and place USB cable to the X mark
Pick and place plastic clamp to the X mark
Pick and place wooden block to the X mark
Pick and place screwdriver to the X mark
Pick and place timer clock to the X mark
Pick and place Rubiks cube to the X mark
Checkpoint Structure
29999/
params/ # 6.0 GB โ model parameters (base + LoRA adapters)
train_state/ # 3.0 GB โ optimizer state (for resuming training)
assets/ # normalization statistics
Usage with OpenPI
# Serve the model
python scripts/serve.py --config pi05_unix_ai_lora --checkpoint checkpoints/pi05_unix_ai_lora/pi05_task_002_lora/29999/params
# Inference
from openpi_client import Client
client = Client("http://localhost:8000")
action = client.infer(
observations={"image": img, "wrist_image": wrist_img, "state": qpos},
prompt="Pick and place blue box to the X mark"
)
Training Reproduction
# 1. Download data
python scripts/download_s3_bulk.py \
--source s3://unix-ai-data/teleop_data/task_002/ \
--output-dir data/unix_ai/task_002_raw --workers 16
# 2. Convert to LeRobot
python scripts/convert_unix_ai_hdf5_to_lerobot.py \
--data_dir data/unix_ai/task_002_raw \
--repo_id unix-ai/task_002 \
--task-map configs/task_002_subtask_map.json --force
# 3. Compute normalization stats
python scripts/compute_norm_stats_unix_ai.py --repo-id unix-ai/task_002
# 4. Train
python scripts/train_unix_ai.py \
--repo-id unix-ai/task_002 \
--exp-name pi05_task_002_lora \
--batch-size 4 --num-train-steps 30000 --num-workers 0