# LaWAM

`lawam` est l'adaptateur LeRobot pour [LaWAM](https://github.com/RLinf/LaWAM), un modèle d'action latent pour le monde destiné aux politiques robotiques prenant en compte la dynamique. Il combine un backbone Qwen3-VL, un modèle d'action/monde latent et une tête d'action par flow-matching, tout en exposant les interfaces standard de politique, d'entraînement et d'évaluation de LeRobot.

Ressources :

| Ressource           | Lien                                                                                                         | Utilisé pour                              |
| ------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
| Page du projet       | [rlinf.github.io/LaWAM](https://rlinf.github.io/LaWAM/)                                                      | Aperçu de la méthode                       |
| Article              | [arXiv:2606.15768](https://arxiv.org/abs/2606.15768)                                                         | Citation et détails de la méthode           |
| Code               | [RLinf/LaWAM](https://github.com/RLinf/LaWAM)                                                                | Code d'entraînement et d'évaluation d'origine |
| Pré-entraînement natif | [lawam-pretrain-lerobot](https://huggingface.co/jialei02/lawam-pretrain-lerobot)                             | Initialisation du fine-tuning de LeRobot    |
| SFT natif de LIBERO  | [lawam-libero-sft-lerobot](https://huggingface.co/jialei02/lawam-libero-sft-lerobot)                         | Évaluation LIBERO                     |
| Points de contrôle source | [lawam-checkpoints](https://huggingface.co/collections/jialei02/lawam-checkpoints)                           | Artefacts de la version originale de LaWAM      |
| Jeu de données LIBERO     | [jialei02/libero_merged_no_noops_20hz](https://huggingface.co/datasets/jialei02/libero_merged_no_noops_20hz) | LIBERO SFT                            |

## Installation

Installer LeRobot avec l'extra LaWAM :

```bash
pip install -e ".[lawam]"
```

Installer les dépendances du benchmark LIBERO et fixer MuJoCo à la version 3.3.2 lors de la reproduction de l'évaluation LIBERO de LaWAM publiée :

```bash
pip install -e ".[lawam,libero]" "mujoco==3.3.2"
```

Les taux de réussite du benchmark LIBERO sont sensibles à la version du simulateur MuJoCo. Les versions plus récentes de MuJoCo peuvent réduire de manière significative les taux de réussite mesurés sur LIBERO, y compris pour les politiques autres que LaWAM. Il s’agit d’un problème de compatibilité de l’environnement d’évaluation et non d’un problème lié à l’adaptateur LaWAM. Utilisez `mujoco==3.3.2` pour reproduire exactement les résultats LIBERO publiés de LaWAM et les résultats de l’article.

Les points de contrôle LaWAM utilisent le format natif `model.safetensors` de LeRobot. L’état complet du LAM, de l’adaptateur VLM et de la tête de flux est restauré via `policy.path` ; les fichiers `.pt` originaux de LaWAM ne sont pas chargés par l’adaptateur. Les architectures LAM et DINOv3 sont représentées directement par `LaWAMConfig` et ne nécessitent pas de téléchargements de points de contrôle séparés.

Conservez `policy.base_vlm` défini sur l’identifiant portable du modèle du Hub. Les paramètres de cache standard de Hugging Face, tels que `HF_HOME`, contrôlent l’emplacement local de stockage des fichiers Qwen sans ajouter de chemins spécifiques à la machine à la configuration de la politique ou du processeur.

## Ajustement fin

Effectuer un fine-tuning à partir de la politique LaWAM pré-entraînée native :

```bash
lerobot-train \
  --policy.path=jialei02/lawam-pretrain-lerobot \
  --dataset.repo_id=jialei02/libero_merged_no_noops_20hz \
  --dataset.image_transforms.enable=false \
  --rename_map='{"observation.images.wrist_image":"observation.images.image2"}' \
  --policy.action_horizon=8 \
  --policy.n_action_steps=8 \
  --policy.clip_normalized_actions=true \
  --policy.pre_snap_gripper_action=true \
  --policy.binarize_gripper_action=true \
  --policy.repo_id=your_org/lawam_sft
```

L'adaptateur utilise les statistiques du jeu de données LeRobot pour la normalisation des actions et des états avant de construire les lots d'entraînement LaWAM. Les actions de pose utilisent une normalisation min-max, tandis que la recette LIBERO fixe explicitement le canal de la pince sur des valeurs binaires `0/1` pour correspondre au contrat d'entraînement natif de LaWAM. Cela mappe à la fois les conventions de jeu de données `-1/+1` et `0/1` vers les mêmes cibles de modèle. Le point de contrôle pré-entraîné conserve ses valeurs de pré-entraînement `action_horizon=24` et `n_action_steps=24` ; la recette SFT LIBERO remplace les deux par `8` tout en conservant `chunk_size=50` comme longueur de séquence Flow rembourrée. L'entraînement utilise le FPS actuel du jeu de données pour l'encodage du temps naturel de LaWAM, et le processeur persiste cette fréquence comme repli pour l'évaluation. `policy.num_video_frames` contrôle la fenêtre de trames d'observation.

Les recettes de pré-entraînement LaWAM et de SFT LIBERO publiées n'utilisent pas d'augmentation d'images aléatoire. Le processeur de politique n'applique que le redimensionnement déterministe et la normalisation ImageNet requis par les squelettes Qwen et LAM. Les transformations d'images au niveau du jeu de données de LeRobot restent disponibles pour des recettes d'entraînement conçues séparément.

Les points de contrôle LaWAM publiés utilisent un espace d’action/état matriciel de 32 dimensions en interne. Conservez `policy.flow_action_dim=32` et `policy.flow_state_dim=32` sauf si vous avez entraîné un point de contrôle avec des dimensions de flux différentes.

## Évaluation

Évaluez le point de contrôle SFT natif de LIBERO à l’aide de l’évaluateur standard :

```bash
lerobot-eval \
  --policy.path=jialei02/lawam-libero-sft-lerobot \
  --env.type=libero \
  --env.task=libero_object \
  --eval.n_episodes=10
```

Le dépôt du Hub contient la configuration de la politique ainsi que les pipelines complets de prétraitement et de post-traitement, y compris les tenseurs de normalisation et le traitement du pince LIBERO.

Pour une exécution reproductible du benchmark LIBERO avec le point de contrôle SFT LIBERO publié, évaluez toutes les suites et les identifiants de tâches dans une seule invocation :

```bash
lerobot-eval \
  --policy.path=jialei02/lawam-libero-sft-lerobot \
  --policy.device=cuda \
  --env.type=libero \
  --env.task=libero_spatial,libero_object,libero_goal,libero_10 \
  --env.task_ids='[0,1,2,3,4,5,6,7,8,9]' \
  --eval.n_episodes=50 \
  --output_dir=outputs/lawam_libero
```

Signalez les taux de réussite sur les 10 tâches de chaque suite. Utilisez au moins 50 épisodes par tâche lors de la publication des chiffres de référence.

Résultats de référence pour le point de contrôle SFT LIBERO publié, avec 50 épisodes par tâche. Ces chiffres ont été obtenus avec MuJoCo 3.3.2. À titre de vérification de l’environnement, la tâche 5 de `libero_spatial` est passée de 18/50 succès avec MuJoCo 3.8.1 à 47/50 succès avec MuJoCo 3.3.2.

| Suite            | Succès | Épisodes | Taux de réussite |
| ---------------- | --------: | -------: | -----------: |
| `libero_spatial` |       492 |      500 |        98.4% |
| `libero_object`  |       498 |      500 |        99.6% |
| `libero_goal`    |       490 |      500 |        98.0% |
| `libero_10`      |       490 |      500 |        98.0% |
| `overall`        |      1970 |     2000 |        98.5% |

## Sélection de la caméra

Les points de contrôle LaWAM stockent explicitement les rôles des caméras principales et de poignet, au lieu d’inférer la sémantique à partir de noms tels que `image2`. Lors de la construction d’une nouvelle politique multi-caméras LaWAM, configurez les deux rôles :

```bash
--policy.primary_image_features='["observation.images.front"]' \
--policy.wrist_image_features='["observation.images.wrist"]'
```

`policy.lam_image_feature` sélectionne la caméra principale dont les images temporelles sont consommées par le modèle d’action latente. Par défaut, il s’agit de la première caméra principale configurée, et cette valeur est écrite explicitement lors de l’enregistrement de la configuration de la politique.

## Champs d'exécution

Champs de politique spécifiques à LaWAM :

| Champ             | Description                                                                |
| ----------------- | -------------------------------------------------------------------------- |
| `base_vlm`        | Identifiant de modèle portable Qwen/Qwen3-VL Hub stocké dans la configuration de politique publiée. |
| `action_horizon`  | Nombre d'actions prédites par bloc, jusqu'à `chunk_size`.                 |
| `flow_action_dim` | Dimension d'action interne avec bourrage utilisée par la tête de flux LaWAM.              |
| `flow_state_dim`  | Dimension d'état interne avec bourrage utilisée par la tête de flux LaWAM.               |
| `embodiment_id`   | ID d'incarnation LaWAM utilisé lorsque le jeu de données LeRobot n'en fournit pas.    |

## Citation

```bibtex
@misc{chen2026lawam,
  title = {LaWAM: Latent World Action Models for Efficient Dynamics-Aware Robot Policies},
  author = {Chen, Jialei and Wang, Kai and Chen, Kang and Chen, Shuaihang and Gao, Feng and Tang, Wenhao and Li, Zhiyuan and Liu, Weilin and Yao, Zhuyu and Li, Boxun and Xu, Yuanbo and Yu, Chao},
  journal = {arXiv preprint arXiv:2606.15768},
  year = {2026},
  archiveprefix = {arXiv},
  primaryclass = {cs.RO},
}
```

