DroidMultiviewDataset 신설 (DroidDataset 얇은 subclass), _build_ego_cond hook 1개 override로 완성. 기존 baseline 코드/캐시/실험 결과 영향 없음기존 configs/droid.yaml 학습은 ego 영역 전체를 zero-padding으로 conditioning하고 exo에서 ego 전체를 예측한다. 이 경우 모델이 ego 카메라의 초기 자세/시점 정보를 순전히 exo로부터 추론해야 하므로 생성된 ego 첫 frame이 GT와 공간적으로 어긋나기 쉽다.
droid.yaml과 동일 step/동일 validation set으로 ego PSNR/LPIPS 직접 비교 가능.코어 파이프라인 (encode_ego_first_frame_condition, apply_ego_only_noise, build_wan_i2v_mask)은 이미 first-frame conditioning을 지원하는 설계였다. training/validation 호출부에서만 ego_first_frame=None이 하드코딩되어 있었을 뿐이다.
dataset_type: droid_multiview 신설 + DroidMultiviewDataset을 DroidDataset의 얇은 subclass로 두는 방식을 택했다. flag 방식은 dataset 클래스 내부에 if/else가 퍼져 혼선이 생긴다. 이 방식은 기존 droid.yaml 실험과 완전히 격리되고 override 지점도 _build_ego_cond 하나로 최소화된다.
scripts/smoke_droid_multiview.sh| 검증 항목 | 방법 | 결과 |
|---|---|---|
| 7개 파일 syntax | python -m py_compile | 전부 통과 |
| DroidMultiviewDataset import | from core.finetune.datasets import DroidMultiviewDataset | 성공 |
| subclass 관계 | issubclass(DroidMultiviewDataset, DroidDataset) | True |
| hook override | qualname 확인 | DroidMultiviewDataset._build_ego_cond |
| schema | Args.model_fields["dataset_type"].annotation | Literal[..., "droid_multiview"] |
=== PHASE 1 DONE === → MSE/PSNR 출력 → === PHASE 2 DONE === → === SMOKE TEST PASSED ===. 이후 first_frame_pred_vs_gt.png 육안 확인.droid.yaml 학습 경로, 캐시, checkpoint에 영향 0.코어 파이프라인이 이미 first-frame conditioning을 1st-class citizen으로 지원하는 설계였기 때문에, 이번 작업은 dataloader hook 1개 + validation 주입 1곳 + 새 config 1개로 끝나는 최소 침습 실험 세팅이었다. 새 실험 축 (droid_rgb zero-cond vs droid_rgb_multiview first-frame-cond)이 열렸다. ego 첫 frame anchor가 있을 때 초반 drift, ego temporal consistency, wrist 자세 추적이 얼마나 개선되는지 직접 수치 비교가 가능해진다.
첫 epoch에서 per-episode ego_first_frame_cond safetensors가 캐싱되면 이후 epoch부터 step cost overhead가 사실상 0으로 수렴하는 점도 중요하다. 추론 시 --use_ego_first_frame 플래그를 빠뜨리면 학습 분포와 다른 conditioning이 들어가므로 운용 시 주의가 필요하다.
성공 마커 확인 후 first_frame_pred_vs_gt.png 육안 체크. ego pred frame 0이 gt frame 0과 공간적으로 얼마나 일치하는지 MSE/PSNR 수치로 판단 가능.
첫 epoch에 cache/ego_first_frame_cond/droid_rgb/ 아래 per-episode safetensors 누적. episode 수 × latent 크기 만큼 디스크 모니터링 필요.
동일 step / 동일 validation set에서 baseline droid.yaml vs droid_multiview.yaml의 ego PSNR/LPIPS, temporal consistency 비교. 본 학습 완료 후 analysis 카드로 기록 예정. Training 중 validation ego 영상에서 pred vs gt frame 0 시각적 drift를 1000 step 단위로 기록 추천.
Training/validation 픽셀 불일치: training은 decord + torchvision resize, validation은 diffusers load_video + PIL resize. 리사이즈 알고리즘 차이로 첫 frame 픽셀이 미세하게 다를 수 있다. I2V cond 수준으로는 충분하지만 정밀 parity가 필요하면 validation도 _load_video 경로로 리팩터 필요.