# DM0.5 cho LeRobot

DM05, còn được phát hành dưới tên DM0.5, là mô hình Vision-Language-Action của Dexmal dành cho điều khiển robot trong môi trường mở. Bộ thích ứng LeRobot giữ nguyên đường dẫn mô hình OpenDM trong khi sử dụng các bộ dữ liệu, bộ xử lý, quy trình huấn luyện, lưu checkpoint, tải từ Hub và đánh giá chuẩn của LeRobot.

Để biết chi tiết về mô hình, hãy xem [bài viết kỹ thuật DM0.5](https://www.dexmal.com/blog/dm0.5/index_en.html), [kho OpenDM](https://github.com/Dexmal/OpenDM) và bản phát hành [Dexmal/DM05](https://huggingface.co/Dexmal/DM05) gốc.

## Cài đặt

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

## Checkpoint

Sử dụng `lerobot/dm05_base` với `--policy.path`. Đây là bản chuyển đổi LeRobot tự chứa của checkpoint OpenDM thô và hỗ trợ `DM05Policy.from_pretrained()`.

Cấu hình cơ bản ghi lại hợp đồng trạng thái/hành động 14 chiều của OpenDM. Mô hình lõi của DM05 hỗ trợ tối đa 32 chiều; việc tinh chỉnh mới sẽ xác định các đặc trưng hình ảnh, trạng thái và hành động hiệu dụng từ bộ dữ liệu đích.

## Hợp đồng dữ liệu

DM05 chấp nhận các bộ dữ liệu LeRobot tiêu chuẩn với:

- một hoặc nhiều quan sát hình ảnh hoặc video;
- `observation.state`;
- `action`;
- mô tả tác vụ.

Đặt `policy.image_keys` khi thứ tự camera phải được chỉ định rõ ràng. RoboTwin, ALOHA và các nguồn khác không cần trình đọc riêng cho DM05 sau khi chuyển đổi sang schema LeRobot chuẩn. Giữ nguyên các khóa chuẩn `observation.state` và `action`; chỉ dùng `rename_map` để đồng bộ tên camera.

## Huấn luyện

Công thức LIBERO tuân theo 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
```

### Các tham số huấn luyện chính

| Tham số                     | Giá trị LIBERO                        | Ý nghĩa                                                              |
| ----------------------------- | ----------------------------------- | -------------------------------------------------------------------- |
| `dataset.repo_id`             | `lerobot/libero`                    | Bộ dữ liệu huấn luyện LeRobot tiêu chuẩn                                    |
| `policy.path`                 | `lerobot/dm05_base`                 | Điểm kiểm tra cơ bản tự chứa                                       |
| `rename_map`                  | `image`/`image2` thành `front`/`wrist` | Tên camera được sử dụng bởi lệnh eval và `lerobot/dm05_libero`      |
| `policy.add_state`            | `false`                             | Khớp với prompt LIBERO của OpenDM không có token trạng thái                  |
| `policy.use_relative_actions` | `false` (mặc định của checkpoint)        | Học các hành động đã lưu giữ nguyên; chế độ tương đối là tùy chọn bật rõ ràng |
| `policy.chunk_size`           | `10`                                | Số lượng hành động được dự đoán cho mỗi khối                                |
| `policy.n_action_steps`       | `10`                                | Số lượng được thực hiện trước lần gọi mô hình tiếp theo; tối đa `chunk_size`     |
| `policy.repo_id`              | `your_repo_id`                      | Điểm đến trên Hub; sử dụng `policy.push_to_hub=false` cho các lần chạy chỉ trên máy cục bộ  |

Chế độ kiểm soát môi trường được cấu hình riêng biệt so với biểu diễn hành động của chính sách. Chế độ tương đối yêu cầu các chiều trạng thái/hành động phải khớp nhau.

### Camera

Bộ camera là một phần của cấu hình chính sách, và prompt luôn render chính xác những camera đó. Fine-tuning từ `lerobot/dm05_base`, vốn không khai báo camera nào, sẽ lấy các camera từ tập dữ liệu huấn luyện. Một checkpoint đã fine-tune giữ nguyên tên camera của nó: ánh xạ một tập dữ liệu có tên khác lên chúng bằng `--rename_map`, ví dụ `--rename_map='{"observation.images.top": "observation.images.front"}'`.

### Thống kê chuẩn hóa

Training sử dụng thống kê state/action của dataset trong `meta/stats.json`. Thống kê action phải khớp với biểu diễn được dùng cho training. Với `policy.use_relative_actions=true`, hãy tính chúng sau phép biến đổi relative-action, sử dụng cùng chunk size và các chiều bị loại trừ. Xem [hướng dẫn relative-action](./action_representations#using-relative-actions-in-lerobot).

## Đánh giá

Checkpoint LIBERO `lerobot/dm05_libero` được huấn luyện trong 50.000 bước và được đánh giá trên cả 40 tác vụ LIBERO với 5 tập mỗi tác vụ:

```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
```

| Bộ     |           Thành công |
| --------- | ------------------: |
| Không gian   |               49/50 |
| Đối tượng    |               50/50 |
| Mục tiêu      |               50/50 |
| LIBERO-10 |               48/50 |
| **Tổng** | **197/200 (98.5%)** |

Đây là kiểm tra tái tạo 200 tập, không phải giao thức đánh chuẩn LIBERO 2.000 tập.

## Bố cục checkpoint

Sử dụng thư mục checkpoint hoàn chỉnh, bao gồm trọng số chính sách, cấu hình và trạng thái bộ xử lý. Một tệp `model.safetensors` độc lập là không đủ để huấn luyện hoặc suy luận.

## Giấy phép

Tích hợp LeRobot có giấy phép Apache-2.0. Trọng số mô hình tuân theo giấy phép đính kèm trong thẻ mô hình DM05 tương ứng.

