# LeRobot用DM0.5

DM05（DM0.5としてもリリースされています）は、Dexmalによるオープンワールドのロボット制御のためのVision-Language-Actionモデルです。LeRobotアダプターは、OpenDMのモデルパスを維持したまま、標準的なLeRobotのデータセット、プロセッサー、トレーニング、チェックポイント管理、Hubからの読み込み、および評価を使用します。

モデルの詳細については、[DM0.5技術ブログ](https://www.dexmal.com/blog/dm0.5/index_en.html)、[OpenDMリポジトリ](https://github.com/Dexmal/OpenDM)、および[Dexmal/DM05](https://huggingface.co/Dexmal/DM05)のリリースを参照してください。

## インストール

```bash
pip install -e ".[training,dm05]"   # training
pip install -e ".[libero,dm05]"     # LIBERO evaluation on Linux
```

## チェックポイント

`lerobot/dm05_base` を `--policy.path` と併せて使用してください。これは生の OpenDM チェックポイントの自己完結型 LeRobot 変換であり、`DM05Policy.from_pretrained()` をサポートしています。

ベースのconfigは、OpenDMの14次元の状態/アクション契約を記録しています。DM05のコアモデルは最大32次元をサポートしており、新規のファインチューニングでは、ターゲットデータセットから有効な画像、状態、アクションの特徴を解決します。

## データセットの契約

DM05は、以下の条件を満たす標準的なLeRobotデータセットを受け入れます:

- 1つ以上の画像または動画の観測;
- `observation.state`;
- `action`;
- タスクの説明。

カメラの順序を明示する必要がある場合は、`policy.image_keys`を設定してください。RoboTwin、ALOHA、その他のソースは、標準的なLeRobotスキーマへの変換後、DM05専用のリーダーを必要としません。標準的な`observation.state`および`action`キーを維持し、`rename_map`はカメラ名の整合を取るためにのみ使用してください。

## トレーニング

LIBEROレシピはOpenDMに従います:

```bash
lerobot-train \
  --dataset.repo_id=lerobot/libero \
  --rename_map='{"observation.images.image": "observation.images.front", "observation.images.image2": "observation.images.wrist"}' \
  --dataset.video_backend=pyav \
  --policy.path=lerobot/dm05_base \
  --policy.add_state=false \
  --policy.chunk_size=10 \
  --policy.n_action_steps=10 \
  --policy.repo_id=your_repo_id \
  --output_dir=outputs/train/dm05-libero \
  --steps=50000 \
  --batch_size=8 \
  --policy.device=cuda
```

### 主要な学習パラメータ

| パラメータ                     | LIBERO 値                        | 意味                                                              |
| ----------------------------- | ----------------------------------- | -------------------------------------------------------------------- |
| `dataset.repo_id`             | `lerobot/libero`                    | 標準的なLeRobot学習データセット                                    |
| `policy.path`                 | `lerobot/dm05_base`                 | 自己完結型ベースチェックポイント                                       |
| `rename_map`                  | `image`/`image2` を `front`/`wrist` に | evalコマンドと`lerobot/dm05_libero`で使用されるカメラ名      |
| `policy.add_state`            | `false`                             | OpenDMのLIBEROプロンプトと一致しますが、状態トークンは含まれません                  |
| `policy.use_relative_actions` | `false`（チェックポイントのデフォルト）        | 保存されたアクションをそのまま学習します。相対モードは明示的なオプトインです |
| `policy.chunk_size`           | `10`                                | チャンクごとに予測されるアクション数                                |
| `policy.n_action_steps`       | `10`                                | 次のモデル呼び出しの前に実行される回数。最大`chunk_size`     |
| `policy.repo_id`              | `your_repo_id`                      | Hubの保存先。ローカルでのみ実行する場合は`policy.push_to_hub=false`を使用します  |

Environment control modeは、policy actionの表現とは独立して設定されます。Relative modeでは、stateとactionの次元が一致している必要があります。

### カメラ

カメラセットはポリシー設定の一部であり、プロンプトは常にそのカメラのみをレンダリングします。`lerobot/dm05_base` からファインチューニングを行う場合、このモデルではカメラが宣言されていないため、学習データセットのカメラが使用されます。ファインチューニングされたチェックポイントは、独自のカメラ名を保持します。異なる名前のデータセットをこれらにマッピングするには、`--rename_map` を使用します。例えば、`--rename_map='{"observation.images.top": "observation.images.front"}'` のように指定します。

### 正規化統計

Trainingでは、`meta/stats.json`内のデータセットの状態/アクション統計情報を使用します。アクション統計は、Trainingで使用される表現と一致する必要があります。`policy.use_relative_actions=true`の場合、相対アクション変換後に、同じチャンクサイズと除外次元を使用して計算してください。[相対アクションガイド](./action_representations#using-relative-actions-in-lerobot)を参照してください。

## 評価

LIBEROのチェックポイント`lerobot/dm05_libero`は50,000ステップで学習され、各タスク5エピソードでLIBEROの全40タスクについて評価されました:

```bash
MUJOCO_GL=egl lerobot-eval \
  --policy.path=lerobot/dm05_libero \
  --env.type=libero \
  --env.task=libero_spatial,libero_object,libero_goal,libero_10 \
  --env.camera_name_mapping='{"agentview_image":"front","robot0_eye_in_hand_image":"wrist"}' \
  --env.observation_height=256 \
  --env.observation_width=256 \
  --env.control_mode=relative \
  --eval.n_episodes=5 \
  --eval.batch_size=1 \
  --seed=7 \
  --policy.device=cuda
```

| スイート     |           成功事例 |
| --------- | ------------------: |
| 空間   |               49/50 |
| オブジェクト    |               50/50 |
| 目標      |               50/50 |
| LIBERO-10 |               48/50 |
| **合計** | **197/200 (98.5%)** |

これは2,000エピソードのLIBEROベンチマークプロトコルではなく、200エピソードの再現性チェックです。

## チェックポイントのレイアウト

ポリシーの重み、設定、プロセッサの状態を含む完全なチェックポイントディレクトリを使用してください。単体の`model.safetensors`では、学習や推論には不十分です。

## ライセンス

LeRobotの統合はApache-2.0ライセンスです。モデルの重みは、対応するDM05モデルカードに添付されているライセンスに従います。

