[논문정리] 3. DUSt3R: Geometric 3D Vision Made Easy

2025. 2. 27. 16:33컴퓨터비전&AI

반응형

3.2. Training Objective (학습 목표) 정리

이 논문에서는 3D 공간에서의 회귀(regression) 기반 손실(loss) 을 사용하여 네트워크를 학습합니다.
핵심 목표:
3D 위치를 예측하는 회귀 손실 사용
스케일 차이를 보정(scale normalization)
신뢰도(Confidence)를 고려하여 가중치를 부여한 학습 진행


🔹 1. 3D 회귀 손실 (3D Regression Loss)

  • 네트워크가 예측한 3D 포인트맵을 정답(Ground Truth)과 비교하여 학습하는 방식
  • 픽셀 i 에 대한 손실(loss)은 단순히 유클리드 거리(Euclidean Distance) 로 정의됨.

스케일 차이(Scale Ambiguity) 문제 해결

  • 예측한 포인트맵과 실제 포인트맵이 크기가 다를 수 있음.
  • 따라서 평균 거리를 기준으로 정규화(normalization) 하여 비교함.
  • 3D 위치 예측을 할 때, 크기 차이(scale difference)를 보정하여 비교하도록 학습함!

🔹 2. 신뢰도(Confidence)를 고려한 손실 함수

실제 3D 데이터를 보면,

  • 하늘(Sky)처럼 3D 위치를 정의하기 어려운 부분이 있음
  • 반투명한 유리 같은 객체는 깊이(Depth) 예측이 어려움
  • 따라서, 픽셀마다 신뢰도(confidence) 점수를 학습해서, 어려운 부분을 더 신중하게 처리하도록 만듦.

🔹 신뢰도 가중 회귀 손실 (Confidence-weighted Regression Loss)

쉽게 말하면?

  • 예측이 어려운 영역에서는 신뢰도를 낮춰서 네트워크가 조정할 수 있도록 함!
  • 너무 높은 신뢰도 값을 방지하기 위해 항상 양수(positive)가 되도록 함.

 


 

3.3. 다운스트림 애플리케이션(Downstream Applications)

 

출력된 포인트맵(Pointmap) 은 다양한 작업을 쉽게 수행할 수 있도록 도와줍니다.


📌 주요 응용 분야 (Downstream Applications)

1️⃣ 포인트 매칭 (Point Matching)

두 이미지 간의 픽셀 대응(correspondence)을 찾는 방법!

  • 3D 포인트맵 공간에서 최근접 이웃(Nearest Neighbor, NN) 검색을 수행.
  • 상호 대응(Mutual Correspondence) 보장:
    • 즉, "서로 가장 가까운 포인트" 인 경우만 매칭 유지!

쉽게 말하면?

  • 3D 공간에서 가장 가까운 점을 찾아서 이미지 간 픽셀 매칭을 수행!
  • 매칭 신뢰도를 높이기 위해 양방향 검색 적용!

2️⃣ 카메라 내부 파라미터 복원 (Recovering Intrinsics)

  • 본 논문에서는 주점(Principal Point)은 이미지 중앙이고, 픽셀은 정사각형이라고 가정하여
    추정해야 하는 유일한 값은 초점 거리(Focal Length, f1f_1)

쉽게 말하면?

  • 출력된 포인트맵을 이용해 카메라의 초점 거리(Focal Length)를 자동으로 추정 가능!
  • 빠른 최적화 기법(Weiszfeld Algorithm)으로 몇 번의 반복(iteration)만으로 계산 가능!

3️⃣ 상대 자세 추정 (Relative Pose Estimation)

두 이미지 간의 회전(R) 및 이동(t) 관계를 찾는 방법!

  • 방법 1: 2D 매칭 + 에피폴라 기하(Epipolar Geometry) 활용
    • 2D 매칭을 수행하고, 카메라 내부 파라미터 복원 → 에피폴라 행렬(E) 추정 → 상대 자세 계산.
  • 방법 2: Procrustes Alignment 활용 (더 직접적인 방법)
    • Procrustes 알고리즘을 이용해 상대적인 회전(R)과 이동(t) 최적화:
  • 하지만, Procrustes는 노이즈 및 이상치(outlier)에 민감!
  • 더 강건한(robust) 방법:
    • PnP (Perspective-n-Point) + RANSAC 적용!
    • RANSAC을 사용하면 이상치를 제거하며 더 정확한 상대 자세 추정 가능!

쉽게 말하면?

  • Procrustes 정렬로 두 이미지의 3D 포인트맵을 직접 비교해 자세(R, t) 계산 가능!
  • 하지만, Procrustes는 노이즈에 취약 → PnP + RANSAC을 사용하면 더 강건한 방법이 됨!

4️⃣ 절대 자세 추정 (Absolute Pose Estimation = 시각적 위치 추정, Visual Localization)

카메라의 절대 위치(Absolute Pose)를 추정하는 방법!

✅ 방법 1: 2D-3D 대응을 이용한 PnP-RANSAC

  1. 질의 이미지 IQ 의 내부 파라미터(Intrinsics)를 포인트맵 XQ,QX로부터 추정
  2. IQIB 간 2D 대응 관계를 찾음 → 이를 기반으로 2D-3D 대응 관계 생성
  3. PnP-RANSAC 적용하여 절대 자세(Absolute Pose) 계산!

✅ 방법 2: 상대 자세(위에서 구한 값) 활용

  1. IQIB간의 상대 자세를 먼저 계산
  2. 이 상대 자세를 세계 좌표계(World Coordinate System)로 변환
    • 변환 시, 실제 3D 포인트맵(ground-truth) 간의 크기 비율(scale factor)을 적용!

쉽게 말하면?

  • 카메라의 절대 위치를 구하는 방법 2가지!
    1️⃣ 2D-3D 매칭 + PnP-RANSAC 적용!
    2️⃣ 상대 자세를 이용해 세계 좌표계로 변환! (스케일 조정 필요)

 

3.4. 글로벌 정렬 (Global Alignment)

📌 핵심 내용 요약

이전까지 설명한 네트워크 두 장의 이미지만 처리 가능했음.
하지만 실제 3D 재구성에서는 여러 이미지가 존재하며, 이들을 하나의 공통 3D 공간으로 정렬해야 함!
이를 해결하기 위해 빠르고 간단한 후처리(Post-processing) 최적화 방법을 도입.

 

여러 이미지에서 생성된 3D 포인트맵을 하나의 3D 공간으로 맞춰 정렬(Global Alignment)!
그래프 기반 최적화(Pairwise Graph + Global Optimization)를 사용하여 포인트맵을 정렬!
기존의 번들 조정(Bundle Adjustment)보다 계산이 빠르고 효율적인 방법!


🔹 1. 이미지 연결 그래프 (Pairwise Graph)

📌 여러 이미지 간 겹치는 부분을 찾아 정렬하기 위해 "연결 그래프(Connectivity Graph)"를 만듦!

1️⃣ 주어진 장면에서 N 개의 이미지 {I1,I2,...,IN}가 존재함.
2️⃣ 각 이미지를 정점(Vertex)으로 설정하고, 두 이미지가 겹치면 간선(Edge)을 연결함.

  • 간선 e=(n,m) 은 두 이미지 In 과 Im이 시각적으로 겹친다는 것을 의미.
    3️⃣ 이미지 쌍을 비교하여 겹치는 정도를 측정하는 방법:
  • 기존의 이미지 검색 방법(Image Retrieval Methods) 을 사용할 수도 있음.
  • 또는 네트워크 를 통해 직접 이미지 쌍을 비교(추론 속도: 약 40ms on H100 GPU)
  • 신뢰도(Confidence)가 낮은 쌍은 필터링하여 제거!

쉽게 말하면?

  • 각 이미지가 겹치는 관계를 찾기 위해 그래프를 구성!
  • 신뢰도가 낮은(즉, 정확하지 않은) 이미지 쌍은 제거하여 최적화 속도를 높임!

🔹 2. 글로벌 최적화 (Global Optimization)

📌 목표: 모든 포인트맵을 공통 3D 좌표계로 정렬!

1️⃣ 각 이미지에 대해 포인트맵을 생성:.

2️⃣ 모든 포인트맵을 하나의 공통 좌표계로 정렬하기 위한 변환 요소 추가:

  • 즉, 각 이미지 쌍을 하나의 3D 공간으로 맞추도록 변환 행렬을 학습!

3️⃣ 최적화 문제 공식화:

  • 각 이미지에서 생성된 3D 포인트맵을 하나의 공통 3D 좌표계로 변환!

4️⃣ 최적화 문제에서 발생할 수 있는 문제 방지:

  • 모든 스케일링 값의 곱이 1이 되도록 강제:

쉽게 말하면?

  • 각 이미지에서 생성된 3D 포인트맵을 하나의 공통 3D 공간으로 변환하는 최적화 문제를 설정!
  • 모든 이미지 쌍의 상대 변환 행렬과 스케일을 조정하여 정렬 수행!
  • 스케일이 0으로 수렴하는 문제를 방지하기 위해 제약 조건을 추가!

🔹 3. 카메라 매개변수 복원 (Recovering Camera Parameters)

📌 이 방법을 확장하면 카메라의 내부/외부 매개변수까지 복원 가능!

카메라 내부/외부 파라미터 복원 방법:
1️⃣ 각 포인트맵을 카메라의 핀홀 모델(Pinhole Camera Model)로 변환:

2️⃣ 이 방법을 통해:

  • 모든 카메라의 자세 {Pn}
  • 내부 파라미터 {Kn}
  • 뎁스맵 {Dn}를 함께 복원 가능!

쉽게 말하면?

  • 3D 정렬 과정을 활용하여 모든 카메라의 내부/외부 매개변수를 추정 가능!
  • 초점 거리, 뎁스맵까지 자동으로 계산 가능!

🔹 4. 기존 방법과 비교 (vs Bundle Adjustment)

📌 기존의 번들 조정(Bundle Adjustment)보다 더 빠르고 효율적인 방법!

기존 방법 (Bundle Adjustment, BA):

  • 일반적으로 2D 재투영 오류(2D Reprojection Error)를 최소화
  • 최적화 과정이 복잡하고 계산량이 많음
  • 수렴 속도가 느리고, 고성능 GPU가 필요할 수 있음

이 방법의 장점:

  • 2D 대신 3D 공간에서 직접 최적화(3D Projection Error 최적화)
  • 표준 그래디언트 디센트(Gradient Descent) 사용 → 빠른 최적화 가능!
  • 일반적인 GPU에서 수 초 내에 최적화 완료!

쉽게 말하면?

  • 기존의 Bundle Adjustment보다 더 빠르고 간단한 3D 최적화 방법!
  • GPU에서 빠르게 계산 가능하며, 정확한 3D 정렬 수행!

📌 최종 요약

💡 여러 이미지에서 생성된 3D 포인트맵을 하나의 공통 좌표계로 정렬하는 방법!

1. Pairwise Graph:

  • 각 이미지가 서로 겹치는 관계를 그래프로 표현하여 최적화 속도 향상!

2. Global Optimization:

  • 모든 포인트맵을 하나의 공통 3D 공간으로 정렬!
  • 상대 변환 행렬과 스케일을 최적화하여 매끄러운 정렬 수행!

3. 카메라 파라미터 복원:

  • 초점 거리(Focal Length), 뎁스맵(Depth Map), 자세(Pose) 자동 계산!

4. 기존 방법보다 빠르고 효율적:

  • 번들 조정보다 더 빠르고 간단한 최적화 → GPU에서 수 초 내 수렴! 🚀
반응형