Ceres Solver (为什么使用Ceres Solver?)

为什么使用Ceres Solver?

  • 代码质量 - Ceres Solver已经在谷歌的产品中使用了四年多。 它是一个干净,经过广泛测试以及具有活跃开发和支持的很好的文档代码。
  • 建模API - 很少有人以精确的、完整的求解问题公式开始。Ceres的建模API经过精心设计,用户可以轻松地一次一项的创建和修改目标函数,并且这样做不必担心求解器(solver)如何处理由此导致的潜在问题的稀疏性/结构的结果变化。
    • 导数 提供使用由优化库带来的最复杂、最容易出错的导数。Ceres 提供自动(automatic)和数值(numeric)差分。因此你从来都不需要手动计算导数(除非你真的想那样做)。不仅如此,Ceres还允许你任意组合混合自动(automatic),数值(numeric)和分析(analytical)的导数。
    • 鲁棒性损失函数 大多数非线性最小二乘问题涉及到数据,如果有一些外部(outliers)数据,Ceres允许用户使用LossFunction塑造(shape)其残差,以减少异常值的影响。
    • 局部参数化 在许多情况下,一些参数在流形(manifold)上而不是在欧几里得(Euclidean)空间,例如旋转矩阵。在那种情况下,用户可以通过规定LocalParameterization对象来规定局部切空间几何。
  • 求解器的选择 - 根据大小,稀疏性结构,时间和内存预算以及解的精度要求,不同的优化算法满足不同的需求。 为此,Ceres Solver提供了各种优化算法:
    • 信赖域求解器 Ceres支持Levenberg-Marquardt, Powell’s Dogleg, and Subspace dogleg方法。所有这些方法的关键计算成本是求线性组的解。为此,Ceres提供了各种线性求解器 - 密集QR和密集Cholesky分解(使用Eigen或LAPACK)用于密集问题,稀疏Cholesky分解(SuiteSparse,CXSparse或Eigen)用于大型稀疏问题定制基于密集,稀疏, 和用于束调整问题的迭代线性求解器的Schur补。
    • 线性搜索求解器 当问题规模如此之大以至于无法存储和分解雅可比矩阵或者需要低成本的低精度解决方案时,Ceres提供了许多基于行搜索的算法。 这包括许多非线性共轭梯度变体,BFGS和LBFGS。
  • 速度 - Ceres Solver经过广泛优化,具有C ++模板,手写线性代数例程以及基于OpenMP或TBB的多线程雅克比估计和线性求解器。
  • 解的质量 - Ceres是Mondragon和Borchers用于对非线性最小二乘求解器进行基准测试的NIST问题集中表现最佳的求解器。
  • 协方差估计 通过评估协方差矩阵的全部或部分来评估解决方案的灵敏度/不确定性。 Ceres是为数不多的能够让您大规模进行分析的求解器之一。
  • 社区 - 自从作为开源软件发布以来,Ceres开发了一个活跃的开发人员社区,提供新功能,错误修复和支持。
  • 可移植性 - 可运行在Linux, Windows, Mac OS X, Android and IOS上。
  • BSD 许可 BSD许可证可以灵活地发布你的应用程序。

猜你喜欢

转载自blog.csdn.net/weixin_39675633/article/details/91352076