Hi Everyone,
After a little more than four months of work, we are happy to announce the release of Ceres Solver 1.5.0.
As usual it is chock full of new features, bug fixes and performance improvements. The gory details can be found in the Changelog. Here are some highlights.
New Features
- Ability to remove parameter and residual blocks.
- Line search based solver (nonlinear cg, l-bfgs)
- A richer problem evaluation API.
- Much improved HTML documentation using Sphinx.
- Seamless mixing of automatic, numeric and analytic derivatives.
- Faster robust loss function and DENSE_QR.
- Multithreaded DENSE_SCHUR.
- Detailed timing information at vlog level 3 or higher.
- Automatic differentiation with parameter blocks specified a run time.
- Faster problem construction and destruction.
- Row and Column major matrix adapters for functions in rotation.h
- The SCHUR_JACOBI preconditioner can be used with SuiteSparse.
- Ceres can now be discovered and used from cmake.
- Support for producing RPMs.
Solution Quality
We benchmarked Ceres using a set of 54 test problems released by the NIST (Thanks to Prof. Douglas Bates for the reference)
A problem is considered successfully solved, if the minimum number of matching digits across all the parameters of problem (Log Relative Error) was at least 4. The maximum LRE possible is 11. Mondragon & Borchers (2005) used it to benchmark five curve fitting libraries. We combine their results with our own benchmark (examples/nist.cc) to get
Excel Gnuplot GaussFit HBN MinPack Ceres
Solved 23 38 24 44 28 53
Average LRE 2.3 4.3 4.0 6.8 4.4 9.4
Ceres solves the maximum number of problems with the highest LRE. We used DENSE_QR with TRUST_REGION solver to get these results. Interestingly, the next best solver is HBN which is a MATLAB program by Prof. Hans Brunn Nielsen, which is no surprise since Ceres Solver's LM loop is based on the lecture notes by Madsen, Nielsen and Tingleff (2004).
Thanks to all the contributors for their patches and bug reports.
Happy optimizing,
Sameer & Keir