Discrete and continuous action heads on pi0.5 (RoboCasa365)
These are the four pi0.5-backbone RoboCasa365 policies from the backbone study of the paper When Do Discrete Actions Make Good Continuous Controllers? (arXiv:2610.20429). All four use the same backbone, data, and training setup. Only the action head differs.
The same four heads on the pi0 backbone, the paper's main results, are in iscoyizj/discrete-actions-pi0-robocasa.
- Paper: https://arxiv.org/abs/2610.20429
- Project page: https://iscoyizj.github.io/discrete-action-website/
- Code: coming soon (Python package
discrete_actions).
Checkpoints
| Folder | Head | Training step | Decode flags | RoboCasa365 success, seed 7 |
|---|---|---|---|---|
dflow/ |
DFlow: discrete flow over 512 uniform bins per action value | 120k | --cfg-scale 3 --num-denoise-steps 5 |
60.2 |
cflow/ |
CFlow: continuous flow matching (Euler) | 150k | --cfg-scale 3 --num-denoise-steps 20 |
58.2 |
dreg/ |
DReg: one pass over 512 uniform bins, argmax | 140k | --cfg-scale 3 |
55.8 |
creg/ |
CReg: one-pass regression (squared error) | 140k | --cfg-scale 0 |
42.4 |
The paper's guidance weight is λ = --cfg-scale − 1, so --cfg-scale 3 is
λ = 2, and --cfg-scale 0 is one pass with no guidance. The values stored in
config.json are not these settings, so always pass the flags.
Each folder holds three files:
| File | Content |
|---|---|
model.safetensors |
weights, fp32, 13.2 GB (the loader casts to bf16) |
config.json |
the model config; its class_path names the head class |
norm_stats.json |
action and state normalization statistics |
SHA256SUMS lists the sha256 of every checkpoint file.
Model
| Backbone | PaliGemma-3B (SigLIP So400m/14 + Gemma-2B), initialized from lerobot/pi05_base at revision b211f3d44c36b6acfcf7ae94a64e8e96f75a64ba, fully fine-tuned |
| Parameters | 2.92B backbone + 367M to 371M resampler and action head |
| Tokenizer | google/paligemma-3b-pt-224 at revision 35e4f46485b4d07967e7e9935bc3786aad50687c (not included: it is gated) |
| Embodiment | franka_rel_eef_aa_ah1: Franka arm, arm only, end-effector actions with axis-angle rotation |
| Action chunk | 24 steps × 7 values |
The inputs and outputs are the same as for the pi0 heads.
Inputs
- 3 RGB images, resized to 224×224, in this order:
robot0_agentview_left,robot0_agentview_right,robot0_eye_in_hand. - The task instruction (up to 48 tokens).
- The robot state, 7 values: end-effector position (3, m) and axis-angle rotation (3, rad) in the robot base frame, then the gripper in [0, 1] (0 = open, 1 = closed).
- DFlow only: the last 8 executed actions, oldest first, in the output format. Leave them out at the start of an episode.
Output. A chunk of 24 actions. Each action has 7 values: end-effector position change (3, m), axis-angle rotation change (3, rad), and gripper (1). Each row is a per-step delta in the base frame, measured from the end-effector pose at that step. In RoboCasa, read the gripper as a close probability: close at ≥ 0.5.
Download
Accept the Gemma terms on google/paligemma-3b-pt-224 first. Then:
hf auth login
hf download google/paligemma-3b-pt-224 \
tokenizer.model tokenizer.json tokenizer_config.json special_tokens_map.json \
added_tokens.json preprocessor_config.json config.json generation_config.json \
--revision 35e4f46485b4d07967e7e9935bc3786aad50687c \
--local-dir checkpoints/paligemma-3b-pt-224-tokenizer
# All four heads (53 GB):
hf download iscoyizj/discrete-actions-pi05-robocasa --local-dir checkpoints/pi05
# One head (13.2 GB):
hf download iscoyizj/discrete-actions-pi05-robocasa \
--include "dflow/*" --local-dir checkpoints/pi05
checkpoints/pi05/ keeps these folders apart from the pi0 heads, which use
the same folder names. To check the files:
(cd checkpoints/pi05 && sha256sum -c --ignore-missing SHA256SUMS).
Results
RoboCasa365: 50 tasks (18 atomic_seen, 16 composite_seen, 16
composite_unseen) × 10 trials = 500 episodes, target split, one evaluation
seed (7). The policy executes all 24 actions of a chunk before it predicts
the next one. With one seed there is no ±.
| Head | Flags | Overall | atomic_seen | composite_seen | composite_unseen |
|---|---|---|---|---|---|
| DFlow | --cfg-scale 3 --num-denoise-steps 5 |
60.2% (301/500) | 148/180 | 75/160 | 78/160 |
| CFlow | --cfg-scale 3 --num-denoise-steps 20 |
58.2% (291/500) | 148/180 | 69/160 | 74/160 |
| DReg | --cfg-scale 3 |
55.8% (279/500) | 144/180 | 62/160 | 73/160 |
| CReg | --cfg-scale 0 |
42.4% (212/500) | 117/180 | 39/160 | 56/160 |
Each row is the best cell of a seed-7 grid over steps 110k to 150k, guidance
--cfg-scale 0 or 3, and, for the flow heads, 5, 10, or 20 steps. Compare
them with the pi0 heads at the same seed, not with their 3-seed means: at
seed 7 the pi0 heads score DFlow 56.2%, CFlow 55.2%, DReg 51.2%, and CReg
40.6%.
About 17 of the 50 tasks need base motion, which these arm-only policies cannot do. These checkpoints were not evaluated on LIBERO.
Training
All four heads were trained from lerobot/pi05_base on the same eight-source
Franka mix (RoboCasa365, DROID, LIBERO-plus) as the pi0 heads, in one
150k-step run each. Global batch 512 (64 per GPU × 8), AdamW (β = (0.9,
0.95), weight decay 1e-4, gradient clipping 1.0), peak learning rate 7.5e-5
with a linear warmup of 13,333 steps and cosine decay to 0.1× the peak,
bf16, condition dropout 0.1, and training seed 42.
- DFlow: the released DFlow recipe: an 8-step action history and cubic keyframe interpolation with the gripper held between keyframes.
- DReg and CFlow: the released recipes.
- CReg: the loss became NaN near step 55k, so the run restarted from its step-50k checkpoint with the peak learning rate halved to 3.75e-5, on the same 150k-step schedule.
Two train/serve differences are kept so that the checkpoints behave as
evaluated. In training, the flow time was cast to bf16 before the Fourier
features, while serving keeps it fp32. Training images were resized with
antialiasing, while serving resizes without it
(image_resize_antialias: false in config.json). The results above include
both.
Limitations
- Evaluated only in simulation (RoboCasa365). Not tested on real robots.
- Arm only: they cannot drive a mobile base.
- The camera order, state and action format, and normalization must match the description above.
License
The weights are fine-tuned from pi0.5, whose backbone is PaliGemma, so the
Gemma Terms of Use apply (see NOTICE).
Check the license of lerobot/pi05_base as well. The training datasets keep
their own licenses.
Citation
@article{yi2026discrete,
title = {When Do Discrete Actions Make Good Continuous Controllers?},
author = {Yi, Zeji and Dasgupta, Soham and Zhang, Xinyang and Sreenath, Koushil and
Qu, Guannan and Chen, Xi and Simchowitz, Max and Shi, Guanya},
journal = {arXiv preprint arXiv:2610.20429},
year = {2026}
}