Downloads · 30 days
1
100% of all-time downloads
nosuke113/pi0.5-libero-plus-lora
pi0.5-libero-plus-lora is a robotics model from nosuke113. 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 gemma.
LoRA fine-tuned weights of pi0.5 (PaliGemma-2B + Action Expert 300M) on the LIBERO-plus dataset, targeting the Action Expert and projection layers.
Downloads · 30 days
1
100% of all-time downloads
All-time downloads
1
Public
Repo size
1.1 TB
Likes
2
Public
Click a slice to open those files.
.safetensors168 GB · 100%
From the Hugging Face model README
LoRA fine-tuned weights of pi0.5 (PaliGemma-2B + Action Expert 300M) on the LIBERO-plus dataset, targeting the Action Expert and projection layers.
| Item | Value |
|---|---|
| Base Model | lerobot/pi05_libero_base (commit a217bfd) |
| This Repo | nosuke113/pi0.5-libero-plus-lora (commit db2ccc2) |
The model was trained on nosuke113/libero-plus-deduplicated, which is a deduplicated version of the original lerobot/libero_plus dataset.
The validation set was carefully constructed to prevent data leakage. Since the original dataset contains identical physical trajectories artificially augmented with different visual appearances, a simple random split would result in the model evaluating on physical trajectories it has already seen during training, leading to an artificially low validation loss.
To address this, we computed a SHA-1 hash over the full action sequence of each episode. Episodes sharing the same action hash (i.e., identical physical trajectories) were grouped together. The train/val split was then performed at the trajectory level, ensuring that all episodes belonging to a specific physical trajectory are placed entirely in either the training set or the validation set.
This strict trajectory-level separation means the model's validation loss accurately reflects its ability to generalize to unseen physical demonstrations, rather than just memorizing seen trajectories with different textures or lighting.
| Item | Value |
|---|---|
| Dataset | nosuke113/libero-plus-deduplicated (deduplicated: 8,395 episodes / 1,681 trajectories) |
| Data Split | Trajectory-level held-out (train: 1,376 traj / 6,873 ep, val: 154 traj / 767 ep, overlap: 0) |
| Fine-tuning | LoRA (Rank = 16, Alpha = 32, Action Expert + Projection Layers) |
| Checkpoint Path | checkpoints/libero_plus_b8_r16_step35000 (b8: batch_size=8, r16: LoRA rank=16) |
| Steps | 35,000 |
| Optimizer | AdamW (lr=1e-4, batch_size=8, Cosine Scheduler) |
| Code | takashinnosuke/parc2026-submission-code (commit abdba5b) |

The evaluation dataset containing the 180 held-out tasks is available at nosuke113/libero-plus-evaluation. These tasks are constructed along 4 perturbation axes from the LIBERO-plus BDDL scene definitions.
(0, 0, 100, 0, 0), fixed object poses, no noise.Measured on 180 fully held-out tasks with n=5 seeds (900 total rollouts). Closed-loop control with max 600 steps per episode, bfloat16 mixed precision on NVIDIA L4 GPU. Inference used Receding Horizon Control (RTC) with an action chunk size of 5. Note: The evaluation results below were measured using the checkpoint at 35,000 steps.
| Metric | Value | Note |
|---|---|---|
| Total Episodes | 900 | 180 tasks x 5 seeds |
| Overall Success Rate | 46.00% (414/900) | 95% Wilson CI: [42.7%, 49.3%] |
| Collision Rate | 32.00% (288/900) | 1mm displacement / link collision |
| Avg Steps | 362.9 | Max 600 steps |
| Action Jerk | 0.0221 | Mean step-to-step 6-DoF delta |
| Category | N | Success Rate | Collision Rate | Avg Steps |
|---|---|---|---|---|
| Base | 150 | 78.67% (118/150) | 15.33% | 247.9 |
| View | 300 | 55.00% (165/300) | 32.67% | 286.6 |
| Noise | 300 | 30.67% (92/300) | 29.33% | 441.0 |
| Moved | 150 | 26.00% (39/150) | 52.67% | 474.2 |
This model is fully compatible with the Hugging Face lerobot library. You can instantiate it with a few lines of code:
from lerobot.common.policies.factory import make_policy
# Load the policy with LoRA weights
policy = make_policy(repo_id="nosuke113/pi0.5-libero-plus-lora")
policy.eval()
# Example usage (assuming `obs` is provided by the environment)
# obs = {
# "observation.images.agentview": ...,
# "observation.images.robot0_eye_in_hand": ...,
# "observation.state": ...,
# }
# action = policy.select_action(obs)
| Component | License |
|---|---|
| Model weights (LoRA) | Google Gemma Terms of Use |
| This repository (Code) | MIT |
Base model (lerobot/pi05_libero_base) | Google Gemma Terms of Use |
lerobot library | Apache License 2.0 |
libero package | MIT License |
Training data (lerobot/libero_plus) | MIT License (Inherited from original LIBERO repository) |