HCPT 학습 manifest 빌드 시 --pt_max_abs=100 필터로 VGGT/ViPE reconstruction 실패 clip을 제거하고 있다. 이 필터가 실제로 얼마나 탈락시키는지, 전체 point map scale 분포가 어떤지 파악하여 필터 기준의 적절성을 수치로 검증한다.
scripts/build_hcpt_manifest.py의 필터링 파이프라인을 재현하여 각 단계별 탈락 수를 집계하고, PT가 존재하는 3761개 clip의 norm_params.json에서 max(|min|, |max|) 값의 분포를 분석했다.
HCPT는 prior+gt가 같은 scene 좌표계에 있어 within-clip consistency만 있으면 충분하다. Fixed global norm은 cooking 장면(~3m)과 basketball 장면(~30m)의 VAE dynamic range를 다르게 쓰게 되어 오히려 불리. percentile 재계산도 시도했으나 reconstruction 실패 clip은 100% valid points이라 percentile로 해결 불가.
| 단계 | 탈락 수 | 남은 clip | 비율 |
|---|---|---|---|
| vipe 원본 | — | 3,899 | 100% |
| RGB/prior 누락 | 0 | 3,899 | 100% |
| PT 파일 누락 | 138 (3.5%) | 3,761 | 96.5% |
| 100m 스케일 필터 | 101 (2.7%) | 3,660 | 93.9% |
| 최종 (train/val) | — | 3,660 | — (3318/342) |
| Percentile | 값 | 비고 |
|---|---|---|
| P1 | 2.67m | |
| P10 | 5.23m | |
| P25 | 7.45m | |
| P50 | 10.98m | 중앙값 |
| P75 | 24.84m | |
| P90 | 39.27m | |
| P95 | 59.90m | 100m 기준 이내 |
| P99 | 1,555.96m | reconstruction 실패 군집 |
중앙값 ~11m, 93%가 50m 이내라는 분포를 감안하면 100m는 정상 데이터를 거의 건드리지 않으면서 (P95=60m 이내) reconstruction 실패 outlier를 효과적으로 제거한다. 50m로 기준을 내리면 149개(4.0%) 추가 제거 — 일부 정상 야외 장면이 포함될 위험. 100m가 균형점.
per-clip norm 유지 결정도 이 분포에서 합리화된다: cooking(3m) ↔ basketball(30m) 간 10배 차이가 있어 global norm은 어느 쪽에도 최적이 아님. clip별 정규화가 VAE latent space를 최대한 균등하게 활용.
ViPE extraction 실패인지 아니면 clip 자체의 문제인지 확인 필요. 현재는 drop하고 진행.
이 구간이 실제로 품질이 양호한지 확인 후 threshold를 50m로 낮출지 결정. 현재 학습에는 포함.
ego PT orientation 보정 후 max|xyz| 분포 변동 예상 — 재필터링 필요 여부 확인.