← 목록
2026-07-01 · X-WAM · Experiment

X-WAM depth 예측 → 실사 DROID → 3D 시각화

범용 pretrained(5,800h) 체크포인트로 실로봇 DROID 장면에서 depth 생성·언프로젝션

TL;DR

5,800h
pretrained corpus
3
DROID 뷰
2
에피소드(7·17)
0.20
gen depth std

1배경 / 목적

X-WAM은 멀티뷰 RGB로부터 미래 4D 관측(video+depth)을 joint 생성하는 모델이다. 이전(260623)까지 depth의 3D consistency는 RoboCasa 시뮬레이션(in-distribution)에서만 검증했다. 이번 목표는 "X-WAM의 depth 예측이 실사(real-world) 도메인에서도 유효한가"를 DROID(실로봇 Franka, RGB-only)에 inference해서 3D로 확인하는 것.

제약: (1) 로컬 유일 ckpt robocasa_sft는 RoboCasa sim 전용 파인튜닝 — depth branch도 sim z-buffer로 학습돼 실사엔 강한 OOD. (2) DROID엔 GT depth도, 카메라 intrinsic/extrinsic도 없음(표준 lerobot 변환).

2작업 내용

체크포인트 — HF sharinka0715/X-WAM-checkpoints의 3종(각 38.9GB) 중 범용 pretrained를 택함. DROID(대형 실로봇 데이터)가 5,800h pretraining 코퍼스에 포함됐을 가능성 → in-distribution 기대. 함정: pretrained/config.yamldataset: 블록·통계가 없어(bare 학습 config), gen 시 video_size=[256,320]·crop_ratio=0.95·action_num=4를 주입.

데이터 — 공유 HF 캐시의 IPEC-COMMUNITY/droid_lerobot(Franka, 3뷰 exterior_1/exterior_2/wrist, 180×320)에서 ep7·17의 3뷰를 hf_hub_download로 개별 다운로드. 함정: DROID lerobot mp4는 AV1 코덱이라 decord가 못 읽음 → imageio.v3(ffmpeg7+libdav1d)로 해결.

생성 tmp/gen_droid_rgbd.py — 첫 프레임 3뷰 RGB → resize/center-crop [256,320] → proprio=zeros(DROID proprio는 다른 world frame OOD; depth는 RGB conditioning 지배) → forward(run_depth=True, cfg=2.0) → RGB+depth latent VAE decode → 뷰별 분리 저장.

3D lift tmp/viz_droid_3d.py — GT/calibration 없으므로 assumed pinhole(FOV_x=70°) + normalized depth[0,1]→상대거리 z=z_near+(z_far−z_near)·(1−gen)(RoboCasa에서 관측한 "높은 gen값=近" 규칙). 뷰별 카메라프레임 단일 클라우드(cross-view fuse 불가). static PNG + viser + PLY export.

3결과

두 에피소드 모두 정상 생성: gen_rgb(3,9,256,320,3), gen_depth(3,9,256,320). depth에 실제 구조 존재(collapse 아님) — 전체 std ep17=0.197 / ep7=0.210, 프레임0 뷰별 std 0.11~0.24, p5–p95 spread 0.05~0.85.

DROID ep17 depth 3D
ep17 (실험실 책상+냄비) — 좌→우: 입력 RGB / 생성 RGB / 생성 depth / 포인트클라우드. 책상 평면 근→원 그라디언트, 냄비 depth 분리, 배경 후퇴.
DROID ep7 depth 3D
ep7 (라운드 테이블+토스터) — 토스터가 뚜렷한 depth 돌출, 원형 테이블 방사 그라디언트, 벽 배경 분리.
생성 RGB가 처음 보는 실사 장면을 충실히 재구성하고, 생성 depth가 공간적으로 일관됨 → pretrained는 실사 DROID에 일반화. 초기 OOD 우려는 robocasa_sft 한정이었음.

4Takeaway

X-WAM의 depth 예측 능력이 sim(RoboCasa)을 넘어 실사(DROID)에서도 유효함을 정성 확인. 범용 pretrained가 진짜 4D world 사전학습의 이점을 보여줌 — 처음 보는 실사 장면에서 RGB 재구성 + 구조적으로 타당한 depth를 동시 생성. calibration 없는 실사 데이터용 재사용 가능한 depth→3D 파이프라인 확보.

해석: RoboCasa 파이프라인은 GT depth로 metric scale-align + cross-view fusion까지 했지만, DROID는 calibration 부재로 상대(up-to-scale) 재구성에 그친다. 그럼에도 depth 맵 자체(3열)가 장면 기하를 잘 담고 있어, "depth 예측 능력"이라는 질문엔 충분히 긍정적으로 답한다.

5Next

항목내용
metric + fusionDROID 원본 RLDS의 Zed intrinsic/extrinsic 확보 시 metric scale + 3뷰 world fusion 가능(현재 뷰별 단일 클라우드).
viser 인터랙티브static scatter는 노이즈로 가독성 낮음 → viser로 회전/줌 확인(PLY 6개 이미 export).
시간 일관성미래 프레임(t=1..8) depth의 시간적 3D 일관성 미검증.
일반성현재 ep7·17만 — 더 많은 에피소드 + FOV/sign/near-far 튜닝.

6업데이트 — real calibration으로 world-frame fusion + 정합 정량화

질문: intrinsic/extrinsic이 없으면 3D 정합이 되는지 검증 자체가 불가능하다 (맞음). → 실제 calibration을 확보해 RoboCasa처럼 world fusion + 정합 정량화.

calibration 소스 발견: lerobot/OXE-RLDS 변환본은 모두 카메라 파라미터를 제거했지만, raw DROID(gs://gresearch/robotics/droid_raw)의 trajectory_im128.h5(1.3MB) 하나가 프레임별 intrinsic(3×3)+3뷰 extrinsic(6-vec, camera→robot-base)을 담고, MP4(1280×720 RGB)와 함께 있어 scene 하나가 자체완결 — 크로스-데이터셋 매칭 불필요.

방법: MP4 frame0 → X-WAM depth. adjust_K(1280×720→256×320 전파) + pose6→4×4(euler xyz, OpenCV cam frame). 상대 depth→metric은 전역 (a,b) 2개만 ext1↔ext2 정합으로 fit(per-view/크로스뷰 최적화 아님 → 비순환). KAIST/CLVR 3 scene.

Sceneext1↔ext2 median NN장면 크기비율
2023-06-254.4 cm0.45×0.77×0.30 m~6%
2023-06-065.3 cm0.67×0.91×0.51 m~7%
2023-05-178.0 cm0.79×1.22×0.45 m~8%
DROID world fusion ep0625
2023-06-25 (4.4cm). "fused by-camera R/G/B" 패널에서 red(ext1)·green(ext2)이 world 공유 테이블에 겹침.
DROID world fusion ep0606
2023-06-06 (5.3cm). 실제 robot-base world 좌표계.
결론: "X-WAM depth가 3D에서 정합되는가?" → YES(전역 스케일 하나까지). 서로 다른 각도의 두 exterior에서 독립 예측된 depth가 실제 카메라 파라미터로 world에 모여 4~8cm 일치 → 기하적으로 3D-consistent. RoboCasa 생성(~12cm) 동급 이상. 모든 scene에서 a<0(inverse depth)로 RoboCasa와 동일 컨벤션.
한계: 이 단계까진 metric GT depth 없이 전역 스케일 fit → 다소 낙관적일 수 있음(§7에서 GT로 정정).

7업데이트 — GT(실제 Zed depth)로 정확도 검증

GT 확보: PointWorld-DROID-restored/depth_320x180/<uuid>_depth.h5 = Zed 센서 metric depth(180×320 uint16 mm). 내 3 CLVR scene 모두 존재. (공유 경로는 읽기 전용으로만 접근.)

발견 1 — X-WAM depth는 inverse-depth(disparity)류: metric 선형 fit 시 GT-vs-X-WAM 산점도가 S-커브(far 포화). disparity 공간(1/GT≈a·gen+b)에서 fit하니 y=x에 붙음.

median 오차상대mean(MAE)
ext12.7~7.4 cm10~15%7.8~19 cm
ext22.2~10 cm12~17%23~31 cm
wrist6.6~9.3 cm18~24%10~15 cm

X-WAM↔GT 클라우드 대칭 median NN = 2.0 / 3.3 / 3.7 cm (3 scene).

X-WAM vs GT depth
열: gen RGB / GT depth / X-WAM depth(GT 스케일) / 오차맵 / GT-vs-X-WAM 산점도. 테이블 영역이 y=x에 붙음.
GT vs X-WAM cloud overlay
파랑=GT Zed 센서, 빨강=X-WAM. 테이블에서 겹침(NN 2.0cm) / 위쪽 파란 판=먼 배경(GT만, X-WAM은 포화).
GT 검증 결론: X-WAM depth는 조작 작업공간에서 실제 Zed 센서와 2~9cm(상대 10~24%) 이내로 일치 — 단순 상호일치가 아닌 진짜 정확. 실패 모드: 먼 배경(2~4m)은 depth 포화로 부정확(median 2~9cm인데 mean 8~31cm인 이유), wrist(top-down·이동) 뷰 약함. 앞선 cross-view 4.4cm는 낙관적이었고 GT-anchored가 진짜 그림.