Projects/AI 아이트래킹 모델 프로젝트

[프로젝트 A-EYE] 3. 시선추적_월드 깊이맵 구현

ha2yong 2025. 9. 16. 22:40

과제: 하나의 월드 카메라로 월드 영상의 x,y,z(깊이) 좌표 맵을 생성한다.

사람은 두 눈의 시차를 이용해서 사물의 깊이감을 판단한다. 다만 본 프로젝트는 월드 카메라(눈)의 개수가 하나이므로 시차를 알 수 없다. 따라서 하나의 월드 카메라로 깊이를 알 수 있는 AI 모델이 필요하다. 

월드 깊이맵 파이프라인: 

  • 제약: 하나의 world카메라로 2D 이미지에서 깊이를 구해야 함.
  • 모델: Depth-Anything(2024)
  • 1. MediaPipe FaceMesh로 양쪽 홍채 4점을 얻는다.
  • 2. 각 홍채 4점으로 홍채 평면을 추정하고 법선(= 시선방향 근사)을 구한다.
  • 3. 홍 채 반지름으로 눈알(구형) 중심을 근사한 후 시선벡터를 구한다.
  • 4. 좌/우 눈에서 나온 두 시선벡터의 최근접점 중점(P_mid)을 3D 응시점으로 사용.

이론적 배경:

Depth-Anything은 단일 이미지만으로 깊이(Depth)를 예측하는 모노큘러(단안) 깊이 추정 파운데이션 모델이다.

  • 핵심 아키텍처: DPT(decoder) + ViT 백본(※ DINOv2로 사전학습) 조합.
  • 데이터 전략
    • V1: 150만 라벨 + 약 6,200만 장 비라벨 이미지를 자체 데이터 엔진으로 수집·유사 라벨링(의사라벨)하여 학습. 학습을 어렵게 만드는 강한 증강과, 사전학습 인코더의 의미론(semantic) 프라이어를 이어받는 보조 손실을 도입.
    • V2: 라벨된 실사 대신 59.5만 장 합성 라벨 데이터로 교체, 더 큰 티처 모델로 학생을 가르치는 Teacher-Student 학습, 그리고 대규모 실사 의사라벨 브리지를 결합. SD계열 기반 모델보다 더 빠르고 정확하다고 보고됨. 
  • 모델 스케일: Small / Base / Large 

출력은 “상대 깊이”가 기본, “절대(미터) 깊이”는 선택

  • 기본 모델(“relative”)은 장면 내 깊이 순서/대비만 올바르면 된다. 따라서 결과는 스케일/시프트가 임의라서, 실제 미터 단위가 아니다.
  • 메트릭 모델(“metric”)은 NYU/KITTI 같은 실측 라벨로 파인튜닝해, 미터 단위에 가깝게 보정된 출력을 낸다.(여전히 카메라/도메인 차이에 따른 오차는 존재)

절대 깊이로 측정 방법

  1. 메트릭 전용 체크포인트 사용
  2. 한 장면에서 한 번의 스케일·시프트 보정: D_corr = a * D_pred + b를, 알려진 평면(예: 체커보드) 거리/크기로 robust 회귀하여 추정.
  3. 동영상이면 EMA/가이던스 평활화 또는 Video Depth Anything 같은 영상 일관성 버전을 고려.

아키텍처 한 장 설명

  • 백본: ViT-S/B/L(±G) (DINOv2 사전학습) → 다단계 피처 맵 생성
  • 디코더(DPT): 트랜스포머 피처를 멀티스케일로 집계·업샘플링해 밀집(depth) 맵 예측
  • V2 변경점: DINOv2의 중간 계층 피처를 사용하는 등 세부 해부가 약간 수정

언제 특히 잘 쓰이나 / 한계는?

장점

  • 실내·실외, 다양한 카메라/장면에서 제로샷 일반화가 강함.
  • 경계·질감 보존이 좋아 합성(예: ControlNet-Depth)이나 영상 편집 파이프라인에 바로 투입 가능.

주의할 점

  • 반사/투명/무패턴(하늘·유리·거울·광택 금속) 영역은 어떤 모노큘러 모델도 불확실.
  • 초광각·왜곡은 사전 언디스토션이 안정적.
  • 실제 길이·거리 사용 시엔 내부파라미터/베이스라인이 없으므로 위의 스케일·시프트 보정 또는 메트릭 모델이 필요.

파이프라인 단계별 분류