Index
2026-07-08 — Analysis

Phase B — VGGT-Omega reward: r_geo primitive를 데이터로 선정

VGGRPO (rl/phase2) | pixel-level 3D self-consistency reward

TL;DR

21×
temporal 판별력
0.9746
coherent total
0.8943
shuffled
0.8780
noise

1배경 — v1 r_geo 실패

Phase B는 논문 reward 2개를 VGGT-Omega 출력에 매핑: r_motion(카메라 궤적 smoothness, pose) + r_geo(3D self-consistency, depth+pose). 3 뷰 = exo좌·exo우·wrist(1인칭)로 시점차가 극단이다.

첫 sanity(coherent / 시간셔플 / 공간노이즈 비디오):

videor_motionr_geo (v1 depth-L1)
coherent0.99160.845
shuffled0.85260.848
noise0.97620.878 (최고 ← 거꾸로)
r_geo가 비판별 + 역방향. 원인: (1) exo↔wrist 극단 baseline → cross-view overlap 빈약, (2) noise 입력 시 VGGT-Ω가 평평한 depth 예측 → reproject trivially 일관 → degenerate depth를 보상하는 고전적 함정. depth-reproject-L1은 이 셋업에 부적합.

2데이터로 primitive 선정 (probe)

vibes 대신 후보 4신호를 coherent/shuffled/noise에서 판별력 측정 (tmp/probe_geo_signals.py, VGGT-Ω joint window forward). inverse-warp photometric은 tgt 픽셀을 depth로 unproject→world→src로 project→src RGB 샘플→tgt RGB와 L1. flat depth는 잘못된 warp→높은 error라 gaming 방지.

signalcoherentshufflednoisecoherent/noise
conf (native)7.4577.9022.2213.4× (shuffled>coherent 이상)
exo_photo (exo↔exo)0.0910.0930.2933.2× ✅
temporal_photo (within-cam)0.0130.0520.27621× ✅✅✅
allpair_depthL1 (v1)0.1830.1790.145거꾸로 ❌

결정: photometric을 신뢰 가능한 위치에만 배치

r_geo = temporal within-cam photometric(주, w=0.6) + exo↔exo photometric(부, 0.4). exo↔wrist는 완전 제외(극단 baseline/occlusion). conf는 shuffled 이상 + 정규화 필요로 탈락. 교훈: cross-view 시점차가 극단이면 hand-crafted geometric residual(depth-L1·photometric 모두)이 occlusion에 지배됨 → small-baseline(temporal) + 겹치는 쌍(exo↔exo)에만 photometric 적용.

3재작성 후 최종 reward MONOTONIC

reward = w_geo·1/(1+geo_err) + w_motion·r_motion (tmp/verify_reward.py, 14B 생성 비디오 + 손상):

videototalr_geor_motiongeo_err (temporal / exo)
coherent0.97460.95760.99160.044 (0.013 / 0.091)
shuffled0.89430.93610.85260.068 (0.052 / 0.093)
noise0.87800.77980.97620.282 (0.276 / 0.293)
coherent가 total 최고점 — 두 손상 모두 페널티. r_geo가 noise(공간 geo 손상)를 최저로, r_motion이 shuffled(시간 손상)를 최저로. 역할 분담 성립 → GRPO advantage가 3D-consistent 생성에 높은 값을 실어나름.

4다음 (Next)

Phase C: FF GRPO 배선 — reward_model: "src.cosmos_ff.rewards.vggt_omega_reward.VGGTOmegaReward" python-path 등록 + scripts/cosmos_ff/train_grpo.sh + 1-step smoke(reward 비-상수, advantage std>0). off-by-one(num_inference_steps=len(scheduler.timesteps)) 정렬.

튜닝(Phase D): w_geo/w_motion(0.5/0.5), geo_temporal_w(0.6), window(12; 검증 4). 비용: K=64 × 윈도우 × VGGT-Ω forward → async_reward + batch 작게 + bf16. 2차: exo↔wrist를 depth_conf gate로 부분 활용, window간 sim3 anchor.