--- license: other tags: - robotics - behavior-cloning - mae - openarm library_name: pytorch --- # 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 ```python 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.