1 %!TEX root = ceres-solver.tex 2 3 \chapter{Version History} 4 \section*{1.4.0} 5 \subsection{API Changes} 6 The new ordering API breaks existing code. Here the common case fixes. 7 \subsubsection{Before} 8 \begin{minted}[mathescape]{c++} 9 options.linear_solver_type = ceres::DENSE_SCHUR 10 options.ordering_type = ceres::SCHUR 11 \end{minted} 12 \subsubsection{After} 13 \begin{minted}[mathescape]{c++} 14 options.linear_solver_type = ceres::DENSE_SCHUR 15 \end{minted} 16 \subsubsection{Before} 17 \begin{minted}[mathescape]{c++} 18 options.linear_solver_type = ceres::DENSE_SCHUR; 19 options.ordering_type = ceres::USER; 20 for (int i = 0; i < num_points; ++i) { 21 options.ordering.push_back(my_points[i]) 22 } 23 for (int i = 0; i < num_cameras; ++i) { 24 options.ordering.push_back(my_cameras[i]) 25 } 26 options.num_eliminate_blocks = num_points; 27 \end{minted} 28 \subsubsection{After} 29 \begin{minted}[mathescape]{c++} 30 options.linear_solver_type = ceres::DENSE_SCHUR; 31 options.ordering = new ceres::ParameterBlockOrdering; 32 for (int i = 0; i < num_points; ++i) { 33 options.linear_solver_ordering->AddElementToGroup(my_points[i], 0); 34 } 35 for (int i = 0; i < num_cameras; ++i) { 36 options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1); 37 } 38 \end{minted} 39 \subsection{New Features} 40 \begin{itemize} 41 \item A new richer, more expressive and consistent API for ordering 42 parameter blocks. 43 \item A non-linear generalization of Ruhe \& Wedin's Algorithm 44 II. This allows the user to use variable projection on separable and 45 non-separable non-linear least squares problems. With 46 multithreading, this results in significant improvements to the 47 convergence behavior of the solver at a small increase in run time. 48 \item An image denoising example using fields of experts. (Petter 49 Strandmark) 50 \item Defines for Ceres version and ABI version. 51 \item Higher precision timer code where available. (Petter Strandmark) 52 \item Example Makefile for users of Ceres. 53 \item IterationSummary now informs the user when the step is a 54 non-monotonic step. 55 \item Fewer memory allocations when using \texttt{DenseQRSolver}. 56 \item GradientChecker for testing CostFunctions (William Rucklidge) 57 \item Add support for cost functions with 10 parameter blocks in 58 Problem. (Fisher) 59 \item Add support for 10 parameter blocks in AutoDiffCostFunction. 60 \end{itemize} 61 62 \subsection{Bug Fixes} 63 \begin{itemize} 64 \item static cast to force Eigen::Index to long conversion 65 \item Change LOG(ERROR) to LOG(WARNING) in \texttt{schur\_complement\_solver.cc}. 66 \item Remove verbose logging from \texttt{DenseQRSolve}. 67 \item Fix the Android NDK build. 68 \item Better handling of empty and constant Problems. 69 \item Remove an internal header that was leaking into the public API. 70 \item Memory leak in \texttt{trust\_region\_minimizer.cc} 71 \item Schur ordering was operating on the wrong object (Ricardo Martin) 72 \item MSVC fixes (Petter Strandmark) 73 \item Various fixes to \texttt{nist.cc} (Markus Moll) 74 \item Fixed a jacobian scaling bug. 75 \item Numerically robust computation of \texttt{model\_cost\_change}. 76 \item Signed comparison compiler warning fixes (Ricardo Martin) 77 \item Various compiler warning fixes all over. 78 \item Inclusion guard fixes (Petter Strandmark) 79 \item Segfault in test code (Sergey Popov) 80 \item Replaced EXPECT/ASSERT\_DEATH with the more portable 81 EXPECT\_DEATH\_IF\_SUPPORTED macros. 82 \item Fixed the camera projection model in Ceres' implementation of 83 Snavely's camera model. (Ricardo Martin) 84 \end{itemize} 85 86 87 \section*{1.3.0} 88 \subsection{New Features} 89 \begin{itemize} 90 \item Android Port (Scott Ettinger also contributed to the port) 91 \item Windows port. (Changchang Wu and Pierre Moulon also contributed to the port) 92 \item New subspace Dogleg Solver. (Markus Moll) 93 \item Trust region algorithm now supports the option of non-monotonic steps. 94 \item New loss functions \texttt{ArcTanLossFunction, 95 TolerantLossFunction} and \texttt{ComposedLossFunction}. (James Roseborough). 96 \item New \texttt{DENSE\_NORMAL\_CHOLESKY} linear solver, which uses Eigen's 97 LDLT factorization on the normal equations. 98 \item Cached symbolic factorization when using \texttt{CXSparse}. 99 (Petter Strandark) 100 \item New example \texttt{nist.cc} and data from the NIST non-linear 101 regression test suite. (Thanks to Douglas Bates for suggesting this.) 102 \item The traditional Dogleg solver now uses an elliptical trust 103 region (Markus Moll) 104 \item Support for returning initial and final gradients \& Jacobians. 105 \item Gradient computation support in the evaluators, with an eye 106 towards developing first order/gradient based solvers. 107 \item A better way to compute \texttt{Solver::Summary::fixed\_cost}. (Markus Moll) 108 \item \texttt{CMake} support for building documentation, separate examples, 109 installing and uninstalling the library and Gerrit hooks (Arnaud 110 Gelas) 111 \item \texttt{SuiteSparse4} support (Markus Moll) 112 \item Support for building Ceres without \texttt{TR1} (This leads to 113 slightly slower \texttt{DENSE\_SCHUR} and \texttt{SPARSE\_SCHUR} solvers). 114 \item \texttt{BALProblem} can now write a problem back to disk. 115 \item \texttt{bundle\_adjuster} now allows the user to normalize and perturb the 116 problem before solving. 117 \item Solver progress logging to file. 118 \item Added \texttt{Program::ToString} and 119 \texttt{ParameterBlock::ToString} to help with debugging. 120 \item Ability to build Ceres as a shared library (MacOS and Linux only), associated versioning and build release script changes. 121 \item Portable floating point classification API. 122 \end{itemize} 123 124 \subsection{Bug Fixes} 125 \begin{itemize} 126 \item Fix how invalid step evaluations are handled. 127 \item Change the slop handling around zero for model cost changes to use 128 relative tolerances rather than absolute tolerances. 129 \item Fix an inadvertant integer to bool conversion. (Petter Strandmark) 130 \item Do not link to \texttt{libgomp} when building on 131 windows. (Petter Strandmark) 132 \item Include \texttt{gflags.h} in \texttt{test\_utils.cc}. (Petter 133 Strandmark) 134 \item Use standard random number generation routines. (Petter Strandmark) 135 \item \texttt{TrustRegionMinimizer} does not implicitly negate the 136 steps that it takes. (Markus Moll) 137 \item Diagonal scaling allows for equal upper and lower bounds. (Markus Moll) 138 \item TrustRegionStrategy does not misuse LinearSolver:Summary anymore. 139 \item Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke) 140 \item QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang) 141 \item Added a workaround for a compiler bug in the Android NDK to the 142 Schur eliminator. 143 \item The sparse linear algebra library is only logged in 144 Summary::FullReport if it is used. 145 \item Rename the macro \texttt{CERES\_DONT\_HAVE\_PROTOCOL\_BUFFERS} 146 to \texttt{CERES\_NO\_PROTOCOL\_BUFFERS} for consistency. 147 \item Fix how static structure detection for the Schur eliminator logs 148 its results. 149 \item Correct example code in the documentation. (Petter Strandmark) 150 \item Fix \texttt{fpclassify.h} to work with the Android NDK and STLport. 151 \item Fix a memory leak in the \texttt{levenber\_marquardt\_strategy\_test.cc} 152 \item Fix an early return bug in the Dogleg solver. (Markus Moll) 153 \item Zero initialize Jets. 154 \item Moved \texttt{internal/ceres/mock\_log.h} to \texttt{internal/ceres/gmock/mock-log.h} 155 \item Unified file path handling in tests. 156 \item \texttt{data\_fitting.cc} includes \texttt{gflags} 157 \item Renamed Ceres' Mutex class and associated macros to avoid 158 namespace conflicts. 159 \item Close the BAL problem file after reading it (Markus Moll) 160 \item Fix IsInfinite on Jets. 161 \item Drop alignment requirements for Jets. 162 \item Fixed Jet to integer comparison. (Keith Leung) 163 \item Fix use of uninitialized arrays. (Sebastian Koch \& Markus Moll) 164 \item Conditionally compile gflag dependencies.(Casey Goodlett) 165 \item Add \texttt{data\_fitting.cc } to the examples \texttt{CMake} file. 166 \end{itemize} 167 168 \section*{1.2.3} 169 \subsection{Bug Fixes} 170 \begin{itemize} 171 \item \texttt{suitesparse\_test} is enabled even when \texttt{-DSUITESPARSE=OFF}. 172 \item \texttt{FixedArray} internal struct did not respect \texttt{Eigen} 173 alignment requirements (Koichi Akabe \& Stephan Kassemeyer). 174 \item Fixed \texttt{quadratic.cc} documentation and code mismatch 175 (Nick Lewycky). 176 \end{itemize} 177 \section*{1.2.2} 178 \subsection{Bug Fixes} 179 \begin{itemize} 180 \item Fix constant parameter blocks, and other minor fixes (Markus Moll) 181 \item Fix alignment issues when combining \texttt{Jet} and 182 \texttt{FixedArray} in automatic differeniation. 183 \item Remove obsolete \texttt{build\_defs} file. 184 \end{itemize} 185 \section*{1.2.1} 186 \subsection{New Features} 187 \begin{itemize} 188 \item Powell's Dogleg solver 189 \item Documentation now has a brief overview of Trust Region methods and how the Levenberg-Marquardt and Dogleg methods work. 190 \end{itemize} 191 \subsection{Bug Fixes} 192 \begin{itemize} 193 \item Destructor for \texttt{TrustRegionStrategy} was not virtual (Markus Moll) 194 \item Invalid \texttt{DCHECK} in \texttt{suitesparse.cc} (Markus Moll) 195 \item Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti) 196 \item Logging level changes in ConjugateGradientsSolver 197 \item VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code. 198 \item Enable SSE support on MacOS 199 \item \texttt{system\_test} was taking too long and too much memory (Koichi Akabe) 200 \end{itemize} 201 \section*{1.2.0} 202 \subsection{New Features} 203 \begin{itemize} 204 \item \texttt{CXSparse} support. 205 \item Block oriented fill reducing orderings. This 206 reduces the factorization time for sparse 207 \texttt{CHOLMOD} significantly. 208 \item New Trust region loop with support for multiple 209 trust region step strategies. Currently only Levenberg-Marquardt is supported, but this refactoring opens the door for Dog-leg, Stiehaug and others. 210 \item \texttt{CMake} file restructuring. Builds in \texttt{Release} mode by default, and now has platform specific tuning flags. 211 \item Re-organized documentation. No new content, but better organization. 212 \end{itemize} 213 214 \subsection{Bug Fixes} 215 \begin{itemize} 216 \item Fixed integer overflow bug in \texttt{block\_random\_access\_sparse\_matrix.cc}. 217 \item Renamed some macros to prevent name conflicts. 218 \item Fixed incorrent input to \texttt{StateUpdatingCallback}. 219 \item Fixes to AutoDiff tests. 220 \item Various internal cleanups. 221 \end{itemize} 222 223 \section*{1.1.1} 224 \subsection{Bug Fixes} 225 \begin{itemize} 226 \item Fix a bug in the handling of constant blocks. (Louis Simard) 227 \item Add an optional lower bound to the Levenberg-Marquardt regularizer to prevent oscillating between well and ill posed linear problems. 228 \item Some internal refactoring and test fixes. 229 \end{itemize} 230 \section{1.1.0} 231 \subsection{New Features} 232 \begin{itemize} 233 \item New iterative linear solver for general sparse problems - \texttt{CGNR} and a block Jacobi preconditioner for it. 234 \item Changed the semantics of how \texttt{SuiteSparse} dependencies are checked and used. Now \texttt{SuiteSparse} is built by default, only if all of its dependencies are present. 235 \item Automatic differentiation now supports dynamic number of residuals. 236 \item Support for writing the linear least squares problems to disk in text format so that they can loaded into \texttt{MATLAB}. 237 \item Linear solver results are now checked for nan and infinities. 238 \item Added \texttt{.gitignore} file. 239 \item A better more robust build system. 240 \end{itemize} 241 242 \subsection{Bug Fixes} 243 \begin{itemize} 244 \item Fixed a strict weak ordering bug in the schur ordering. 245 \item Grammar and typos in the documents and code comments. 246 \item Fixed tests which depended on exact equality between floating point values. 247 \end{itemize} 248 \section*{1.0.0} 249 Initial Release. 250