Welcome to the official page of the paper Power Variable Projection for Initialization-Free Large-Scale Bundle Adjustment (accepted at ECCV 2024). You can find a video presentation here.
Most Bundle Adjustment (BA) solvers like the Levenberg- Marquardt algorithm require a good initialization. Instead, initialization-free BA remains a largely uncharted territory. The under-explored Variable Projection algorithm (VarPro) exhibits a wide convergence basin even without initialization. Coupled with object space error formulation, recent works have shown its ability to solve small-scale initialization-free bundle adjustment problem. To make such initialization-free BA approaches scalable, we introduce Power Variable Projection (PoVar), extending a recent inverse expansion method based on power series. Importantly, we link the power series expansion to Riemannian manifold optimization. This projective framework is crucial to solve large-scale bundle adjustment problems without initialization. Using the real-world BAL dataset, we experimentally demonstrate that our solver achieves state-of-the-art results in terms of speed and accuracy. To our knowledge, this work is the first to address the scalability of BA without initialization opening new venues for initialization-free structure-from-motion.
This implementation is built on RootBA. Please follow the same instructions to install the dependencies.
Build external libraries
Use the build script:
./scripts/build-external.sh
Build PoVar
Use the build script:
./scripts/build-rootba-povar.sh [BUILD_TYPE]
You can optionally pass the cmake BUILD_TYPE
used to compile RootBA
as the first argument. If you don't pass anything the default is
Release
. The cmake build folder is build
, inside the project
root. This build script will use ccache
and ninja
automaticaly if
they are found on PATH
.
You can download the BAL dataset on the Bundle Adjustment in the Large webpage.
Before using our solver, we randomly initialize a projective camera model, with the option --create-dataset
:
./bin/bal --input /venice/problem-89-110973-pre.txt --create-dataset
The randomized dataset is created in the new folder data_custom/
on the root.
In line with our paper, the stratified BA includes two steps.
(a) We propose four different solvers --solver-type-step-1
for the nonlinear separable optimization problem:
POWER_VARPROJ
: Variable projection with power series expansion (by default)POWER_BUNDLE_ADJUSTMENT
: Levenberg-Marquardt with power series expansion (see PoBA https://arxiv.org/abs/2204.12834)PCG
: Variable projection with preconditioned conjugate gradientsCHOLESKY
: Variable projection with Cholesky factorization
(b) We propose two different solvers --solver-type-step-2
for the projective refinement problem:
RIPOBA
: Riemannian manifold framework for Levenberg-Marquardt with power series (by default)RIPCG
: Riemannian manifold framework for Levenberg-Marquardt with preconditioned conjugate gradients
The implementation uses double
precision.
Once the random initialization has been done, you can run the two solvers in a row with, for instance:
./bin/bal --num-threads 4 --input /data_custom/problem-89-110973-pre.txt --solver-type-step-1 POWER_SCHUR_COMPLEMENT --solver-type-step-2 RIPOBA
The command --help
will provide some explanations about the different options.
In particular, you can set, among others:
--max-num-iterations-step-1
,--max-num-iterations-step-2
: maximum number of outer iterations for each step (by default, 50).--power-sc-iterations
: maximum order of power series (by default, 20).--residual-robust-norm
: NONE (by default), CAUCHY, HUBER.--alpha
: weight of the affine part in pOSE formulation (by default, 0.1).
If you find our work useful in your research, please consider citing:
@article{weber2024power,
title={Power Variable Projection for Initialization-Free Large-Scale Bundle Adjustment},
author={Weber, Simon and Hong, Je Hyeong and Cremers, Daniel},
journal={arXiv preprint arXiv:2405.05079},
year={2024}
}
@inproceedings{weber2023power,
title={Power bundle adjustment for large-scale 3d reconstruction},
author={Weber, Simon and Demmel, Nikolaus and Chan, Tin Chon and Cremers, Daniel},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={281--289},
year={2023}
}
The code of the RootBA project is licensed under a BSD 3-Clause License.
Parts of the code are derived from Ceres Solver. Please also consider licenses of used third-party libraries. See ACKNOWLEDGEMENTS.