Index
2026-04-21 — Analysis

IDM Simulator-Based 평가: MG-30 vs HF FullSet 비교

GR00T-Dreams | IDM RoboCasa 시뮬레이터 replay 정량 평가

TL;DR

332mm
Ours EEF Error
113mm
HF Error
66%
HF 우위
100×
데이터 규모 차

1 배경 / 목적

IDM (Inverse Dynamics Model) 품질을 normalized space의 CosSim/MSE로만 평가했는데, 이 메트릭만으로는 실제 물리 성능 판단이 불가능했다. DreamGen 논문도 IDM 자체의 CosSim 수치를 보고하지 않고 downstream success rate만 보고한다.

기존 한계: ckpt-10K CosSim=0.161, ckpt-20K CosSim=0.078 — 수치 하락이 실제 성능 하락인지 알 수 없음. 메트릭 자체의 신뢰성 불명확.

목표: IDM predicted action을 RoboCasa 시뮬레이터에서 실제 replay하여, GT action replay와 EEF 궤적 divergence 및 gripper agreement로 비교 평가.

2 작업 내용

파이프라인 구조 (3단계)

Step 0: scripts/build_heldout_mapping.py (gr00t-idm env) held-out LeRobot episode_index ↔ 원본 HDF5 (task, demo_key, hdf5_path) 매핑 seed=42 재현으로 720개 항목 복구 Step 1: scripts/dump_idm_actions_for_eval.py (gr00t-idm env) held-out 비디오 → IDM 추론 → raw action .npz 저장 --num_samples 3 (flow matching stochastic 평균화) binary post-processing: gripper threshold 0.5→{-1,1}, ctrl=-1 고정 Step 2: scripts/eval_idm_simulator_replay.py (robocasa env) 원본 HDF5 states[0]으로 초기 상태 복원 → GT/IDM action replay 메트릭: EEF pos L2 error (mm), gripper agreement (%), reward 출력: side-by-side comparison.mp4 + trajectory.png + metrics.json

디버깅 이슈

tianshou.Batch 의존성 제거 → dict 기반으로 변경. binary normalization transforms.unapply()가 gripper/control_mode inverse를 올바르게 수행하지 않음을 발견 → 수동 post-processing 추가. state shape 불일치(task마다 120~179 dim) → min_cols로 처리.

embodiment_tag 버그 발견 및 수정

HF 공식 체크포인트 비교 시 첫 시도에서 embodiment_tag="new_embodiment" 사용 → CosSim = -0.069 (garbage). 원인: IDM의 CategorySpecificMLP action decoder가 embodiment별로 다른 weight matrix(32개 slot)를 사용하는데, HF 체크포인트는 slot 13(robocasa_panda_omron)으로 학습됨. 잘못된 slot weight 사용이 원인.

수정: --embodiment_tag robocasa_panda_omron

1-sample vs 3-sample 비교

multi-sample averaging(--num_samples 3)이 magnitude를 줄이는 원인인지 검증. 원본 DreamGen dump_idm_actions.py는 1회 추론 사용.

3 결과

ckpt-100K MG-30 기본 평가 (5개 task)

TaskPos Error (mean)Gripper Agree
CloseDoubleDoor505mm100%
CloseDrawer452mm98%
CloseSingleDoor414mm98%
CoffeePressButton76mm45%
CoffeeServeMug214mm75%
평균332mm83%

1-sample vs 3-sample 비교

설정Magnitude (% of GT)Sim Pos Error
3-sample (기본)9~21%332mm
1-sample16~49%345mm
결론: magnitude는 ~2x 커졌으나 시뮬레이터 성능은 비슷하거나 악화. 방향 정확도가 더 떨어지기 때문. sample averaging이 주 원인 아님.

HF 공식 체크포인트 vs Ours 비교 (embodiment_tag 수정 후)

TaskOurs MG-30 (720ep)HF FullSet (72K ep)개선
CloseDoubleDoor505mm299mm41%↓
CloseDrawer452mm67mm85%↓
CloseSingleDoor414mm95mm77%↓
CoffeePressButton76mm26mm66%↓
CoffeeServeMug214mm76mm65%↓
평균332mm113mm66%↓

HF CosSim: 0.66~0.90 (방향 정확), magnitude: GT의 61~99%

학습 곡선 비교

StepOurs (MG-30, 720ep)HF (FullSet, 72K ep)
1K0.196
5K0.123
10K0.116
50K0.104
100K0.094
60K0.013
MG-30 plateau: 5K step 이후 loss 0.09 이하 불가. 720 ep 데이터로는 수렴 한계에 도달.

HF FullSet 데이터 규모 분석

num_trajectories=1,691,280의 정체: global_metadata/robocasa/stats.jsonepisode_index max=3010 확인. 24 tasks × 3000 ep = 72,000 에피소드 = MG-3000. 1.7M은 에피소드가 아니라 총 training windows(steps) 수.

핵심 발견: HF FullSet ≈ MG-3000 ≈ 72,000 ep. 우리의 MG-3000 학습이 HF와 동일 규모 → 동등한 결과 예상.

IDM vs GR00T_N1 아키텍처

IDM backbone = IdentityBackbone (패스스루, LLM 없음), vision = SigLIP2-large 직접 사용. GR00T_N1 = Eagle VLM backbone + 별도 action head. backbone이 완전히 다른 별개 모델 → GR00T_N1 pretrained weight에서 IDM으로 직접 전이 불가. random-init이 올바른 학습 방식. HF 공식 체크포인트도 random-init으로 학습.

4 Takeaway

코드 문제 아님 — 데이터 규모가 핵심

HF 체크포인트가 113mm로 정상 동작하며 파이프라인 자체는 검증 완료. MG-30(720ep) vs FullSet(72K ep) = 100배 데이터 차이 → loss 7배(0.094 vs 0.013), sim error 3배(332mm vs 113mm) 차이. MG-3000 학습으로 HF 수준의 성능 달성 가능할 것으로 예상.

IDM의 실제 용도는 open-loop replay가 아님

HF(113mm)도 완벽하지 않으며 open-loop replay 자체의 한계가 있음. IDM의 용도는 시뮬레이터에서 직접 제어하는 것이 아니라 policy 학습용 pseudo label 생성. DreamGen 최종 목표는 IDM pseudo label → gr00t_finetune.py로 GR00T N1 policy 학습.

embodiment_tag 교훈: CategorySpecificMLP는 embodiment별로 완전히 다른 weight를 사용. tag 불일치 시 garbage output. HF 체크포인트 사용 시 반드시 robocasa_panda_omron 지정 필요.

5 Next Steps

진행 중: MG-3000 IDM 학습 (SLURM 54326, RUNNING)

scripts/run_idm_train_robocasa_mg3000.sh, 4×B200 GPU, 60K steps 목표. 데이터셋: /home/nas_main/taewoongkang/Dataset/robocasa/idm_mg3000 (70,492 ep). 완료 후 시뮬레이터 eval로 HF(113mm)와 직접 비교 → 데이터 가설 최종 검증.

MG-3000 완료 후: 시뮬레이터 eval → pseudo label 생성

best checkpoint로 전체 데이터 IDM dump (dump_idm_actions_for_eval.py). 이어서 gr00t_finetune.py로 GR00T N1 policy fine-tune (DreamGen Section 4). downstream success rate로 최종 평가.

미해결 한계

open-loop replay는 error가 누적됨. HF(113mm)도 실제 task success rate는 미측정. IDM의 진정한 품질은 downstream GR00T N1 성능으로만 판단 가능. MG-3000이 충분하지 않다면 full DreamGen 파이프라인(합성 비디오 생성 → IDM labeling → policy fine-tune) 필요.