--
You received this message because you are subscribed to the Google Groups "Ceres Solver" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ceres-solver...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ceres-solver/e0258913-5dd1-4054-ba8d-f874776c7410o%40googlegroups.com.
Hi,Thanks for the release candidate! I tested it a bit on various projects on Linux and Mac. Overall it works great. I needed no code changes, only some minor cmake adaptation (there are minor open issues related to using custom Eigen from a source tree and Intel's TBB binary packages).
I can share 2 timing tests on Linux (Ubuntu 18.04). Keep in mind that these are just exemplar runs on desktop computers, and not 100% controlled timing experiments.The first is for Lie group splines (experiments from this paper). In the results overview you can see around 20% speedup with ceres 2.0 (these correspond essentially to the timing tables from the paper). All output in the ci jobs is linked from the gist, but I also included directly the ceres output of one of the calibration experiments, namely "ceres_se3_old", which is quite heavy on autodiff. It seems half the runtime improvement is in jacobian evaluation, and half in the linear solver (no Schur complement).
The second one is a bundle adjustment type optimization with photometric residuals using Schur complement and auto diff. Residuals are not simple, but also not hugely complex (relative pose, point transformation, non-linear projection function, bi-cubic image interpolation). Overall I see a quite consistent runtime improvement of around 10% across different problem sizes (100s to 1000s of cameras). Looks like it's mostly the linear solver, maybe the improved Schur elimination you mentioned. Here is the ceres output for one example. (The residual and jacobian evaluation is actually a bit slower in the ceres 2.0 run, but I'm not sure if the difference is even significant or just accidental due not 100% controlled environment.)
To summarize, I think it's a nice runtime improvement "for free"! I'm curious on your thoughts on the linear solver runtime improvements, in particular in the experiments without Schur complement.
Best,NikolausPS: I'm just having a thought about the linear solver timings of the BA experiment. On that machine the installed blas / lapack is openblas, and I recently noticed some issues where openblas can be much slower if it uses openmp multithreading for small operations. Not sure if ceres configures this somehow differently, since it also switched away from openmp for it's multi-threading. For the lie-spline experiments, that ci image where this is run has the standard libblas from Ubuntu, not openblas, so is probably not a factor.
On Wednesday, August 5, 2020 at 5:52:20 AM UTC+2 Sameer Agarwal wrote:Hello Everyone,
We are pleased to announce the first release candidate for version 2.0.0. The tarball can be downloaded from
http://ceres-solver.org/ceres-solver-2.0.0rc1.tar.gz
This is the culmination of more than two years of work covering almost 300 commits, so the list of changes is rather large. Here are some highlights:And a few API breaking changes (besides the move to C++14):
- Ceres Solver now requires a C++14 compatible compiler, Eigen version > 3.3 & CMake version >= 3.5, XCode version >= 11.2
- C++ threading based multi-threading support.
- Problem::AddResidualBlock, SizedFunction, AutoDiffCostFunction, NumericDiffCostFunction support an arbitrary number of parameter blocks using variadic templates
- On Apple platforms, support for Apple’s Accelerate framework as a sparse linear algebra library.
- Significantly faster AutoDiff
- Mixed precision solves when using SPARSE_NORMAL_CHOLESKY.
- LocalParameterization objects can have a zero sized tangent size, which effectively makes the parameter block constant. In particular, this allows for a SubsetParameterization that holds all the coordinates of a parameter block constant.
- A new (SUBSET) preconditioner for problems with general sparsity.
- Faster Schur elimination using faster custom BLAS routines for small matrices.
- Automatic differentiation for FirstOrderFunction in the form of AutoDiffFirstOrderFunction.
- Backward Incompatible API Changes
Besides this there is the usual bevy of bug fixes & performance improvements. We would appreciate you testing on as many platforms as possible. Please report back with your experiences, good and bad. And thank you for all your code contributions & bug reports.
- EvaluationCallback has been moved from Solver::Options to Problem::Options for a more correct API.
- No more Android.mk based builds.
- Solver::Options::num_linear_solver_threads is no more.
Happy optimizing,
Ceres Solver Team
--
You received this message because you are subscribed to the Google Groups "Ceres Solver" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ceres-solver...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ceres-solver/a6f54e4e-0cec-4d44-a1ae-c8919327d157n%40googlegroups.com.
Hi Nikolaus,Thank you very much for sharing your detailed experience. Comments inline.On Sat, Aug 29, 2020 at 6:38 AM Nikolaus Demmel <nde...@gmail.com> wrote:Hi,Thanks for the release candidate! I tested it a bit on various projects on Linux and Mac. Overall it works great. I needed no code changes, only some minor cmake adaptation (there are minor open issues related to using custom Eigen from a source tree and Intel's TBB binary packages).Yes, we will fix these two before release.
I can share 2 timing tests on Linux (Ubuntu 18.04). Keep in mind that these are just exemplar runs on desktop computers, and not 100% controlled timing experiments.The first is for Lie group splines (experiments from this paper). In the results overview you can see around 20% speedup with ceres 2.0 (these correspond essentially to the timing tables from the paper). All output in the ci jobs is linked from the gist, but I also included directly the ceres output of one of the calibration experiments, namely "ceres_se3_old", which is quite heavy on autodiff. It seems half the runtime improvement is in jacobian evaluation, and half in the linear solver (no Schur complement).Yes. I am a bit surprised by the linear solver time improvements, because I do not think the SPARSE_NORMAL_CHOLESKY solver has changed this release.The second one is a bundle adjustment type optimization with photometric residuals using Schur complement and auto diff. Residuals are not simple, but also not hugely complex (relative pose, point transformation, non-linear projection function, bi-cubic image interpolation). Overall I see a quite consistent runtime improvement of around 10% across different problem sizes (100s to 1000s of cameras). Looks like it's mostly the linear solver, maybe the improved Schur elimination you mentioned. Here is the ceres output for one example. (The residual and jacobian evaluation is actually a bit slower in the ceres 2.0 run, but I'm not sure if the difference is even significant or just accidental due not 100% controlled environment.)This one is definitely affected by the new small blas routines I think. I think this may also have something to do with improved cholesky factorization for small blocks, which was optimized for another application.To summarize, I think it's a nice runtime improvement "for free"! I'm curious on your thoughts on the linear solver runtime improvements, in particular in the experiments without Schur complement.I am delighted to hear this! To be honest, this release has been in the works for so long, I have lost talk of all the performance improvements!Best,NikolausPS: I'm just having a thought about the linear solver timings of the BA experiment. On that machine the installed blas / lapack is openblas, and I recently noticed some issues where openblas can be much slower if it uses openmp multithreading for small operations. Not sure if ceres configures this somehow differently, since it also switched away from openmp for it's multi-threading. For the lie-spline experiments, that ci image where this is run has the standard libblas from Ubuntu, not openblas, so is probably not a factor.Ceres does not configure the underlying blas libraries. And yes you should basically turn threading off in openblas.
To unsubscribe from this group and stop receiving emails from it, send an email to ceres-...@googlegroups.com.
Hi Sameer,
On Monday, August 31, 2020 at 12:47:31 AM UTC+2, Sameer Agarwal wrote:Hi Nikolaus,Thank you very much for sharing your detailed experience. Comments inline.On Sat, Aug 29, 2020 at 6:38 AM Nikolaus Demmel <nde...@gmail.com> wrote:Hi,Thanks for the release candidate! I tested it a bit on various projects on Linux and Mac. Overall it works great. I needed no code changes, only some minor cmake adaptation (there are minor open issues related to using custom Eigen from a source tree and Intel's TBB binary packages).Yes, we will fix these two before release.One more thing: IMHO some small hints for migration from 1.14 to 2.0 would be nice (maybe in the release notes), since ceres' cmake config files changed such that CERES_INCLUDE_DIRS (some others) is not set any more. I understand you should use the exported target instead. Plus maybe at least a quick note that the way some third-party libraries like Eigen (and glog?) are found has changed.
To unsubscribe from this group and stop receiving emails from it, send an email to ceres-solver...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ceres-solver/29bd8d48-2964-47f8-bdd3-f8aac8a29672o%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Ceres Solver" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ceres-solver...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ceres-solver/1ca16f28-dc8e-4a3b-bbbd-acc175dce15fn%40googlegroups.com.