Index
2026-05-15 — Analysis

IDM Closed-Loop Pixel Eval — OL→CL 랭킹 역전, pix_delta_diff +218% 추락

DreamData | GR00T-Dreams | Pixel 4-cell × 24-ep closed-loop simulator replay

TL;DR

327
CL Best (mm)
577
CL Worst (mm)
+218%
OL→CL 최대 악화
24
Eval episodes
3
SLURM jobs (preempt)

1 배경 / 목적

Open-loop eval은 IDM이 GT video만 보고 action을 미리 계산한 뒤 시뮬에서 순서대로 재생한다. Sim의 state drift가 모델에 피드백되지 않아 실제 deployment 환경과 다르다.

Closed-loop: 매 16 step(1 chunk)마다 sim의 현재 render + GT의 t+16 frame을 다시 모델에 입력해 재예측. Visual drift가 피드백됨.

핵심 질문: (1) OL ranking이 CL에서도 유지되는가? (2) 어느 cell이 visual feedback에 robust한가? (3) OL best(pix_delta_diff)가 CL에서도 best인가?

2 작업 내용

구현: Subprocess Pickle IPC

gr00t-idm env(PyTorch 2.12, IDM)와 robocasa env(PyTorch 2.7, mujoco 3.2.6)가 의존성 충돌로 한 process 통합 불가. pickle-framed stdio subprocess 프로토콜로 분리:

idm_inference_worker.py (gr00t-idm env, GPU 모델 호스트) - stdin: pickle frame {"frames_t":[3,H,W,3], "frames_t16":[3,H,W,3]} - SigLIP preprocessing → DefaultDataCollatorGR00TIDM → model.get_action - stdout: {"action_chunk":[16,12]} (denorm + gripper bipolar 적용) - 8 byte LE-uint64 length prefix + pickle payload eval_idm_closed_loop.py (robocasa env, sim 호스트) - subprocess.Popen으로 worker 띄우고 stdin/stdout 양방향 IPC - 매 chunk: sim render (3 cam) → worker → 16 action → sim.step ×16 - ep_*/metrics.json 존재 시 skip (resume guard)

Camera 매핑 (sim → droid view)

학습 view (droid)sim 대응
exterior_image_1_leftrobot0_agentview_left
exterior_image_2_leftrobot0_agentview_right
wrist_image_leftrobot0_eye_in_hand
Modality mismatch 경고: sim camera ≠ droid camera (다른 FOV/layout). 학습 데이터는 Cosmos 생성 droid-style video → sim render는 분포 밖(OOD). 모든 CL 수치가 OL feature보다 나쁜 핵심 원인.

Resume 설계 (share QOS preempt 대응)

ep_*/metrics.json 존재 시 skip + cache 반환. sbmr 20 retries 자동 requeue. 총 24ep × 4cell 완료까지 3번 preempt(Jobs 3158→3161→3163).

신규 스크립트

3 결과

전체 비교: Open-Loop vs Closed-Loop (24-ep 평균 EEF mm)

CellOL (mm)CL (mm)ΔGrip(CL)
pix_delta_reg303327+24+8%84.7%
pix_abs_reg364354−10−3%88.0%
pix_abs_diff339436+97+28%59.2%
pix_delta_diff181577+396+218% ⚠88.4%
OL 1위 → CL 4위: pix_delta_diff의 OL 우수성은 슬라이딩 윈도우 averaging 효과였음. single-prediction(CL 방식)에서 small artifact가 Δ frame에 그대로 들어가 폭발적 drift.

Per-task 단편 (어려운 task, CL EEF mm)

Taskabs_diffabs_regdelta_diffdelta_reg
CloseDoubleDoor9003491130388
OpenDrawer4976881120460
OpenSingleDoor473706581298
OpenDoubleDoor633616674258

Per-task 단편 (CL 잘 된 task, pix_abs_reg)

Taskabs_reg비고
CoffeePressButton46mmOL feature cell(~105mm)에 근접
TurnOffMicrowave79mmstationary button-press
TurnOffSinkFaucet70mmstationary twist

pix_abs_reg가 stationary task에서 CL 최강. abs 표현이 단순 위치 유지 task에서 stable.

4 Takeaway

Closed-loop은 설계 선택의 truth-teller

OL averaging이 fragility를 숨긴다. pix_delta_diff의 OL 우수성(181mm)은 16-frame 슬라이딩 윈도우 평균화가 single-prediction 잡음을 평균 내버린 결과. CL single-prediction에서는 +218% 폭발. 모델 자체의 robust성이 아니었음.

Regression이 CL에서 diffusion보다 안정적. Reg 2종 평균 340mm vs Diff 2종 평균 506mm(+49%). Visual distribution shift 하에서 deterministic 1-step prediction이 stochastic 16-step sampling보다 safe. Diff는 다양한 mode를 sample하다 엉뚱한 곳으로 drift할 위험이 큼.

Δ representation은 CL에서 loss 선택에 극도로 민감. delta_reg 327mm(CL best) vs delta_diff 577mm(CL worst). Δ frame이 OL averaging으로 잡음이 상쇄됐지만 CL single-shot에서 sim render artifact가 그대로 Δ에 반영.

Modality mismatch가 전체 CL 성능의 floor를 결정. 모든 CL 결과(327-577mm)가 OL feature cell(104-122mm)의 2.7-5.7×. sim robocasa view ≠ droid training view(다른 FOV/layout)가 가장 큰 drift source.

5 Next Steps

Feature 4-cell Closed-Loop (미구현)

Feature OL이 104-122mm → Feature CL이 Pixel CL보다 훨씬 잘 할 가능성 높음(Cosmos 표현이 view 변화에 robust). 비용: Cosmos encoder forward ~5s × 26 chunk × 24ep × 4cell ≈ 3.5h. worker에 Cosmos encoder 추가 필요.

Modality mismatch 해소 방향

(a) 학습 데이터를 robocasa 직접 캡처로 재구성 — 근본 해결이지만 데이터 수집 비용 큼. (b) sim render에 Cosmos 적용 → droid-style view 변환(CL 시 매 step 적용, 비용 매우 큼). (c) qnorm 재학습 완료 후 CL 재측정 — 절대 수치 개선 확인.

chunk-only open-loop baseline 추가

averaging 효과를 분리하기 위해 chunk stride 16(single-prediction만 사용) open-loop 추가 측정. CL +218% drift 중 averaging-loss가 얼마나 차지하는지 확인. 구현 코스트 낮음.