| .. _chapter-version-history: |
| |
| ======== |
| Releases |
| ======== |
| |
| 1.9.0 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. Bounds constraints: Support for upper and/or lower bounds on |
| parameters when using the trust region minimizer. |
| #. Dynamic Sparsity: Problems in which the sparsity structure of the |
| Jacobian changes over the course of the optimization can now be |
| solved much more efficiently. (Richard Stebbing) |
| #. Improved support for Microsoft Visual C++ including the ability to |
| build and ship DLLs. (Björn Piltz, Alex Stewart and Sergey |
| Sharybin) |
| #. Support for building on iOS 6.0 or higher (Jack Feng). |
| #. Autogeneration of config.h that captures all the defines used to |
| build and use Ceres Solver. |
| #. Simpler and more informative solver termination type |
| reporting. (See below for more details) |
| #. New `website <http://www.ceres-solver.org>`_ based entirely on |
| Sphinx. |
| #. ``AutoDiffLocalParameterization`` allows the use of automatic |
| differentiation for defining ``LocalParameterization`` objects |
| (Alex Stewart) |
| #. LBFGS is faster due to fewer memory copies. |
| #. Parameter blocks are not restricted to be less than 32k in size, |
| they can be up to 2G in size. |
| #. Faster ``SPARSE_NORMAL_CHOLESKY`` solver when using ``CX_SPARSE`` |
| as the sparse linear algebra library. |
| #. Added ``Problem::IsParameterBlockPresent`` and |
| ``Problem::GetParameterization``. |
| #. Added the (2,4,9) and (2,4,8) template specializations. |
| #. An example demonstrating the use of |
| DynamicAutoDiffCostFunction. (Joydeep Biswas) |
| #. Homography estimation example from Blender demonstrating the use of |
| a custom ``IterationCallback``. (Sergey Sharybin) |
| #. Support user passing a custom CMAKE_MODULE_PATH (for BLAS / |
| LAPACK). |
| |
| Backward Incompatible API Changes |
| --------------------------------- |
| |
| #. ``Solver::Options::linear_solver_ordering`` used to be a naked |
| pointer that Ceres took ownership of. This is error prone behaviour |
| which leads to problems when copying the ``Solver::Options`` struct |
| around. This has been replaced with a ``shared_ptr`` to handle |
| ownership correctly across copies. |
| |
| #. The enum used for reporting the termination/convergence status of |
| the solver has been renamed from ``SolverTerminationType`` to |
| ``TerminationType``. |
| |
| The enum values have also changed. ``FUNCTION_TOLERANCE``, |
| ``GRADIENT_TOLERANCE`` and ``PARAMETER_TOLERANCE`` have all been |
| replaced by ``CONVERGENCE``. |
| |
| ``NUMERICAL_FAILURE`` has been replaed by ``FAILURE``. |
| |
| ``USER_ABORT`` has been renamed to ``USER_FAILURE``. |
| |
| Further ``Solver::Summary::error`` has been renamed to |
| ``Solver::Summary::message``. It contains a more detailed |
| explanation for why the solver terminated. |
| |
| #. ``Solver::Options::gradient_tolerance`` used to be a relative |
| gradient tolerance. i.e., The solver converged when |
| |
| .. math:: |
| \|g(x)\|_\infty < \text{gradient_tolerance} * \|g(x_0)\|_\infty |
| |
| where :math:`g(x)` is the gradient of the objective function at |
| :math:`x` and :math:`x_0` is the parmeter vector at the start of |
| the optimization. |
| |
| This has changed to an absolute tolerance, i.e. the solver |
| converges when |
| |
| .. math:: |
| \|g(x)\|_\infty < \text{gradient_tolerance} |
| |
| #. Ceres cannot be built without the line search minimizer |
| anymore. Thus the preprocessor define |
| ``CERES_NO_LINE_SEARCH_MINIMIZER`` has been removed. |
| |
| Bug Fixes |
| --------- |
| |
| #. Disabled warning C4251. (Björn Piltz) |
| #. Do not propagate 3d party libs through |
| `IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE]` mechanism when |
| building shared libraries. (Björn Piltz) |
| #. Fixed errant verbose levels (Björn Piltz) |
| #. Variety of code cleanups, optimizations and bug fixes to the line |
| search minimizer code (Alex Stewart) |
| #. Fixed ``BlockSparseMatrix::Transpose`` when the matrix has row and |
| column blocks. (Richard Bowen) |
| #. Better error checking when ``Problem::RemoveResidualBlock`` is |
| called. (Alex Stewart) |
| #. Fixed a memory leak in ``SchurComplementSolver``. |
| #. Added ``epsilon()`` method to ``NumTraits<ceres::Jet<T, N> >``. (Filippo |
| Basso) |
| #. Fixed a bug in `CompressedRowSparseMatrix::AppendRows`` and |
| ``DeleteRows``.q |
| #. Handle empty problems consistently. |
| #. Restore the state of the ``Problem`` after a call to |
| ``Problem::Evaluate``. (Stefan Leutenegger) |
| #. Better error checking and reporting for linear solvers. |
| #. Use explicit formula to solve quadratic polynomials instead of the |
| eigenvalue solver. |
| #. Fix constant parameter handling in inner iterations (Mikael |
| Persson). |
| #. SuiteSparse errors do not cause a fatal crash anymore. |
| #. Fix ``corrector_test.cc``. |
| #. Relax the requirements on loss function derivatives. |
| #. Minor bugfix to logging.h (Scott Ettinger) |
| #. Updated ``gmock`` and ``gtest`` to the latest upstream version. |
| #. Fix build breakage on old versions of SuiteSparse. |
| #. Fixed build issues related to Clang / LLVM 3.4 (Johannes |
| Schönberger) |
| #. METIS_FOUND is never set. Changed the commit to fit the setting of |
| the other #._FOUND definitions. (Andreas Franek) |
| #. Variety of bug fixes and cleanups to the ``CMake`` build system |
| (Alex Stewart) |
| #. Removed fictious shared library target from the NDK build. |
| #. Solver::Options now uses ``shared_ptr`` to handle ownership of |
| ``Solver::Options::linear_solver_ordering`` and |
| ``Solver::Options::inner_iteration_ordering``. As a consequence the |
| ``NDK`` build now depends on ``libc++`` from the ``LLVM`` project. |
| #. Variety of lint cleanups (William Rucklidge & Jim Roseborough) |
| #. Various internal cleanups including dead code removal. |
| |
| |
| 1.8.0 |
| ===== |
| |
| New Features |
| ------------ |
| #. Significant improved ``CMake`` files with better robustness, |
| dependency checking and GUI support. (Alex Stewart) |
| #. Added ``DynamicNumericDiffCostFunction`` for numerically |
| differentiated cost functions whose sizing is determined at run |
| time. |
| #. ``NumericDiffCostFunction`` now supports a dynamic number of |
| residuals just like ``AutoDiffCostFunction``. |
| #. ``Problem`` exposes more of its structure in its API. |
| #. Faster automatic differentiation (Tim Langlois) |
| #. Added the commonly occuring ``2_d_d`` template specialization for |
| the Schur Eliminator. |
| #. Faster ``ITERATIVE_SCHUR`` solver using template specializations. |
| #. Faster ``SCHUR_JACOBI`` preconditioner construction. |
| #. Faster ``AngleAxisRotatePoint``. |
| #. Faster Jacobian evaluation when a loss function is used. |
| #. Added support for multiple clustering algorithms in visibility |
| based preconditioning, including a new fast single linkage |
| clustering algorithm. |
| |
| Bug Fixes |
| --------- |
| #. Fix ordering of ParseCommandLineFlags() & InitGoogleTest() for |
| Windows. (Alex Stewart) |
| #. Remove DCHECK_GE checks from fixed_array.h. |
| #. Fix build on MSVC 2013 (Petter Strandmark) |
| #. Fixed ``AngleAxisToRotationMatrix`` near zero. |
| #. Move ``CERES_HASH_NAMESPACE`` macros to ``collections_port.h``. |
| #. Fix handling of unordered_map/unordered_set on OSX 10.9.0. |
| #. Explicitly link to libm for ``curve_fitting_c.c``. (Alex Stewart) |
| #. Minor type conversion fix to autodiff.h |
| #. Remove RuntimeNumericDiffCostFunction. |
| #. Fix operator= ambiguity on some versions of Clang. (Alex Stewart) |
| #. Various Lint cleanups (William Rucklidge & Jim Roseborough) |
| #. Modified installation folders for Windows. (Pablo Speciale) |
| #. Added librt to link libraries for SuiteSparse_config on Linux. (Alex Stewart) |
| #. Check for presence of return-type-c-linkage option with |
| Clang. (Alex Stewart) |
| #. Fix Problem::RemoveParameterBlock after calling solve. (Simon Lynen) |
| #. Fix a free/delete bug in covariance_impl.cc |
| #. Fix two build errors. (Dustin Lang) |
| #. Add RequireInitialization = 1 to NumTraits::Jet. |
| #. Update gmock/gtest to 1.7.0 |
| #. Added IterationSummary::gradient_norm. |
| #. Reduced verbosity of the inner iteration minimizer. |
| #. Fixed a bug in TrustRegionMinimizer. (Michael Vitus) |
| #. Removed android/build_android.sh. |
| |
| |
| 1.7.0 |
| ===== |
| |
| Backward Incompatible API Changes |
| --------------------------------- |
| |
| #. ``Solver::Options::sparse_linear_algebra_library`` has been renamed |
| to ``Solver::Options::sparse_linear_algebra_library_type``. |
| |
| New Features |
| ------------ |
| |
| #. Sparse and dense covariance estimation. |
| #. A new Wolfe line search. (Alex Stewart) |
| #. ``BFGS`` line search direction. (Alex Stewart) |
| #. C API |
| #. Speeded up the use of loss functions > 17x. |
| #. Faster ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and ``DENSE_SCHUR`` |
| solvers. |
| #. Support for multiple dense linear algebra backends. In particular |
| optimized ``BLAS`` and ``LAPACK`` implementations (e.g., Intel MKL, |
| ACML, OpenBLAS etc) can now be used to do the dense linear |
| algebra for ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and |
| ``DENSE_SCHUR`` |
| #. Use of Inner iterations can now be adaptively stopped. Iteration |
| and runtime statistics for inner iterations are not reported in |
| ``Solver::Summary`` and ``Solver::Summary::FullReport``. |
| #. Improved inner iteration step acceptance criterion. |
| #. Add BlockRandomAccessCRSMatrix. |
| #. Speeded up automatic differentiation by 7\%. |
| #. Bundle adjustment example from libmv/Blender (Sergey Sharybin) |
| #. Shared library building is now controlled by CMake, rather than a custom |
| solution. Previously, Ceres had a custom option, but this is now deprecated |
| in favor of CMake's built in support for switching between static and |
| shared. Turn on BUILD_SHARED_LIBS to get shared Ceres libraries. |
| #. No more dependence on Protocol Buffers. |
| #. Incomplete LQ factorization. |
| #. Ability to write trust region problems to disk. |
| #. Add sinh, cosh, tanh and tan functions to automatic differentiation |
| (Johannes Schönberger) |
| #. Simplifications to the cmake build file. |
| #. ``miniglog`` can now be used as a replacement for ``google-glog`` |
| on non Android platforms. (This is NOT recommended). |
| |
| Bug Fixes |
| --------- |
| |
| #. Fix ``ITERATIVE_SCHUR`` solver to work correctly when the schur |
| complement is of size zero. (Soohyun Bae) |
| #. Fix the ``spec`` file for generating ``RPM`` packages (Brian Pitts |
| and Taylor Braun-Jones). |
| #. Fix how ceres calls CAMD (Manas Jagadev) |
| #. Fix breakage on old versions of SuiteSparse. (Fisher Yu) |
| #. Fix warning C4373 in Visual Studio (Petter Strandmark) |
| #. Fix compilation error caused by missing suitesparse headers and |
| reorganize them to be more robust. (Sergey Sharybin) |
| #. Check GCC Version before adding -fast compiler option on |
| OSX. (Steven Lovegrove) |
| #. Add documentation for minimizer progress output. |
| #. Lint and other cleanups (William Rucklidge and James Roseborough) |
| #. Collections port fix for MSC 2008 (Sergey Sharybin) |
| #. Various corrections and cleanups in the documentation. |
| #. Change the path where CeresConfig.cmake is installed (Pablo |
| Speciale) |
| #. Minor errors in documentation (Pablo Speciale) |
| #. Updated depend.cmake to follow CMake IF convention. (Joydeep |
| Biswas) |
| #. Stablize the schur ordering algorithm. |
| #. Update license header in split.h. |
| #. Enabling -O4 (link-time optimization) only if compiler/linker |
| support it. (Alex Stewart) |
| #. Consistent glog path across files. |
| #. ceres-solver.spec: Use cleaner, more conventional Release string |
| (Taylor Braun-Jones) |
| #. Fix compile bug on RHEL6 due to missing header (Taylor Braun-Jones) |
| #. CMake file is less verbose. |
| #. Use the latest upstream version of google-test and gmock. |
| #. Rationalize some of the variable names in ``Solver::Options``. |
| #. Improve Summary::FullReport when line search is used. |
| #. Expose line search parameters in ``Solver::Options``. |
| #. Fix update of L-BFGS history buffers after they become full. (Alex |
| Stewart) |
| #. Fix configuration error on systems without SuiteSparse installed |
| (Sergey Sharybin) |
| #. Enforce the read call returns correct value in ``curve_fitting_c.c`` |
| (Arnaud Gelas) |
| #. Fix DynamicAutoDiffCostFunction (Richard Stebbing) |
| #. Fix Problem::RemoveParameterBlock documentation (Johannes |
| Schönberger) |
| #. Fix a logging bug in parameter_block.h |
| #. Refactor the preconditioner class structure. |
| #. Fix an uninitialized variable warning when building with ``GCC``. |
| #. Fix a reallocation bug in |
| ``CreateJacobianBlockSparsityTranspose``. (Yuliy Schwartzburg) |
| #. Add a define for O_BINARY. |
| #. Fix miniglog-based Android NDK build; now works with NDK r9. (Scott Ettinger) |
| |
| |
| 1.6.0 |
| ===== |
| |
| New Features |
| ------------ |
| |
| #. Major Performance improvements. |
| |
| a. Schur type solvers (``SPARSE_SCHUR``, ``DENSE_SCHUR``, |
| ``ITERATIVE_SCHUR``) are significantly faster due to custom BLAS |
| routines and fewer heap allocations. |
| |
| b. ``SPARSE_SCHUR`` when used with ``CX_SPARSE`` now uses a block |
| AMD for much improved factorization performance. |
| |
| c. The jacobian matrix is pre-ordered so that |
| ``SPARSE_NORMAL_CHOLESKY`` and ``SPARSE_SCHUR`` do not have to |
| make copies inside ``CHOLMOD``. |
| |
| d. Faster autodiff by replacing division by multplication by inverse. |
| |
| e. When compiled without threads, the schur eliminator does not pay |
| the penalty for locking and unlocking mutexes. |
| |
| #. Users can now use ``linear_solver_ordering`` to affect the |
| fill-reducing ordering used by ``SUITE_SPARSE`` for |
| ``SPARSE_NORMAL_CHOLESKY``. |
| #. ``Problem`` can now report the set of parameter blocks it knows about. |
| #. ``TrustRegionMinimizer`` uses the evaluator to compute the gradient |
| instead of a matrix vector multiply. |
| #. On ``Mac OS``, whole program optimization is enabled. |
| #. Users can now use automatic differentiation to define new |
| ``LocalParameterization`` objects. (Sergey Sharybin) |
| #. Enable larger tuple sizes for Visual Studio 2012. (Petter Strandmark) |
| |
| |
| Bug Fixes |
| --------- |
| |
| #. Update the documentation for ``CostFunction``. |
| #. Fixed a typo in the documentation. (Pablo Speciale) |
| #. Fix a typo in suitesparse.cc. |
| #. Bugfix in ``NumericDiffCostFunction``. (Nicolas Brodu) |
| #. Death to BlockSparseMatrixBase. |
| #. Change Minimizer::Options::min_trust_region_radius to double. |
| #. Update to compile with stricter gcc checks. (Joydeep Biswas) |
| #. Do not modify cached CMAKE_CXX_FLAGS_RELEASE. (Sergey Sharybin) |
| #. ``<iterator>`` needed for back_insert_iterator. (Petter Strandmark) |
| #. Lint cleanup. (William Rucklidge) |
| #. Documentation corrections. (Pablo Speciale) |
| |
| |
| 1.5.0 |
| ===== |
| |
| Backward Incompatible API Changes |
| --------------------------------- |
| |
| #. Added ``Problem::Evaluate``. Now you can evaluate a problem or any |
| part of it without calling the solver. |
| |
| In light of this the following settings have been deprecated and |
| removed from the API. |
| |
| - ``Solver::Options::return_initial_residuals`` |
| - ``Solver::Options::return_initial_gradient`` |
| - ``Solver::Options::return_initial_jacobian`` |
| - ``Solver::Options::return_final_residuals`` |
| - ``Solver::Options::return_final_gradient`` |
| - ``Solver::Options::return_final_jacobian`` |
| |
| Instead we recommend using something like this. |
| |
| .. code-block:: c++ |
| |
| Problem problem; |
| // Build problem |
| |
| vector<double> initial_residuals; |
| problem.Evaluate(Problem::EvaluateOptions(), |
| NULL, /* No cost */ |
| &initial_residuals, |
| NULL, /* No gradient */ |
| NULL /* No jacobian */ ); |
| |
| Solver::Options options; |
| Solver::Summary summary; |
| Solver::Solve(options, &problem, &summary); |
| |
| vector<double> final_residuals; |
| problem.Evaluate(Problem::EvaluateOptions(), |
| NULL, /* No cost */ |
| &final_residuals, |
| NULL, /* No gradient */ |
| NULL /* No jacobian */ ); |
| |
| |
| 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. |
| #. Added ``Problem::Evaluate``. Now you can evaluate a problem or any |
| part of it without calling the solver. In light of this the |
| following settings have been deprecated and removed from the API. |
| |
| - ``Solver::Options::return_initial_residuals`` |
| - ``Solver::Options::return_initial_gradient`` |
| - ``Solver::Options::return_initial_jacobian`` |
| - ``Solver::Options::return_final_residuals`` |
| - ``Solver::Options::return_final_gradient`` |
| - ``Solver::Options::return_final_jacobian`` |
| |
| #. New, much improved HTML documentation using Sphinx. |
| #. 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. |
| #. Sped up the robust loss function correction logic when residual is |
| one dimensional. |
| #. Sped up ``DenseQRSolver`` by changing the way dense jacobians are |
| stored. This is a 200-500% improvement in linear solver performance |
| depending on the size of the problem. |
| #. ``DENSE_SCHUR`` now supports multi-threading. |
| #. Greatly expanded ``Summary::FullReport``: |
| |
| - Report the ordering used by the ``LinearSolver``. |
| - Report the ordering used by the inner iterations. |
| - Execution timing breakdown into evaluations and linear solves. |
| - Effective size of the problem solved by the solver, which now |
| accounts for the size of the tangent space when using a |
| ``LocalParameterization``. |
| #. 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). |
| #. Sped 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``. |
| #. A ``.spec`` file for producing RPMs. (Taylor Braun-Jones) |
| #. ``CMake`` can now build the sphinx documentation (Pablo Speciale) |
| #. Add support for creating a CMake config file during build to make |
| embedding Ceres in other CMake-using projects easier. (Pablo |
| Speciale). |
| #. Better error reporting in ``Problem`` for missing parameter blocks. |
| #. A more flexible ``Android.mk`` and a more modular build. If binary |
| size and/or compile time is a concern, larger parts of the solver |
| can be disabled at compile time. |
| |
| Bug Fixes |
| --------- |
| #. Compilation fixes for MSVC2010 (Sergey Sharybin) |
| #. Fixed "deprecated conversion from string constant to char*" |
| warnings. (Pablo Speciale) |
| #. Correctly propagate ifdefs when building without Schur eliminator |
| template specializations. |
| #. Correct handling of ``LIB_SUFFIX`` on Linux. (Yuliy Schwartzburg). |
| #. Code and signature cleanup in ``rotation.h``. |
| #. Make examples independent of internal code. |
| #. Disable unused member in ``gtest`` which results in build error on |
| OS X with latest Xcode. (Taylor Braun-Jones) |
| #. Pass the correct flags to the linker when using |
| ``pthreads``. (Taylor Braun-Jones) |
| #. Only use ``cmake28`` macro when building on RHEL6. (Taylor |
| Braun-Jones) |
| #. Remove ``-Wno-return-type-c-linkage`` when compiling with |
| GCC. (Taylor Braun-Jones) |
| #. Fix ``No previous prototype`` warnings. (Sergey Sharybin) |
| #. MinGW build fixes. (Sergey Sharybin) |
| #. Lots of minor code and lint fixes. (William Rucklidge) |
| #. 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). |
| #. Fixed the install directory for libraries by correctly handling |
| ``LIB_SUFFIX``. (Taylor Braun-Jones) |
| |
| 1.4.0 |
| ===== |
| |
| Backward Incompatible 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. |