Bundle Adjustment on the GPU

Ronny Hänsch1       Igor Drude

1Technische Universität Berlin, Germany

Modern Methods of Bundle Adjustment on the GPU, Annals of the ISPRS, 2016


The task to compute 3D reconstructions from large amounts of data has become an active field of research within the last years. Based on an initial estimate provided by structure from motion, bundle adjustment seeks to find a solution that is optimal for all cameras and 3D points. The corresponding nonlinear optimization problem is usually solved by the Levenberg-Marquardt algorithm combined with conjugate gradient descent. While many adaptations and extensions to the classical bundle adjustment approach have been proposed, only few works consider the acceleration potentials of GPU systems. This work elaborates the possibilities of time- and space savings when fitting the implementation strategy to the terms and requirements of realizing a bundler on heterogeneous CPU-GPU systems. Instead of focusing on the standard approach of Levenberg-Marquardt optimization alone, nonlinear conjugate gradient descent and alternating resection-intersection are studied as two alternatives. The experiments show that in particular alternating resection-intersection reaches low error rates very fast, but converges to larger error rates than Levenberg-Marquardt. PBA, as one of the current state-of-the-art bundlers, converges slower in 50% of the test cases and needs 1.5-2 times more memory than the Levenberg-Marquardt implementation.


The GPU-BA framework implements three different approaches for bundle adjustment on the GPU (Cuda), namely Levenberg-Marquardt, nonlinear conjugate gradient descent, and alternating resection-intersection.

For additional documentation with compile instructions, parametrization and configuration, as well as information about input/output see Readme.pdf contained in the main directory of the source code.
The framework was tested on Windows systems only, but no Windows-specific libraries were included. Additional requirements:
- CUDA enabled Nvidia-GPU (at least compute capability 2.0).
- CUDA TOOLKIT 6.5 or higher (only cuda.lib and cudart.lib are used)



If you use GPU-BA for your research please cite:

R. Hänsch, I. Drude, O. Hellwich, Modern Methods of Bundle Adjustment on the GPU, Annals of the ISPRS, tba, July 2016, Pages tba

@ARTICLE{ Haensch:2016:ISPRSA,
  author = {H\"ansch, Ronny and Drude, Igor and Hellwich, Olaf},
  title  = {Modern Methods of Bundle Adjustment on the GPU},
  journal= {ISPRS Annals of Photogrammetry, Remote Sensing and Spatial Information Sciences},
  volume = {III-3},
  pages  = {43--50},
  year   = {2016},
  URL = {http://www.isprs-ann-photogramm-remote-sens-spatial-inf-sci.net/III-3/43/2016/},
  DOI = {10.5194/isprs-annals-III-3-43-2016}


GPU-BA - Copyright (c) 2016, Ronny Hänsch

GPU-BA is free software: you can redistribute it and/or modify it under the terms of the Modified BSD License.

GPU-BA is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Modified BSD License for more details.