| .. _chapter-version-history: |
| |
| =============== |
| Version History |
| =============== |
| |
| 1.5.0 |
| ===== |
| |
| New Features |
| ------------ |
| #. Problem now supports removal of ParameterBlocks and |
| ResidualBlocks. There is a space/time tradeoff in doing this which |
| is controlled by |
| ``Problem::Options::enable_fast_parameter_block_removal`. |
| |
| #. Ceres now supports Line search based optimization algorithms in |
| addition to trust region algorithms. Currently there is support for |
| gradient descent, non-linear conjugate gradient and LBFGS search |
| directions. |
| |
| #. New, much improved HTML documentation using Sphinx. |
| |
| #. Speedup the robust loss function correction logic when residual is |
| one dimensional. |
| |
| #. Changed ``NumericDiffCostFunction`` to take functors like |
| ``AutoDiffCostFunction``. |
| |
| #. Added support for mixing automatic, analytic and numeric |
| differentiation. This is done by adding ``CostFunctionToFunctor`` |
| and ``NumericDiffFunctor`` objects to the API. |
| |
| #. ``Summary::FullReport`` now reports the structure of the ordering |
| used by the ``LinearSolver`` and inner iterations. |
| |
| #. Ceres when run at the ``VLOG`` level 3 or higher will report |
| detailed timing information about its internals. |
| |
| #. Remove extraneous initial and final residual evaluations. This |
| speeds up the solver a bit. |
| |
| #. Automatic differenatiation with a dynamic number of parameter |
| blocks. (Based on an idea by Thad Hughes). |
| |
| #. Speeded up problem construction and destruction. |
| |
| #. Added matrix adapters to ``rotation.h`` so that the rotation matrix |
| routines can work with row and column major matrices. (Markus Moll) |
| |
| #. ``SCHUR_JACOBI`` can now be used without ``SuiteSparse``. |
| |
| Bug Fixes |
| --------- |
| |
| #. Fixed a bug in ``solver_impl.cc`` residual evaluation. (Markus |
| Moll) |
| |
| #. Fixed varidic evaluation bug in ``AutoDiff``. |
| |
| #. Fixed ``SolverImpl`` tests. |
| |
| #. Fixed a bug in ``DenseSparseMatrix::ToDenseMatrix()``. |
| |
| #. Fixed an initialization bug in ``ProgramEvaluator``. |
| |
| #. Fixes to Android.mk paths (Carlos Hernandez) |
| |
| #. Modify ``nist.cc`` to compute accuracy based on ground truth |
| solution rather than the ground truth function value. |
| |
| #. Fixed a memory leak in ``cxsparse.cc``. (Alexander Mordvintsev). |
| |
| |
| 1.4.0 |
| ===== |
| |
| |
| API Changes |
| ----------- |
| |
| The new ordering API breaks existing code. Here the common case fixes. |
| |
| **Before** |
| |
| .. code-block:: c++ |
| |
| options.linear_solver_type = ceres::DENSE_SCHUR |
| options.ordering_type = ceres::SCHUR |
| |
| **After** |
| |
| |
| .. code-block:: c++ |
| |
| options.linear_solver_type = ceres::DENSE_SCHUR |
| |
| |
| **Before** |
| |
| .. code-block:: c++ |
| |
| options.linear_solver_type = ceres::DENSE_SCHUR; |
| options.ordering_type = ceres::USER; |
| for (int i = 0; i < num_points; ++i) { |
| options.ordering.push_back(my_points[i]) |
| } |
| for (int i = 0; i < num_cameras; ++i) { |
| options.ordering.push_back(my_cameras[i]) |
| } |
| options.num_eliminate_blocks = num_points; |
| |
| |
| **After** |
| |
| .. code-block:: c++ |
| |
| options.linear_solver_type = ceres::DENSE_SCHUR; |
| options.ordering = new ceres::ParameterBlockOrdering; |
| for (int i = 0; i < num_points; ++i) { |
| options.linear_solver_ordering->AddElementToGroup(my_points[i], 0); |
| } |
| for (int i = 0; i < num_cameras; ++i) { |
| options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1); |
| } |
| |
| |
| New Features |
| ------------ |
| |
| #. A new richer, more expressive and consistent API for ordering |
| parameter blocks. |
| |
| #. A non-linear generalization of Ruhe & Wedin's Algorithm II. This |
| allows the user to use variable projection on separable and |
| non-separable non-linear least squares problems. With |
| multithreading, this results in significant improvements to the |
| convergence behavior of the solver at a small increase in run time. |
| |
| #. An image denoising example using fields of experts. (Petter |
| Strandmark) |
| |
| #. Defines for Ceres version and ABI version. |
| |
| #. Higher precision timer code where available. (Petter Strandmark) |
| |
| #. Example Makefile for users of Ceres. |
| |
| #. IterationSummary now informs the user when the step is a |
| non-monotonic step. |
| |
| #. Fewer memory allocations when using ``DenseQRSolver``. |
| |
| #. GradientChecker for testing CostFunctions (William Rucklidge) |
| |
| #. Add support for cost functions with 10 parameter blocks in |
| ``Problem``. (Fisher) |
| |
| #. Add support for 10 parameter blocks in ``AutoDiffCostFunction``. |
| |
| |
| Bug Fixes |
| --------- |
| |
| #. static cast to force Eigen::Index to long conversion |
| |
| #. Change LOG(ERROR) to LOG(WARNING) in ``schur_complement_solver.cc``. |
| |
| #. Remove verbose logging from ``DenseQRSolve``. |
| |
| #. Fix the Android NDK build. |
| |
| #. Better handling of empty and constant Problems. |
| |
| #. Remove an internal header that was leaking into the public API. |
| |
| #. Memory leak in ``trust_region_minimizer.cc`` |
| |
| #. Schur ordering was operating on the wrong object (Ricardo Martin) |
| |
| #. MSVC fixes (Petter Strandmark) |
| |
| #. Various fixes to ``nist.cc`` (Markus Moll) |
| |
| #. Fixed a jacobian scaling bug. |
| |
| #. Numerically robust computation of ``model_cost_change``. |
| |
| #. Signed comparison compiler warning fixes (Ricardo Martin) |
| |
| #. Various compiler warning fixes all over. |
| |
| #. Inclusion guard fixes (Petter Strandmark) |
| |
| #. Segfault in test code (Sergey Popov) |
| |
| #. Replaced ``EXPECT/ASSERT_DEATH`` with the more portable |
| ``EXPECT_DEATH_IF_SUPPORTED`` macros. |
| |
| #. Fixed the camera projection model in Ceres' implementation of |
| Snavely's camera model. (Ricardo Martin) |
| |
| |
| 1.3.0 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. Android Port (Scott Ettinger also contributed to the port) |
| |
| #. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port) |
| |
| #. New subspace Dogleg Solver. (Markus Moll) |
| |
| #. Trust region algorithm now supports the option of non-monotonic steps. |
| |
| #. New loss functions ``ArcTanLossFunction``, ``TolerantLossFunction`` |
| and ``ComposedLossFunction``. (James Roseborough). |
| |
| #. New ``DENSE_NORMAL_CHOLESKY`` linear solver, which uses Eigen's |
| LDLT factorization on the normal equations. |
| |
| #. Cached symbolic factorization when using ``CXSparse``. |
| (Petter Strandark) |
| |
| #. New example ``nist.cc`` and data from the NIST non-linear |
| regression test suite. (Thanks to Douglas Bates for suggesting this.) |
| |
| #. The traditional Dogleg solver now uses an elliptical trust |
| region (Markus Moll) |
| |
| #. Support for returning initial and final gradients & Jacobians. |
| |
| #. Gradient computation support in the evaluators, with an eye |
| towards developing first order/gradient based solvers. |
| |
| #. A better way to compute ``Solver::Summary::fixed_cost``. (Markus Moll) |
| |
| #. ``CMake`` support for building documentation, separate examples, |
| installing and uninstalling the library and Gerrit hooks (Arnaud |
| Gelas) |
| |
| #. ``SuiteSparse4`` support (Markus Moll) |
| |
| #. Support for building Ceres without ``TR1`` (This leads to |
| slightly slower ``DENSE_SCHUR`` and ``SPARSE_SCHUR`` solvers). |
| |
| #. ``BALProblem`` can now write a problem back to disk. |
| |
| #. ``bundle_adjuster`` now allows the user to normalize and perturb the |
| problem before solving. |
| |
| #. Solver progress logging to file. |
| |
| #. Added ``Program::ToString`` and ``ParameterBlock::ToString`` to |
| help with debugging. |
| |
| #. Ability to build Ceres as a shared library (MacOS and Linux only), |
| associated versioning and build release script changes. |
| |
| #. Portable floating point classification API. |
| |
| |
| Bug Fixes |
| --------- |
| |
| #. Fix how invalid step evaluations are handled. |
| |
| #. Change the slop handling around zero for model cost changes to use |
| relative tolerances rather than absolute tolerances. |
| |
| #. Fix an inadvertant integer to bool conversion. (Petter Strandmark) |
| |
| #. Do not link to ``libgomp`` when building on |
| windows. (Petter Strandmark) |
| |
| #. Include ``gflags.h`` in ``test_utils.cc``. (Petter |
| Strandmark) |
| |
| #. Use standard random number generation routines. (Petter Strandmark) |
| |
| #. ``TrustRegionMinimizer`` does not implicitly negate the |
| steps that it takes. (Markus Moll) |
| |
| #. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll) |
| |
| #. TrustRegionStrategy does not misuse LinearSolver:Summary anymore. |
| |
| #. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke) |
| |
| #. QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang) |
| |
| #. Added a workaround for a compiler bug in the Android NDK to the |
| Schur eliminator. |
| |
| #. The sparse linear algebra library is only logged in |
| Summary::FullReport if it is used. |
| |
| #. Rename the macro ``CERES_DONT_HAVE_PROTOCOL_BUFFERS`` |
| to ``CERES_NO_PROTOCOL_BUFFERS`` for consistency. |
| |
| #. Fix how static structure detection for the Schur eliminator logs |
| its results. |
| |
| #. Correct example code in the documentation. (Petter Strandmark) |
| |
| #. Fix ``fpclassify.h`` to work with the Android NDK and STLport. |
| |
| #. Fix a memory leak in the ``levenber_marquardt_strategy_test.cc`` |
| |
| #. Fix an early return bug in the Dogleg solver. (Markus Moll) |
| |
| #. Zero initialize Jets. |
| #. Moved ``internal/ceres/mock_log.h`` to ``internal/ceres/gmock/mock-log.h`` |
| |
| #. Unified file path handling in tests. |
| |
| #. ``data_fitting.cc`` includes ``gflags`` |
| |
| #. Renamed Ceres' Mutex class and associated macros to avoid |
| namespace conflicts. |
| |
| #. Close the BAL problem file after reading it (Markus Moll) |
| |
| #. Fix IsInfinite on Jets. |
| |
| #. Drop alignment requirements for Jets. |
| |
| #. Fixed Jet to integer comparison. (Keith Leung) |
| |
| #. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll) |
| |
| #. Conditionally compile gflag dependencies.(Casey Goodlett) |
| |
| #. Add ``data_fitting.cc`` to the examples ``CMake`` file. |
| |
| |
| 1.2.3 |
| ===== |
| |
| Bug Fixes |
| --------- |
| |
| #. ``suitesparse_test`` is enabled even when ``-DSUITESPARSE=OFF``. |
| |
| #. ``FixedArray`` internal struct did not respect ``Eigen`` |
| alignment requirements (Koichi Akabe & Stephan Kassemeyer). |
| |
| #. Fixed ``quadratic.cc`` documentation and code mismatch |
| (Nick Lewycky). |
| |
| 1.2.2 |
| ===== |
| |
| Bug Fixes |
| --------- |
| |
| #. Fix constant parameter blocks, and other minor fixes (Markus Moll) |
| |
| #. Fix alignment issues when combining ``Jet`` and |
| ``FixedArray`` in automatic differeniation. |
| |
| #. Remove obsolete ``build_defs`` file. |
| |
| 1.2.1 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. Powell's Dogleg solver |
| |
| #. Documentation now has a brief overview of Trust Region methods and |
| how the Levenberg-Marquardt and Dogleg methods work. |
| |
| Bug Fixes |
| --------- |
| |
| #. Destructor for ``TrustRegionStrategy`` was not virtual (Markus Moll) |
| |
| #. Invalid ``DCHECK`` in ``suitesparse.cc`` (Markus Moll) |
| |
| #. Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti) |
| |
| #. Logging level changes in ConjugateGradientsSolver |
| |
| #. VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code. |
| |
| #. Enable SSE support on MacOS |
| |
| #. ``system_test`` was taking too long and too much memory (Koichi Akabe) |
| |
| 1.2.0 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. ``CXSparse`` support. |
| |
| #. Block oriented fill reducing orderings. This reduces the |
| factorization time for sparse ``CHOLMOD`` significantly. |
| |
| #. New Trust region loop with support for multiple trust region step |
| strategies. Currently only Levenberg-Marquardt is supported, but |
| this refactoring opens the door for Dog-leg, Stiehaug and others. |
| |
| #. ``CMake`` file restructuring. Builds in ``Release`` mode by |
| default, and now has platform specific tuning flags. |
| |
| #. Re-organized documentation. No new content, but better |
| organization. |
| |
| |
| Bug Fixes |
| --------- |
| |
| #. Fixed integer overflow bug in ``block_random_access_sparse_matrix.cc``. |
| |
| #. Renamed some macros to prevent name conflicts. |
| |
| #. Fixed incorrent input to ``StateUpdatingCallback``. |
| |
| #. Fixes to AutoDiff tests. |
| |
| #. Various internal cleanups. |
| |
| |
| 1.1.1 |
| ===== |
| |
| Bug Fixes |
| --------- |
| |
| #. Fix a bug in the handling of constant blocks. (Louis Simard) |
| |
| #. Add an optional lower bound to the Levenberg-Marquardt regularizer |
| to prevent oscillating between well and ill posed linear problems. |
| |
| #. Some internal refactoring and test fixes. |
| |
| 1.1.0 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. New iterative linear solver for general sparse problems - ``CGNR`` |
| and a block Jacobi preconditioner for it. |
| |
| #. Changed the semantics of how ``SuiteSparse`` dependencies are |
| checked and used. Now ``SuiteSparse`` is built by default, only if |
| all of its dependencies are present. |
| |
| #. Automatic differentiation now supports dynamic number of residuals. |
| |
| #. Support for writing the linear least squares problems to disk in |
| text format so that they can loaded into ``MATLAB``. |
| |
| #. Linear solver results are now checked for nan and infinities. |
| |
| #. Added ``.gitignore`` file. |
| |
| #. A better more robust build system. |
| |
| |
| Bug Fixes |
| --------- |
| |
| #. Fixed a strict weak ordering bug in the schur ordering. |
| |
| #. Grammar and typos in the documents and code comments. |
| |
| #. Fixed tests which depended on exact equality between floating point values. |
| |
| 1.0.0 |
| ===== |
| |
| Initial Release. Nathan Wiegand contributed to the Mac OSX port. |