This repository has been archived by the owner on Oct 26, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge landing page with introduction.
The existing introduction was a bit redundant and also was not really an introduction. Also updated the build instructions to reflect the new reality on Mac OSX. Also updated the beginning of the tutorial to be a bit gentler and updated the history to be more consistent Change-Id: Ife38c1949252cf9f4c6301856957f2d38365f313
- Loading branch information
1 parent
46ccfb3
commit c4cd29d
Showing
7 changed files
with
190 additions
and
160 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
======== | ||
Features | ||
======== | ||
.. _chapter-features: | ||
|
||
* **Code Quality** - Ceres Solver has been used in production at | ||
Google for more than three years now. It is used to solve a wide | ||
variety of problems, both in size and complexity. The code runs on | ||
Google's data centers, desktops and on cellphones. It is clean, | ||
extensively tested and well documented code that is actively | ||
developed and supported. | ||
|
||
* **Modeling API** - It is rarely the case that one starts with the | ||
exact and complete formulation of the problem that one is trying to | ||
solve. Ceres's modeling API has been designed so that the user can | ||
easily build and modify the objective function, one term at a | ||
time. And to do so without worrying about how the solver is going to | ||
deal with the resulting changes in the sparsity/structure of the | ||
underlying problem. Indeed we take great care to separate the | ||
modeling of the optimization problem from solving it. The two can be | ||
done more or less completely independently of each other. | ||
|
||
- **Derivatives** Supplying derivatives is perhaps the most tedious | ||
and error prone part of using an optimization library. Ceres | ||
ships with `automatic`_ and `numeric`_ differentiation. So you | ||
never have to compute derivatives by hand (unless you really want | ||
to). Not only this, Ceres allows you to mix automatic, numeric and | ||
analytical derivatives in any combination that you want. | ||
|
||
- **Robust Loss Functions** Most non-linear least squares problems | ||
involve data. If there is data, there will be outliers. Ceres | ||
allows the user to *shape* their residuals using robust loss | ||
functions to reduce the influence of outliers. | ||
|
||
- **Local Parameterization** In many cases, some parameters lie on a | ||
manifold other than Euclidean space, e.g., rotation matrices. In | ||
such cases, the user can specify the geometry of the local tangent | ||
space by specifying a LocalParameterization object. | ||
|
||
* **Solver Choice** Depending on the size, sparsity structure, time & | ||
memory budgets, and solution quality requiremnts, different | ||
optimization algorithms will suit different needs. To this end, | ||
Ceres Solver comes with a variety of optimization algorithms, some | ||
of them the result of the author's own research. | ||
|
||
- **Trust Region Solvers** - Ceres supports Levenberg-Marquardt, | ||
Powell's Dogleg, and Subspace dogleg methods. The key | ||
computational cost in all of these methods is the solution of a | ||
linear system. To this end Ceres ships with a variety of linear | ||
solvers - dense QR and dense Cholesky factorization (using | ||
`Eigen`_ or `LAPACK`_) for dense problems, sparse Cholesky | ||
factorization (`SuiteSparse`_ or `CXSparse`_) for large sparse | ||
problems custom Schur complement based dense, sparse, and | ||
iterative linear solvers for `bundle adjustment`_ problems. | ||
|
||
- **Line Search Solvers** - When the problem size is so large that | ||
storing and factoring the Jacobian is not feasible or a low | ||
accuracy solution is required cheaply, Ceres offers a number of | ||
line search based algorithms. This includes a number of variants | ||
of Non-linear Conjugate Gradients, BFGS and LBFGS. | ||
|
||
* **Speed** - Ceres code has been extensively optimized, with C++ | ||
templating, hand written linear algebra routines and OpenMP based | ||
multithreading of the Jacobian evaluation and the linear solvers. | ||
|
||
* **Solution Quality** Ceres is the best performing solver on the NIST | ||
problem set used by Mondragon and Borchers for benchmarking | ||
non-linear least squares solvers. | ||
|
||
* **Covariance estimation** - Evaluate the sensitivity/uncertainty of | ||
the solution by evaluating all or part of the covariance | ||
matrix. Ceres is one of the few solvers that allows you to to do | ||
this analysis at scale. | ||
|
||
* **Community** Since its release as an open source software, Ceres | ||
has developed an active developer community that contributes new | ||
features, bug fixes and support. | ||
|
||
* **Portability** - Runs on *Linux*, *Windows*, *Mac OS X*, *Android* | ||
*and iOS*. | ||
|
||
* **BSD Licensed** The BSD license offers the flexibility to ship your | ||
application | ||
|
||
.. _solution quality: https://groups.google.com/forum/#!topic/ceres-solver/UcicgMPgbXw | ||
.. _bundle adjustment: http://en.wikipedia.org/wiki/Bundle_adjustment | ||
.. _SuiteSparse: http://www.cise.ufl.edu/research/sparse/SuiteSparse/ | ||
.. _Eigen: http://eigen.tuxfamily.org/ | ||
.. _LAPACK: http://www.netlib.org/lapack/ | ||
.. _CXSparse: https://www.cise.ufl.edu/research/sparse/CXSparse/ | ||
.. _automatic: http://en.wikipedia.org/wiki/Automatic_differentiation | ||
.. _numeric: http://en.wikipedia.org/wiki/Numerical_differentiation |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
.. _chapter-history: | ||
|
||
======= | ||
History | ||
======= | ||
|
||
Ceres Solver grew out of the need for general least squares solving at | ||
Google. In early 2010, Sameer Agarwal and Fredrik Schaffalitzky | ||
started the development of Ceres Solver. Fredrik left Google shortly | ||
thereafter and Keir Mierle stepped in to take his place. After two | ||
years of on-and-off development, Ceres Solver was released as open | ||
source in May of 2012. | ||
|
||
Origin of the name | ||
------------------ | ||
|
||
While there is some debate as to who invented the method of Least | ||
Squares [Stigler]_, there is no debate that it was `Carl Friedrich | ||
Gauss | ||
<http://www-groups.dcs.st-and.ac.uk/~history/Biographies/Gauss.html>`_ | ||
who brought it to the attention of the world. Using just 22 | ||
observations of the newly discovered asteroid `Ceres | ||
<http://en.wikipedia.org/wiki/Ceres_(dwarf_planet)>`_, Gauss used the | ||
method of least squares to correctly predict when and where the | ||
asteroid will emerge from behind the Sun [TenenbaumDirector]_. We | ||
named our solver after Ceres to celebrate this seminal event in the | ||
history of astronomy, statistics and optimization. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.