본문 바로가기
DL|ML

[Tübingen ML] Computer Vision - Lecture 3.4 (Structure-from-Motion: Bundle Adjustment)

by 이든Eden 2023. 4. 25.

튀빙겐 대학교의 Lecture: Computer Vision 3.4 공부하며 정리한 자료입니다.

 

이번 lecture에서는 Bundle Adjustment에 대해 배운다. 

 

[그림 1] Bundle Adjustment 목적

 

Bundle Adjustment의 목표는 여러 개의 2D 이미지에서 추출한 특징점과 이들 특징점이 대응하는 3D 공간상의 점들 간의 일관성을 유지하면서, 각 이미지의 카메라 위치와 방향, 그리고 특징점의 3D 위치와 카메라 렌즈 왜곡 등의 파라미터를 조정하여, 이를 가장 잘 설명하는 최적화된 3D 모델을 구성하는 것.

 

위의 과정에서 reprojection error를 최소화하는 것이 목표이다. Reprojection error란, 추출된 3D 포인트를 카메라 파라미터에 따라 2D 이미지 평면으로 투영한 결과와 실제 이미지에서 추출한 특징점 사이의 거리 차이를 말한다. 따라서 재투영 오차를 최소화하는 것은 추출된 3D 포인트와 각 이미지에서의 카메라 파라미터가 더욱 정확하게 추정되도록 하여, 최종적으로 높은 정확도를 갖는 3D 모델을 생성하는 것을 의미한다.

 

따라서 번들 조정에서는 reprojection error를 최소화하기 위해 카메라 파라미터와 3D point cloud를 동시에 조정하며, 이를 위해 최적화 알고리즘을 사용한다. 이 최적화 과정에서는 이미지에서 추출한 특징점과 3D 포인트를 매핑하는 과정에서 오차를 최소화하는 방향으로 카메라 파라미터와 3D 포인트의 위치를 조정한다. 이렇게 최적화된 카메라 파라미터와 3D 포인트를 이용하여, 재투영 오차를 최소화하는 3D 모델을 생성한다.

 

 

[그림 2]

 

[그림 2]에서 bundle adjustment는 월드 좌표계의 3D 포인트 $x^w_p$를 카메라 파라미터를 이용해 2D point로 나타낸 $π_i(x^w_p)$와 2D 이미지에서의 위치 $x^s_{ip}$ 사이의 오차를 minimize하는 것을 말한다($w_{ip}$는 점 p가 이미지 i에서 관찰되었는지 여부를 나타내고, $π_i(x^w_p)$는 3D 월드 좌표계 상의 점 $x^w_p$를 $i$번째 카메라의 2D 이미지 평면 상에 투영한 결과를 나타낸다).

 

 

[그림 3]

 

위 두 페이지로 설명한걸 그림으로 나타낸게 [그림 3]이다.

 

[그림 4] Challenges of Bundle Adjustment

 

Bundle adjustment가 어려운 이유는 여러가지가 있다. 크게 두 가지로 나뉘나보다.

 

Initialization:

  • Energy landscape가 non-convex해서 초기값 설정이 잘못되면 최적값을 찾기 어려울 뿐만 아니라 나쁜 지역 최소값(local minimum)에 빠질 가능성이 크다. 오? 딥러닝 같네ㅋㅋㅋㅋ 따라서 initialization을 잘해야한다.
  • 모든 3D 포인트와 카메라를 동시에 초기화하는 것은 어렵다.
  • 따라서 incremental bundle adjustment은 세심하게 선택된 two-view reconstruction으로 시작하여 새 이미지/카메라를 반복적으로 추가하는 방식으로 초기화를 수행.

Optimization:

  • 수백만 개의 특징점과 수천 개의 카메라가 있는 경우, large-scale bundle adjustment는 엄청난 계산이 요구됨(알 수 없는 요소 수의 세제곱 복잡도).
  • 하지만 다행히 문제는 희소(sparse)하다.(모든 3D 포인트가 모든 카메라에서 관찰되는 것이 아님). 이러한 희소한 구조를 이용한 효율적인 구현 (예: Ceres)을 실제로 사용할 수 있다.

 

[그림 5]

 

 

 

[그림 6] Incremental Structure-from-Motion

 

Feature matching and reconstruction pipeline (COLMAP): 

  • Correspondence Search: 이미지 간에 견고한 2D 특징점을 찾고 매칭하는 과정.
  • Incremental Reconstruction: 두 개의 뷰로 시작하여 카메라를 점진적으로 추가.

 

Correspondence Search

 

[그림 7] Correspondence Search

 

- Feature Extraction

: 일반적으로 SIFT, SURF, ORB 등의 알고리즘을 사용하여 Feature Extraction.

 

- Feature Matching & Geometric Verificaiton

: 해당 이미지들에서 동일한 물체나 특징점들에 대한 매칭된 특징점(correspondences)을 찾는다.

 

 

Incremental Reconstruction

 

[그림 8] Incremental Reconstruction

 

 

- Initialization : 많은 대응점(correspondences)을 가진 두 개의 뷰(view)를 선택하고, 그들의 geometry를 추정(estimate)한다. 

- Image Registration:

   - Initialization에서 찾은 두 개의 views와 일치하는 일치하는 새 이미지를 찾아서 카메라 포즈를 추정한다.

   - P = K[R | t]이므로, K와 R은 standard RQ factorization을 이용해 P의 앞쪽 3 × 3 부분 행렬에서 쉽게 얻을 수 있다.

   - K가 알려져 있다면, P를 세 점만으로도 추정할 수 있다. (P3P 알고리즘)

   - 실제는, 이상치를 제거하기 위해 random sampling consensus(RANSAC)를 사용한다.

 

 

[그림 9] Incremental Reconstruction

 

- Triangulation :
  - 새로 등록된 이미지가 주어지면, 새로운 대응점을 triangulated 할 수 있다. 이전 단계에서, 두 이미지의 카메라 위치와 내부 매개변수를 알고, 대응점들의 3D 포인트를 추정했다. 이제 새로운 이미지를 추가했으므로, 이전 이미지들과 이 새로운 이미지 간에 대응되는 새로운 특징점을 찾아내야 한다. 이전 단계에서 사용한 방법과 유사하게, 이 새로운 대응점들을 사용하여 카메라 위치와 내부 매개변수를 추정하고, 이들을 기존 3D 대응점과 결합하여 더 많은 3D 대응점을 triangulated 한다.

  - COLMAP에서는 아웃라이어를 처리하는 robust한 삼각화 방법을 제안.

 

- Bundle Adjustment & Outlier Filtering :

  - 모든 카메라와 3D 포인트에 대한 모든 관측치의 reprojection error를 최소화한다.

  - COLMAP은 점진적인 SfM이 모델에 지역적인 영향을 미치기 때문에, 로컬하게 연결된 이미지에 대해서는 local BA를 수행하고 효율성을 위해 global BA는 가끔씩만 수행.

  - 이러한 sparse large-scale optimization 문제를 해결하기 위해 COLMAP은 Ceres를 사용한다.

  - 각 BA 이후에는 재투영 reprojection error가 큰 관측치와 시야각이 비정상적이거나 왜곡 계수가 큰 카메라를 제거한다.

 

 

 

이제는 위에서 본 프로세스의 결과를 볼 차례!

[그림 10] Results and Applications

 

여러가지 사례가 나온다.

 

[그림 11] Building Rome in a Day

"Building Rome in a Day"은 2010년에 발표된 논문으로, 초기 구조화되지 않은 이미지들을 사용하여 대규모 구조화된 시각적 3D 모델을 만드는 방법을 제시한다. 이 논문에서는 수천 장의 온라인 이미지를 사용하여 로마 시내의 대규모 3D 모델을 작성하는 방법을 소개한다.

 

https://grail.cs.washington.edu/rome/

 

Building Rome in a Day

Building Rome in a Day The Colosseum, 2,106 images, 819,242 points, Full resolution video Entering the search term Rome on Flickr returns more than two million photographs. This collection represents an increasingly complete photographic record of the city

grail.cs.washington.edu

 

 

[그림 12]

 

이건..! 내가 좋아하는 데이터다. 긴히 사용해본적은 없지만 NeRF in the Wild라는 논문에서 사용했다. 그리고 캐글 챌린지에서도 사용한다.

 

 

[그림 13] Parallel Tracking and Mapping (PTAM)

PTAM은 작은 작업 공간에서 실시간으로 추적과 매핑을 보여준다. PTAM은 화면 이미지를 사용하여 작업 공간을 모델링하고, 이를 사용하여 카메라 위치와 방향을 추정합니다. 이러한 정보를 기반으로, PTAM은 작업 공간의 모습을 추적하고, 모델이 갱신되면 reconstruction한다. 이러한 작업을 실시간으로 수행함으로써, PTAM은 VR/AR 등 다양한 분야에서 응용될 수 있다. 오와우 마음에 든다.

 

 

[그림 14] Match Move

 

Match Move

Match moving (또는 camera tracking)은 영화, 비디오 게임 및 애니메이션 제작에서 일반적으로 사용되는 기술로, 움직이는 카메라의 촬영으로부터 카메라의 위치, 방향 및 움직임을 추적하여 실제 3D 공간에서 객체를 합성하는 데 사용됩니다. 일반적으로 Match moving은 먼저 카메라의 움직임을 추정하고, 추정된 카메라 위치를 기반으로 영상의 3D 구조를 재구성하는 과정으로 구성됩니다. 이를 통해 실제 객체나 캐릭터를 실제 영상에 합성하거나, 가상의 배경에 촬영된 영상을 합성하는 등의 다양한 시각 효과를 구현할 수 있습니다.

- ChatGPT

 

오 이것도 신기하다..!

 

 

지금까지 배운 것들이 합쳐져서 Structure-from-Motion이 되었다. 이제는 SfM 논문이나 코드도 읽어보면 좋겠다.