代码之家  ›  专栏  ›  技术社区  ›  anti

谷神星束调整,稠密的乔尔斯基比舒尔快,但不应该吗?

  •  0
  • anti  · 技术社区  · 6 年前

    我的目标是得到绝对最快的解决方案,但我看到的结果似乎与有关捆绑调整问题的文档相矛盾。

    如前所述 here :

    one way to solve this problem is to set Solver::Options::linear_solver_type to SPARSE_NORMAL_CHOLESKY and call Solve(). And while this is a reasonable thing to do, bundle adjustment problems have a special sparsity structure that can be exploited to solve them much more efficiently. Ceres provides three specialized solvers (collectively known as Schur-based solvers) for this task.

    但是,当我使用 DENSE_NORMAL_CHOLESKY

    options.sparse_linear_algebra_library_type = SUITE_SPARSE;
    options.linear_solver_type = ceres::DENSE_NORMAL_CHOLESKY;
    options.minimizer_progress_to_stdout = false;
    options.logging_type = ceres::SILENT;
    options.max_num_iterations = 20;
    

    它给了我:

    Time (in seconds):
    Preprocessor                         0.006372
    
    Residual only evaluation           0.000359 (12)
    Jacobian & residual evaluation     0.003254 (12)
    Linear solver                      0.001549 (12)
    Minimizer                            0.008216
    
    Postprocessor                        0.000008
    Total                                0.014596
    

    options.use_explicit_schur_complement = true;
    options.sparse_linear_algebra_library_type = SUITE_SPARSE;
    options.linear_solver_type = ceres::ITERATIVE_SCHUR; 
    options.minimizer_progress_to_stdout = false;
    options.logging_type = ceres::SILENT;
    options.max_num_iterations = 20;
    options.preconditioner_type = SCHUR_JACOBI;
    

    Time (in seconds):
    Preprocessor                         0.007213
    
      Residual only evaluation           0.000306 (10)
      Jacobian & residual evaluation     0.002611 (10)
      Linear solver                      0.007781 (10)
    Minimizer                            0.013027
    
    Postprocessor                        0.000009
    Total                                0.020249
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sameer Agarwal    5 年前

    使用解析导数。你的大部分时间都花在那里了。