geonmin-kim's picture
Upload SO-101 init checkpoint (converted from nvidia/Cosmos3-Edge-Policy-DROID)
ad803c3 verified
|
Raw
History Blame
2.85 kB
---
license: other
license_name: nvidia-open-model-license
base_model: nvidia/Cosmos3-Edge-Policy-DROID
tags:
- lerobot
- cosmos3
- robotics
- so101
---
# Cosmos3-Edge-Policy-SO101-init
`nvidia/Cosmos3-Edge-Policy-DROID` (4B Mixture-of-Transformers world action model,
DROID 8-D joint policy) converted to the **LeRobot `cosmos3` policy format** and
retargeted to the **SO-101** embodiment (5 joints + gripper, absolute joint position).
This is the **un-finetuned initialization checkpoint**: weights are bit-identical to
the NVIDIA release; only the config/normalization contract changed. No weight surgery
is needed because the Cosmos3 action head is a `DomainAwareLinear` over a zero-padded
64-dim action vector with a per-sample raw-dim mask.
Converted with `scripts/convert_cosmos3_edge_policy_to_lerobot.py` from
[nota-github/xpu-lerobot#6](https://github.com/nota-github/xpu-lerobot/pull/6).
## SO-101 retargeting (vs the DROID contract)
| field | DROID | this repo |
|---|---|---|
| `raw_action_dim` | 8 (7 joints + gripper) | **6 (5 joints + gripper)** |
| cameras | wrist + left/right over-shoulder | **wrist + top** (3rd view zero-padded) |
| normalization | β€” | **QUANTILES (q01/q99 β†’ [-1,1])**, stats injected from the training dataset at train time |
| `conditioning_fps` | 15 | **30** |
| `invert_gripper` | true | **false** |
| `chunk_size` / `n_action_steps` | 32 / 32 | 32 / 32 |
| `domain_id` | 8 (`droid_lerobot`) | 8 (reused, adapted by fine-tuning) |
## Usage
Requires the `cosmos3` policy from the PR above and `diffusers` git main (>= 0.40.0.dev0
schema β€” 0.39 silently drops `use_und_k_norm_for_gen`/`qk_norm_for_text`/`hidden_act`
and builds a different architecture), `huggingface_hub>=1.23`, `safetensors>=0.8`.
```bash
lerobot-train \
--policy.path=geonmin-kim/Cosmos3-Edge-Policy-SO101-init \
--dataset.repo_id=<your SO-101 LeRobot dataset> ...
```
Note: `config.json`'s `text_processor_name_or_path` points at the checkpoint
directory; when loading from the Hub on a fresh machine, download the full snapshot
(`snapshot_download`) and pass the local path, or override
`--policy.text_processor_name_or_path=<local snapshot dir>` (the Qwen tokenizer files
`tokenizer.json` / `tokenizer_config.json` / `special_tokens_map.json` /
`chat_template.jinja` ship in this repo).
## Fine-tuned descendants
- Flow matching (4-step): `geonmin-kim/Cosmos3-Edge-SO101-Morig-D6231-step{3000..30000}` β€”
use `guidance_scale=1.0` at inference (no prompt dropout during fine-tuning, CFG hurts).
- Drift 1-step (`num_inference_steps=1`): `geonmin-kim/Cosmos3-Edge-SO101-Drift-D6231-step{5000..100000}` β€”
recommended for deployment (open-loop MAE 5.45 vs 26.96, latency 0.25s vs 0.62s per chunk on B200).
Training data of the descendants: `geonmin-kim/SO101-large-small-cube-11dataset-ratio6231-0729`.