如何選擇正確的線性求解器?

使用TRUST_REGION時,線性求解器(linear solver)的選擇是非常重要。它影響解決解的質量和運行時間。這是一個簡單的推理方法。
    1. 對於小(幾百個參數)或密集問題,請使用DENSE_QR
    2. 對於一般稀疏問題(即雅可比矩陣具有大量零),使用SPARSE_NORMAL_CHOLESKY。這要求您安裝SuiteSparse或CXSparse。
   3.  對於最多一百臺相機的bundle adjustment問題,請使用DENSE_SCHUR
    4. 對於稀疏Schur補充/縮減相機矩陣的大型bundle adjustment問題,請使用SPARSE_SCHUR。這需要您構建Ceres,並支持SuiteSparse,CXSparse或Eigen的稀疏線性代數庫。如果由於某種原因無法訪問這些庫,則使用SCHUR_JACOBIITERATIVE_SCHUR是一個很好的選擇。
    5. 對於大型bundle adjustment問題(幾千個或更多相機),請使用ITERATIVE_SCHUR解算器。這裏有許多預處理器選擇SCHUR_JACOBI提供速度和準確性的完美平衡。如果您要解決DENSE_SCHUR太慢但SuiteSparse不可用的中型問題,這也是推薦的選項。注意:如果要解決中小型問題,可以考慮將Solver :: Options :: use_explicit_schur_complement設置爲true,這樣可以大大提高性能。如果您對SCHUR_JACOBI的性能不滿意,請按順序嘗試CLUSTER_JACOBICLUSTER_TRIDIAGONAL。它們要求您安裝SuiteSparse。這兩個預處理器都使用聚類算法。在CANONICAL_VIEWS之前使用SINGLE_LINKAGE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章