| --- |
| license: apache-2.0 |
| --- |
| |
| # Mem-0 Execution Module β Mn tasks (RMBench / RoboTwin 2.0) |
|
|
| **Per-task Mem-0 execution-module checkpoints** for four RMBench **Mn** tasks: |
| `battery_try`, `blocks_ranking_try`, `cover_blocks`, `press_button`. |
| Each task has its **own** executor β trained only on that task's 50-episode |
| `demo_clean` dataset β and its **own** normalization stats (unlike the |
| [`m1_mix` release](https://huggingface.co/qiuly/Mem-0-m1mix-RMBench), which used one |
| joint checkpoint for all five M1 tasks). |
|
|
| - **Backbone:** Qwen3-VL-2B-Instruct (fine-tuned; weights bundled in each checkpoint) |
| - **Action head:** DiT-B flow-matching policy (16-D action) |
| - **Memory:** MemoryBank (instant + anchor memory fusion across the episode) |
| - **Aux head:** subtask-end classifier |
| - β 2.67 B params per checkpoint; 30,000 training steps per task |
|
|
| ## Results |
|
|
| `task_config = demo_clean`, `instruction_type = unseen`, 100 episodes per task. |
| `action_horizon` is the per-task inference-time setting used for these numbers. |
|
|
| | Task | action_horizon | Success Rate | Reward | |
| |--------------------|:--------------:|:------------:|:------:| |
| | battery_try | 15 | **0.21** | 0.00 | |
| | blocks_ranking_try | 15 | **0.15** | 0.00 | |
| | cover_blocks | 8 | **0.76** | 0.82 | |
| | press_button | 30 | **0.02** | 0.00 | |
| | **Average** | β | **0.285** | β | |
|
|
| Rollout videos (100 per task) and raw score files are under `eval_results/` |
| (see `eval_results/results.md`). |
|
|
| ## Contents |
|
|
| ``` |
| mn_submit/ |
| βββ README.md |
| βββ checkpoints/ |
| β βββ <task>/final_step30000.pt (+ .sha256) # one full ckpt per task, ~15.3 GB each |
| βββ norm_stats/ |
| β βββ <task>/norm_stats.json # per-task min-max state/action stats |
| βββ eval_results/ |
| βββ results.md # scores + per-task action_horizon |
| βββ <task>/ # _result.txt, episode*.mp4 (Γ100) |
| ``` |
|
|
| ## Checkpoints |
|
|
| Each `checkpoints/<task>/final_step30000.pt` is a **single, unsplit** full training |
| checkpoint (~15.3 GB): `model_state_dict` + `optimizer_state_dict` + |
| `scheduler_state_dict`, `global_step` 30000. Verify integrity with the `.sha256` |
| file next to it: |
|
|
| ```bash |
| sha256sum -c final_step30000.pt.sha256 |
| ``` |
|
|
| The `model_state_dict` is self-contained β it already includes the fine-tuned |
| Qwen3-VL-2B backbone weights. Optional inference-only slimming (~15.3 GB β ~6 GB): |
|
|
| ```python |
| import torch |
| ck = torch.load("final_step30000.pt", map_location="cpu", weights_only=False) |
| torch.save({"model_state_dict": ck["model_state_dict"], "global_step": ck["global_step"]}, |
| "final_step30000_inference.pt") |
| ``` |
|
|
| ## Base VLM |
|
|
| Model instantiation requires the official `Qwen/Qwen3-VL-2B-Instruct` directory |
| (architecture + tokenizer/processor; Apache-2.0). Its weights are overwritten by the |
| checkpoint at load time, but the directory must exist locally: |
|
|
| ```bash |
| huggingface-cli download Qwen/Qwen3-VL-2B-Instruct \ |
| --local-dir policy/Mem-0/checkpoints/Qwen3-VL-2B-Instruct |
| ``` |
|
|
| ## Normalization |
|
|
| State and action are min-max normalized to `[-1, 1]` using the per-task stats in |
| `norm_stats/<task>/norm_stats.json`. Always pair a checkpoint with **its own task's** |
| stats at inference; predicted actions are denormalized with the same file. |
|
|
| ## License & attribution |
|
|
| Base VLM **Qwen3-VL-2B-Instruct** is Β© the Qwen team, licensed **Apache-2.0**; the |
| checkpoints embed fine-tuned Qwen weights, so that license applies to the |
| corresponding components. RMBench / RoboTwin and the Mem-0 policy code are governed |
| by their respective upstream licenses. |
|
|