IntroductionΒΆ

Solving nonlinear least squares problems [1] comes up in a broad range of areas across science and engineering - from fitting curves in statistics, to constructing 3D models from photographs in computer vision. Ceres Solver [2] [3] is a portable C++ library for solving non-linear least squares problems accurately and efficiently.

Features

  1. A friendly Modeling API.
  2. Automatic and numeric differentiation.
  3. Robust loss functions and local parameterizations.
  4. Multithreading.
  5. Trust-Region (Levenberg-Marquardt and Dogleg) and Line Search (Nonlinear CG and L-BFGS) solvers.
  6. Variety of linear solvers.
    1. Dense QR and Cholesky factorization (using Eigen) for small problems.
    2. Sparse Cholesky factorization (using SuiteSparse and CXSparse) for large sparse problems.
    3. Specialized solvers for bundle adjustment problems in computer vision.
    4. Iterative linear solvers with preconditioners for general sparse and bundle adjustment problems.
  7. Portable: Runs on Linux, Windows, Mac OS X and Android.

At Google, Ceres Solver has been used for solving a variety of problems in computer vision and machine learning. e.g., it is used to to estimate the pose of Street View cars, aircrafts, and satellites; to build 3D models for PhotoTours; to estimate satellite image sensor characteristics, and more.

Blender uses Ceres for motion tracking and bundle adjustment.

Footnotes

[1]For a gentle but brief introduction to non-linear least squares problems, please start by reading the Tutorial.
[2]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 who brought it to the attention of the world. Using just 22 observations of the newly discovered asteroid Ceres, 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.
[3]For brevity, in the rest of this document we will just use the term Ceres.

Ceres Solver

Previous topic

Ceres Solver

Next topic

Installation