Downloads · 30 days
0
EmptyDrum/sharpen-pencil-pi05-v2
sharpen-pencil-pi05-v2 is a robotics model from EmptyDrum. Use it for the robotics task on the model card, and read the license before you ship it in a product. It is set up for lerobot. The card lists the license as apache-2.0.
LoRA finetune of lerobot/pi05base on johannesmichalke/sharpen-pencil — a YAM single-arm 7-DOF dataset of "move a pencil from the box into the sharpener."
Downloads · 30 days
0
Access
Public
Updated May 23, 2026
Repo size
1.1 GB
Likes
0
Public
Click a slice to open those files.
.safetensors1.1 GB · 100%
From the Hugging Face model README
LoRA finetune of lerobot/pi05_base on
johannesmichalke/sharpen-pencil
— a YAM single-arm 7-DOF dataset of "move a pencil from the box into the sharpener."
Each subfolder is a complete checkpoint at the corresponding training step. Pick one when loading.
All three are LoRA adapters of the same shape (~369 MB each); pick 030000/ for best fit.
Requires Python 3.12, lerobot[pi,dataset] (≥ 0.5.1), and peft (≥ 0.18). No HF auth needed — public repo.
from huggingface_hub import snapshot_download
from lerobot.policies import make_policy
ckpt = snapshot_download(
"EmptyDrum/sharpen-pencil-pi05-v2",
allow_patterns="030000/*",
)
policy = make_policy(pretrained_policy_name_or_path=f"{ckpt}/030000")
policy.eval()
# policy.predict_action(observation) -> (10, 7) action chunk
Base model lerobot/pi05_base (~6 GB) is fetched lazily on first construction.
observation.images.base_0_rgb — top-down view (trained on Logitech, cam_high in dataset)observation.images.left_wrist_0_rgb — wrist view (trained on RealSense D405, cam_wrist in dataset)observation.images.right_wrist_0_rgb — always masked during training. Pass a zero image with image_mask=False, or set policy.config.empty_cameras=1.observation.state = float32[7] = [joint0…joint5, gripper]. Joints in radians, gripper ∈ [0, 1]. State is padded to 32 dims internally by the policy — feed 7 raw values."move a pencil from the box into the sharpener". It comes from the dataset's meta/tasks.parquet automatically when using the lerobot data loader, but for live inference pass it explicitly in the observation dict.| Base model | lerobot/pi05_base |
| Dataset | johannesmichalke/sharpen-pencil (LeRobot v3.0, 77 episodes, 64 107 frames, 30 fps) |
| Method | LoRA via PEFT, target_modules=all-linear, r=32, lora_alpha=32 |
| Trainable / total params | 92 M / 4.2 B |
| Batch size | 8 |
| Steps | 30 000 (≈ 3.74 epochs) |
| LR schedule | Cosine decay with 1 k warmup, peak 2.5e-5, decay to 2.5e-6 |
| Optimizer | AdamW, grad-clip 1.0 |
| Precision | bf16 with torch.compile=max-autotune + gradient checkpointing |
| Action chunk | 10 |
max_token_len | 200 (pi05 default) |
| Hardware | 1× H100 80 GB |
| Wall-clock | 10 h 34 min |
pi05_base API; it carries no information from this dataset.Full training config lives at
HalfEmptyDrum/Server-YAM:
runs/sharpen_pencil_v2.env — every hyperparameter for this runscripts/train.sh — generic lerobot-train launcheruv + lerobot install, then ./scripts/train.sh sharpen_pencil_v2).Apache 2.0 — same as the upstream lerobot/pi05_base checkpoint.