Hierarchical-Localization icon indicating copy to clipboard operation
Hierarchical-Localization copied to clipboard

Alternative SfM reconstruction options to colmap?

Open expenses opened this issue 1 year ago • 4 comments

Hi, thanks for providing this great framework! I'm finding that for localizing hundreds of images, the colmap reconstructions step is by far the longest, mostly due to it's CPU-bound global bundle adjustment algorithm. Are you aware of any other libraries that could be used that have a faster bundle adjuster such as https://github.com/hjwdzh/DeepLM or https://github.com/MegviiRobot/MegBA?

expenses avatar Oct 10 '23 09:10 expenses

We are aware of these approaches but they are usually much less flexible (e.g. in terms of shared intrinsic parameters and camera models) than Ceres, which is the solver COLMAP is based on. Ceres will support GPU-based solving in the near future, which is the path of least effort. As for the distributed setting, COLMAP has a hierarchical mapper mode, which is faster but not yet supported by hloc.

sarlinpe avatar Oct 14 '23 13:10 sarlinpe

dagsfm Could be something to look into if you have large scenes

SamuelJamesFisher avatar Oct 18 '23 22:10 SamuelJamesFisher

We are aware of these approaches but they are usually much less flexible (e.g. in terms of shared intrinsic parameters and camera models) than Ceres, which is the solver COLMAP is based on. Ceres will support GPU-based solving in the near future, which is the path of least effort. As for the distributed setting, COLMAP has a hierarchical mapper mode, which is faster but not yet supported by hloc.

Are you referring for support for sparse solving on GPU with ceres? I have seen a few issue threads of developers attempting to use ceres::DENSE_SCHUR and having issues with RAM consumption and stability on large numbers of images.

https://github.com/colmap/colmap/issues/2305 https://github.com/ceres-solver/ceres-solver/issues/1045

greenbrettmichael avatar Jun 03 '24 23:06 greenbrettmichael

After reading more into the colmap bundle adjustment code, the following algorithms are used in different scenarios ceres::DENSE_SCHUR ceres::SPARSE_SCHUR ceres::ITERATIVE_SCHUR WITH ceres::SCHUR_JACOBI preconditioner

ceres::DENSE_SCHUR has GPU support, but takes too much RAM and is numerically unstable after a certain number of images. the biggest bang for development buck would be adding GPU implementation for ceres::ITERATIVE_SCHUR, there is an open ceres issue on the topic here https://github.com/ceres-solver/ceres-solver/issues/871

greenbrettmichael avatar Jun 03 '24 23:06 greenbrettmichael