Contents — find the section you need
Structure from Motion과 Visual-SLAM이 삼각측량과 PnP를 통해 얻는 카메라 포즈와 3D 포인트는 선형 근사 및 순차 처리에서 비롯된 대략적인 초기값일 뿐입니다. 이미지별 노이즈, 대응점의 양자화 오류, 순차 추정에서 전파되는 오류 등이 누적되어 재구성된 이미지는 본질적으로 내부적으로 일관성이 없습니다. 번들 조정(Bundle Adjustment, BA)은 모든 카메라 매개변수와 모든 3D 포인트를 한 번에 조정하여 관측된 모든 포인트에 걸쳐 재투영 오류의 합을 최소화함으로써 이러한 불일치를 해결하는 최종 최적화 단계입니다. "번들"이라는 이름은 각 3D 포인트에서 각 카메라로 향하는 광선 다발을 한 번에 조정하여 관측된 위치와 일치시키는 데서 유래했습니다.
0. 30초 요약
-
번들 조정(Bundle Adjustment)은 카메라의 내부/외부 매개변수와 3D 점 좌표를 미지수로 갖는 비선형 최소제곱 문제로, 모든 관측값에 대한 재투영 오차 제곱합을 최소화하는 문제입니다.
-
이 문제는 가우스-뉴턴법 또는 레벤버그-마르쿼트(LM) 방법을 사용하여 반복적으로 해결됩니다. LM은 매개변수 \lambda을 통해 불안정하지만 빠른 가우스-뉴턴법과 느리지만 안정적인 최급강하법 사이를 부드럽게 보간합니다.
-
각 카메라는 실제로 촬영한 점들과만 연결되므로, 야코비 행렬과 헤세 행렬의 근사치는 카메라 × 점 쌍으로 구성된 희소한 블록 구조 형태를 취합니다. 이러한 희소성은 대규모 문제를 처리 가능하게 만드는 핵심 요소입니다.
-
슈어 보완 기법은 3D 포인트 블록들이 서로 독립적이라는 사실(블록 대각선 관계)을 이용하여, 먼저 포인트들을 제거함으로써 카메라만 포함하는 작은 "축소된 카메라 시스템"을 해결합니다. 이것이 수만 개의 포인트와 수천 대의 카메라가 있는 규모의 문제를 현실적인 시간 내에 해결할 수 있게 하는 비결입니다.
-
번들 조정은 SLAM의 포즈 그래프 최적화와 매우 유사하지만, 미지수에 3D 포인트 자체가 포함된다는 점에서 차이가 있습니다. 이는 SfM의 마무리 작업과 SLAM의 지역/전역 최적화 모두에 사용되는 공통된 기초 기술입니다.
1. 입력값은 무엇이며, 무엇을 구하는가?
입력은 SfM 또는 Visual-SLAM에서 얻은 중간 결과인 다음 세 가지 초기 추정값으로 구성됩니다.
- 카메라 포즈의 초기값 \{K_i, R_i, \mathbf{t}_i\} (i=1,\dots,m, 대부분의 경우 내부 매개변수 K_i은 알려져 있거나 고정되어 있음)
- 3D 포인트의 초기값 \{\mathbf{X}_j\} (j=1,\dots,n, 삼각측량으로 얻은 대략적인 좌표)
- 어떤 카메라가 어떤 포인트를 관측했는지에 대한 대응 관계, 즉 각 관측에 대한 이미지 좌표 \mathbf{u}_{ij} (카메라 i이 포인트 j을 관측한 픽셀 위치)
출력은 카메라 포즈와 3D 포인트이며, 이 모든 값은 동시에 정밀하게 조정되어 내부적으로 더욱 정밀한 결과를 제공합니다. 모든 관측치에서 일관성을 유지합니다. 번들 조정(Bundle Adjustment)은 해를 처음부터 구축하는 방법이 아니라, 이미 "대략적으로 정확한" 초기값을 국소적으로 다듬는 마무리 최적화라는 점이 아래 수렴 논의에 중요합니다.
2. 비용 함수: 재투영 오차
3D 점 \mathbf{X}_j이 카메라 i에 투영되는 위치와 실제로 관측된 이미지 좌표 \mathbf{u}_{ij} 사이의 불일치를 재투영 오차라고 합니다. 카메라 i의 포즈를 R_i, \mathbf{t}_i으로, 투영 함수를 \pi(\cdot)(동차 좌표를 픽셀 좌표로 변환하는 비선형 맵)로 나타내면, 하나의 관측치에 대한 잔차는 다음과 같습니다.
번들 조정은 관측된 모든 쌍 \mathcal{O}=\{(i,j)\}에 대해 이 잔차의 제곱합을 최소화합니다.
\rho은 Huber 손실과 같은 강력한 손실 함수로, 불일치로 인한 하나의 큰 이상치가 전체 최적화를 왜곡하는 것을 방지합니다. 이 방정식은 SfM 입문에서 이미 살펴본 것과 정확히 동일한 형태입니다. 번들 조정은 이 최소화 문제를 실제로 해결하는 핵심 계산 부분을 다룹니다.
3. 비선형 최소 제곱법으로 풀기: Gauss-Newton에서 Levenberg-Marquardt까지
모든 미지수를 하나의 벡터 \mathbf{x}(모든 카메라 포즈와 모든 3D 점을 함께 배치)로 모으고, 전체 잔차 집합을 \mathbf{r}(\mathbf{x})으로 나타내면, 최소화 목표는 \|\mathbf{r}(\mathbf{x})\|^2이 됩니다. \mathbf{r}는 비선형 함수이므로, 현재 추정값 \mathbf{x}_k을 중심으로 1차 테일러 전개를 사용합니다. \mathbf{r}(\mathbf{x}_k+\Delta\mathbf{x})\approx \mathbf{r}(\mathbf{x}_k)+J\Delta\mathbf{x}는 야코비 행렬입니다. 이를 대입하고 \Delta\mathbf{x}에 대해 풀면 가우스-뉴턴 방법의 정규 방정식이 얻어집니다.
H=J^\mathsf{T}J은 헤시안 근사값(2차항을 무시한 가우스-뉴턴 근사값)입니다. 이 방정식을 풀어 \Delta\mathbf{x}를 구하고, \mathbf{x}_{k+1}=\mathbf{x}_k+\Delta\mathbf{x}을 업데이트한 후, 잔차가 수렴할 때까지 이 과정을 반복하는 것이 전체 과정입니다.
가우스-뉴턴 방법은 초기값이 해에 가까울수록 빠르게 수렴하지만, 초기값이 좋지 않을 경우 발산하는 경향이 있습니다. Levenberg-Marquardt(LM) 방법은 Levenberg(1944)와 Marquardt(1963)가 독립적으로 제안했으며, 정규 방정식에 감쇠항을 추가하여 이러한 문제를 완화합니다.
D는 일반적으로 J^\mathsf{T}J(또는 동등한 스케일링 행렬)의 대각선 요소이고, \lambda는 감쇠 계수입니다. \lambda가 작을 때는 Gauss-Newton 방법과 유사하게 동작하며 빠르게 수렴합니다. \lambda가 클 때는 최급강하법에 가까운 작고 안전한 단계로 수렴합니다. LM은 적응 제어 방식을 통해(각 반복에서 비용이 감소할 때는 \lambda를 축소하여 속도를 높이고, 비용이 증가할 때는 \lambda를 확대하여 단계를 줄이고 수렴을 거부합니다) Gauss-Newton의 속도와 최급강하법의 안정성을 결합합니다. Bundle Adjustment의 거의 모든 실제 구현(Ceres Solver, g2o, SBA 등 아래에서 설명)은 LM 또는 이와 밀접하게 관련된 신뢰 영역 방법을 채택합니다.
4. Jacobian 행렬이 희소 행렬인 이유는 무엇일까요?
Bundle Adjustment의 미지수는 카메라 포즈(6자유도 - 내부 매개변수가 고정된 경우 회전 3개 + 병진 3개) × m 대의 카메라와 3D 포인트(3자유도) × n 포인트로, 총 차원이 최대 6m+3n개에 달합니다. 수만 개 이상의 관측치를 사용하는 실제 SfM 문제에서 이 J^\mathsf{T}J 행렬을 단순히 밀집 행렬로 취급하면 O((6m+3n)^3)의 비용이 발생하여 현실적인 시간 내에 해결할 수 없습니다.
여기서 중요한 것은 재투영 오차 r_{ij}가 "카메라 i의 매개변수와 점 j의 매개변수에만 의존한다"는 구조입니다. 다른 카메라 k\neq i 또는 점 l\neq j에 대한 편미분은 모두 0입니다.
즉, 단일 관측값으로 생성된 야코비 행렬의 행은 해당 카메라에 대한 블록과 해당 점에 대한 블록에만 0이 아닌 항목을 갖습니다. 행의 수는 관측값의 수에 비례하여 증가하지만, 각 행에 있는 0이 아닌 항목의 수는 일정하게 유지됩니다(카메라 6 + 점 3, 또는 내부 매개변수를 포함하는 경우 약간 더 많음). 이러한 희소성은 J^\mathsf{T}J을 살펴보면 다음과 같은 블록 구조로 나타납니다.
-
B : 카메라 파라미터 간의 상호작용. 카메라 i과 k이 공통점을 관측하지 않는 한 이 값은 0이므로 희소 블록 구조를 가집니다.
-
C : 3D 점 파라미터 간의 상호작용. 한 점 j의 3자유도는 다른 어떤 점과도 연결되지 않으므로 블록 대각 행렬입니다. 이는 다음 절에서 설명할 슈어 보완 기법의 전제 조건입니다.
-
E : 카메라와 점 간의 상호작용 (각 관측값 (i,j)에 대해 0이 아닌 블록이 나타납니다).
5. 기본 파이프라인
매 반복마다 다시 계산됩니다. 재투영 오차를 계산하고, 희소 야코비 행렬을 구성하고, 슈어 보완법을 통해 카메라 전용 축소 시스템을 풀고, LM의 스텝 제어를 통해 업데이트합니다. 이 과정은 비용 변화량이 임계값 아래로 떨어지거나 최대 반복 횟수에 도달할 때까지 반복됩니다.
6. 슈어 보완법 활용: 희소성을 계산량 감소로 전환
이전 섹션의 블록 구조를 사용하여, 정규 방정식 (J^\mathsf{T}J+\lambda D)\Delta\mathbf{x}=-J^\mathsf{T}\mathbf{r}를 카메라 업데이트 \Delta\mathbf{c}와 점 업데이트 \Delta\mathbf{p}로 나누어 다음과 같이 나타낼 수 있습니다.
(여기서 B', C'은 감쇠 항을 추가한 후의 블록입니다.) C'는 3D 점마다 독립적인 블록 대각 행렬이므로, 각 3×3 블록은 점의 개수에 대략 비례하는 비용으로 개별적으로 역행렬을 구할 수 있습니다. 이 C'^{-1}을 사용하여 \Delta\mathbf{p}를 제거하면 카메라만 포함하는 축소된 카메라 시스템이 남습니다.
좌변의 B'-EC'^{-1}E^\mathsf{T}를 슈어 보완 행렬이라고 합니다. 이 행렬의 크기는 6m\times 6m이며(카메라 수에만 의존하고, 점의 수 n에는 의존하지 않음), \Delta\mathbf{c}이 해결되면 각 점의 업데이트는
일반적인 SfM 문제에서 점의 수 n는 카메라 수 m의 수십 배에 달할 수 있으므로, 6m+3n 차원의 시스템을 단순히 해결하는 대신, 6m 차원의 슈어 보완 행렬만 처리하면 됩니다. 이것이 바로 번들 조정(Bundle Adjustment)이 수만 개의 점으로 이루어진 규모에서도 실질적으로 해결 가능한 핵심 아이디어입니다. 이론적으로는 Triggs 등이 발표한 "Bundle Adjustment — A Modern Synthesis"(2000)에서 정립되었으며, Ceres Solver 및 g2o와 같은 최신 라이브러리에서 표준 내부 구현 방식으로 사용됩니다.
Ceres Solver는 이 축소 시스템을 해결하는 여러 가지 옵션을 제공합니다. DENSE_SCHUR은 밀집 행렬로 문제를 해결하고(카메라 수 수백 대까지), SPARSE_SCHUR는 재정렬을 통해 희소성을 활용하며(카메라 수 수천 대), ITERATIVE_SCHUR는 슈어 보완 행렬에 켤레 기울기법을 적용합니다(훨씬 더 큰 규모의 문제). 문제의 규모에 따라 적절한 옵션을 선택하는 것이 실용적인 지침입니다.
7. 게이지 자유도: 해가 고유하게 결정되지 않는 방향
Bundle Adjustment는 비용 함수의 값을 변경하지 않고 전체 매개변수 집합을 이동할 수 있는 자유도를 유지합니다. 모든 카메라와 모든 3D 점을 동일한 회전, 이동 및 스케일로 함께 움직이면 재투영 오차는 완전히 변하지 않습니다(단안 카메라만 사용하는 경우 절대 스케일 또한 불확정적입니다). 이러한 자유도를 게이지 자유도라고 합니다. 이를 해결하지 않으면 J^\mathsf{T}J이 특이(랭크 부족) 상태가 되어 정규 방정식을 풀 수 없거나 수치적으로 불안정해집니다.
실제로 이 문제는 처음 두 카메라의 자세 또는 하나의 베이스라인 길이를 고정하거나, LM 자체의 감쇠 항인 \lambda D이 이러한 특이 방향을 암묵적으로 정규화한다는 사실을 이용하여 해결합니다. GPS나 IMU 등에서 절대 스케일 또는 절대 자세 정보를 얻을 수 있는 경우, 이를 추가적인 제약 조건으로 사용하여 게이지를 고정하는 것이 자연스럽습니다.
8. 포즈 그래프 최적화와의 차이점
루프 클로저 입문(/ko/blog/posts/cv-loop-closure.html)에서 다룬 포즈 그래프 최적화는 번들 조정과 마찬가지로 \mathrm{Log} 맵으로 구성된 비선형 최소제곱 잔차를 강건한 손실 함수를 사용하여 최소화한다는 점에서 동일한 수학적 프레임워크에 속합니다. 차이점은 미지수가 무엇인지에 있습니다.
| 측면 | 번들 조정 | 포즈 그래프 최적화 |
|---|---|---|
| 미지수 | 모든 카메라 포즈 + 모든 3D 포인트 좌표 | 모든 카메라(노드)의 포즈만 |
| 잔차 | 3D 포인트 재투영 오차(이미지 공간) | 상대 포즈 관측값과의 차이(SE(3) 공간) |
| 희소성의 원천 | 어떤 카메라가 어떤 포인트를 보았는지 | 어떤 노드 쌍이 제약 조건으로 연결되어 있는지 |
계산 비용 | 포인트가 많을수록 높지만, 슈어 보완법을 통해 완화됨 | 본질적으로 더 작으며, 노드(키프레임) 수에 비례하여 확장됨 |
주요 용도 | SfM의 최종 다듬기, 로컬/글로벌 맵 개선 | SLAM에서 전역 드리프트 보정(루프 클로저 발생 후) |
실제 비주얼-SLAM 시스템에서는 일반적으로 다음과 같은 역할 분담이 이루어집니다. 3D 포인트를 포함하는 로컬 번들 조정(로컬 BA)은 키프레임 주변 영역을 프레임 단위로 개선하는 반면, 명시적인 3D 포인트 없이 수행되는 경량 포즈 그래프 최적화는 루프 클로저가 감지될 때마다 전역 궤적을 신속하게 보정합니다. 3D 포인트를 포함하는 전체 번들 조정(글로벌 BA)은 더 정확하지만 계산 비용이 많이 들기 때문에 실시간 성능이 요구되는 상황에서는 자주 실행할 수 없습니다.
9. 대표적인 구현 사례
-
Ceres Solver: Google에서 개발한 범용 비선형 최소제곱 라이브러리로, 2010년부터 상용화되었습니다. Schur 보완법 기반 솔버가 내장되어 있으며, COLMAP을 비롯한 많은 SfM/SLAM 구현에서 번들 조정 백엔드로 사용됩니다.
-
g2o: Kümmerle 등이 ICRA 2011에서 발표한 그래프 최적화 프레임워크로, SLAM의 포즈 그래프 최적화와 번들 조정을 동일한 프레임워크 내에서 처리할 수 있습니다. ORB-SLAM 계열의 백엔드로 널리 사용되고 있습니다.
-
SBA (Sparse Bundle Adjustment): 희소 번들 조정에 특화된 초기 공개 구현체로, Lourakis와 Argyros가 2009년 ACM Transactions on Mathematical Software에 발표했습니다. Schur 보완법을 명시적으로 구현한 대표적인 예로 자주 언급됩니다.
-
COLMAP의 내장 번들 조정(BA): 내부적으로 Ceres Solver를 사용하며, 증분 SfM의 각 단계에서 로컬 번들 조정과 글로벌 번들 조정 사이를 자동으로 전환합니다.
10. 어려운 조건 및 일반적인 실패 사례
-
부적절한 초기값: 번들 조정은 로컬 최적화입니다. 초기값이 실제 해에서 멀리 떨어져 있으면 잘못된 로컬 해로 수렴하거나 전혀 수렴하지 못할 수 있습니다. 삼각측량 또는 PnP를 통해 얻은 초기값의 품질이 최종 정확도를 결정합니다.
-
관측 횟수가 적거나 시차가 작은 점: 매우 적은 수의 이미지에서만 관측되었거나 시차가 작은 점은 조건이 좋지 않은 Jacobian 행렬을 가지는 경향이 있으며, 깊이 방향을 따라 집중된 큰 잔차 오차를 남길 수 있습니다.
-
심한 이상치 오염: 많은 불일치가 섞여 있는 경우, 강력한 손실 함수조차도 이를 완전히 흡수할 수 없으며, 올바른 인접 점까지 끌려가 왜곡될 수 있습니다.
-
극도로 대규모 문제: 수백만 개의 관측치를 필요로 하는 도시 규모의 재구성의 경우, 슈어 보완법을 사용하더라도 계산 및 메모리 비용이 무시할 수 없을 정도로 커지므로, 문제를 분할 및 병렬화하거나 근사 기법(예: LM의 신뢰 영역 세분화)과 결합해야 합니다.
-
게이지 설정 오류: 위에서 언급했듯이 게이지를 고정하지 않으면 수치적 불안정성이 발생하여 수렴에 실패하거나 비물리적인 해로 이어질 수 있습니다.
11. 실질적인 선택
-
SfM의 최종 단계에서 높은 정확도가 필요한 경우, 증분 전략 또는 전역 전략 사용 여부와 관계없이 마지막에 전체 번들 조정을 수행하는 것이 표준입니다. COLMAP과 같은 기존 구현의 기본 설정을 따르는 것이 큰 오류를 초래할 가능성은 낮습니다.
-
실시간 SLAM의 경우, 모든 프레임에 대해 전체 번들 조정을 수행하는 것은 계산 비용이 너무 높습니다. 실용적인 설계는 가장 최근의 키프레임 세트에 대해서만 로컬 번들 조정을 수행하고, 루프 종료 시에만 작동하는 포즈 그래프 최적화를 결합합니다.
- 파이프라인을 처음부터 직접 구축하는 경우, Ceres Solver 또는 g2o와 같은 라이브러리를 기반으로 구축하는 것이 좋습니다. 슈어 보완 알고리즘을 처음부터 구현하는 것은 정확성 검증 비용에 비해 학습 효과가 미미합니다.
- 대규모 도시 규모 재구성의 경우, 단일 번들 조정에 의존하기보다는 문제를 영역별로 분할하고 계층적으로 통합하는 방법을 고려하십시오(이는 아래에서 설명하는 다중 시점 스테레오의 전처리 단계에서도 일반적으로 사용됩니다).
12. 요약
번들 조정은 모든 카메라와 모든 3D 포인트에 걸쳐 재투영 오차를 동시에 최소화하는 비선형 최소제곱 문제이며, 레벤버그-마르쿼트 방법을 통해 반복적으로 해결됩니다. 카메라와 관측 지점 간의 희소성을 활용하는 슈어 보완 기법은 수만 개의 포인트 규모에서도 현실적인 시간 내에 최적화를 가능하게 합니다. 이 기법은 포즈 그래프 최적화와 수학적 프레임워크를 공유하지만, 두 기법 중 어느 것을 선택할지는 3D 포인트를 명시적으로 유지하는지 여부에 달려 있으며, 궁극적으로 SfM과 SLAM 모두의 정확도를 뒷받침하는 공통된 기초 기술입니다.
낮은 재투영 오차가 측정 스케일을 결정합니까?
단안 재투영만으로는 전역 스케일을 결정할 수 없습니다.
게이지를 수정하는 것과 물리적 크기를 측정하는 것을 구분하십시오.참고 문헌
- Triggs, McLauchlan, Hartley & Fitzgibbon, Bundle Adjustment — A Modern Synthesis (Vision Algorithms: Theory and Practice, 2000)
- Kümmerle, Grisetti, Strasdat, Konolige & Burgard, g2o: A General Framework for Graph Optimization (ICRA 2011)
- Lourakis & Argyros, SBA: A Software Package for Generic Sparse Bundle Adjustment (ACM Transactions on Mathematical Software, 2009)
- Ceres Solver 공식 문서: 비선형 최소 제곱법 )
- Ceres Solver 공식 문서: Schur 기반 선형 솔버
- Hartley & Zisserman, 컴퓨터 비전에서의 다중 시점 기하학(저자 공식 페이지)
댓글
먼저 로그인해 주세요.
아직 데이터가 없습니다.