|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<html class="no-js" lang="en" >
|
|
Packit |
ea1746 |
<head>
|
|
Packit |
ea1746 |
<meta charset="utf-8">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<title>Solving — Ceres Solver</title>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<link rel="top" title="Ceres Solver" href="index.html"/>
|
|
Packit |
ea1746 |
<link rel="up" title="FAQS, Tips & Tricks" href="faqs.html"/>
|
|
Packit |
ea1746 |
<link rel="next" title="Users" href="users.html"/>
|
|
Packit |
ea1746 |
<link rel="prev" title="Modeling" href="modeling_faqs.html"/>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<script src="_static/js/modernizr.min.js"></script>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
</head>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<body class="wy-body-for-nav" role="document">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Ceres Solver
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
1.13
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
Packit |
ea1746 |
<input type="text" name="q" placeholder="Search docs" />
|
|
Packit |
ea1746 |
<input type="hidden" name="check_keywords" value="yes" />
|
|
Packit |
ea1746 |
<input type="hidden" name="area" value="default" />
|
|
Packit |
ea1746 |
</form>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Why?
|
|
Packit |
ea1746 |
Installation
|
|
Packit |
ea1746 |
Tutorial
|
|
Packit |
ea1746 |
On Derivatives
|
|
Packit |
ea1746 |
Modeling Non-linear Least Squares
|
|
Packit |
ea1746 |
Solving Non-linear Least Squares
|
|
Packit |
ea1746 |
Covariance Estimation
|
|
Packit |
ea1746 |
General Unconstrained Minimization
|
|
Packit |
ea1746 |
FAQS, Tips & Tricks
|
|
Packit |
ea1746 |
Modeling
|
|
Packit |
ea1746 |
Solving
|
|
Packit |
ea1746 |
Further Reading
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Users
|
|
Packit |
ea1746 |
Contributing
|
|
Packit |
ea1746 |
Version History
|
|
Packit |
ea1746 |
Bibliography
|
|
Packit |
ea1746 |
License
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
</nav>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Ceres Solver
|
|
Packit |
ea1746 |
</nav>
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Docs »
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
FAQS, Tips & Tricks »
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Solving
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
SolvingΒΆ
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
How do I evaluate the Jacobian for a solved problem?
|
|
Packit |
ea1746 |
Using Problem::Evaluate() .
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
How do I choose the right linear solver?
|
|
Packit |
ea1746 |
When using the TRUST_REGION minimizer, the choice of linear
|
|
Packit |
ea1746 |
solver is an important decision. It affects solution quality and
|
|
Packit |
ea1746 |
runtime. Here is a simple way to reason about it.
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
For small (a few hundred parameters) or dense problems use
|
|
Packit |
ea1746 |
DENSE_QR .
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
For general sparse problems (i.e., the Jacobian matrix has a
|
|
Packit |
ea1746 |
substantial number of zeros) use
|
|
Packit |
ea1746 |
SPARSE_NORMAL_CHOLESKY . This requires that you have
|
|
Packit |
ea1746 |
SuiteSparse or CXSparse installed.
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
For bundle adjustment problems with up to a hundred or so
|
|
Packit |
ea1746 |
cameras, use DENSE_SCHUR .
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
For larger bundle adjustment problems with sparse Schur
|
|
Packit |
ea1746 |
Complement/Reduced camera matrices use SPARSE_SCHUR . This
|
|
Packit |
ea1746 |
requires that you build Ceres with support for SuiteSparse ,
|
|
Packit |
ea1746 |
CXSparse or Eigen’s sparse linear algebra libraries.
|
|
Packit |
ea1746 |
If you do not have access to these libraries for whatever
|
|
Packit |
ea1746 |
reason, ITERATIVE_SCHUR with SCHUR_JACOBI is an
|
|
Packit |
ea1746 |
excellent alternative.
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
For large bundle adjustment problems (a few thousand cameras or
|
|
Packit |
ea1746 |
more) use the ITERATIVE_SCHUR solver. There are a number of
|
|
Packit |
ea1746 |
preconditioner choices here. SCHUR_JACOBI offers an
|
|
Packit |
ea1746 |
excellent balance of speed and accuracy. This is also the
|
|
Packit |
ea1746 |
recommended option if you are solving medium sized problems for
|
|
Packit |
ea1746 |
which DENSE_SCHUR is too slow but SuiteSparse is not
|
|
Packit |
ea1746 |
available.
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Note
|
|
Packit |
ea1746 |
If you are solving small to medium sized problems, consider
|
|
Packit |
ea1746 |
setting Solver::Options::use_explicit_schur_complement to
|
|
Packit |
ea1746 |
true , it can result in a substantial performance boost.
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
If you are not satisfied with SCHUR_JACOBI ‘s performance try
|
|
Packit |
ea1746 |
CLUSTER_JACOBI and CLUSTER_TRIDIAGONAL in that
|
|
Packit |
ea1746 |
order. They require that you have SuiteSparse
|
|
Packit |
ea1746 |
installed. Both of these preconditioners use a clustering
|
|
Packit |
ea1746 |
algorithm. Use SINGLE_LINKAGE before CANONICAL_VIEWS .
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Use Solver::Summary::FullReport() to diagnose performance problems.
|
|
Packit |
ea1746 |
When diagnosing Ceres performance issues - runtime and convergence,
|
|
Packit |
ea1746 |
the first place to start is by looking at the output of
|
|
Packit |
ea1746 |
Solver::Summary::FullReport . Here is an example
|
|
Packit |
ea1746 |
./bin/bundle_adjuster --input ../data/problem-16-22106-pre.txt
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
|
|
Packit |
ea1746 |
0 4.185660e+06 0.00e+00 2.16e+07 0.00e+00 0.00e+00 1.00e+04 0 7.50e-02 3.58e-01
|
|
Packit |
ea1746 |
1 1.980525e+05 3.99e+06 5.34e+06 2.40e+03 9.60e-01 3.00e+04 1 1.84e-01 5.42e-01
|
|
Packit |
ea1746 |
2 5.086543e+04 1.47e+05 2.11e+06 1.01e+03 8.22e-01 4.09e+04 1 1.53e-01 6.95e-01
|
|
Packit |
ea1746 |
3 1.859667e+04 3.23e+04 2.87e+05 2.64e+02 9.85e-01 1.23e+05 1 1.71e-01 8.66e-01
|
|
Packit |
ea1746 |
4 1.803857e+04 5.58e+02 2.69e+04 8.66e+01 9.93e-01 3.69e+05 1 1.61e-01 1.03e+00
|
|
Packit |
ea1746 |
5 1.803391e+04 4.66e+00 3.11e+02 1.02e+01 1.00e+00 1.11e+06 1 1.49e-01 1.18e+00
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Ceres Solver v1.12.0 Solve Report
|
|
Packit |
ea1746 |
----------------------------------
|
|
Packit |
ea1746 |
Original Reduced
|
|
Packit |
ea1746 |
Parameter blocks 22122 22122
|
|
Packit |
ea1746 |
Parameters 66462 66462
|
|
Packit |
ea1746 |
Residual blocks 83718 83718
|
|
Packit |
ea1746 |
Residual 167436 167436
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Minimizer TRUST_REGION
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Sparse linear algebra library SUITE_SPARSE
|
|
Packit |
ea1746 |
Trust region strategy LEVENBERG_MARQUARDT
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Given Used
|
|
Packit |
ea1746 |
Linear solver SPARSE_SCHUR SPARSE_SCHUR
|
|
Packit |
ea1746 |
Threads 1 1
|
|
Packit |
ea1746 |
Linear solver threads 1 1
|
|
Packit |
ea1746 |
Linear solver ordering AUTOMATIC 22106, 16
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Cost:
|
|
Packit |
ea1746 |
Initial 4.185660e+06
|
|
Packit |
ea1746 |
Final 1.803391e+04
|
|
Packit |
ea1746 |
Change 4.167626e+06
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Minimizer iterations 5
|
|
Packit |
ea1746 |
Successful steps 5
|
|
Packit |
ea1746 |
Unsuccessful steps 0
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Time (in seconds):
|
|
Packit |
ea1746 |
Preprocessor 0.283
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Residual evaluation 0.061
|
|
Packit |
ea1746 |
Jacobian evaluation 0.361
|
|
Packit |
ea1746 |
Linear solver 0.382
|
|
Packit |
ea1746 |
Minimizer 0.895
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Postprocessor 0.002
|
|
Packit |
ea1746 |
Total 1.220
|
|
Packit |
ea1746 |
|
|
Packit |
ea1746 |
Termination: NO_CONVERGENCE (Maximum number of iterations reached.)
|