ManiFlow-tb
ManiFlow-tb is the low-level action model for ToyBlocks, a robot block-stacking project. It is trained on simulated Franka arm data for manipulating blocks on a table (pick-and-place and in-place rotation of three blocks). It is trained with the ManiFlow training code at allenai/maniflow-tb and evaluated through ToyBlocks' policy server.
Quick links:
- π ToyBlocks blog post
- π» ToyBlocks code
- π οΈ ManiFlow training code
- π ToyBlocks data
Model
- Architecture: ManiFlowMultiModal with a DiTX action head (12 layers, 8 heads, width 768), 322.5M parameters,
stored in bf16 (
safetensors). - Inputs: front and gripper RGB images (224 x 224, CLIP ViT-B/16 encoder), a 9-dim robot state, the task name
(T5-small,
language_mode: action_only) and a target heatmap token from the high-level policy (target_injection_mode: token, encoded by the shared RGB encoder,heatmap_encoder_type: shared_rgb). - Outputs: a chunk of 25 executed actions (prediction horizon 50) of 9-dim absolute actions
(
action_mode: abs). The last dimension is the play mode (1 play, 0 pause, -1 skill done), because the model was trained withpause_on_attempt: true. The play mode needs to be fed back to the model when 1 or 0. - Flow matching with consistency training, 12 integration steps at inference.
Training
- Data: three ToyBlocks-generated LeRobot datasets of tabletop block manipulation.
- 200,000 steps on 8 GPUs, per-device batch 128, AdamW (lr 1e-4, betas 0.9/0.95, weight decay 1e-3), cosine schedule
with 500 warmup steps, bf16 mixed precision. Full settings are in
config.yaml. - The weights are the online (non-EMA) weights of the final step (200,000).
Files
The repository mirrors a training run directory, which is the layout ToyBlocks expects:
| file | content |
|---|---|
checkpoints/steps_200000_model.safetensors |
model weights |
config.yaml |
training config (ToyBlocks reads the model and action settings from it) |
stats.json |
normalization statistics of the training data |
Usage
Download the repository:
hf download allenai/maniflow-tb --local-dir maniflow-tb
Evaluate it with ToyBlocks (the server finds config.yaml next to the checkpoints/ directory):
python scripts/launch_eval.py --policy maniflow \
--model-path maniflow-tb/checkpoints/steps_200000_model.safetensors \
--dataset-path <ToyBlocks eval dataset> --expert-timeout-scale 3.0 ...
Training code: allenai/maniflow-tb (scripts/train_maniflow.py). ToyBlocks
also uses this code as its baselines/hvla package to load the model.
Evaluation
Closed-loop evaluation in ToyBlocks simulation with its own eval pipeline (scripts/launch_eval.py --policy maniflow):
- 128 episodes from a held-out validation set of three-block tabletop tasks, each started from the initial state of a recorded episode.
- Oracle high-level policy: the high-level plan comes from the recorded task, so the numbers measure this low-level action model alone.
- Success: all goal predicates hold with the blocks settled and the gripper open. An episode ends when the high-level plan is complete, on a collision, or at the time limit.
- Time limit: 3x the longest expert demonstration (
--expert-timeout-scale 3.0, 194 s here). With the default 30 s, most episodes time out before the task is finished (26 to 28 of 128 succeed), which measures the limit rather than the model.
| run | success | success at episode end | collision |
|---|---|---|---|
| 1 | 73/128 (57%) | 64 | 32 |
| 2 | 75/128 (59%) | 67 | 32 |
| 3 | 76/128 (59%) | 66 | 30 |
| 4 | 69/128 (54%) | 63 | 38 |
The four runs use the same episodes and settings; runs 1, 2 and 4 spread the episodes over 7 eval GPUs, run 3 over 1. They differ because the simulation and batched inference are not bitwise deterministic. The same episode can flip between success and failure from run to run: two runs agree on 82 to 97 of the 128 episodes.
License
The model weights and the training code are released under the Apache License 2.0.
- Downloads last month
- 43