Downloads · 30 days
15
38% of all-time downloads
RyanL22/openarm-rby1-gr1-idm-depthanything-v2-large
openarm-rby1-gr1-idm-depthanything-v2-large is a robotics model from RyanL22. Use it for the robotics task on the model card, and read the license before you ship it in a product. The card lists the license as apache-2.0.
One inverse dynamics model (IDM) that predicts joint-space action chunks for three different robots from egocentric video alone. Given frames at t and t+20 (20 Hz, i.e. a 1.0 s window) it predicts the 20-step action c…
Downloads · 30 days
15
38% of all-time downloads
All-time downloads
39
Public
Parameters
628M
2.5 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors2.5 GB · 100%
From the Hugging Face model README
One inverse dynamics model (IDM) that predicts joint-space action chunks for three
different robots from egocentric video alone. Given frames at t and t+20 (20 Hz, i.e. a
1.0 s window) it predicts the 20-step action chunk that connects them. No state, no
language input.
Architecture is GR00T-Dreams' flow-matching IDM with the vision encoder replaced by
DepthAnything-V2-Large (DINOv2-Large backbone). The vision tower, projector, VL
self-attention and DiT are shared across robots; only the action encoder/decoder are
per-embodiment (CategorySpecific weights indexed by embodiment_id). The action space is
zero-padded to 66 dims and padded dims are masked out of both the flow-matching input and
the loss.
Predecessor (single robot): RyanL22/openarm-idm-depthanything-v2-large (OpenArm only, test MAE 0.0336).
| tag | embodiment_id | cameras | images / sample | view_ids | native action dim |
|---|---|---|---|---|---|
openarm_rh56f1 | 29 | stereo camera_ego_left, camera_ego_right | 4 | [0,1,2,3] | 28 |
rby1_wujihand2 | 28 | stereo camera_ego_left, camera_ego_right | 4 | [0,1,2,3] | 66 |
gr1_fourier | 27 | mono ego_view | 2 | [0,2] | 44 |
view_ids index the flattened (timestep, view) position [t0L, t0R, t1L, t1R]; the mono
robot uses [0, 2] = (t0 left, t1 left) so the same embedding table means the same thing
for all three. Do not feed a mono robot with [0, 1].
Action layouts (raw joint order of each robot's dataset; the model output is [20, 66],
take the first native dims):
action column)Per-embodiment q01/q99 normalisation statistics are in experiment_cfg/metadata.json,
keyed by tag. Actions are predicted in that normalised space and must be un-normalised
with the matching tag's stats.
[0.485, 0.456, 0.406], std
[0.229, 0.224, 0.225]). SigLIP-range input raises in the tower's input check.| robot | hours | episodes | frames | source |
|---|---|---|---|---|
| OpenArm RH56F1 | 3.75 h | 756 | 269,983 | teleop v3+v4 + free IDM teleop, 20 Hz, 288×512 stereo |
| RB-Y1 Wujihand2 | 1.47 h | 221 | 105,869 | 5 teleop sets (ball/bottle/box/doll + free IDM teleop), 30→20 Hz (3:2), 720p→288×512 stereo |
| GR-1 Fourier | 2.50 h | 1,180 clips | 179,711 | NVIDIA GR00T-Teleop-GR1 (dreamdojo cut), camera-calibrated 16-session subset, 1280×800→512×320 mono |
Sampling: 1/3 per embodiment per epoch regardless of size (RB-Y1 is up-sampled, GR-1 and OpenArm are sub-sampled).
60,000 steps, global batch 128 (32 × 4), 4×H200, 12 h 54 min, 13.8 mixture epochs.
Train loss 1.35 → ~0.005 (mean of last 1,000 steps ≈ 0.007). Vision tower fine-tuned;
encoder.layers[11] / vision_model.head frozen as in the predecessor. Initialised from
depth-anything/Depth-Anything-V2-Large-hf, not from the single-robot checkpoint.
Scored with eval_idm_openarm.py in eval mode (full frame, no augmentation), stride 10,
20-step chunks. "static" = repeat action[t] for 20 steps (the hold-still baseline). MAE in
radians; "moving dims" excludes joints that are constant in the data (RB-Y1 wheels/torso/
head, GR-1 legs/neck/waist). "% range" divides the MAE by the training q01–q99 range.
| robot | test | chunks | IDM MAE (moving dims) | static | IDM % range | static % range |
|---|---|---|---|---|---|---|
| OpenArm RH56F1 | 34 ep | 1,013 | 0.0350 | 0.0281 | 1.9–4.5 | 1.1–3.8 |
| RB-Y1 Wujihand2 | 10 ep | 662 | 0.0638 | 0.0321 | 4.8–8.0 | 2.1–4.3 |
| GR-1 Fourier | 64 clips | 891 | 0.0472 | 0.0559 | 2.4–4.3 | 2.0–6.3 |
Per group (MAE, radians; IDM / static):
| OpenArm | RB-Y1 | GR-1 | |||
|---|---|---|---|---|---|
| left_arm | 0.0249 / 0.0143 | right_arm | 0.1079 / 0.0574 | left_arm | 0.0308 / 0.0265 |
| right_arm | 0.0328 / 0.0389 | right_hand (20) | 0.0717 / 0.0387 | left_hand | 0.0449 / 0.0322 |
| left_hand | 0.0360 / 0.0182 | left_arm | 0.1152 / 0.0455 | right_arm | 0.0457 / 0.0661 |
| right_hand | 0.0601 / 0.0508 | left_hand (20) | 0.0480 / 0.0249 | right_hand | 0.0702 / 0.1019 |
Plots (overlay_ep*.png) and eval_report.json per robot are in the training-side eval
directory, not in this repo.
Code lives in the GR00T-Dreams fork (gr00t/experiment/data_config_idm.py
MULTI_CONFIG_MAP["multi3_ae20_depth"], gr00t/data/mixture_dataset.py,
IDM_dump/configs/multi3_ae20_depth.yaml). Evaluate one embodiment with its own data
config and tag:
python IDM_dump/scripts/eval_idm_openarm.py \
--checkpoint <this checkpoint> \
--test-dir <robot dataset>/test --train-dir <robot dataset>/train \
--data-config gr1_ego_mono_ae20_depth --embodiment-tag gr1_fourier
# openarm: --data-config openarm_ego_stereo_ae20_depth_mirror_fov --embodiment-tag openarm_rh56f1
# rby1: --data-config rby1_ego_stereo_ae20_depth --embodiment-tag rby1_wujihand2
Loading fetches depth-anything/Depth-Anything-V2-Large-hf for the tower definition, so
that repo must be reachable or cached.
model.safetensors, config.json — final weights (step 60,000)experiment_cfg/metadata.json — per-tag dataset statistics and modality metadatatrainer_state.json — loss curve (every 10 steps)gate_fov_png/ — example FoV-augmented training frames per robot (pre-flight gate output)