File size: 3,748 Bytes
82369e4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ---
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.
|