Index
2026-05-04 — Plan

Pi0.5 데이터 전략 — B2 Real+Synth Mix + B3 Real-Prefix Stitch 설계

GR00T-Dreams | Phase 4 DreamGen 효과 정량화

TL;DR

1440
P2 Eps
50:50
B2 Mix Ratio
93 fr
P2 Synth Length
4 tracks
B0/B1/B2/B3

1 배경 / 목적

B1 (P2 synthetic-only 1440 ep) mid-training eval @ step 015500에서 4-task SR = 0/32 (0%)가 확인됐다. loss는 0.018로 잘 수렴하고 있으므로 데이터 구조 자체의 문제로 판단된다.

B1 한계 분석: (1) P2 ep 93 frame @ 16fps = 5.8s — robocasa task 평균 ~20s (heldout 290 frame @ 20fps) 대비 너무 짧아 long-horizon execution 학습 불가. (2) P2 state zero-pad vs simulator 실제 state → noisy obs에 취약. (3) real heldout 720 ep은 IDM 학습에만 쓰이고 policy 학습에 미활용.

목표: real data를 policy 학습에 직접 활용하는 두 가지 전략(B2 Mix, B3 Stitch)을 설계하여 DreamGen 합성 데이터의 marginal gain을 정량화한다.

2 작업 내용

Track A: B2 — Real + Synthetic 50:50 Batch Mix

구현 방법: LeRobot MultiLeRobotDataset 또는 torch.utils.data.WeightedRandomSampler 기반 wrapper. train_bc.pycfg.dataset.repo_ids 리스트 분기 추가.

scripts/launch_pi05_b2_mix_full.sh: --dataset.repo_ids='[Keh0t0/dreamgen_robocasa_p2,Keh0t0/robocasa_heldout_real]' --dataset.weights='[0.5,0.5]' --output_dir=...pi05_b2_mix_full_4gpu
FPS 불일치 (P2 16fps vs heldout 20fps) — 무시 가능: policy는 step 수만 보고 action chunk를 학습. eval 시 robocasa simulator는 20fps 기준이므로 heldout 20fps 쪽이 일치. P2 자체가 이 mismatch 위에서 이미 학습됨 — B2도 동일 가정.

Track B: B3 — Real-prefix + Synthetic-suffix Stitch

핵심 아이디어: P2 1440 ep 각각에 대해 batch_input_full.json에서 heldout_ep_idx=j, init_frame=k를 역추적. 새 ep = heldout[j][0:k] (real prefix) + P2[i][0:93] (synthetic suffix).

각 stitched ep: length = k + 93 frame action[0:k] = real EEF action (12-dim, heldout[j]) action[k:] = IDM-inferred (12-dim, P2[i]) fps = 20 (optionc 0: P2 frame 그대로, metadata만 20fps) state = prefix는 real 16-dim, suffix는 zero-pad (disable_proprio=true라 무관) 출력: Keh0t0/robocasa_dream_p2_stitched (1440 ep, HF push)

FPS 처리 결정

B3 첫 스파이크는 Option 0 (fps=20으로 metadata만 통일, frame 그대로 stitch)으로 빠르게 시도. 실패 시 P2 → 20fps upsample (Option 1) 전환.

Track C: B4 — Stitch + Mix 결합

B3 stitched dataset과 heldout original을 50:50 batch mix. B2의 multi-dataset 패치에서 P2를 stitched로 교체하면 됨.

우선순위 표

순위실험구현 난이도예상 효과
1B0 (real heldout-only)낮음 (이미 제출)필수 baseline
2B2 (real + synthetic mix)중간 (multi-dataset 패치)High — real로 task 전체 분포 학습
3B3 (stitched)높음 (변환 + push)Unknown — long-horizon 가설
4B4 (stitch + mix)높음B2 + B3 결합

3 목표 비교 (Step 20000 eval, 24 task × 24 ep)

실험데이터검증 가설
B0real 720 epreal만으로 무엇이 가능한가 (baseline X%)
B1synth 1440 ep0% 예상 — synthetic-only 한계
B2real + synth mix(B2 - B0) > 0 → synthetic이 augmentation 효과 = DreamGen 가치
B3stitched 1440 ep(B3 - B1) > 0 → stitch가 synthetic-only보다 좋음
B4stitched + real(B4 - B2) > 0 → stitch가 mix보다 좋음
실패 시나리오: B2 = B0면 synthetic은 noise (DreamGen 가치 의문). B3 = B1이면 stitching 미효과 (real prefix 정보 활용 안 됨). 둘 다면 IDM action 품질 문제로 회귀.

4 Takeaway

DreamGen 효과 정량화 설계의 핵심 구조

이 plan이 성공하면 (B2 - B0) = synthetic의 marginal gain, (B4 - B2) = stitching의 추가 가치를 각각 수치로 제시할 수 있다. DreamGen 파이프라인(Cosmos 생성 + IDM pseudo-action)의 ROI를 최초로 정량화하는 실험.

B3의 핵심 장점: P2 batch_input_full.json이 heldout_ep_idx, init_frame, seed를 모두 보존하고 있어서 각 synthetic ep의 기원을 정확히 역추적할 수 있다. 이를 이용해 task 시작부터의 통합 trajectory 학습이 가능해진다.

5 Next Steps

B2 구현 (1-2시간)

train_bc.py multi-dataset 패치 + scripts/launch_pi05_b2_mix_full.sh 작성 + sbmr 제출 (4 GPU, core-on-sub). B0/B1 완료 후 즉시 시작.

B3 dataset 빌드 (수 시간)

scripts/build_stitched_dataset.py: P2 + heldout + batch_input_full.json → stitched 1440 ep → HF push (Keh0t0/robocasa_dream_p2_stitched). 우선 Option 0 (fps=20 metadata 통일)으로 빠르게 시도.

평가 기준

모든 실험 step 20000 ckpt에서 24 task × 24 ep SR eval. per-task SR 비교 + 평균 SR. video 정성 분석.

향후 고려 — IDM re-IDM (P2 20fps 재생성)

P2 비디오를 20fps로 interpolation 후 IDM 재실행 → fps 일치된 P2_v2. B3 stitching의 fps mismatch를 근본적으로 해결. 비용 큼 (IDM 재실행 ~수 시간), 우선순위 낮음.