|
1 |
| -# RootBA: Square Root Bundle Adjustment |
2 |
| - |
3 |
| -[Project Page](https://go.vision.in.tum.de/rootba) | |
4 |
| -[Paper](https://arxiv.org/abs/2103.01843) | |
5 |
| -[Poster](https://vision.in.tum.de/_media/research/vslam/rootba/demmel2021cvpr_rootba_poster.pdf) | |
6 |
| -[Video](https://youtu.be/kAhmjNL8B-U) | |
7 |
| -[Code](https://github.com/NikolausDemmel/rootba) |
8 |
| - |
9 |
| -<img src="docs/images/teaser.jpg" alt="teaser image" /> |
10 |
| - |
11 |
| -## Table of Contents |
12 |
| - |
13 |
| -* [Citation](#citation) |
14 |
| -* [Dependencies](#dependencies) |
15 |
| - * [Installing dependencies on Linux](#installing-dependencies-on-linux) |
16 |
| - * [Installing depedencies on macOS](#installing-depedencies-on-macos) |
17 |
| -* [Building](#building) |
18 |
| - * [CMake Options](#cmake-options) |
19 |
| - * [Running Unit Tests](#running-unit-tests) |
20 |
| -* [BAL Problems](#bal-problems) |
21 |
| -* [Testing Bundle Adjustment](#testing-bundle-adjustment) |
22 |
| - * [Visualization of BAL Problems](#visualization-of-bal-problems) |
23 |
| - * [Running Bundle Adjustment](#running-bundle-adjustment) |
24 |
| - * [Config Options](#config-options) |
25 |
| - * [Visualization of Results](#visualization-of-results) |
26 |
| - * [Batch Evaluation](#batch-evaluation) |
27 |
| -* [Repository Layout](#repository-layout) |
28 |
| - * [Code Layout](#code-layout) |
29 |
| -* [License](#license) |
| 1 | +# Power Variable Projection for Initialization-Free Large-Scale Bundle Adjustment, ECCV 2024 |
30 | 2 |
|
31 |
| -## Citation |
| 3 | +Welcome to the official page of the paper [Power Variable Projection for Initialization-Free Large-Scale Bundle Adjustment](https://arxiv.org/pdf/2405.05079). |
| 4 | + |
| 5 | +## Open-Source Implementation |
| 6 | + |
| 7 | +### Install Dependencies and Build External Libraries |
| 8 | + |
| 9 | +This implementation is built on [RootBA](https://github.com/NikolausDemmel/rootba). Please follow the same instructions to install the dependencies, as well as to build the external libraries. |
| 10 | + |
| 11 | +### Build PoVar |
| 12 | + |
| 13 | +**Build PoVar option a)** |
| 14 | + |
| 15 | +Use the build script. |
| 16 | + |
| 17 | +``` |
| 18 | +./scripts/build-rootba-povar.sh [BUILD_TYPE] |
| 19 | +``` |
| 20 | + |
| 21 | +You can optionally pass the cmake `BUILD_TYPE` used to compile RootBA |
| 22 | +as the first argument. If you don't pass anything the default is |
| 23 | +`Release`. The cmake build folder is `build`, inside the project |
| 24 | +root. This build script will use `ccache` and `ninja` automaticaly if |
| 25 | +they are found on `PATH`. |
| 26 | + |
| 27 | +**Build PoVar option b)** |
| 28 | + |
| 29 | +Manually build with the standard cmake workflow. |
| 30 | + |
| 31 | +``` |
| 32 | +mkdir build && cd build |
| 33 | +cmake .. |
| 34 | +make -j8 |
| 35 | +``` |
| 36 | + |
| 37 | +The cmake project will automatically use `ccache` if it is found on |
| 38 | +`PATH` (unless you override by manually specifying |
| 39 | +`CMAKE_C_COMPILER_LAUNCHER`/`CMAKE_CXX_COMPILER_LAUNCHER`). To use |
| 40 | +`ninja` instead of `make`, you can use: |
| 41 | + |
| 42 | +``` |
| 43 | +cmake .. -G Ninja |
| 44 | +ninja |
| 45 | +``` |
| 46 | + |
| 47 | +### Running PoVar |
| 48 | + |
| 49 | +#### Dataset |
| 50 | + |
| 51 | +You can download the BAL dataset on the [Bundle Adjustment in the Large](https://grail.cs.washington.edu/projects/bal/) webpage. |
| 52 | +Before using our solver, we randomly initialize a projective camera model, with the option ```--create-dataset```: |
| 53 | +``` |
| 54 | +./bin/bal --input /venice/problem-89-110973-pre.txt --create-dataset true |
| 55 | +``` |
| 56 | + |
| 57 | +#### Solving initialization-free stratified BA |
| 58 | + |
| 59 | +In line with [our paper](https://arxiv.org/abs/2405.05079), the stratified BA includes two steps. |
| 60 | + |
| 61 | +(a) We propose four different solvers ```--solver-type-step-1``` for the nonlinear separable optimization problem: |
| 62 | +* ```POWER_VARPROJ```: Variable projection with power series expansion (by default) |
| 63 | +* ```POWER_BUNDLE_ADJUSTMENT```: Levenberg-Marquardt with power series expansion (see PoBA https://arxiv.org/abs/2204.12834) |
| 64 | +* ```PCG```: Variable projection with preconditioned conjugate gradients |
| 65 | +* ```CHOLESKY```: Variable projection with Cholesky factorization |
| 66 | + |
| 67 | + |
| 68 | +(b) We propose two different solvers ```--solver-type-step-2``` for the projective refinement problem: |
| 69 | + |
| 70 | +* ```RIPOBA```: Riemannian manifold framework for Levenberg-Marquardt with power series (by default) |
| 71 | +* ```RIPCG```: Riemannian manifold framework for Levenberg-Marquardt with preconditioned conjugate gradients |
32 | 72 |
|
33 |
| -If you find our work useful in your research, please consider citing: |
34 | 73 |
|
| 74 | +The implementation uses ```double``` precision. |
| 75 | + |
| 76 | +#### Command line |
| 77 | +Once the random initialization has been done, you can run the two solvers in a row with, for instance: |
| 78 | +``` |
| 79 | +./bin/bal --num-threads 4 --input /data_custom/venice/problem-89-110973-pre.txt --solver-type-step-1 POWER_SCHUR_COMPLEMENT --solver-type-step-2 RIPOBA |
35 | 80 | ```
|
36 |
| -@inproceedings{demmel2021rootba, |
37 |
| - author = {Nikolaus Demmel and Christiane Sommer and Daniel Cremers and Vladyslav Usenko}, |
38 |
| - title = {Square Root Bundle Adjustment for Large-Scale Reconstruction}, |
| 81 | + |
| 82 | +The command ```--help``` will provide some explanations about the different options. |
| 83 | +In particular, you can set, among others: |
| 84 | +* ```--max-num-iterations```: maximum number of outer iterations for each step (by default, 50). |
| 85 | +* ```--power-sc-iterations```: maximum order of power series (by default, 20). |
| 86 | +* ```--residual-robust-norm```: NONE (by default), CAUCHY, HUBER. |
| 87 | +* ```--alpha```: weight of the affine part in pOSE formulation (by default, 0.1). |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | +## Abstract |
| 92 | + |
| 93 | +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. |
| 94 | + |
| 95 | +## Citation |
| 96 | +If you find our work useful in your research, please consider citing: |
| 97 | + |
| 98 | +```bibtex |
| 99 | +@article{weber2024power, |
| 100 | + title={Power Variable Projection for Initialization-Free Large-Scale Bundle Adjustment}, |
| 101 | + author={Weber, Simon and Hong, Je Hyeong and Cremers, Daniel}, |
| 102 | + journal={arXiv preprint arXiv:2405.05079}, |
| 103 | + year={2024} |
| 104 | +} |
| 105 | +
|
| 106 | +@inproceedings{weber2023poba, |
| 107 | + author = {Simon Weber and Nikolaus Demmel and Tin Chon Chan and Daniel Cremers}, |
| 108 | + title = {Power Bundle Adjustment for Large-Scale 3D Reconstruction}, |
39 | 109 | booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
|
40 |
| - year = {2021} |
| 110 | + year = {2023} |
41 | 111 | }
|
42 | 112 | ```
|
43 | 113 |
|
44 |
| -> *Note:* The initial public release in this repository corresponds to |
45 |
| -> the code version evluated in the CVPR'21 paper, after refactoring |
46 |
| -> and cleanup. Except for minor numerical differences, the results |
47 |
| -> should be reproducible on comparable hardware. As the code evolves, |
48 |
| -> runtime differences might become larger. |
| 114 | + |
| 115 | + |
| 116 | + |
49 | 117 |
|
50 | 118 | ## Dependencies
|
51 | 119 |
|
|
0 commit comments