BC MAE + MLP (LoRA encoder, action chunk H=16)
Frozen MAE (OpenArm AIST exp18 LoRA) + BC MLP with action chunking (H=16).
Data: SBInt OpenArm pnp image_filtered.hdf5 (187 demos, ~43k frames).
Recommended
best_val.ckpt (= epoch=0120.ckpt, val≈0.0128). Absolute best val was ~ep44 (not saved; save_every=20).
Checkpoints (saved every 20)
| File | Epoch | val_loss | train_loss |
|---|---|---|---|
epoch=0040.ckpt |
40 | 0.0156 | 0.0068 |
epoch=0080.ckpt |
80 | 0.0154 | 0.0038 |
epoch=0100.ckpt |
100 | 0.0155 | 0.0038 |
epoch=0120.ckpt |
120 | 0.0128 | 0.0028 |
epoch=0140.ckpt |
140 | 0.0129 | 0.0020 |
epoch=0200.ckpt |
200 | 0.0139 | 0.0017 |
epoch=0480.ckpt |
480 | 0.0128 | 0.0005 |
epoch=0499.ckpt |
499 | 0.0159 | 0.0020 |
best_val.ckpt |
120 | ~0.0128 | (alias of ep120) |
latest.ckpt |
499 | ~0.0159 | alias of final |
Load
from policy import load_policy
policy = load_policy("best_val.ckpt", device="cuda:0")
out = policy.predict_action(obs)["action"] # (B, 16, 8)
Obs: agentview_image, robot0_eye_in_hand_image (B,3,224,224) float [0,1], robot0_joint_qpos (B,8).
Deploy: execute first k steps of the chunk @ ~30 Hz, then replan (do not only send action[0] forever).
Train note
Only the MLP head is trained on a frozen MAE feature cache (8×GPU, bs=64). 500 epochs ≈ 15 min wall — that is expected, not a bug.