# 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차원을 지원하며, 새로운 fine-tuning은 대상 데이터셋에서 유효한 이미지, 상태, 행동 특징을 해결합니다.

## Dataset 계약

DM05은 다음을 갖춘 표준 LeRobot 데이터셋을 지원합니다:

- 하나 이상의 이미지 또는 비디오 관찰;
- `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` (체크포인트 기본값)        | 저장된 액션을 변경 없이 학습하며, 상대 모드(explicit opt-in)는 명시적으로 선택해야 활성화됩니다 |
| `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는 정책의 action 표현과 별도로 구성됩니다. Relative mode는 state/action 차원이 일치해야 합니다.

### 카메라

카메라 세트는 정책 구성의 일부이며, 프롬프트는 항상 해당 카메라만 정확히 렌더링합니다. 카메라를 선언하지 않는 `lerobot/dm05_base`에서 파인튜닝을 수행하면 학습 데이터셋의 카메라가 사용됩니다. 파인튜닝된 체크포인트는 자체 카메라 이름을 유지합니다. 이름이 다른 데이터셋을 이 이름에 매핑하려면 `--rename_map`을 사용하세요. 예를 들어 `--rename_map='{"observation.images.top": "observation.images.front"}'`와 같이 지정할 수 있습니다.

### 정규화 통계

Training은 `meta/stats.json`의 데이터셋 상태/행동 통계를 사용합니다. 행동 통계는 학습에 사용된 표현과 일치해야 합니다. `policy.use_relative_actions=true`인 경우, 동일한 chunk size와 제외된 차원을 사용하여 상대 행동 변환 후에 계산하십시오. [상대 행동 가이드](./action_representations#using-relative-actions-in-lerobot)를 참조하십시오.

## 평가

LIBERO 체크포인트 `lerobot/dm05_libero`는 50,000단계로 학습되었으며, 각 작업당 5개의 에피소드로 모든 40개의 LIBERO 작업에서 평가되었습니다:

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

| Suite     |           성공 사례 |
| --------- | ------------------: |
| 공간   |               49/50 |
| 객체    |               50/50 |
| 목표      |               50/50 |
| LIBERO-10 |               48/50 |
| **합계** | **197/200 (98.5%)** |

이것은 2,000에피소드의 LIBERO 벤치마크 프로토콜이 아니라 200에피소드의 재현성 확인입니다.

## Checkpoint 레이아웃

policy weights, config, processor state가 포함된 완전한 checkpoint 디렉터리를 사용하세요. 독립적인 `model.safetensors`만으로는 학습이나 추론이 불가능합니다.

## 라이선스

LeRobot 통합은 Apache-2.0 라이선스를 따릅니다. 모델 가중치는 해당 DM05 모델 카드에 첨부된 라이선스를 따릅니다.

