← 목록
2026-07-31 · X-WAM · Analysis

X-WAM depth 출력의 구조적 결함 진단

baseline 비판 관점 — RoboCasa(sim, robocasa_sft) + DROID(실사, pretrained) 양쪽 GT 대조

TL;DR

0.99–1.00
corr(a, −span) exo
0.22
DROID wrist R²
51.6cm
전역 fit wrist 오차
7.0cm
per-view fit wrist

1배경 / 목적

X-WAM을 베이스라인으로 삼아 연구하려는 입장에서 depth가 어디까지 믿을 만한지 검증. viser 3D 뷰어에서 wrist 뷰가 유독 이상(스케일 불일치 + flat)한 것이 출발점.

검증할 가설: "각 뷰마다 depth가 normalize돼서 들어가고, wrist는 가까운 물체를 보니 값 범위가 exo와 다르다. exo는 일정하게 먼 것만 보는데 wrist는 장면마다 들쭉날쭉하다."

2먼저 고친 내 파이프라인 버그 2개

모델을 비판하기 전에 측정 도구부터 검증했고, 두 개가 실제로 틀려 있었습니다.

부수 확인: GT는 float32 z-buffer(unique 66,783)로 fp16이 아니며, 양자화는 0.05~3mm로 무해. "fp16 느낌"의 원인은 위 리샘플링이었음.

3결함 ① — 전역 스케일로는 metric 불가

RoboCasa 8 task, 스케일 프로토콜별 뷰별 median 오차:

프로토콜agentview_Lagentview_Reye_in_hand
global-linear19.125.151.6 cm
per-view-linear5.64.97.0 cm
per-view-disp7.17.75.2 cm
global-disp101.666.571.3

원인: 같은 출력값이 뷰마다 다른 거리를 뜻합니다. 0.3~0.4m 구간에서 exo1은 0.296, wrist는 0.0744배 차이. 직선 하나로 동시 만족 불가.

전역 fit은 픽셀이 많은 agentview에 최적화되어 wrist 전체를 실제의 2배 거리로 밀어냅니다(GT 평균 0.498m → 예측 0.994m). 언프로젝션이 X=(u−cx)z/fx라 z가 2배면 x,y도 2배 → 광선 방향 팽창(단순 이동이 아님)이라 시각적으로 크게 틀어져 보입니다.

정규화 스킴 규명

gen = (z_max − z)/(z_max − z_min) 형태의 장면별·뷰별 min-max 정규화와 정합합니다:

corr(b, z_max)corr(a, −span)
RoboCasa exo1 / exo20.91 / 0.940.88 / 0.83
DROID ext1 / ext20.89 / 0.990.99 / 1.00
wrist (RoboCasa / DROID)0.56 / 0.990.50 / 0.39

DROID exo에서 corr(a, −span)0.99~1.00 — slope가 장면 depth span에 의해 사실상 완전히 결정됩니다. 교과서적 min-max 거동이며, 두 체크포인트·sim/실사 양쪽에서 재현됩니다.

4결함 ② — 근거리(wrist) depth 붕괴, 그리퍼가 지표를 가림

best affine을 씌운 뒤 GT 변동을 얼마나 재현하는지(std_pred/std_gt)와 R²:

R² (전체)R² (근거리 제외)재현율 (전체)재현율 (제외)
RoboCasa exo1 / exo20.870.93
RoboCasa wrist0.650.400.740.59
DROID ext1 / ext20.65 / 0.680.80 / 0.82
DROID wrist0.330.220.540.36
그리퍼를 빼면 더 나빠집니다. wrist 픽셀의 일부(RoboCasa 15.6% @0.05m, DROID 5.9% @<0.25m)는 카메라에 강체로 붙은 그리퍼라 예측이 자명합니다. 이걸 제거하면 실제 장면 depth 성능이 드러납니다 — DROID scene별 far-field R²는 0.06 / 0.01 / 0.59로, 3개 중 2개는 GT와 상관이 사실상 0입니다.

왜 wrist만? 뷰가 보는 거리 범위의 안정성이 결정적으로 다릅니다:

z_max 변동span 변동CV
exo11.61–2.09m (×1.3)×1.40.12
exo21.63–2.00m (×1.2)×1.20.07
wrist0.63–1.42m (×2.3)×2.40.28
메커니즘 가설(미증명): per-view min-max 정규화 + 항상 존재하는 그리퍼가 범위 한쪽 끝을 고정 → 장면 구조가 좁은 구간에 압축. 게다가 wrist는 장면마다 범위가 2.3배 출렁여 일관된 매핑을 배울 수 없어 평균으로 hedge → flat. exo는 범위가 안정적(CV 0.07~0.12)이라 이 문제가 약함.

5보류 — 뷰 슬롯별 gain (RoboCasa에서만 재현)

RoboCasa의 두 agentview는 intrinsic이 동일하고 보는 거리대도 같은데, 같은 물리 거리에서 exo2 = exo1 × 1.87 ± 0.16 (8 scene 전부 일관):

거리exo1exo2
0.4–0.5 m0.2460.502
0.6–0.8 m0.1800.339
1.0–1.3 m0.1000.185
DROID에서는 재현 안 됨 — ext2/ext1 = [1.03, 1.63, 1.38] (mean 1.34, 분산 큼). 교란 요인: RoboCasa agentview_left/right는 고정 canonical 카메라지만 DROID ext1/ext2는 세션마다 삼각대 위치가 제각각입니다. 따라서 1.87은 순수 슬롯 identity bias가 아니라 고정 카메라 기하와 교락됐을 수 있습니다. → 통제실험(같은 장면에서 카메라만 슬롯 교체) 전까지 주장 보류.

6반증 균형 — joint 3D 기하는 실재함

결함만 나열하면 불공정하므로 반대 방향도 검증했습니다. GT를 전혀 쓰지 않고 두 exo 클라우드의 3D 정합만으로 exo2의 스케일을 풀었을 때:

consistency만으로GT로 fit차이
exo2 depth 오차6.0 cm4.7 cm+1.3 cm
slope 상대오차23.9%
생성 exo1↔exo2 정합5.1–7.7 cmGT 기준선 1.0 cm
뷰별 독립 monocular 추측이었다면 이렇게 될 이유가 없습니다. 모델 안에 하나의 일관된 3D 장면이 있고, 뷰별 정규화는 그 위에 씌워진 출력 인코딩이라는 뜻입니다.
wrist는 판정 불가: GT끼리도 exo1↔wrist가 17.7cm(overlap이 거의 없음)라 정합 목적함수가 비중첩 영역에 지배됩니다. 생성값 15.7–19.0cm는 정확히 이 기준선 — 모델 실패 증거가 아니라 테스트의 한계입니다.

과거 결과 정정: 260623의 cross-view 12.2cm는 하나의 전역 affine을 강제해 나온 값입니다. per-view 정규화가 실재하므로 올바른 파라미터화로는 ~6.5cm — 모델의 3D 일관성은 당시 결론보다 약 2배 좋습니다.

7최종 판정 & 다음

#주장근거 강도
1per-view·per-scene up-to-affine → 논문의 "3D spatial reconstruction"은 뷰별·장면별 외부 스케일 앵커 없이는 성립 안 함강함 (sim·실사, 두 ckpt 모두)
2근거리(wrist) depth 붕괴 — 실사 R² 0.22~0.33. 조작 영역이 가장 약함강함 (DROID에서 악화)
3뷰 슬롯 gain 얽힘 (1.87×)보류 (DROID 미재현)
4joint 3D 기하 자체는 실재 → "3D를 모른다"는 과장반증 균형
연구 각도: 이 결함은 고칠 수 있는 종류라 baseline 개선 스토리가 됩니다 — (a) 장면 독립 정규화(metric / log-depth / 고정 기준 disparity)로 타깃 변경, (b) 스케일 명시적 예측, (c) cross-view metric consistency loss. 평가 시에는 그리퍼 픽셀을 제외한 근거리 depth를 별도 보고해야 합니다(현재 지표는 그리퍼가 부풀림).
한계: frame 0만, RoboCasa 8 scene / DROID 3 scene. 학습 시 depth 정규화 스킴은 비공개라 역추론(b≈z_max 증거는 exo에서 강하고 wrist는 약함). VAE 3채널 평균 디코딩이 압축을 더할 가능성(단, 세 뷰에 동일 작용이라 exo/wrist 격차는 설명 못 함). wrist joint 기하는 중첩 마스킹/3뷰 동시 최적화로 재판정 필요.