Why Ceres ?

  • Code Quality 😄 Ceres Solver 自 2011 年以来一直在 Google 的生产中使用。代码整洁、经过广泛测试并且得到积极开发和支持。

  • Modeling API 🎉 Ceres API 的设计使用户可以轻松构建和修改目标函数。 这样做使得用户无需担心求解器将如何处理底层问题的稀疏性/结构所产生的变化。

    • Derivatives 计算导数可能是使用优化库中最乏味且最容易出错的部分。 Ceres 附带自动微分数值微分。 因此不必手动计算导数(除非确实想要手动计算)。 不仅如此,Ceres 还允许您以您想要的任何组合混合自动、数值和解析导数,也就是说这三种方式是可以混合使用的。

    • Robust Loss Functions 大多数非线性最小二乘问题都涉及样本数据。 如果有数据,就会有异常值。 Ceres 允许用户使用 LossFunction 调整残差,以减少异常值的影响。这也就是我们经常说的鲁棒核函数。

    • Manifolds 在许多情况下,某些参数位于欧几里得空间以外的流形上,例如旋转矩阵。 在这种情况下,用户可以通过指定 Manifold 对象来指定局部切线空间的几何形状。因为旋转操作是不满足欧几里得空间上的加法的,对于旋转有特殊的处理方式,或者叫特殊的加法,Ceres 允许用户自定义待优化变量的更新方式。

  • Solver Choice 👍 根据问题规模大小、矩阵稀疏结构、时间和内存预算以及求解质量要求,不同的优化算法将满足不同的需求。 为此,Ceres Solver 附带了多种优化算法:

    • Trust Region Solvers Ceres 支持 Levenberg-Marquardt、Powell 的 Dogleg 和子空间 Dogleg 方法。 所有这些方法的关键计算成本是线性系统的求解。为此,Ceres 附带了各种线性求解器,针对密集问题的dense QR 和 dense Cholesky 分解(使用 Eigen, LAPACK or CUDA))、针对大型稀疏问题的 sparse Cholesky 分解(SuiteSparse、Apple 的 Accelerate、Eigen)、基于 Schur complement 的定制密集、稀疏和迭代线性求解器,用于解决 BA 问题。

    • Line Search Solvers 当问题规模太大以至于存储和分解雅可比行列式不可行或者需要廉价的低精度解决方案时,Ceres 提供了许多基于线搜索的算法。 这包括非线性共轭梯度、BFGS 和 LBFGS 的许多变体。

  • Speed 😂 Ceres Solver 经过了深度优化,包括 C++ 模板、手写线性代数例程以及基于现代 C++ 多线程的雅可比求值和线性求解器

  • GPU Acceleration 👏 如果你的系统支持 CUDA,那么 Ceres Solver 可以使用您系统上的 Nvidia GPU 来加速求解器。

  • Solution Quality 😀 Ceres is the best performing solver on the NIST problem set used by Mondragon and Borchers for benchmarking non-linear least squares solvers.

  • Covariance estimation 😊 通过评估全部或部分协方差矩阵来评估解决方案的灵敏度/不确定性。 Ceres 是为数不多的允许您进行大规模分析的求解器之一。

  • Community 😎 自从作为开源软件发布以来,Ceres 已经开发了一个活跃的开发者社区,社区不断有人贡献新功能、提供错误修复和支持。

  • Portability 😽 Runs on Linux, Windows, Mac OS X, Android and iOS.

  • BSD Licensed 🤣 The BSD license offers the flexibility to ship your application

Last updated