Instructions to use AlexWortega/tinyvla with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use AlexWortega/tinyvla with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
Add section 11 (RoboCasa zero-shot transfer); extend section 10 with pretrain_C fine-tune + B-vs-C head-to-head
Browse files- ablation.md +89 -5
ablation.md
CHANGED
|
@@ -8,7 +8,7 @@ All closed-loop numbers below are **paired**: every configuration runs the same
|
|
| 8 |
|
| 9 |
Hardware: 4x Tesla V100-SXM2-32GB (sm_70), fp32, driver 535 / CUDA 12.2,
|
| 10 |
torch 2.6.0+cu124, transformers 5.5.4, lerobot 0.6.1. Suite: `libero_spatial`.
|
| 11 |
-
Generated 2026-08-
|
| 12 |
|
| 13 |
**The headline dual-rate comparison in the model card is not reproduced.** With the
|
| 14 |
clock fixed and 500 paired episodes per configuration, no refresh rate differs
|
|
@@ -363,7 +363,7 @@ shared pretrain.
|
|
| 363 |
|
| 364 |
---
|
| 365 |
|
| 366 |
-
## 10. Fine-tuning pretrain_B on LIBERO
|
| 367 |
|
| 368 |
Section 9's `pretrain_B` row asks what a cross-embodiment pretrain is worth on
|
| 369 |
LIBERO with no fine-tuning at all (nothing - 0%, same as every other pre-fine-tune
|
|
@@ -374,7 +374,8 @@ instead of `stage3_distill`?
|
|
| 374 |
|
| 375 |
**Recipe, unmodified from `configs/libero_ft4.yaml` except the resume point:**
|
| 376 |
unfreeze vision tower + language stack, backbone at 0.1x lr, 40,000 steps,
|
| 377 |
-
`resume_from: tinyvla2/pretrain_B`
|
|
|
|
| 378 |
`conditioning`/`morph_tokens`/`action_space` fields carried through so the resume
|
| 379 |
loads with 0 missing / 0 unexpected keys (verified directly before launching).
|
| 380 |
fp16 instead of bf16 (V100, sm_70); effective batch 48 via 4-way data-parallel
|
|
@@ -382,13 +383,22 @@ instead of one A6000, matching ft4's effective batch. Final training loss 0.178,
|
|
| 382 |
comparable to ft4's reported 0.066 - 500-episode full-rate closed-loop eval,
|
| 383 |
paired against the same episodes as ft4's own full-rate row (section 3).
|
| 384 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 385 |
| | Success | 95% CI | delta vs. ft4 | paired 95% CI | flips | McNemar p |
|
| 386 |
|---|---|---|---|---|---|---|
|
| 387 |
| ft4 (from stage3_distill) | 426/500 = 85.2% | — | — | — | — | — |
|
| 388 |
| **B fine-tuned (from pretrain_B)** | 345/500 = 69.0% | [64.8,72.9] | -16.2 | [-21.0,-11.4] | +40/-121 | 0.0000*** |
|
|
|
|
| 389 |
|
| 390 |
-
**
|
| 391 |
-
specifically -
|
|
|
|
| 392 |
one catastrophic task dragging an average down: 7/10 tasks score lower for the B-derived fine-tune than for ft4 (the other 3 are within a couple of episodes either way). Worst-hit: task8 at 9/50 vs. ft4's 39/50. Best-preserved: task5 at 49/50 vs. ft4's 42/50. Both checkpoints have identical architecture and parameter/FLOP counts (confirmed via the same profiling harness as section 6) - this is purely a pretraining-lineage effect, not a compute or capacity difference.
|
| 393 |
|
| 394 |
Plausible reason: `stage3_distill` was trained specifically as *this* model's
|
|
@@ -405,6 +415,80 @@ fine-tuning starts, per section 1's frame-rate check applying identically to
|
|
| 405 |
both - the difference is what the backbone learned before LIBERO ever entered
|
| 406 |
the picture).
|
| 407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
---
|
| 409 |
|
| 410 |
## Reproduction
|
|
|
|
| 8 |
|
| 9 |
Hardware: 4x Tesla V100-SXM2-32GB (sm_70), fp32, driver 535 / CUDA 12.2,
|
| 10 |
torch 2.6.0+cu124, transformers 5.5.4, lerobot 0.6.1. Suite: `libero_spatial`.
|
| 11 |
+
Generated 2026-08-25.
|
| 12 |
|
| 13 |
**The headline dual-rate comparison in the model card is not reproduced.** With the
|
| 14 |
clock fixed and 500 paired episodes per configuration, no refresh rate differs
|
|
|
|
| 363 |
|
| 364 |
---
|
| 365 |
|
| 366 |
+
## 10. Fine-tuning pretrain_B and pretrain_C on LIBERO
|
| 367 |
|
| 368 |
Section 9's `pretrain_B` row asks what a cross-embodiment pretrain is worth on
|
| 369 |
LIBERO with no fine-tuning at all (nothing - 0%, same as every other pre-fine-tune
|
|
|
|
| 374 |
|
| 375 |
**Recipe, unmodified from `configs/libero_ft4.yaml` except the resume point:**
|
| 376 |
unfreeze vision tower + language stack, backbone at 0.1x lr, 40,000 steps,
|
| 377 |
+
`resume_from: tinyvla2/pretrain_B` (and separately `pretrain_C`).
|
| 378 |
+
`num_embodiments=16` and each pretrain's
|
| 379 |
`conditioning`/`morph_tokens`/`action_space` fields carried through so the resume
|
| 380 |
loads with 0 missing / 0 unexpected keys (verified directly before launching).
|
| 381 |
fp16 instead of bf16 (V100, sm_70); effective batch 48 via 4-way data-parallel
|
|
|
|
| 383 |
comparable to ft4's reported 0.066 - 500-episode full-rate closed-loop eval,
|
| 384 |
paired against the same episodes as ft4's own full-rate row (section 3).
|
| 385 |
|
| 386 |
+
`pretrain_C` got the identical treatment. One caveat specific to C: its
|
| 387 |
+
`morph_encoder` conditioning has **no forward-pass implementation** in this
|
| 388 |
+
codebase, so a zero-shot evaluation of C would silently measure a *different*
|
| 389 |
+
model than the one the checkpoint describes, and none is reported here. Fine-tuning
|
| 390 |
+
is still legitimate — the backbone unfreezes either way, so `embodiment_emb`
|
| 391 |
+
receives real gradient — and that is what the C row below measures.
|
| 392 |
+
|
| 393 |
| | Success | 95% CI | delta vs. ft4 | paired 95% CI | flips | McNemar p |
|
| 394 |
|---|---|---|---|---|---|---|
|
| 395 |
| ft4 (from stage3_distill) | 426/500 = 85.2% | — | — | — | — | — |
|
| 396 |
| **B fine-tuned (from pretrain_B)** | 345/500 = 69.0% | [64.8,72.9] | -16.2 | [-21.0,-11.4] | +40/-121 | 0.0000*** |
|
| 397 |
+
| **C fine-tuned (from pretrain_C)** | 372/500 = 74.4% | [70.4,78.0] | -10.8 | [-15.2,-6.6] | +36/-90 | 0.0000*** |
|
| 398 |
|
| 399 |
+
**Neither cross-embodiment pretrain makes a better starting point than
|
| 400 |
+
stage3_distill for LIBERO specifically - both make a worse one, by wide and
|
| 401 |
+
significant margins.** Head-to-head on the same 500 paired episodes, **C beats B by +5.4 pp** (paired 95% CI [+0.0,+10.8], McNemar p=0.0623, +111/-84 flips) - which does **not** clear significance at 0.05, so the two cross-embodiment pretrains are not separated by this evidence. This isn't
|
| 402 |
one catastrophic task dragging an average down: 7/10 tasks score lower for the B-derived fine-tune than for ft4 (the other 3 are within a couple of episodes either way). Worst-hit: task8 at 9/50 vs. ft4's 39/50. Best-preserved: task5 at 49/50 vs. ft4's 42/50. Both checkpoints have identical architecture and parameter/FLOP counts (confirmed via the same profiling harness as section 6) - this is purely a pretraining-lineage effect, not a compute or capacity difference.
|
| 403 |
|
| 404 |
Plausible reason: `stage3_distill` was trained specifically as *this* model's
|
|
|
|
| 415 |
both - the difference is what the backbone learned before LIBERO ever entered
|
| 416 |
the picture).
|
| 417 |
|
| 418 |
+
|
| 419 |
+
---
|
| 420 |
+
|
| 421 |
+
## 11. Zero-shot transfer to RoboCasa (a genuinely different domain)
|
| 422 |
+
|
| 423 |
+
Everything above is LIBERO: one fixed tabletop Panda, one scene layout family.
|
| 424 |
+
This section asks whether `ft4` transfers with no fine-tuning at all to
|
| 425 |
+
[RoboCasa365](https://robocasa.ai/) — PandaOmron (Franka arm on a holonomic
|
| 426 |
+
mobile base) in procedurally-varied kitchens, a different robot, different
|
| 427 |
+
scenes, and a different observation layout.
|
| 428 |
+
|
| 429 |
+
**Conventions were verified empirically, not assumed** (`verify_robocasa.py`,
|
| 430 |
+
`verify_robocasa_axes.py`), because a silent frame mismatch here would be
|
| 431 |
+
indistinguishable from a policy failure:
|
| 432 |
+
|
| 433 |
+
* **Gripper**: RoboCasa's -1=open/+1=closed matches LIBERO's polarity directly
|
| 434 |
+
(measured qpos 0.039 at -1, 0.001 at +1). No sign flip.
|
| 435 |
+
* **Action**: both use the same OSC_POSE delta controller at the same physical
|
| 436 |
+
scaling (±0.05 m, ±0.5 rad/step), so LIBERO's unnormalized
|
| 437 |
+
`[dpos(3), drot(3), grip(1)]` maps onto RoboCasa's `ee_pos/ee_rot/gripper`
|
| 438 |
+
slots. `base_motion(4)` and `control_mode(1)` held at zero — arm-only.
|
| 439 |
+
* **State**: RoboCasa's native 16-dim `agent_pos` is a *different layout*
|
| 440 |
+
(base pose + relative EE) from the trained convention (absolute EE pose +
|
| 441 |
+
gripper), converted via `ee_state_from_agent_pos` before normalizing. Feeding
|
| 442 |
+
the raw vector through would put a base quaternion where the model expects an
|
| 443 |
+
EE rotvec.
|
| 444 |
+
* **Cameras**: `robot0_agentview_left` + `robot0_eye_in_hand`, used raw. A
|
| 445 |
+
crosshair projection through the camera's own MuJoCo extrinsics shows +y and
|
| 446 |
+
+z already match LIBERO's screen convention (+y→left, +z→up), while +x is a
|
| 447 |
+
*diagonal* blend of both screen axes rather than LIBERO's clean "+x→down" —
|
| 448 |
+
this camera looks into the kitchen at an angle instead of down a tabletop.
|
| 449 |
+
**No correction is applied**: a reflection that fixed x would break the y/z
|
| 450 |
+
agreement. This is a documented residual mismatch, not a fixed one.
|
| 451 |
+
|
| 452 |
+
Each task runs at RoboCasa's own registered horizon (`get_task_horizon`), not a
|
| 453 |
+
truncated budget: 900 steps for CloseFridge, 750 for OpenDrawer, 450-600 for the
|
| 454 |
+
rest. Semantic refresh 1 Hz, `n_action_steps=1`, 15 episodes/task.
|
| 455 |
+
|
| 456 |
+
| Task | Horizon | Object registry | Success | 95% Wilson | Note |
|
| 457 |
+
|---|---|---|---|---|---|
|
| 458 |
+
| `CloseFridge` | 900 | lightwheel | 0/15 | 0.0-20.4 | — |
|
| 459 |
+
| `OpenDrawer` | 750 | lightwheel | 0/15 | 0.0-20.4 | — |
|
| 460 |
+
| `NavigateKitchen` | 450 | lightwheel | 0/15 | 0.0-20.4 | requires mobile-base motion; harness holds base_motion at zero |
|
| 461 |
+
|
| 462 |
+
**Zero-shot transfer is a complete failure: 0/30 across the 2 arm-only tasks (95% Wilson 0.0-11.4%).** Not a partial-credit
|
| 463 |
+
result to be tuned up — nothing succeeds anywhere.
|
| 464 |
+
|
| 465 |
+
Two failure modes are visible in the saved videos (`results/robocasa_ft4/`), and
|
| 466 |
+
they are *behavioural*, not random flailing: the arm drifts steadily upward until
|
| 467 |
+
it clips the ceiling, and the wrist camera rotates until it faces the floor. Both
|
| 468 |
+
are consistent with the one convention that could **not** be pinned down
|
| 469 |
+
empirically — the correspondence between LIBERO's rotation axes and RoboCasa's
|
| 470 |
+
`ee_rot`. A systematic rotation-frame error produces exactly this: a constant
|
| 471 |
+
spurious delta integrated over hundreds of steps.
|
| 472 |
+
|
| 473 |
+
Two honest caveats on the table above:
|
| 474 |
+
|
| 475 |
+
* `NavigateKitchen` is **not a measurement of the policy**. The task requires
|
| 476 |
+
driving the mobile base across the kitchen, and this harness pins
|
| 477 |
+
`base_motion` to zero. Its 0/15 is guaranteed by construction, so it is
|
| 478 |
+
excluded from the aggregate.
|
| 479 |
+
* The object registry differs by row. `TurnOnMicrowave` and
|
| 480 |
+
`PickPlaceCounterToStove` sample object categories that do not exist in the
|
| 481 |
+
`lightwheel` registry and **cannot be constructed** without objaverse/aigen
|
| 482 |
+
assets, so a single registry across all five tasks was not possible without
|
| 483 |
+
re-running the first two. The fixtures each task acts on (fridge, drawer,
|
| 484 |
+
microwave, stove) are scene fixtures, not sampled objects; the registry
|
| 485 |
+
affects distractor content.
|
| 486 |
+
|
| 487 |
+
This is the motivation for section 12: rather than hand-tuning the one
|
| 488 |
+
unverifiable frame convention, fine-tune on RoboCasa's own recorded data and let
|
| 489 |
+
the model learn whatever axis mapping the dataset actually contains.
|
| 490 |
+
|
| 491 |
+
|
| 492 |
---
|
| 493 |
|
| 494 |
## Reproduction
|