Closed eduardohenriquearnold closed 1 month ago
Hi, for the iterative solver, my experiments show a significant performance drop (in terms of accuracy) when changing to an iterative solver. Also, after some iterations, the inner iteration numbers become quite large and the run time becomes long. Have you checked the result? Do they look similar in your case?
Hi @lpanaf , thanks for your reply and apologies for the delay - running the experiments with original solvers/parameters took some time.
I can confirm what you have observed: the iterative solver seems to converge to some bad local minima for the scene I have tried, despite being much faster than the sparse Schur solver. Specifically, the default solver took 31h to reconstruct the scene with the vast majority of time being spent on BA (24h) and global positioning (6h). On the other hand, the iterative solver completed the reconstruction within 6h.
I believe BA can be made more efficient by tuning the #iterations and termination criteria at the expense of some accuracy. Potentially using the iterative solver only for BA could also work.
I wonder if the iterative solver is more prone to get stuck in bad local minima in the Global Positioning step, do you think this could be the case? Or do you have other hypothesis that explain this?
For completeness, I'm attaching the poses (camera centers) obtained by GLOMAP in blue and the iterative solver variant in orange. The lines link sequential frames.
Hi, for your question, I cannot remember very clearly, but I can confirm that the global positioning step is quite sensitive to the iterative solver. For the bundle adjustment part, I remember that the iterative solver is also problematic for sequential input (it is somewhat better for unordered input). As for the reason, my guess would be the same as yours: local minima
That's helpful to know, thanks. I'm closing this issue for now as it doesn't seem to be feasible to use iterative solvers for the aforementioned reasons.
I noticed that GLOMAP uses the
SPARSE_SCHUR
solver and theCLUSTER_TRIDIAGONAL
preconditioner regardless of the number of images, whilst in COLMAP the solver/preconditioner forN>1000
images isITERATIVE_SCHUR
andSCHUR_JACOBI
. Similarly, the GlobalPositioning optimization usesSPARSE_SCHUR
andCLUSTER_TRIDIAGONAL
.I observed a significant speed up in reconstruction times for a large number of images (10k) when using the iterative linear solver (see details below). Specifically, a single global position optimization iteration was taking 280s (dominated by the linear solver), while the iterative solver iterations are generally in the order of seconds.
Is there any reason why the solver and preconditioner choices are different from COLMAP? Would a PR for this be welcome?
For context, I'm sharing excerpts of the logs below:
Original Solver/Preconditioner: SPARSE_SCHUR/CLUSTER_TRIDIAGONAL
Solver/Preconditioner: ITERATIVE_SCHUR/SCHUR_JACOBI