geonmin-kim commited on
Commit
ad803c3
·
verified ·
1 Parent(s): 9975f62

Upload SO-101 init checkpoint (converted from nvidia/Cosmos3-Edge-Policy-DROID)

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* 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
 
 
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
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: nvidia-open-model-license
4
+ base_model: nvidia/Cosmos3-Edge-Policy-DROID
5
+ tags:
6
+ - lerobot
7
+ - cosmos3
8
+ - robotics
9
+ - so101
10
+ ---
11
+
12
+ # Cosmos3-Edge-Policy-SO101-init
13
+
14
+ `nvidia/Cosmos3-Edge-Policy-DROID` (4B Mixture-of-Transformers world action model,
15
+ DROID 8-D joint policy) converted to the **LeRobot `cosmos3` policy format** and
16
+ retargeted to the **SO-101** embodiment (5 joints + gripper, absolute joint position).
17
+ This is the **un-finetuned initialization checkpoint**: weights are bit-identical to
18
+ the NVIDIA release; only the config/normalization contract changed. No weight surgery
19
+ is needed because the Cosmos3 action head is a `DomainAwareLinear` over a zero-padded
20
+ 64-dim action vector with a per-sample raw-dim mask.
21
+
22
+ Converted with `scripts/convert_cosmos3_edge_policy_to_lerobot.py` from
23
+ [nota-github/xpu-lerobot#6](https://github.com/nota-github/xpu-lerobot/pull/6).
24
+
25
+ ## SO-101 retargeting (vs the DROID contract)
26
+
27
+ | field | DROID | this repo |
28
+ |---|---|---|
29
+ | `raw_action_dim` | 8 (7 joints + gripper) | **6 (5 joints + gripper)** |
30
+ | cameras | wrist + left/right over-shoulder | **wrist + top** (3rd view zero-padded) |
31
+ | normalization | — | **QUANTILES (q01/q99 → [-1,1])**, stats injected from the training dataset at train time |
32
+ | `conditioning_fps` | 15 | **30** |
33
+ | `invert_gripper` | true | **false** |
34
+ | `chunk_size` / `n_action_steps` | 32 / 32 | 32 / 32 |
35
+ | `domain_id` | 8 (`droid_lerobot`) | 8 (reused, adapted by fine-tuning) |
36
+
37
+ ## Usage
38
+
39
+ Requires the `cosmos3` policy from the PR above and `diffusers` git main (>= 0.40.0.dev0
40
+ schema — 0.39 silently drops `use_und_k_norm_for_gen`/`qk_norm_for_text`/`hidden_act`
41
+ and builds a different architecture), `huggingface_hub>=1.23`, `safetensors>=0.8`.
42
+
43
+ ```bash
44
+ lerobot-train \
45
+ --policy.path=geonmin-kim/Cosmos3-Edge-Policy-SO101-init \
46
+ --dataset.repo_id=<your SO-101 LeRobot dataset> ...
47
+ ```
48
+
49
+ Note: `config.json`'s `text_processor_name_or_path` points at the checkpoint
50
+ directory; when loading from the Hub on a fresh machine, download the full snapshot
51
+ (`snapshot_download`) and pass the local path, or override
52
+ `--policy.text_processor_name_or_path=<local snapshot dir>` (the Qwen tokenizer files
53
+ `tokenizer.json` / `tokenizer_config.json` / `special_tokens_map.json` /
54
+ `chat_template.jinja` ship in this repo).
55
+
56
+ ## Fine-tuned descendants
57
+
58
+ - Flow matching (4-step): `geonmin-kim/Cosmos3-Edge-SO101-Morig-D6231-step{3000..30000}` —
59
+ use `guidance_scale=1.0` at inference (no prompt dropout during fine-tuning, CFG hurts).
60
+ - Drift 1-step (`num_inference_steps=1`): `geonmin-kim/Cosmos3-Edge-SO101-Drift-D6231-step{5000..100000}` —
61
+ recommended for deployment (open-loop MAE 5.45 vs 26.96, latency 0.25s vs 0.62s per chunk on B200).
62
+
63
+ Training data of the descendants: `geonmin-kim/SO101-large-small-cube-11dataset-ratio6231-0729`.
chat_template.jinja ADDED
@@ -0,0 +1,324 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ {% macro render_extra_keys(json_dict, handled_keys) %}
3
+ {%- if json_dict is mapping %}
4
+ {%- for json_key in json_dict if json_key not in handled_keys %}
5
+ {%- if json_dict[json_key] is mapping or (json_dict[json_key] is sequence and json_dict[json_key] is not string) %}
6
+ {{- '
7
+ <' ~ json_key ~ '>' ~ (json_dict[json_key] | tojson | safe) ~ '</' ~ json_key ~ '>' }}
8
+ {%- else %}
9
+ {{-'
10
+ <' ~ json_key ~ '>' ~ (json_dict[json_key] | string) ~ '</' ~ json_key ~ '>' }}
11
+ {%- endif %}
12
+ {%- endfor %}
13
+ {%- endif %}
14
+ {% endmacro %}
15
+ {%- set enable_thinking = enable_thinking if enable_thinking is defined else True %}
16
+ {%- set truncate_history_thinking = truncate_history_thinking if truncate_history_thinking is defined else True %}
17
+
18
+ {%- set ns = namespace(last_user_idx = -1) %}
19
+ {%- set loop_messages = messages %}
20
+ {%- for m in loop_messages %}
21
+ {%- if m["role"] == "user" %}
22
+ {%- set ns.last_user_idx = loop.index0 %}
23
+ {%- endif %}
24
+ {%- endfor %}
25
+
26
+ {%- if messages[0]["role"] == "system" %}
27
+ {%- if messages[0]["content"] is string %}
28
+ {%- set system_message = messages[0]["content"] %}
29
+ {%- else %}
30
+ {%- set ns = namespace(system_text="") %}
31
+ {%- for part in messages[0]["content"] %}
32
+ {%- if 'text' in part %}
33
+ {%- set ns.system_text = ns.system_text + part.text %}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- set system_message = ns.system_text %}
37
+ {%- endif %}
38
+
39
+ {%- set loop_messages = messages[1:] %}
40
+ {%- else %}
41
+ {%- set system_message = "" %}
42
+ {%- set loop_messages = messages %}
43
+ {%- endif %}
44
+ {%- if not tools is defined %}
45
+ {%- set tools = [] %}
46
+ {%- endif %}
47
+ {# Recompute last_user_idx relative to loop_messages after handling system #}
48
+ {%- set ns = namespace(last_user_idx = -1) %}
49
+ {%- for m in loop_messages %}
50
+ {%- if m["role"] == "user" %}
51
+ {%- set ns.last_user_idx = loop.index0 %}
52
+ {%- endif %}
53
+ {%- endfor %}
54
+ {%- if system_message is defined %}
55
+ {{- "<|im_start|>system
56
+ " + system_message }}
57
+ {%- else %}
58
+ {%- if tools is iterable and tools | length > 0 %}
59
+ {{- "<|im_start|>system
60
+ " }}
61
+ {%- endif %}
62
+ {%- endif %}
63
+ {%- if tools is iterable and tools | length > 0 %}
64
+ {%- if system_message is defined and system_message | length > 0 %}
65
+ {{- "
66
+
67
+ " }}
68
+ {%- endif %}
69
+ {{- "# Tools
70
+
71
+ You have access to the following functions:
72
+
73
+ " }}
74
+ {{- "<tools>" }}
75
+ {%- for tool in tools %}
76
+ {%- if tool.function is defined %}
77
+ {%- set tool = tool.function %}
78
+ {%- endif %}
79
+ {{- "
80
+ <function>
81
+ <name>" ~ tool.name ~ "</name>" }}
82
+ {%- if tool.description is defined %}
83
+ {{- '
84
+ <description>' ~ (tool.description | trim) ~ '</description>' }}
85
+ {%- endif %}
86
+ {{- '
87
+ <parameters>' }}
88
+ {%- if tool.parameters is defined and tool.parameters is mapping and tool.parameters.properties is defined and tool.parameters.properties is mapping %}
89
+ {%- for param_name, param_fields in tool.parameters.properties|items %}
90
+ {{- '
91
+ <parameter>' }}
92
+ {{- '
93
+ <name>' ~ param_name ~ '</name>' }}
94
+ {%- if param_fields.type is defined %}
95
+ {{- '
96
+ <type>' ~ (param_fields.type | string) ~ '</type>' }}
97
+ {%- endif %}
98
+ {%- if param_fields.description is defined %}
99
+ {{- '
100
+ <description>' ~ (param_fields.description | trim) ~ '</description>' }}
101
+ {%- endif %}
102
+ {%- if param_fields.enum is defined %}
103
+ {{- '
104
+ <enum>' ~ (param_fields.enum | tojson | safe) ~ '</enum>' }}
105
+ {%- endif %}
106
+ {%- set handled_keys = ['name', 'type', 'description', 'enum'] %}
107
+ {{- render_extra_keys(param_fields, handled_keys) }}
108
+ {{- '
109
+ </parameter>' }}
110
+ {%- endfor %}
111
+ {%- endif %}
112
+ {% set handled_keys = ['type', 'properties', 'required'] %}
113
+ {{- render_extra_keys(tool.parameters, handled_keys) }}
114
+ {%- if tool.parameters is defined and tool.parameters.required is defined %}
115
+ {{- '
116
+ <required>' ~ (tool.parameters.required | tojson | safe) ~ '</required>' }}
117
+ {%- endif %}
118
+ {{- '
119
+ </parameters>' }}
120
+ {%- set handled_keys = ['type', 'name', 'description', 'parameters'] %}
121
+ {{- render_extra_keys(tool, handled_keys) }}
122
+ {{- '
123
+ </function>' }}
124
+ {%- endfor %}
125
+ {{- "
126
+ </tools>" }}
127
+
128
+ {{- '
129
+
130
+ If you choose to call a function ONLY reply in the following format with NO suffix:
131
+
132
+ <tool_call>
133
+ <function=example_function_name>
134
+ <parameter=example_parameter_1>
135
+ value_1
136
+ </parameter>
137
+ <parameter=example_parameter_2>
138
+ This is the value for the second parameter
139
+ that can span
140
+ multiple lines
141
+ </parameter>
142
+ </function>
143
+ </tool_call>
144
+
145
+ <IMPORTANT>
146
+ Reminder:
147
+ - Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags
148
+ - Required parameters MUST be specified
149
+ - You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after
150
+ - If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls
151
+ </IMPORTANT>' }}
152
+ {%- endif %}
153
+
154
+
155
+ {%- if system_message is defined %}
156
+ {{- '<|im_end|>
157
+ ' }}
158
+ {%- else %}
159
+ {%- if tools is iterable and tools | length > 0 %}
160
+ {{- '<|im_end|>
161
+ ' }}
162
+ {%- endif %}
163
+ {%- endif %}
164
+
165
+ {%- set image_count = namespace(value=0) %}
166
+ {%- set video_count = namespace(value=0) %}
167
+ {%- for message in loop_messages %}
168
+ {%- if message.role == "assistant" %}
169
+ {# Add reasoning content in to content field for unified processing below. #}
170
+ {%- set text_content = namespace(text_content="") -%}
171
+ {%- if message.content is string %}
172
+ {%- set text_content.text_content = message.content %}
173
+ {%- else %}
174
+ {%- for content in message.content %}
175
+ {%- if 'text' in content %}
176
+ {%- set text_content.text_content = content.text %}
177
+ {%- break %}
178
+ {%- endif %}
179
+ {%- endfor %}
180
+ {%- endif %}
181
+ {%- if message.reasoning_content is defined and message.reasoning_content is string and message.reasoning_content | trim | length > 0 %}
182
+ {%- set content = "<think>
183
+ " ~ message.reasoning_content ~ "
184
+ </think>
185
+ " ~ (text_content.text_content | default('', true)) %}
186
+ {%- else %}
187
+ {%- set content = text_content.text_content | default('', true) %}
188
+ {# Allow downstream logic to to take care of broken thought, only handle coherent reasoning here. #}
189
+ {%- if '<think>' not in content and '</think>' not in content %}
190
+ {%- set content = "<think></think>" ~ content %}
191
+ {%- else %}
192
+ {%- set content = content %}
193
+ {%- endif -%}
194
+ {%- endif %}
195
+ {%- if message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 %}
196
+ {# Assistant message has tool calls. #}
197
+ {{- '<|im_start|>assistant
198
+ ' }}
199
+ {%- set include_content = not (truncate_history_thinking and loop.index0 < ns.last_user_idx) %}
200
+ {%- if content is string and content | trim | length > 0 %}
201
+ {%- if include_content %}
202
+ {{- (content | trim) ~ '
203
+ ' -}}
204
+ {%- else %}
205
+ {%- set c = (content | string) %}
206
+ {%- if '</think>' in c %}
207
+ {# Keep only content after the last closing think. Also generation prompt causes this. #}
208
+ {%- set c = c.split('</think>')[-1] %}
209
+ {%- elif '<think>' in c %}
210
+ {# If <think> was opened but never closed, drop the trailing think segment #}
211
+ {%- set c = c.split('<think>')[0] %}
212
+ {%- endif %}
213
+ {%- set c = "<think></think>" ~ c | trim %}
214
+ {%- if c | length > 0 %}
215
+ {{- c ~ '
216
+ ' -}}
217
+ {%- endif %}
218
+ {%- endif %}
219
+ {%- else %}
220
+ {{- "<think></think>" -}}
221
+ {%- endif %}
222
+ {%- for tool_call in message.tool_calls %}
223
+ {%- if tool_call.function is defined %}
224
+ {%- set tool_call = tool_call.function %}
225
+ {%- endif %}
226
+ {{- '<tool_call>
227
+ <function=' ~ tool_call.name ~ '>
228
+ ' -}}
229
+ {%- if tool_call.arguments is defined %}
230
+ {%- for args_name, args_value in tool_call.arguments|items %}
231
+ {{- '<parameter=' ~ args_name ~ '>
232
+ ' -}}
233
+ {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
234
+ {{- args_value ~ '
235
+ </parameter>
236
+ ' -}}
237
+ {%- endfor %}
238
+ {%- endif %}
239
+ {{- '</function>
240
+ </tool_call>
241
+ ' -}}
242
+ {%- endfor %}
243
+ {{- '<|im_end|>
244
+ ' }}
245
+ {%- else %}
246
+ {# Assistant message doesn't have tool calls. #}
247
+ {%- if not (truncate_history_thinking and loop.index0 < ns.last_user_idx) %}
248
+ {{- '<|im_start|>assistant
249
+ ' ~ (content | default('', true) | string | trim) ~ '<|im_end|>
250
+ ' }}
251
+ {%- else %}
252
+ {%- set c = (content | default('', true) | string) %}
253
+ {%- if '<think>' in c and '</think>' in c %}
254
+ {%- set c = "<think></think>" ~ c.split('</think>')[-1] %}
255
+ {%- endif %}
256
+ {%- set c = c | trim %}
257
+ {%- if c | length > 0 %}
258
+ {{- '<|im_start|>assistant
259
+ ' ~ c ~ '<|im_end|>
260
+ ' }}
261
+ {%- else %}
262
+ {{- '<|im_start|>assistant
263
+ <|im_end|>
264
+ ' }}
265
+ {%- endif %}
266
+ {%- endif %}
267
+ {%- endif %}
268
+ {%- elif message.role == "user" or message.role == "system" %}
269
+ {{- '<|im_start|>' + message.role + '
270
+ ' }}
271
+ {%- if message.content is string %}
272
+ {{- message.content }}
273
+ {%- else %}
274
+ {%- for content in message.content %}
275
+ {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}
276
+ {%- set image_count.value = image_count.value + 1 %}
277
+ {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}
278
+ <|vision_start|><|image_pad|><|vision_end|>
279
+ {%- elif content.type == 'video' or 'video' in content %}
280
+ {%- set video_count.value = video_count.value + 1 %}
281
+ {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}
282
+ <|vision_start|><|video_pad|><|vision_end|>
283
+ {%- elif 'text' in content %}
284
+ {{- content.text }}
285
+ {%- endif %}
286
+ {%- endfor %}
287
+ {%- endif %}
288
+ {{- '<|im_end|>
289
+ ' }}
290
+ {%- elif message.role == "tool" %}
291
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
292
+ {{- '<|im_start|>user
293
+ ' }}
294
+ {%- endif %}
295
+ {{- '<tool_response>
296
+ ' }}
297
+ {{- message.content }}
298
+ {{- '
299
+ </tool_response>
300
+ ' }}
301
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
302
+ {{- '<|im_end|>
303
+ ' }}
304
+ {%- elif loop.last %}
305
+ {{- '<|im_end|>
306
+ ' }}
307
+ {%- endif %}
308
+ {%- else %}
309
+ {{- '<|im_start|>' + message.role + '
310
+ ' + message.content + '<|im_end|>
311
+ ' }}
312
+ {%- endif %}
313
+ {%- endfor %}
314
+
315
+ {%- if add_generation_prompt %}
316
+ {%- if enable_thinking %}
317
+ {{- '<|im_start|>assistant
318
+ <think>
319
+ ' }}
320
+ {%- else %}
321
+ {{- '<|im_start|>assistant
322
+ <think></think>' }}
323
+ {%- endif %}
324
+ {%- endif %}
config.json ADDED
@@ -0,0 +1,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "cosmos3",
3
+ "n_obs_steps": 1,
4
+ "input_features": {
5
+ "observation.images.wrist": {
6
+ "type": "VISUAL",
7
+ "shape": [
8
+ 3,
9
+ 360,
10
+ 640
11
+ ]
12
+ },
13
+ "observation.images.top": {
14
+ "type": "VISUAL",
15
+ "shape": [
16
+ 3,
17
+ 360,
18
+ 640
19
+ ]
20
+ },
21
+ "observation.state": {
22
+ "type": "STATE",
23
+ "shape": [
24
+ 6
25
+ ]
26
+ }
27
+ },
28
+ "output_features": {
29
+ "action": {
30
+ "type": "ACTION",
31
+ "shape": [
32
+ 6
33
+ ]
34
+ }
35
+ },
36
+ "device": "cpu",
37
+ "use_amp": false,
38
+ "use_peft": false,
39
+ "push_to_hub": true,
40
+ "repo_id": null,
41
+ "private": null,
42
+ "tags": null,
43
+ "license": null,
44
+ "pretrained_path": null,
45
+ "pretrained_revision": null,
46
+ "text_processor_name_or_path": "/NHNHOME/WORKSPACE/26-AD010033_A/gmkim/xpu-lerobot/checkpoints/Cosmos3-Edge-Policy-SO101-init",
47
+ "transformer_config": {
48
+ "action_dim": 64,
49
+ "action_gen": true,
50
+ "attention_bias": false,
51
+ "attention_dropout": 0.0,
52
+ "base_fps": 24,
53
+ "enable_fps_modulation": true,
54
+ "head_dim": 128,
55
+ "hidden_act": "relu2",
56
+ "hidden_size": 2048,
57
+ "intermediate_size": 9216,
58
+ "latent_channel": 48,
59
+ "latent_patch_size": 2,
60
+ "num_attention_heads": 16,
61
+ "num_embodiment_domains": 32,
62
+ "num_hidden_layers": 28,
63
+ "num_key_value_heads": 8,
64
+ "patch_latent_dim": 192,
65
+ "qk_norm_for_text": false,
66
+ "rms_norm_eps": 1e-05,
67
+ "rope_axes_dim": [
68
+ 24,
69
+ 20,
70
+ 20
71
+ ],
72
+ "rope_scaling": {
73
+ "mrope_section": [
74
+ 24,
75
+ 20,
76
+ 20
77
+ ]
78
+ },
79
+ "rope_theta": 100000000.0,
80
+ "sound_dim": null,
81
+ "sound_gen": false,
82
+ "sound_latent_fps": 25.0,
83
+ "timestep_scale": 0.001,
84
+ "unified_3d_mrope_reset_spatial_ids": true,
85
+ "unified_3d_mrope_temporal_modality_margin": 15000,
86
+ "use_und_k_norm_for_gen": true,
87
+ "vocab_size": 131072
88
+ },
89
+ "vae_config": {
90
+ "attn_scales": [],
91
+ "base_dim": 160,
92
+ "decoder_base_dim": 256,
93
+ "dim_mult": [
94
+ 1,
95
+ 2,
96
+ 4,
97
+ 4
98
+ ],
99
+ "dropout": 0.0,
100
+ "in_channels": 12,
101
+ "is_residual": true,
102
+ "latents_mean": [
103
+ -0.2289,
104
+ -0.0052,
105
+ -0.1323,
106
+ -0.2339,
107
+ -0.2799,
108
+ 0.0174,
109
+ 0.1838,
110
+ 0.1557,
111
+ -0.1382,
112
+ 0.0542,
113
+ 0.2813,
114
+ 0.0891,
115
+ 0.157,
116
+ -0.0098,
117
+ 0.0375,
118
+ -0.1825,
119
+ -0.2246,
120
+ -0.1207,
121
+ -0.0698,
122
+ 0.5109,
123
+ 0.2665,
124
+ -0.2108,
125
+ -0.2158,
126
+ 0.2502,
127
+ -0.2055,
128
+ -0.0322,
129
+ 0.1109,
130
+ 0.1567,
131
+ -0.0729,
132
+ 0.0899,
133
+ -0.2799,
134
+ -0.123,
135
+ -0.0313,
136
+ -0.1649,
137
+ 0.0117,
138
+ 0.0723,
139
+ -0.2839,
140
+ -0.2083,
141
+ -0.052,
142
+ 0.3748,
143
+ 0.0152,
144
+ 0.1957,
145
+ 0.1433,
146
+ -0.2944,
147
+ 0.3573,
148
+ -0.0548,
149
+ -0.1681,
150
+ -0.0667
151
+ ],
152
+ "latents_std": [
153
+ 0.4765,
154
+ 1.0364,
155
+ 0.4514,
156
+ 1.1677,
157
+ 0.5313,
158
+ 0.499,
159
+ 0.4818,
160
+ 0.5013,
161
+ 0.8158,
162
+ 1.0344,
163
+ 0.5894,
164
+ 1.0901,
165
+ 0.6885,
166
+ 0.6165,
167
+ 0.8454,
168
+ 0.4978,
169
+ 0.5759,
170
+ 0.3523,
171
+ 0.7135,
172
+ 0.6804,
173
+ 0.5833,
174
+ 1.4146,
175
+ 0.8986,
176
+ 0.5659,
177
+ 0.7069,
178
+ 0.5338,
179
+ 0.4889,
180
+ 0.4917,
181
+ 0.4069,
182
+ 0.4999,
183
+ 0.6866,
184
+ 0.4093,
185
+ 0.5709,
186
+ 0.6065,
187
+ 0.6415,
188
+ 0.4944,
189
+ 0.5726,
190
+ 1.2042,
191
+ 0.5458,
192
+ 1.6887,
193
+ 0.3971,
194
+ 1.06,
195
+ 0.3943,
196
+ 0.5537,
197
+ 0.5444,
198
+ 0.4089,
199
+ 0.7468,
200
+ 0.7744
201
+ ],
202
+ "num_res_blocks": 2,
203
+ "out_channels": 12,
204
+ "patch_size": 2,
205
+ "scale_factor_spatial": 16,
206
+ "scale_factor_temporal": 4,
207
+ "temperal_downsample": [
208
+ false,
209
+ true,
210
+ true
211
+ ],
212
+ "z_dim": 48
213
+ },
214
+ "scheduler_config": {
215
+ "_class_name": "UniPCMultistepScheduler",
216
+ "_diffusers_version": "0.40.0.dev0",
217
+ "beta_end": 0.02,
218
+ "beta_schedule": "linear",
219
+ "beta_start": 0.0001,
220
+ "disable_corrector": [],
221
+ "dynamic_thresholding_ratio": 0.995,
222
+ "final_sigmas_type": "zero",
223
+ "flow_shift": 5.0,
224
+ "lower_order_final": true,
225
+ "num_train_timesteps": 1000,
226
+ "predict_x0": true,
227
+ "prediction_type": "flow_prediction",
228
+ "rescale_betas_zero_snr": false,
229
+ "sample_max_value": 1.0,
230
+ "shift_terminal": null,
231
+ "sigma_max": null,
232
+ "sigma_min": null,
233
+ "solver_order": 2,
234
+ "solver_p": null,
235
+ "solver_type": "bh2",
236
+ "steps_offset": 0,
237
+ "thresholding": false,
238
+ "time_shift_type": "exponential",
239
+ "timestep_spacing": "linspace",
240
+ "trained_betas": null,
241
+ "use_beta_sigmas": false,
242
+ "use_dynamic_shifting": false,
243
+ "use_exponential_sigmas": false,
244
+ "use_flow_sigmas": true,
245
+ "use_karras_sigmas": false
246
+ },
247
+ "freeze_vae": true,
248
+ "dtype": "bfloat16",
249
+ "local_files_only": true,
250
+ "chunk_size": 32,
251
+ "n_action_steps": 32,
252
+ "raw_action_dim": 6,
253
+ "max_action_dim": 64,
254
+ "max_state_dim": 6,
255
+ "joint_position_dim": 5,
256
+ "gripper_position_dim": 1,
257
+ "use_state": true,
258
+ "history_length": 1,
259
+ "action_space": "joint_pos",
260
+ "invert_gripper": false,
261
+ "domain_name": "droid_lerobot",
262
+ "domain_id": 8,
263
+ "eos_token_id": 11,
264
+ "start_of_generation_token_id": 20,
265
+ "mode": "policy",
266
+ "viewpoint": "concat_view",
267
+ "additional_view_description": "The top row is from the wrist-mounted camera. The bottom row contains a third-person top-down view of the scene with the robot visible, and a blank padded view.",
268
+ "conditioning_fps": 30.0,
269
+ "resolution_tier": 480,
270
+ "guidance_scale": 3.0,
271
+ "num_inference_steps": 4,
272
+ "shift": 5.0,
273
+ "seed": 0,
274
+ "deterministic_seed": false,
275
+ "generate_video": false,
276
+ "output_type": "latent",
277
+ "train_time_video_distribution": "waver",
278
+ "video_loss_weight": 10.0,
279
+ "action_loss_weight": 10.0,
280
+ "normalize_loss_by_active": false,
281
+ "image_keys": [
282
+ "observation.images.wrist",
283
+ "observation.images.top"
284
+ ],
285
+ "num_views": 3,
286
+ "image_height": 360,
287
+ "image_width": 640,
288
+ "composed_image_height": 540,
289
+ "composed_image_width": 640,
290
+ "prompt_key": "task",
291
+ "normalization_mapping": {
292
+ "VISUAL": "IDENTITY",
293
+ "STATE": "QUANTILES",
294
+ "ACTION": "QUANTILES"
295
+ },
296
+ "optimizer_lr": 1e-05,
297
+ "optimizer_betas": [
298
+ 0.9,
299
+ 0.95
300
+ ],
301
+ "optimizer_eps": 1e-08,
302
+ "optimizer_weight_decay": 0.01,
303
+ "optimizer_grad_clip_norm": 1.0,
304
+ "scheduler_warmup_steps": 1000,
305
+ "scheduler_decay_steps": 30000,
306
+ "scheduler_decay_lr": 0.0
307
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:232d45077024cc6a256252d8a0d5f7609c8c9897ffb8a87f914bda3b81f335dc
3
+ size 8158233656
policy_postprocessor.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "policy_postprocessor",
3
+ "steps": [
4
+ {
5
+ "registry_name": "unnormalizer_processor",
6
+ "config": {
7
+ "eps": 1e-08,
8
+ "features": {
9
+ "action": {
10
+ "type": "ACTION",
11
+ "shape": [
12
+ 6
13
+ ]
14
+ }
15
+ },
16
+ "norm_map": {
17
+ "VISUAL": "IDENTITY",
18
+ "STATE": "QUANTILES",
19
+ "ACTION": "QUANTILES"
20
+ }
21
+ }
22
+ },
23
+ {
24
+ "registry_name": "device_processor",
25
+ "config": {
26
+ "device": "cpu",
27
+ "float_dtype": null
28
+ }
29
+ }
30
+ ]
31
+ }
policy_preprocessor.json ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "policy_preprocessor",
3
+ "steps": [
4
+ {
5
+ "registry_name": "rename_observations_processor",
6
+ "config": {
7
+ "rename_map": {}
8
+ }
9
+ },
10
+ {
11
+ "registry_name": "to_batch_processor",
12
+ "config": {}
13
+ },
14
+ {
15
+ "registry_name": "normalizer_processor",
16
+ "config": {
17
+ "eps": 1e-08,
18
+ "features": {
19
+ "observation.images.wrist": {
20
+ "type": "VISUAL",
21
+ "shape": [
22
+ 3,
23
+ 360,
24
+ 640
25
+ ]
26
+ },
27
+ "observation.images.top": {
28
+ "type": "VISUAL",
29
+ "shape": [
30
+ 3,
31
+ 360,
32
+ 640
33
+ ]
34
+ },
35
+ "observation.state": {
36
+ "type": "STATE",
37
+ "shape": [
38
+ 6
39
+ ]
40
+ },
41
+ "action": {
42
+ "type": "ACTION",
43
+ "shape": [
44
+ 6
45
+ ]
46
+ }
47
+ },
48
+ "norm_map": {
49
+ "VISUAL": "IDENTITY",
50
+ "STATE": "QUANTILES",
51
+ "ACTION": "QUANTILES"
52
+ }
53
+ }
54
+ },
55
+ {
56
+ "registry_name": "cosmos3_pack_inputs",
57
+ "config": {
58
+ "image_keys": [
59
+ "observation.images.wrist",
60
+ "observation.images.top"
61
+ ],
62
+ "num_views": 3,
63
+ "image_height": 360,
64
+ "chunk_size": 32,
65
+ "raw_action_dim": 6,
66
+ "max_action_dim": 64,
67
+ "max_state_dim": 6,
68
+ "use_state": true,
69
+ "history_length": 1,
70
+ "invert_gripper": false,
71
+ "domain_id": 8,
72
+ "conditioning_fps": 30.0,
73
+ "resolution_tier": 480,
74
+ "viewpoint": "concat_view",
75
+ "additional_view_description": "The top row is from the wrist-mounted camera. The bottom row contains a third-person top-down view of the scene with the robot visible, and a blank padded view.",
76
+ "prompt_key": "task",
77
+ "composed_image_height": 540,
78
+ "composed_image_width": 640
79
+ }
80
+ },
81
+ {
82
+ "registry_name": "cosmos3_qwen_prompt_tokenizer",
83
+ "config": {
84
+ "processor_name": "/NHNHOME/WORKSPACE/26-AD010033_A/gmkim/xpu-lerobot/checkpoints/Cosmos3-Edge-Policy-SO101-init",
85
+ "local_files_only": true
86
+ }
87
+ },
88
+ {
89
+ "registry_name": "device_processor",
90
+ "config": {
91
+ "device": "cpu",
92
+ "float_dtype": null
93
+ }
94
+ }
95
+ ]
96
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "<s>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "eos_token": {
10
+ "content": "<|im_end|>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "<|im_end|>",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "unk_token": {
24
+ "content": "<unk>",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ }
30
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4dc692a99dca6d92a44e9529ffb53541eb79bb260eec7281bc51268c05d7311c
3
+ size 17077500
tokenizer_config.json ADDED
The diff for this file is too large to render. See raw diff