a-F1 commited on
Commit
e586b8b
·
0 Parent(s):

Initial release of ResWAM

Browse files
Files changed (5) hide show
  1. .gitattributes +35 -0
  2. README.md +71 -0
  3. codec_statistics.json +108 -0
  4. model.pt +3 -0
  5. resolved_config.json +157 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ library_name: pytorch
4
+ tags:
5
+ - robotics
6
+ - vision-language-action
7
+ - world-action-model
8
+ - flow-matching
9
+ - robodojo
10
+ - bimanual-manipulation
11
+ ---
12
+
13
+ # ResWAM-RoboDojo (Official RoboDojo 42-Task Checkpoint)
14
+
15
+ Official **ResWAM** multi-task bimanual policy checkpoint (`OPTML-Group/ResWAM-RoboDojo`) trained on the official 35-task **RoboDojo** simulation training set without external robot pretraining, achieving **9.40%** average Success Rate (SR) and **13.41** stage-level Progress Score across all 42 tasks (54 evaluation configurations, 2,100 episodes) in Table 3 of the paper.
16
+
17
+ - **Paper**: *ResWAM: Learning What Changes, Not What Stays, for World-Action Models*
18
+ - **Authors**: Chongyu Fan, Gaowen Liu, Ramana Rao Kompella, Jason Corso, Sijia Liu
19
+ - **Affiliations**: Michigan State University, Cisco, University of Michigan, IBM Research
20
+ - **Project Page**: [https://chongyu-fan.netlify.app/posts/reswam/](https://chongyu-fan.netlify.app/posts/reswam/)
21
+ - **Code**: [https://github.com/OPTML-Group/ResWAM](https://github.com/OPTML-Group/ResWAM)
22
+ - **HF Collection**: [https://huggingface.co/collections/OPTML-Group/reswam-6af8906dc9b6f21539b30934](https://huggingface.co/collections/OPTML-Group/reswam-6af8906dc9b6f21539b30934)
23
+
24
+ ## Abstract
25
+
26
+ World-action models (WAMs) augment vision-language-action policies (VLAs) with future prediction so that the policy can anticipate how its actions will affect the physical world. Existing WAMs supervise complete future observations. However, observations typically change little over an action chunk, so the future loss is dominated by copying static background content rather than learning task-relevant robot and object motion, limiting policy learning. Moreover, existing WAMs rely on large video generation models or separate world models, incurring heavy training and inference compute that hinders closed-loop deployment. To improve policy performance, we propose *visual residual learning*, supervising only the feature change from the current frame to the future frame in a frozen DINOv3 space. Compared with complete future features, this residual learning target yields a higher feature rank with richer and more diverse representations of scene changes, and spatially concentrates on the robot arm and manipulated objects rather than the background. To further improve computational efficiency, we present **ResWAM**, a residual world-action model with 2.3B parameters in total, including a lightweight 0.5B dual-branch DiT that jointly trains an action branch and a residual branch via conditional flow matching. Without robot pretraining (*i.e.*, pretraining on external robot action trajectories beyond the benchmark demonstrations), **ResWAM** achieves top average success rates on LIBERO-Plus (81.1%), RoboTwin 2.0 (93.8%), and RoboDojo (9.40% success, 13.41 score) at the lowest training (2.7–4.0 TFLOPs) and inference compute (1.0–1.4 TFLOPs), and leads real-robot Open, Put, and Stack (80.0% average, +10.0% over π<sub>0.5</sub>) at 92.7 ms latency.
27
+
28
+ ## Checkpoint Summary
29
+
30
+ | Field | Value |
31
+ | :- | :- |
32
+ | **Repository** | [`OPTML-Group/ResWAM-RoboDojo`](https://huggingface.co/OPTML-Group/ResWAM-RoboDojo) |
33
+ | **Checkpoint file** | `model.pt` |
34
+ | **Parameters** | `2.3B` (`RynnBrain-1.1-2B` 16-layer text backbone + `0.5B` dual-branch DiT + frozen `DINOv3-B/16`) |
35
+ | **Action horizon ($H$)** | `32` (14-D ARX X5 bimanual joint position + grippers; executes 10 steps before replanning) |
36
+ | **Compute & Latency** | `3.9 TFLOPs` train / `1.4 TFLOPs` infer / `99.7 ms` per action chunk (10 Euler steps, RTX A6000) |
37
+
38
+ ## RoboDojo Results (42 Tasks, 54 Configurations, 2,100 Episodes)
39
+
40
+ | Generalization (SR / Score) | Precision (SR / Score) | Long-Horizon (SR / Score) | Memory (SR / Score) | Open (SR / Score) | **Avg. (SR / Score)** |
41
+ | :-: | :-: | :-: | :-: | :-: | :-: |
42
+ | 6.50% / 9.12 | **14.75%** / **21.31** | **15.75%** / **25.52** | **9.00%** / **9.97** | 1.00% / 1.14 | **9.40%** / **13.41** |
43
+
44
+ ## Files in this Repository
45
+
46
+ - `model.pt`: Full model weights and embedded codec metadata.
47
+ - `codec_statistics.json`: 14-D bimanual action and state z-score normalization statistics (`ZScoreCodec.from_file("codec_statistics.json")`).
48
+ - `resolved_config.json`: Complete resolved model, data, and evaluation configuration.
49
+
50
+ ## Download and Evaluation Usage
51
+
52
+ ```bash
53
+ hf download OPTML-Group/ResWAM-RoboDojo --local-dir ./checkpoints/ResWAM-RoboDojo
54
+
55
+ python scripts/eval/eval_robodojo.py run \
56
+ --checkpoint ./checkpoints/ResWAM-RoboDojo/model.pt \
57
+ --robodojo-root ./third_party/RoboDojo \
58
+ --output-dir ./outputs/robodojo/eval_p32e10 \
59
+ --gpus 0,1,2,3
60
+ ```
61
+
62
+ ## Citation
63
+
64
+ ```bibtex
65
+ @article{fan2026reswam,
66
+ title={ResWAM: Learning What Changes, Not What Stays, for World-Action Models},
67
+ author={Fan, Chongyu and Liu, Gaowen and Kompella, Ramana Rao and Corso, Jason and Liu, Sijia},
68
+ journal={arXiv preprint},
69
+ year={2026}
70
+ }
71
+ ```
codec_statistics.json ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "action_mean": [
3
+ -0.20078273417564957,
4
+ 0.9277771156992791,
5
+ 0.6894869569948502,
6
+ -0.34068942096479327,
7
+ 0.06591800516017124,
8
+ 0.0040108836233663,
9
+ 0.7710157369596965,
10
+ 0.17332457336160728,
11
+ 0.824045140543182,
12
+ 0.6208197694009031,
13
+ -0.3610974871809101,
14
+ -0.06278889445312434,
15
+ 0.003760568328959391,
16
+ 0.7856019478654002
17
+ ],
18
+ "action_std": [
19
+ 0.34326785074077926,
20
+ 0.8879649160338935,
21
+ 0.7303173442632056,
22
+ 0.6492112921281379,
23
+ 0.29917761429299594,
24
+ 0.5848514585306708,
25
+ 0.3433463967463059,
26
+ 0.3201112242117163,
27
+ 0.873740194767336,
28
+ 0.7136994454719052,
29
+ 0.6030868903736086,
30
+ 0.28390183508311156,
31
+ 0.5373599841791166,
32
+ 0.34085015307207406
33
+ ],
34
+ "decode_clip": false,
35
+ "encode_clamp_sigma": 12.0,
36
+ "gripper_indices": [
37
+ 6,
38
+ 13
39
+ ],
40
+ "gripper_normalization": "2x-1_clip_[-1,1]_on_encode",
41
+ "gripper_semantics": "larger_is_more_open",
42
+ "joint_indices": [
43
+ 0,
44
+ 1,
45
+ 2,
46
+ 3,
47
+ 4,
48
+ 5,
49
+ 7,
50
+ 8,
51
+ 9,
52
+ 10,
53
+ 11,
54
+ 12
55
+ ],
56
+ "joint_normalization": "zscore_mean_std_all_clean_frames",
57
+ "joint_order": [
58
+ "left_waist",
59
+ "left_shoulder",
60
+ "left_elbow",
61
+ "left_forearm_roll",
62
+ "left_wrist_angle",
63
+ "left_wrist_rotate",
64
+ "left_gripper",
65
+ "right_waist",
66
+ "right_shoulder",
67
+ "right_elbow",
68
+ "right_forearm_roll",
69
+ "right_wrist_angle",
70
+ "right_wrist_rotate",
71
+ "right_gripper"
72
+ ],
73
+ "padding": "end-of-episode windows repeat the last frame; supervised",
74
+ "representation": "14-D absolute joint/qpos",
75
+ "state_mean": [
76
+ -0.2007454369032377,
77
+ 0.9275954219370752,
78
+ 0.689380351801755,
79
+ -0.3406735232699966,
80
+ 0.06590374551565717,
81
+ 0.004045320244545627,
82
+ 0.7710789097449021,
83
+ 0.17333555777244486,
84
+ 0.82371858187106,
85
+ 0.6205467270371468,
86
+ -0.36089229757941016,
87
+ -0.06272941580737187,
88
+ 0.003887326806600799,
89
+ 0.7856890844310401
90
+ ],
91
+ "state_std": [
92
+ 0.34326509850088577,
93
+ 0.8879730441085364,
94
+ 0.7303366967941258,
95
+ 0.6491286947162288,
96
+ 0.29916365964187547,
97
+ 0.5848012863963614,
98
+ 0.3433176166011588,
99
+ 0.32006485002946655,
100
+ 0.8736847808883317,
101
+ 0.7135999425614398,
102
+ 0.6029080227405151,
103
+ 0.28383354337037464,
104
+ 0.5370253190766491,
105
+ 0.3407991216853018
106
+ ],
107
+ "version": "reswam-robodojo-absolute-qpos-zscore-joints-affine-grippers-14d-v1"
108
+ }
model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:65491e6950499b7552a44b6516a7b0f4576d79e6e0e7dd4af551aa2df0a4657b
3
+ size 9339832400
resolved_config.json ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "action": {
3
+ "dimension": 14,
4
+ "execute_horizon": 10,
5
+ "horizon": 32,
6
+ "padding": "end_of_episode_clamp_to_last_frame_supervised",
7
+ "representation": "14-D absolute joint/qpos"
8
+ },
9
+ "benchmark": "robodojo",
10
+ "data": {
11
+ "camera_keys": {
12
+ "head": "observation.images.cam_high",
13
+ "left_wrist": "observation.images.cam_left_wrist",
14
+ "right_wrist": "observation.images.cam_right_wrist"
15
+ },
16
+ "camera_order": [
17
+ "head",
18
+ "left_wrist",
19
+ "right_wrist"
20
+ ],
21
+ "codec": {
22
+ "decode_clip": false,
23
+ "encode_clamp_sigma": 12.0,
24
+ "grippers": "2x-1",
25
+ "joints": "zscore_mean_std_all_clean_frames",
26
+ "statistics": "codec_statistics.json",
27
+ "version": "reswam-robodojo-absolute-qpos-zscore-joints-affine-grippers-14d-v1"
28
+ },
29
+ "metadata_frequency_hz": 25,
30
+ "preprocess_to_256": "direct_bicubic_antialias_no_crop",
31
+ "vlm_camera_order": [
32
+ "head",
33
+ "left_wrist",
34
+ "right_wrist"
35
+ ]
36
+ },
37
+ "dataset": {
38
+ "action_dimension": 14,
39
+ "action_representation": "14-D absolute joint/qpos",
40
+ "camera_order": [
41
+ "head",
42
+ "left_wrist",
43
+ "right_wrist"
44
+ ],
45
+ "cleaning_variant": "all-frames",
46
+ "control_hz": 25,
47
+ "episodes": 3500,
48
+ "frames": 1856102,
49
+ "gripper_semantics": "larger_is_more_open",
50
+ "hf_repo": "RoboDojo-Benchmark/RoboDojo",
51
+ "joint_order": [
52
+ "left_joint_0",
53
+ "left_joint_1",
54
+ "left_joint_2",
55
+ "left_joint_3",
56
+ "left_joint_4",
57
+ "left_joint_5",
58
+ "left_joint_6",
59
+ "right_joint_0",
60
+ "right_joint_1",
61
+ "right_joint_2",
62
+ "right_joint_3",
63
+ "right_joint_4",
64
+ "right_joint_5",
65
+ "right_joint_6"
66
+ ],
67
+ "sampler": "uniform_concat_every_clean_frame_end_clamped_supervised",
68
+ "state_dimension": 14,
69
+ "state_representation": "14-D current qpos",
70
+ "tasks": 35
71
+ },
72
+ "evaluation": {
73
+ "action_type": "joint",
74
+ "benchmark": "RoboDojo sim (Isaac Sim 5.1 / Isaac Lab 2.3), official XPolicyLab websocket client",
75
+ "control_hz": 25,
76
+ "env_cfg": "arx_x5",
77
+ "execute_horizon": 10,
78
+ "num_configs": 54,
79
+ "num_tasks": 42,
80
+ "prediction_horizon": 32,
81
+ "seeds": [
82
+ 0
83
+ ],
84
+ "total_episodes": 2100
85
+ },
86
+ "flow": {
87
+ "action_noise": "independent_gaussian",
88
+ "action_scheduler_shift": 1,
89
+ "action_tau": "independent_uniform_shifted",
90
+ "inference_rounds": 10,
91
+ "synchronous_commit": true,
92
+ "world_noise": "independent_gaussian",
93
+ "world_scheduler_shift": 5,
94
+ "world_tau": "independent_uniform_shifted"
95
+ },
96
+ "model": {
97
+ "dino": {
98
+ "architecture": "DINOv3-B/16",
99
+ "combine": "arithmetic_mean",
100
+ "frozen": true,
101
+ "model_id": "facebook/dinov3-vitb16-pretrain-lvd1689m",
102
+ "remove_prefix_tokens": true,
103
+ "selected_blocks": [
104
+ 8,
105
+ 10
106
+ ],
107
+ "spatial_pooling": "2x2",
108
+ "target_token_ln": true,
109
+ "tokens": 64
110
+ },
111
+ "expert": {
112
+ "depth": 12,
113
+ "expert_parameter_count": 493608462,
114
+ "ffn_dim": 4096,
115
+ "heads": 16,
116
+ "hidden_dim": 1024,
117
+ "state_dropout_prob": 0.0,
118
+ "use_state_null_tokens": false
119
+ },
120
+ "rynnbrain": {
121
+ "backbone_parameter_count": 1755487104,
122
+ "repo": "Alibaba-DAMO-Academy/RynnBrain1.1-2B",
123
+ "text_hidden_size": 2048,
124
+ "text_layers": 16,
125
+ "vision_layers": 24
126
+ }
127
+ },
128
+ "optimizer": {
129
+ "betas": [
130
+ 0.9,
131
+ 0.95
132
+ ],
133
+ "clip_grad_norm": 1.0,
134
+ "expert_min_lr": 1e-05,
135
+ "expert_peak_lr": 0.0001,
136
+ "name": "AdamW",
137
+ "precision": "bfloat16",
138
+ "vlm_min_lr": 1e-06,
139
+ "vlm_peak_lr": 1e-05,
140
+ "weight_decay": 1e-08
141
+ },
142
+ "schema_version": "reswam-robodojo-config-v1",
143
+ "training": {
144
+ "fsdp": "FULL_SHARD",
145
+ "global_batch": 256,
146
+ "gradient_accumulation": 2,
147
+ "microbatch": 32,
148
+ "seed": 20260907,
149
+ "world_size": 4
150
+ },
151
+ "world": {
152
+ "camera": "head",
153
+ "loss_weight": 0.1,
154
+ "objective": "endpoint_only_extra_LN_delta",
155
+ "target_offset": 32
156
+ }
157
+ }