Index
2026-05-08 — Progress

DROID Superset Extrinsic Override + Wrist-View Reproject 렌더

EgoX v2 (EgoX2_exp1) | viz_superset.py

TL;DR

262
Frames
3840×720
해상도
157 MB
mp4 크기
~2분
CPU 렌더 시간

1 배경 / 목적

visualization/viz_superset.py는 viser 기반 pointcloud 뷰어로, ext1/ext2 카메라 extrinsic을 episode별 egox_meta.json 값으로 사용하고 있었다.

기존 한계: egox_meta.json의 extrinsic은 per-episode 추정값. DROID superset JSON(cam2base_extrinsic_superset.json)에는 더 정제된 GT/Pred extrinsic이 serial별로 존재하는데 활용하지 않았음.

두 가지 목적이 있었다:

2 작업 내용

1. Superset 6-vec → 4×4 c2w 변환 규약 식별

JSON 한 entry는 serial별로 [tx, ty, tz, rx, ry, rz] 6-vec. 변환 규약을 한 episode에서 brute-force 매칭:

파일: visualization/viz_superset.py 신규 함수: euler_xyz_zyx_to_R(rx, ry, rz) 신규 함수: superset_vec6_to_c2w(vec6) override: apply_superset_overrides() → egox_meta["extrinsics"]의 ext1/ext2 항목을 [c2w.tolist()]로 교체 wrist는 per-frame dynamic이라 override 제외

2. Default UUID 5개 갱신

기존 default UUID 5개는 superset JSON에 없어 무용지물. 조건: superset JSON 실재 + metadata(train/val) 존재 + ext1/ext2 _source == "GT". Lab별 1개씩 선별:

AUTOLab+9aed6d7a+2023-11-07-17h-06m-48s CLVR+236539bc+2023-05-16-19h-31m-49s GuptaLab+553d1bd5+2023-04-30-16h-23m-47s ILIAD+j807b3f8+2023-05-11-17h-54m-46s IPRL+41a1536a+2023-10-30-17h-09m-06s

3. Wrist-view reproject mp4 생성 (--render_mp4)

render.pyrender_splat()(z-buffer + radius splat)을 가져와서 프레임별 렌더링:

  1. ext1 depth → ext1 intrinsic으로 backproject → ext1 c2w(superset)로 world 변환
  2. world points를 wrist per-frame c2w로 변환 + wrist intrinsic으로 projection
  3. ext2도 동일 처리
  4. GT wrist frame + ext1→wrist + ext2→wrist → (W*3, H) 3-panel 캔버스 합성
  5. cv2.VideoWriter(mp4v)로 저장

--render_mp4 모드일 때는 viser 서버를 띄우지 않고 종료하도록 분기 처리.

3 결과

항목비고
Override 적용 확인ext1=GT ext2=GTsuperset_status 로그 정상
렌더 프레임 수262 framesCPU 단독, 약 2분 소요
출력 해상도3840×720W*3 (1280*3) × H(720)
mp4 크기157 MBmp4v codec, 10 fps
mid-frame RGB mean37.3비제로, 정상 영상 확인
시각 확인: GT wrist 패널에 gripper + 색상 블록이 보이고, ext1→wrist 패널에 동일 색상 블록이 외부 뷰 기반 partial coverage로 reproject됨. ext2→wrist는 wrist FOV와 겹침이 적어 sparse (geometry는 정상).

실행 명령

python visualization/viz_superset.py --render_mp4 \ --uuid AUTOLab+9aed6d7a+2023-11-07-17h-06m-48s \ --mp4_out_dir ./tmp/viz_superset_test # 출력: ./tmp/viz_superset_test//wrist_view_super.mp4

4 Takeaway

의미

superset JSON의 6-vec extrinsic 규약(translation + Euler ZYX)을 확정했다. 이 규약은 앞으로 다른 스크립트에서도 안전하게 4×4 c2w로 변환해서 사용할 수 있다.

또한 ext1/ext2 calibration 품질을 wrist 시점에서 픽셀 단위로 직접 비교할 수 있는 뷰가 생겼다. render 결과와 GT 사이의 RGB 차이를 같은 좌표계에서 정량/정성 평가 가능해져, 캘리브레이션 오차가 있는 episode를 선별하거나 extrinsic 추정 품질을 데이터셋 단위로 스크리닝하는 기반이 마련됨.

5 Next Steps

Orientation 정렬 미검증

현재 wrist 패널과 reproject 패널의 orientation은 raw metadata 그대로. DROID wrist mp4가 depth 좌표계와 다른 각도로 회전돼 있을 가능성이 남아 있음 (ZED 카메라 mount 방향 이슈). reproject가 GT와 180° 어긋난다면 wrist mp4 또는 depth를 flip하여 alignment 비교 필요.

codec 개선 (옵션)

현재 mp4v는 호환성 좋지만 압축률이 낮음 (262 frame → 157 MB). 필요 시 H264/avc1 fourcc로 교체 (codec 가용성 확인 필요).

5개 UUID 전체 스크리닝

5개 default UUID 모두에 대해 실행하여 ext1/ext2 GT calibration 품질이 영상별로 얼마나 일관되게 맞는지 훑어볼 것. outlier episode 존재 여부 파악.