Views
No views yet
1from octo.model.octo_model import OctoModel
2import numpy as np
3
4# Load fine-tuned model
5model = OctoModel.load_pretrained("hf://aryanmadhavverma/octo-franka-reach-finetuned")
6
7# Load action normalization stats (included in this repo)
8action_mean = np.load("action_mean.npy") # downloaded with the checkpoint
9action_std = np.load("action_std.npy")
10
11# Inference (single step)
12actions = model.sample_actions(
13 observations={
14 "image_primary": overhead_img[None, None, ...], # (1, 1, 256, 256, 3) uint8
15 "image_wrist": wrist_img[None, None, ...], # (1, 1, 128, 128, 3) uint8
16 "timestep_pad_mask": np.array([[True]]),
17 },
18 tasks=model.create_tasks(texts=["reach the green target"]),
19 rng=jax.random.PRNGKey(0),
20)
21
22# Denormalize: model output → physical joint deltas (radians)
23raw_action = np.array(actions[0, 0]) # first action from 4-action chunk
24joint_delta = raw_action * action_std + action_meanvla/eval_finetuned_octo.py.| Base model | octo-base-1.5 (93M params) |
| Training data | 300 episodes, ~30K frames, dual camera (overhead 256x256 + wrist 128x128) |
| Data source | Non-deterministic SAC policy (100% success on state-based reaching) |
| Action space | 7 joint angle deltas (replaced pre-trained end-effector head) |
| Steps | 25,000 |
| Batch size | 16 |
| Learning rate | 3e-4 (linear warmup over 100 steps) |
| Optimizer | AdamW |
| Hardware | RTX 4080S (Vast.ai), ~47 minutes |
| Task instruction | "reach the green target" |
| method | params | input | success |
|---|---|---|---|
| SAC (model-free RL) | 78K | state vector (20 floats) | 100% |
| Octo zero-shot | 93M | image | 0% |
| Octo fine-tuned (this checkpoint) | 93M | image (dual camera) | 90% |