Index
2026-08-14 — Engineering

RoboCasa X-WAM 데이터 마이그레이션 — Depth/Camera Pose 복원 파이프라인 재구축

VGGRPO | Phase 2 LGM 구축 | jobs 80201, 80202

TL;DR

4.8mm
Cam Fit Residual (median)
1320
Episodes Cached
L2
Best Stitch Layer
0.0311
Stitch MSE

1 배경 / 목적

Phase 2 LGM(VGGT-Ω backbone) 학습에 쓰던 216×384 RoboCasa 3-cam HDF5 corpus가 삭제되어, 남은 것은 ~/Datasets/RoboCasa_{sealed,linlog}의 X-WAM 패키징(RGB/depth/pointmap을 8-bit H.264 mp4로, episode당 JSON 메타)뿐이었다. 이 포맷에는 LGM이 필요로 하는 두 가지가 직접 저장돼 있지 않다:

기존 한계: (1) metric depth가 uint8 linlog로 인코딩돼 있어 그대로 쓸 수 없고, (2) VGGT camera loss가 소비하는 camera intrinsics/extrinsics가 아예 저장돼 있지 않다. 둘 다 없으면 X-WAM 데이터로 LGM 재학습 자체가 불가능.

추가로 VGGT-Ω의 pretrained operating point(~1024 token)에 맞추기 위해 해상도를 216×384에서 512×512로 올리기로 하면서, 기존 21×37 patch grid 기준으로 fit된 stitch layer 결과도 재사용 불가 — 처음부터 다시 파이프라인을 세워야 하는 상황이었다.

2 작업 내용

1) Feasibility probe — depth/pose 복원 가능성 검증

scripts/probe_xwam_robocasa.py로 단일 episode에 대해 먼저 검증:

1. DepthLinLog(near=0.02, d_box=2.0, far=8.0, f=0.8) 로 depth mp4 디코딩 2. RoboCasa MuJoCo vertical-FOV 관례로 K 추정 (agentview 60°, eye_in_hand 75°) 3. depth로 unproject한 camera-frame 포인트를 pointmap의 world-frame 포인트에 Kabsch rigid fit -> per-frame cam->world T, residual로 K/FOV 가정 검증 (60도 wrist 가정 시 63mm 오차, 75도로 바로잡으면 4.1mm로 급감 — FOV 값이 정답인지 residual로 바로 드러남)

2) 전체 배치 cam cache 구축 (job 80201)

scripts/build_xwam_cam_cache.py + .sh — 16-shard 병렬, CPU-only (sbatch --gres=gpu:1 -c 32 --mem 128GB --qos=extra). 1320개 episode × 3 cam (agentview_left/right, eye_in_hand) 각각에 K/T/residual을 <episode_key>.npz로 저장. static camera는 거의 안 움직이고 wrist만 프레임마다 이동해야 한다는 사실을 span 값으로도 교차 검증.

3) Stitch layer 재탐색 (job 80202)

scripts/find_stitch_layer_vggt_dinov2.py + find_stitch_layer_vggt_dinov2_xwam.sh — 512×512 → VAE 64×64 latent → 32×32 patch grid(1024 token, VGGT-Omega native)로 closed-form ridge regression 재적합. 이전 결과는 삭제된 216×384(21×37 grid) 기준이라 그대로 못 쓴다.

4) 새 학습 recipe — train_lgm_xwam.sh

단순 dataset 갈아끼우기가 아니라, 기존 8-frame 파이프라인에서 미해결이던 두 가지 설계 결함을 같이 고쳤다:

--vae_per_frame 프레임을 하나씩 개별 VAE 인코딩 (T_lat == T). 기존 8-frame -> 2-latent 압축 + trilinear 보간 방식은 clip 내 단조 붕괴(wrist AbsRel 0.016 @t=0 -> 0.308 @t=7, 260728 진단)의 주범이었음 -> 보간 자체를 제거 --depth_param log residual을 log-depth로 측정. 기존 절대-미터 residual은 wrist (근접, 절대오차 작음)를 과소평가해 agentview 대비 66%로만 카운트됨. wrist 전용 가중치(ablation A5, view_weights_depth=1,1,2.5)로도 L_reg 0.0576 -> 0.0559로 거의 안 움직여 근본 원인이 아니라고 결론 --alpha_conf 0 log(conf) reward 제거 — "confidently wrong"을 보상하던 항 삭제

4 GPU DDP로 제출하도록 구성: sbmr 20 "bash scripts/train_lgm_xwam.sh" --gres=gpu:4 -c 30 --mem 800GB --qos=extra.

3 결과 (수치)

Job내용소요결과
80201cam cache 구축 (16 shard)16m29s1320/1320 episode COMPLETED
80202stitch layer 재탐색3m30sbest layer=2, MSE 0.0311

Cam cache fitting residual (전 16 shard 공통 경향)

지표비고
median residual4.8mm16개 shard 전부 동일하게 4.8mm — FOV 가정이 일관되게 맞음
p95 residual8.8 ~ 17.9mmshard별 편차
worst outlier최대 38.1mmepisode_0000777/0000858/0000798 등 eye_in_hand 소수 클립
핵심 발견: quantization floor(~9.7mm/level, median ~5mm 기대)에 근접한 4.8mm median으로 FOV 가정(60°/75°)이 1320 episode 대부분에서 정확함을 확인 — MuJoCo 재실행 없이 depth+pointmap만으로 camera pose 복원이 가능함을 대규모로 검증.

Stitch layer MSE (layer별, VGGT-Ω DINOv2 patch_embed)

LayerMSE
2 (best)3.108e-02
43.542e-02
67.262e-02
82.254e-01
121.606e+00
22 (worst)1.171e+02
미실행:train_lgm_xwam.sh recipe는 작성만 완료, SLURM sacct에 제출 기록 없음 — 이번 세션에는 학습 loss/수렴 수치가 아직 없다.

4 Takeaway

의미

원본 HDF5 corpus가 소실돼도 X-WAM의 depth+pointmap 조합만으로 metric depth와 camera pose를 mm 단위 정밀도(median 4.8mm)로, MuJoCo 재실행 없이 대규모(1320 episode)로 복원할 수 있음을 확인했다. 이는 RoboCasa human demo(24 task × 55 episode) 기반 LGM 재학습 경로가 완전히 막히지 않았다는 뜻이고, 동시에 512×512/1024-token 해상도로 갈아타면서 VGGT-Ω 네이티브 operating point에 더 가깝게 정렬할 기회가 됐다.

또한 이전 학습에서 원인 불명이던 wrist-view 저품질 문제를, A5 view-weight ablation(효과 미미)이 아니라 temporal interpolation 구조 자체depth residual의 스케일 파라미터화 라는 더 근본적인 설계 결함으로 재규정하고 이번 recipe에 직접 반영했다.

5 Next Steps

미해결 한계

train_lgm_xwam.sh가 아직 SLURM에 제출되지 않아, vae_per_frame + log-depth 조합이 실제로 wrist AbsRel을 개선하는지는 검증 전이다. 또 cam cache의 소수 outlier episode(예: episode_0000148, 0000836, 0000798/0000777/0000858의 eye_in_hand, residual 18~38mm)가 FOV 가정 오차인지 개별 조사가 안 됐다.

다음 실험

1) sbmr 20 "bash scripts/train_lgm_xwam.sh" --gres=gpu:4 -c 30 --mem 800GB --qos=extra로 dino4/agg2 학습 실제 제출 — 50K step 목표. 2) 학습 후 wrist AbsRel 프로파일(t=0~7)을 다시 측정해 temporal collapse가 실제로 사라졌는지 확인 (가설: vae_per_frame으로 anchor/interpolated 구분 자체가 없어지므로 t별 편차가 평탄해질 것). 3) outlier residual episode 5~10개를 fovy sweep으로 재검증.