Instructions to use Myungkyu/banana-challenge-ckpts with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Myungkyu/banana-challenge-ckpts with LeRobot:
- Notebooks
- Google Colab
- Kaggle
banana challenge β checkpoints
New! Two additional RLDX-1-PT-IMG variants (2026-09):
rldx_1_img-h50/β RLDX-1-PT-IMG trained with the same action horizon 50 as pi0.5 (the originalrldx_1_img-h16/uses the model's default horizon 16).rldx_1_img-h50-padmask/β the horizon-50 model trained with noise masking on the padding dimensions of the action tokens (action_noise_mask_dim: 13inconfig.json: the 13 real action dims get diffusion noise, the padding dims are kept at 0). There is no official inference code for this yet: your inference code must apply the same masking β the padding dimensions of the action-token input must be 0 (not noise) at every denoising step; with the stock sampler the padding dims receive noise and the checkpoint is out of distribution.
Policies fine-tuned on "Place the banana into the basket" (OpenArm + Inspire Hand, right arm and hand only).
Data: Myungkyu/banana-challenge-data β 54 episodes / 16,202 frames,
30 fps stereo ego view at 640Γ360, 13-D absolute joint state/action. Batch size 64.
| dir | model | base | action horizon | notes |
|---|---|---|---|---|
pi0_5-h50/ |
pi0.5 | lerobot/pi05_base @7de66397 |
50 | |
rldx_1_img-h16/ |
RLDX-1-PT-IMG | RLWRLD/RLDX-1-PT-IMG @d67fc642 |
16 | model default horizon |
rldx_1_img-h50/ |
RLDX-1-PT-IMG | RLWRLD/RLDX-1-PT-IMG @d67fc642 |
50 | same horizon as pi0.5 |
rldx_1_img-h50-padmask/ |
RLDX-1-PT-IMG | RLWRLD/RLDX-1-PT-IMG @d67fc642 |
50 | + noise masking on the action-token padding dims (action_noise_mask_dim: 13); inference must zero the padding dims |
Checkpoints
Three steps per model (253 steps = 1 epoch on this dataset); every model directory holds step_010000, step_020000, step_030000
and the checkpoint files sit directly inside each step directory.
| step | epochs |
|---|---|
step_010000 |
39.5 |
step_020000 |
79.0 |
step_030000 |
118.5 |
pi0_5-h50/step_030000/ # pi0.5 (config.json, model.safetensors, policy_*processor*, train_config.json)
rldx_1_img-h16/step_030000/ # RLDX-1-PT-IMG, horizon 16 (config.json, model-*-of-*.safetensors, experiment_cfg/, processor/)
rldx_1_img-h50/step_030000/ # RLDX-1-PT-IMG, horizon 50
rldx_1_img-h50-padmask/step_030000/ # RLDX-1-PT-IMG, horizon 50 + padding-dim noise masking
Downloading one checkpoint only β note that * also matches /, so exclude the others:
hf download Myungkyu/banana-challenge-ckpts \
--include "rldx_1_img-h50/step_030000/*" --local-dir ./ckpts
Loading β pi0.5
Configs here carry only the fields upstream LeRobot knows, so stock lerobot loads them:
pip install 'lerobot[pi]' # the pi extra pulls transformers
from lerobot.policies.pi05.modeling_pi05 import PI05Policy
from lerobot.policies.factory import make_pre_post_processors
ckpt = "ckpts/pi0_5-h50/step_030000"
policy = PI05Policy.from_pretrained(ckpt); policy.eval(); policy.to("cuda")
pre, post = make_pre_post_processors(policy.config, pretrained_path=ckpt)
Batch keys: observation.image.ego_left, observation.image.ego_right (CHW float32 in
[0,1] β feed the raw 640Γ360 frame; the model pads and resizes to 224 itself),
observation.state (13,) float32, and task (str). predict_action_chunk returns
50 normalized steps; pass each through post to get env units.
make_pre_post_processors must point at the same directory β the q01/q99 normalization lives
in the checkpoint's processor files. The saved device_processor says cuda; to run
elsewhere pass preprocessor_overrides={"device_processor": {"device": "cpu"}} (and the same
for postprocessor_overrides).
Loading β RLDX-1-PT-IMG
Point model_path at the step directory and use embodiment_tag=GENERAL_EMBODIMENT; the
modality config and normalization statistics travel inside processor/.
from rldx.data.embodiment_tags import EmbodimentTag
from rldx.policy.rldx_policy import RLDXPolicy, RLDXSimPolicyWrapper
policy = RLDXPolicy(embodiment_tag=EmbodimentTag.GENERAL_EMBODIMENT,
model_path="ckpts/rldx_1_img-h16/step_030000", device="cuda:0") # or rldx_1_img-h50 / rldx_1_img-h50-padmask
Observation keys: video.ego_left / video.ego_right (B,1,360,640,3) uint8,
state.right_arm (B,1,7) / state.right_hand (B,1,6) float32, and task as a tuple of
strings. Returns 16 (rldx_1_img-h16) or 50 (rldx_1_img-h50*) steps per action key.
For rldx_1_img-h50-padmask add the padding-dimension masking to the sampler: at every denoising
step, keep the action-token input at 0 on the dimensions beyond the 13 real action dims (only the
first 13 dims carry the noised sample). The checkpoint's config.json records
action_noise_mask_dim: 13 for this purpose.
Notes
- Actions are absolute joint targets (not deltas): 7 arm + 6 hand, order given by
action_feature_namesin the pi0.5 config. - The head/neck joints were held fixed during collection (
openarm_head_pitchβ 1.0 rad,openarm_head_yaw= 0.0 rad) and are not part of the 13-D vector. The left arm was not used.