s·gt + b ≈ pseudoRoboCasa GT 학습 viz에서 "view마다 pred 값이 매우 다르다"는 현상이 관찰됨. 3 cam (agentview_left/right, eye_in_hand) × 32 frame = 96 view가 각자 다른 scale의 출력을 내고 있었다. 원인 추적을 위해 supervision signal이 어느 단위에서 어떻게 정렬되어 들어가는지 전체 alignment 체계를 정리.
관련 학습 스크립트: scripts/train_lgm_robocasa_v0.py, scripts/train_lgm_gt_v0.py, src/data/robocasa_dataset.py
5가지 supervision 신호 각각에 대해 alignment 단위, 방식, scale 변동 여부를 코드 레벨에서 추적.
Any4D frozen 출력을 그대로 target으로 사용. 별도 alignment 없음. pseudo noise가 그대로 들어감.
VAE input: /255 → [0,1] (Wan 컨벤션). Any4D input: (frame/255 - DINOv2_MEAN) / DINOv2_STD. Frame 독립, view-independent.
| Supervision 항목 | Alignment 단위 | 방식 | Scale 변동 |
|---|---|---|---|
| Depth | per-view (cam × frame) | LS s·gt + b ≈ pseudo | view마다 변동 ← 문제 |
| Pose | per-clip (1 scale) | trans norm median ratio + ref view 0 | clip 전체 일관 |
| Ray | per-cam (intrinsic) | K⁻¹ unit normalize | cam 내 일관, frame 무관 |
| Scene flow | — | pseudo only | alignment 없음, pseudo noise |
| RGB (VAE) | per-frame | /255 → [0,1] | 표준 컨벤션 |
| RGB (Any4D) | per-frame | DINOv2 mean/std | 표준 |
| GT depth (metric) | per-demo | OpenGL z-buffer → meter | demo 내 일관 |
| Camera | s mean | s std | s range | 판정 |
|---|---|---|---|---|
| agentview_left | 1.27 | 0.03 | [1.25, 1.30] | 안정 |
| agentview_right | 1.52 | 0.01 | [1.51, 1.53] | 안정 |
| eye_in_hand | 3.41 | 2.18 | [1.77, 6.49] | 불안정 (3.7× range) |
ld에 depth + ray L1이 같이 합산됨 — 변수명 혼동 주의 (compute_phase_b_loss 내부).Any4D는 monocular video 모델이라 각 frame의 depth scale이 independent하게 결정됨. 우리가 GT depth를 pseudo 스케일에 맞추는 방식(LS fit)은 이 scale을 frame마다 따라가게 돼 있어, pseudo가 frame마다 다른 scale을 출력하면 GT alignment도 frame마다 달라진다. eye_in_hand의 경우 손 끝/배경 geometry가 frame마다 크게 바뀌어 pseudo scale 변동이 특히 심하다.
Pose/Ray/Image는 per-clip 또는 per-cam 단위로 alignment가 설계되어 view 간 일관성이 보장된다. Depth만 이 설계에서 벗어나 있다.
robocasa 측에서 "infinity 영역 제거된 클린 데이터셋"을 기다리는 중. 클린 데이터 도착 시 depth_max=5 마스크가 무해해지면 스케일 변동이 얼마나 줄어드는지 재확인.
1/(1+d)depth를 disparity로 바꾸면 [0, 1] 자동 bound, alignment 자체 불필요해짐. outlier도 자연 dampen. 우선순위 높음.
같은 cam의 모든 frame에 single (s, b) 적용. frame-level 변동 제거, cam 간 차이는 유지.
C: masked 픽셀에도 pseudo target → "free output" 방지. D: Any4D conf 채널을 invalid mask 학습에 활용.
multi-view DA3는 cross-view attention으로 scale을 인코더 안에서 잡아줌 → per-view alignment 자체 제거. 클린 데이터에서도 scale 변동 잔존 시 전환 트리거 (plan-da3_backbone_migration.md 참조).