Why Ceres ?
Last updated
Last updated
Code Quality Ceres Solver 自 2011 年以来一直在 Google 的生产中使用。代码整洁、经过广泛测试并且得到积极开发和支持。
Modeling API Ceres API 的设计使用户可以轻松构建和修改目标函数。 这样做使得用户无需担心求解器将如何处理底层问题的稀疏性/结构所产生的变化。
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