Experiment Analysis

EgoX wan2.2 — 실험 결과 분석

Training collapse, ego view black output, 3D rendering loss pipeline 디버깅 기록

3 분석 항목
3/3 해결 완료
0.8 Phase 2 Loss
~30% Preemption Rate

Analysis 1 — Training Collapse (81f model)

Phase 1 → 2 전환 시 Loss Spike & NaN Critical Resolved
Problem
Phase 1에서 Phase 2로 전환할 때 loss spike 발생 후 NaN으로 발산, training collapse로 이어짐.
Root Cause
Phase 2의 low noise regime에서 gradient magnitude가 Phase 1 대비 10x 이상 급증. Phase 1에서 학습한 weight scale이 Phase 2의 noise schedule과 맞지 않아 gradient explosion 발생.
Solution
gradient clipping (max_norm=1.0) 적용 + Phase 2 시작 시 500-step warmup 스케줄 추가. Warmup 기간 동안 learning rate를 0에서 target LR까지 linear ramp-up.
Result
Loss 1.3 → 0.8, 20K steps에 걸쳐 안정적 수렴 확인

Analysis 2 — Ego View Black Output

Validation에서 Ego 영역 완전 검정 출력 Critical Resolved
Problem
Phase 2 학습 완료 후 validation 시 ego view 부분이 완전히 검은 화면으로 출력됨. Wrist view는 정상 생성되나 ego는 zero tensor에 가까운 값.
Root Cause
Phase 2 noise schedule이 ego latent에도 동일하게 적용되고 있었음. Ego는 conditioning 입력이므로 noise를 추가하면 안 되는데, noise injection 로직이 ego/wrist를 구분하지 않고 전체 latent에 적용.
Fix
ego latent masking 도입 — noise는 wrist latent에만 선택적으로 적용. Ego latent는 clean state를 유지하도록 masking 처리.
Result
Ego view 정상 출력 확인. Ego-wrist 간 spatial consistency 유지됨.

Analysis 3 — 3D Rendering Loss Pipeline

Rendering Loss Gradient 미전파 (Mar 20-21) Critical Resolved
Problem
Cross-view rendering loss의 gradient가 transformer backbone까지 흐르지 않음. Loss 값은 계산되나 backward pass에서 gradient가 끊김.
Root Causes (3건)
  1. torch.no_grad() 블록 안에서 loss 계산 — gradient 자체가 차단됨
  2. GT wrist를 rendering에 입력 — generated wrist (z_0_pred)를 넣어야 학습 가능
  3. 49 frame 중 5개만 사용 — supervision signal 불충분
Fix
z_0_pred 사용으로 전환 + no_grad 제거 + 전체 frame 사용.
Pipeline (수정 후)
z_0_pred → split ego/wrist → stitching Conv3D → AnySplat → gsplat render → L1 loss
Result
Cross-view rendering loss ~0.13 (L1, 정상 범위). Gradient가 transformer까지 정상 전파 확인.

현재 관측 사항

0.8 Phase 2 Loss
0.13 Rendering L1
20K+ Stable Steps
~30% Preempted Jobs