d = I/255 × 5).X-WAM depth를 GT와 대조하다 발견한 것: 같은 물리 거리가 뷰마다 전혀 다른 출력값을 갖습니다. 0.3~0.4 m 구간에서 exo1 = 0.296 vs wrist = 0.074 — 4배 차이. 그래서 전역 스케일 하나로 3뷰를 동시에 metric으로 만들 수 없고, 전역 fit을 강제하면 wrist가 실제의 2배 거리로 밀려 median 오차 51.6 cm(per-view fit은 7.0 cm)가 됩니다.
① 코드 — data/robot_dataset.py의 _normalize_depths_per_view:
② 릴리스 데이터 — 배포된 depth mp4를 직접 디코딩: 6 에피소드 × 3 뷰 = 18/18 전부 픽셀값이 정확히 0~255를 채움(R=G=B 그레이스케일). wrist는 물리적으로 0.05~1.4 m, agentview는 0.4~2.1 m를 보는데 둘 다 풀레인지를 채운다는 것은 고정 스케일로는 불가능 → 뷰별·에피소드별 min-max 확정.
③ 모델 출력 — 복원한 slope가 각 장면의 depth span을 그대로 추종: corr(a, −span) = 0.99~1.00 (exo). "뷰별 고정 상수"가 아니라 에피소드마다 다시 잡힘을 확인.
normalize_depths_per_view: false인데도 min-max 거동이 관측됨 → 정규화는 로더가 아니라 미공개 dataset prep(mp4 인코딩) 단계에 이미 들어가 있습니다. 에피소드 JSON에도 depth_min/depth_max가 없고, 레포 전체에 denormalization 코드가 없습니다.
X-WAM과 직접 비교군입니다. 생성 타깃일 때만 "추론 시 스케일을 모른다"는 ill-posed 문제가 발생합니다.
| 모델 | 뷰 구성 | depth 소스 | 정규화 방식 | wrist 별도 정규화? | 3뷰 동일 정규화? | metric 복원 |
|---|---|---|---|---|---|---|
| X-WAM | 3뷰 (agentview×2 + wrist) | sim z-buffer | 에피소드별 × 뷰별 min-max → 8-bit [0,255] | 예 (뷰마다 따로) | 아니오 | 불가 (min/max 미저장) |
| RynnWorld-4D 동일 Wan2.2-TI2V-5B 백본 |
단일 뷰 | Depth Anything 3 | 고정 전역 [0, 5.0] mI = ⌊d/5.0 × 255⌋ |
— (뷰 1개) | — (구조상 뷰 무관) | 가능 d=I/255×5 |
| PointWorld-DROID NVIDIA |
3뷰 (exterior×2 + wrist) | Zed 스테레오 센서 | 정규화 없음 — uint16 원본 mm (0=invalid) | 아니오 | 예 (완전 동일) | 가능 (×0.001) |
| Cosmos Policy + depth 연구실 내부 (junhahyung) |
3뷰 (agentview L/R + wrist) X-WAM과 동일한 HDF5 키 |
sim z-buffer (RoboCasa) | 고정 전역 [0.05, 3.0] m 선형clip((d−0.05)/2.95)×255 → pseudo-RGB |
아니오 | 예 (완전 동일 함수) | 가능 (~11.5 mm) |
| 3D-VLA | 단일 RGB-D 중심 | depth estimator | 비디오 내 배경 기준 프레임 간 계수 정렬 (상대) | — | — | 상대 스케일 |
depth_320x180/<uuid>_depth.h5 → wrist max 1599, ext max 4394 / 5555 (uint16). 뷰마다 값 범위가 다른 채로 저장 = 물리 단위가 통일된 원본 metric.
같은 연구실(junhahyung)에서 depth까지 예측하는 WAM을 만들었고, 코드를 읽어보니 X-WAM과 조건이 거의 완전히 겹칩니다. 통제변수가 이 정도로 맞는 대조군은 이번 조사에서 유일합니다.
| 조건 | X-WAM | Cosmos Policy + depth | |
|---|---|---|---|
| 벤치마크 | RoboCasa | RoboCasa | 동일 |
| 뷰 구성 | agentview_left/right_depth + eye_in_hand_depth | 동일한 HDF5 키 | 동일 |
| depth 인코딩 | pseudo-RGB(그레이 3채널) → RGB와 같은 VAE | 동일 | 동일 |
| depth의 역할 | 생성 타깃 | 생성 타깃 (per-slot depth loss) | 동일 |
| 정규화 | 에피소드별 × 뷰별 min-max | 고정 전역 [0.05, 3.0] m | ← 유일한 차이 |
코드 근거 — cosmos_policy/datasets/robocasa_dataset.py:
config/experiment/cosmos_policy_experiment_configs.py에서 use_depth_images=True, depth_near=0.05, depth_far=3.0으로 실제 사용됩니다. → denormalize 자명(d = 0.05 + I/255 × 2.95), 양자화 2.95/256 ≈ 11.5 mm.
near=0.05는 wrist가 보는 최근접 거리(그리퍼)에 맞춘 값이고, far=3.0은 RynnWorld의 5.0보다 로봇 workspace에 타이트합니다. 그 결과 양자화가 11.5 mm로 RynnWorld(19.6 mm)보다 좋습니다 — 고정 스케일을 쓰면서도 범위를 workspace에 맞추면 근거리 해상도를 상당히 회복할 수 있다는 실증입니다.
정규화만 같고 loss에서 wrist를 다르게 취급할 수도 있으므로 models/policy_text2world_model.py까지 확인했습니다. 가중치는 final_mask_B_T (B, T) 하나로 관리되며 전부 1로 시작합니다.
action_loss_multiplier — action 슬롯에만 적용. depth_loss_multiplier / depth_loss_weight / wrist_loss / view_loss / per_view_weight 검색 결과 패키지 전체 0건.mask_cur_depth_loss / mask_fut_depth_loss로 current·future 그룹 단위이고, 각 플래그가 (left, right, wrist) 세 인덱스를 함께 0으로 만듭니다. wrist만 켜거나 끄는 경로가 없습니다.(x0 − pred)²에 weights_per_sigma만 곱합니다. 이는 슬롯이 아니라 노이즈 레벨 σ 기준이라 모든 뷰에 동일 작용.검증 중 policy_text2world_model.py:898-903의 주석을 발견했습니다. value_indices = -1("미사용" 센티널)을 체크 없이 쓰면 Python 음수 인덱싱으로 마지막 슬롯을 가리켜, state_t=16에서 거기 있던 fut_wrist_depth latent를 조용히 덮어썼다는 내용입니다. 그 결과 모델이 slot-15 출력을 depth 타깃이 아니라 value_function_return으로 학습 → “slot 15 explosion”의 근본 원인. 현재 코드는 if torch.all(value_indices != -1): 가드로 수정됨.
EVAL_RESULTS.md)| 설정 | iter | SR | Δ |
|---|---|---|---|
| Baseline A (depth 없음, state_t=11) | 24,000 | 60.8% | — |
| Baseline B (depth 포함, state_t=16 = 10 base + 6 depth slot) | 24,000 | 68.3% | +7.5 |
| Stage 2 (mg1000 depth pretrain → human_depth) | 24,000 | 77.0% | +16.2 |
| Patched (depth 없음, 더 오래 학습) | 45,000 | 69.9% | +9.1 |
depth 슬롯은 추론 시 blank로 두고 학습 시 표현학습 신호로만 씁니다(X-WAM의 policy eval도 run_depth=False로 동일). 다만 내부 문서가 스스로 밝히듯 “Patched(depth 없음, 45k)도 69.9%에 도달하므로 +7.5는 학습 길이가 다른 비교”이므로, depth 이득의 순수 크기는 신중히 봐야 합니다.
| 모델 | 뷰 구성 | depth 소스 | 정규화 방식 | wrist 별도? | 뷰 동일? | metric |
|---|---|---|---|---|---|---|
| RoboTransfer Horizon Robotics |
3뷰 (head + wrist×2) | 단안 depth estimator | RGB-D 센서에 robust least-squares로 스케일 정렬 → 전역 metric | 아니오 | 예 (단일 전역 스케일) | metric |
| Cosmos-Transfer1 NVIDIA |
단일 / 서라운드(주행) | DepthAnything2 | 비디오 단위 [0,1] 정규화 (상대) | — (wrist 없음) | — | 상대 |
Metric D.P.가 전 뷰 최고 일관성.
| 모델 | 뷰 구성 | depth 취급 |
|---|---|---|
| Genie Envisioner (AgiBot) | 3뷰 (head + wrist×2) | RGB만 — 논문에 'depth' 2회, 생성하지 않음 |
| EnerVerse | 멀티뷰 | depth는 warping/보조뷰 렌더링용, 생성 타깃 아님 |
| VPP (Video Prediction Policy) | 멀티뷰 | 없음 |
| 방식 | metric 복원 | 근거리 해상도 | 뷰 간 일관성 |
|---|---|---|---|
| X-WAM (에피소드·뷰별 min-max) | 불가 | 양호 (~6 mm) | 깨짐 |
| RynnWorld (고정 선형 [0,5] m) | 가능 | 거침 (~19.6 mm) | 유지 |
| PointWorld (원본 metric mm) | 가능 | 양호 | 유지 |
| Cosmos Policy+depth (고정 선형 [0.05,3.0] m) | 가능 | 준양호 (~11.5 mm) | 유지 |
| 고정 비선형 (log-depth / 고정 near-far disparity) | 가능 | 양호 | 유지 |
Cosmos Policy의 px = clip((d−0.05)/2.95, 0, 1) × 255를 실제 RoboCasa GT depth 8 scene에 적용해, 각 뷰가 8-bit 코드 공간을 얼마나 점유하는지 계산했습니다.
| 뷰 | GT depth (평균 p1–p99) | px 범위 | px 평균 | 점유 레벨 |
|---|---|---|---|---|
| exo1 (agentview_L) | 0.52 – 1.82 m | 40 – 153 | 100 | 113 / 256 (44%) |
| exo2 (agentview_R) | 0.49 – 1.84 m | 38 – 155 | 98 | 117 / 256 (46%) |
| wrist | 0.05 – 1.14 m | 0 – 94 | 38 | 95 / 256 (37%) |
전역 정규화를 쓰면 wrist 값이 전반적으로 작아집니다 — px 평균 38 vs ~100(약 2.6배), 그리고 그리퍼가 near plane에 닿으므로 항상 0에서 시작합니다. 최악 케이스(근접 조작, GT 0.05–0.63 m)에는 50 레벨만 사용합니다(exo는 최소 99–102).
같은 near/far(0.05, 3.0 m)로 norm = (ln d − ln 0.05) / ln(3.0/0.05)를 쓰면:
| 케이스 | GT 범위 | 고정 선형 레벨 | 고정 log 레벨 | 배율 |
|---|---|---|---|---|
| wrist 최악 (근접 조작) | 0.05 – 0.63 m | 50 | 158 | 3.15× |
| wrist 평균 | 0.05 – 1.14 m | 95 | 196 | 2.07× |
| exo1 평균 | 0.52 – 1.82 m | 113 | 78 | 0.69× |
| exo2 평균 | 0.49 – 1.84 m | 117 | 83 | 0.71× |
거리별 1 레벨의 물리적 크기로 보면 교차점이 명확합니다 — 0.72 m 이하에서 log가 유리합니다:
corr(R², range ratio)는 exo1 −0.75 / exo2 −0.92인데 wrist는 −0.00 — “넓은 range가 어렵다”는 효과는 exo의 현상이고 wrist와는 무관합니다.
wrist가 나쁜 실제 이유: 절대 오차는 세 뷰가 거의 같습니다(exo 4.9~5.6 cm, wrist 5.8 cm). 차이는 wrist가 예측해야 할 depth 변동폭이 절반(GT std 16.7 cm vs 31 cm)이라는 점입니다. 뷰와 무관하게 ~5 cm인 오차 바닥이 절반짜리 신호의 훨씬 큰 비율을 삼켜 오차/GTstd가 0.30 vs 0.17(약 2배)이 되고, 그것이 시각적 “flat”으로 나타납니다. 모델 자기 출력 단위로 환산해도 wrist 9.6% vs exo 4.2~4.6%로 동일한 2배 격차입니다.