--- library_name: lerobot pipeline_tag: robotics tags: - lerobot - robotics - xvla - openarm license: apache-2.0 base_model: lerobot/xvla-base datasets: - leapshared/Incline_new_20260902_203009 --- # Incline_new_60epi X-VLA finetuned on a bimanual OpenArm ramp-loading dataset. The run went the full 20,000 steps and ended on its own. ## Load The default branch holds the final checkpoint, 020000: ```bash --policy.path=leapshared/Incline_new_60epi ``` Each earlier checkpoint is a branch of the same repo, with the weights at the branch root: ```bash --policy.path=leapshared/Incline_new_60epi --policy.pretrained_revision=014000 ``` `--policy.path` takes a repo id or a local directory and reads `config.json` from the root only — it has no subfolder syntax, which is why these are branches rather than a `checkpoints/` folder. Only the weights and the pre/post-processors are here. Optimizer state was not uploaded, so this repo serves inference, not resumption. ### The camera rename is not optional The base checkpoint names its three views `image`, `image2` and `image3`, and `make_policy` does not overwrite them with the dataset's names. Training and rollout both need the same map, or they fail before the first step: ```bash --rename_map='{"observation.images.follower_d455f": "observation.images.image", "observation.images.left_wrist": "observation.images.image2", "observation.images.right_wrist": "observation.images.image3"}' ``` Order matters: only the first view is concatenated with the language embeddings, so the chest camera belongs in the `image` slot. On rollout the flag must be passed again — the saved rename step is overwritten by whatever the CLI supplies, and the name check runs after the arms have already travelled to their home pose. RTC inference is not supported by this policy; use `--inference.type=sync`. ## Checkpoints | Checkpoint | Epochs | Train loss | Revision to pass | |---|---|---|---| | 003500 | 0.84 | ≈0.043 | `--policy.pretrained_revision=003500` | | 007000 | 1.68 | 0.022 | `--policy.pretrained_revision=007000` | | 010500 | 2.51 | ≈0.013 | `--policy.pretrained_revision=010500` | | 014000 | 3.35 | 0.011 | `--policy.pretrained_revision=014000` | | 017500 | 4.19 | 0.010 | `--policy.pretrained_revision=017500` | | 020000 | 4.79 | 0.010 | default branch, no revision needed | Losses marked `≈` are read from the nearest logged step, since logging ran every 200 steps and the checkpoints do not land on those boundaries. ## Training | | | |---|---| | Base model | `lerobot/xvla-base` | | Policy type | `xvla`, `action_mode=auto`, bf16 | | Dataset | `leapshared/Incline_new_20260902_203009` — 60 episodes, 66,823 frames, 30 fps, `bi_openarm_follower` | | Cameras | `follower_d455f`, `left_wrist`, `right_wrist`, renamed as above | | State / action | 16 dimensions, padded to the model's 20 | | Chunking | `chunk_size=32`, `n_action_steps=32` | | Trained modules | vision encoder, language encoder, policy transformer and soft prompts — nothing frozen | | Optimizer | `xvla-adamw`, lr 1e-4, weight decay 1e-4, grad clip 10.0 | | Schedule | cosine decay, 500 warmup steps, 20,000 decay steps | | Batch size | 16 | | Image transforms | off | Measured on one 32 GB card: 24.77 GiB resident, 3.13 step/s, 1 hour 47 minutes end to end. Final step logged `loss:0.010 grdn:0.941`. ## Task `Place the four metal weights on the blue cart on the ramp.`