Skip to content

Commit c2b7577

Browse files
committed
push rpose v1
1 parent d78234a commit c2b7577

File tree

2,564 files changed

+6465
-555750
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,564 files changed

+6465
-555750
lines changed

CMakeLists.txt

+2-14
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ message(STATUS "CMake version: ${CMAKE_VERSION}")
44

55
include(cmake/PreventInSourceBuild.cmake)
66

7-
project(rootba VERSION 0.1.0 LANGUAGES CXX)
7+
project(rootba_povar VERSION 0.1.0 LANGUAGES CXX)
88

99

1010
# helper
@@ -104,16 +104,4 @@ include(cmake/SetupDependencies.cmake)
104104

105105
add_subdirectory(external)
106106

107-
if(ROOTBA_ENABLE_TESTING)
108-
message(STATUS "Testing is enabled")
109-
# enable before src, which also contains unit tests
110-
enable_testing()
111-
# for gtest_discover_test
112-
include(GoogleTest)
113-
endif()
114-
115-
add_subdirectory(src)
116-
117-
if(ROOTBA_ENABLE_TESTING)
118-
add_subdirectory(test)
119-
endif()
107+
add_subdirectory(src)

README.md

+108-40
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,119 @@
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
302

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
3272

33-
If you find our work useful in your research, please consider citing:
3473

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
3580
```
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},
39109
booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
40-
year = {2021}
110+
year = {2023}
41111
}
42112
```
43113

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+
49117

50118
## Dependencies
51119

0 commit comments

Comments
 (0)