Index
2026-05-11 — Analysis

IDM h50 Droid-Video Hybrid — 카메라 mismatch 진단 및 학습 재시도

GR00T-Dreams | IDM Pixel Track | ckpt-10K mid-eval 결과 포함

TL;DR

721.6
이전 h50 v2 (mm)
167.9
hybrid ckpt-10K (mm)
134.8
baseline (mm)
4.3×
개선 배율

1 배경/목적 — 왜

idm_robocasa_mg30_h50_v2_8gpu/checkpoint-60000 (22h, 8 GPU 학습 완료)의 24-ep simulator replay eval 결과가 avg_pos_error_mm = 721.6 mm로 나옴. 같은 eval 체계의 baseline (mg3000_v2_state_8gpu, Pixel-IDM v2)은 134.8 mm약 5× 나쁨. 24개 task 전부 systemic하게 363–1106 mm 범위로 잘못된 결과. 모델/체크포인트 자체보다 데이터·전처리 mismatch가 의심되어 root cause 분석.

단순 augmentation 부족이나 threshold 문제가 아닌 구조적 문제로 판단 — 모든 task에서 균등하게 나쁜 패턴이 근거.

2 작업 내용 — 어떻게

① 학습·eval 데이터셋 카메라 스펙 비교

데이터셋카메라 키해상도Codec용도
idm_mg30 / idm_mg3000exterior_image_1/2_left, wrist_image_left180×320h264baseline 학습·eval
mg30_real_h50 (v3.0)robot0_agentview_left/right, eye_in_hand128×128AV1이번 h50 학습
idm_heldoutexterior_image_1/2_left, wrist_image_left180×320h264eval
학습은 robomimic agentview (128×128), eval은 droid exterior (180×320) — view·FOV·해상도 전부 다름. 완전한 OOD.

② Frame-level alignment 검증 (10-min sampling)

idm_mg30mg30_real_h50의 720 episode 전체에서 length 완전 일치 (720/720). action_eef[12] vs mg30_real_h50.action[12] frame-level max abs diff ≤ 2.98e-08 (10 ep sample, float32 noise floor 수준). 두 데이터셋은 같은 mg30 source 시뮬레이션에서 다른 카메라 + 다른 state schema로 추출한 것.

③ Hybrid Dataset 클래스 구현

파일: gr00t/data/dataset_h50_droid_pixel_v2.py 클래스: RobocasaH50DroidPixelIDMDatasetV2 - state/action: mg30_real_h50 v3.0 (action[12], state[16] eef-pose, raw quat 부호 보존) - video: idm_mg30 v2.1 per-ep mp4 (3 cams 180×320 h264), torchcodec backend - frame alignment: 초기화 시 720 ep length assert (verify_alignment=True default) - getitem: video는 idm_mg30 ep_idx mp4, state는 mg30_real_h50 같은 ep_idx+base_index

④ Smoke 검증 및 학습 제출

tmp/smoke_h50_droid_pixel_v2.py: 9 indices shape/dtype/value-range assertion 전부 통과. images=(6,3,256,256) float32 in [-1,1], actions=(16,32) action_eef 192/192 non-zero, state 224/256 non-zero. Login 1 GPU 5-step smoke train: loss 1.307, 20s 통과.

학습 제출: 처음 --qos=own 시도 → QOSMaxCpuPerUserLimit (pi05 Job 1198/1199가 core-own 8 GPU 점유 중) → extra QOS로 재제출. Job 1241 (extra, sbmr 5, n15 시작).

3 결과 — 수치

Mid-eval ckpt-10000 (17% 학습, 260511 09:30)

모델avg pos error (mm)gripper agree비고
h50 droid hybrid v2 ckpt-10K167.9 ±103.392.2%17% 학습 시점
baseline mg3000_v2_state (60K)134.8reference
이전 h50 v2 robomimic (60K)721.676.6%cam OOD 실패작

Per-task 분포 (24 ep)

구간task (pos error mm)
<100 mm (7개)CoffeePressButton 43, CloseSingleDoor 55, CloseDrawer 69, TurnOffMicrowave 72, TurnOffStove 84, TurnSinkSpout 87, OpenDrawer 89
100–200 mm (8개)CoffeeServeMug 106, TurnOnMicrowave 106, CoffeeSetupMug 111, TurnOnStove 124, PnPCounterToCab 126, TurnOnSinkFaucet 138, OpenSingleDoor 148, PnPStoveToCounter 158
200–400 mm (8개)CloseDoubleDoor 211, PnPMicrowaveToCounter 232, PnPSinkToCounter 267, PnPCabToCounter 300, PnPCounterToStove 310, OpenDoubleDoor 314, PnPCounterToSink 369
400+ mm (1개)PnPCounterToMicrowave 401
PnP grasp 류 (PnPCounter↔Microwave/Sink) gripper agreement 약함: PnPCounterToCab 57%, PnPCounterToSink 51%. 나머지 대부분 95–100%.

4 Takeaway

카메라 mismatch 가설 확정. droid 180×320으로 학습·eval을 일치시키는 것만으로도 17% 학습 시점에 721mm → 167.9mm (4.3×) 회복. 이전 v2_h50 실패의 주원인은 augmentation이나 threshold가 아닌 학습-eval 카메라 system 자체의 OOD.

idm_mg30(droid)와 mg30_real_h50(h50)가 동일 source의 두 export라는 발견이 핵심. 재 dump 없이 video/state를 cross-source 매칭하여 hybrid 학습 가능. Hybrid 접근은 Pi0.5 호환성도 유지 — state/action이 mg30_real_h50 v3.0 schema 그대로.

PnP 패턴의 의미

PnP류 task가 200+ mm로 약한 패턴은 latent-A multistream의 task-level 패턴(PnPSinkToCounter best, CloseDoubleDoor worst)과 반대 양상. 카메라 system 회복 후 정밀 grasp task가 우세하게 부족 — "더 많은 step"으로 해결될지, structural한 어려움인지 60K 결과를 봐야 판단 가능.

5 Next Steps

핵심 신규 파일: gr00t/data/dataset_h50_droid_pixel_v2.py — hybrid dataset class scripts/idm_training_h50_droid_pixel_v2.py — training entrypoint scripts/run_idm_train_robocasa_h50_droid_v2_8gpu.sh scripts/dump_idm_actions_h50_droid_v2.py — eval dump (gripper threshold 0) scripts/run_eval_h50_droid_v2_24ep.sh — 24-ep eval pipeline scripts/run_eval_h50_droid_v2_watch.sh — ckpt 폴링 watcher