Ceres简介

Ceres Solver是一个开源C ++库,用于建模和解决大型复杂的优化问题。 它可以用于解决具有边界约束和一般无约束优化问题的非线性最小二乘问题。 它是一个成熟,功能丰富且高性能的库,自2010年以来一直在谷歌的生产中使用。

官方文档

http://www.ceres-solver.org/index.html#

源码下载

git clone https://ceres-solver.googlesource.com/ceres-solver

起源

Ceres Solver的成长源于Google内部对最小二乘通用解决方案的需求。 2010年初,Sameer Agarwal和Fredrik Schaffalitzky开始开发Ceres Solver。 此后不久,Fredrik Schaffalitzky离开了谷歌,Keir Mierle介入取代了他的位置。 经过两年断断续续的开发,于2012年5月作为开源发布。

版本

1.0.0、1.1.0、1.1.1、1.2.0、1.2.1、1.2.2、1.2.3、1.3.0、1.4.0、1.5.0、1.6.0、1.7.0、1.8.0、1.9.0、1.10.0、1.11.0、1.12.0、1.13.0、1.14.0。目前最新版本是1.14.0。

使用者

  • 在Google,Ceres被应用于:
  1. 估计街景汽车,飞机和卫星的姿势。
  2. 为PhotoTours构建3D模型。
  3. 估计卫星图像传感器特性。
  4. 在Android和iOS上拼接全景图。
  5. 在Android上应用Lens Blur。
  6. 解决Project Tango中的捆绑调整和SLAM问题。
  •     Willow Garage使用Ceres来解决SLAM问题。
  •     西南研究院使用Ceres校准机器人相机系统。
  •     Blender使用Ceres进行平面跟踪和束调整。
  •     OpenMVG是一个开源多视图几何库,使用Ceres进行包调整。
  •     Microsoft Research使用Ceres对涉及蒙皮控制网格下的细分曲面的目标进行非线性优化。
  •     Matterport使用Ceres进行3D点云的全局对齐和姿势图优化。
  •     Obvious Engineering使用Ceres为他们的3D摄影应用程序Seene进行束调整。
  •     苏黎世联邦理工学院的自治系统实验室使用Ceres
  1. 相机和相机/ IMU校准。
  2. 大规模优化视觉,惯性,gps和车轮测距数据,以实现长期自治。
  •     OpenPTrack使用Ceres进行相机校准。
  •     意大利帕多瓦大学的智能自治系统实验室使用Ceres
  1. 相机/深度传感器网络校准。
  2.  深度传感器失真图估计。
  •     Theia是一个来自Motion库的开源结构,它使用Ceres进行束调整和相机姿态估计。
  •     宾夕法尼亚州立大学应用研究实验室使用其合成孔径声纳波束形成引擎,称为ASASIN,用于估算平台运动学。
  •     Colmap是一个来自运动库的开源结构,它大量使用Ceres进行束调整,支持许多相机模型和其他非线性最小二乘问题(相对,绝对姿态细化等)。

优点

    代码质量 - Ceres Solver已经在谷歌的生产中使用了四年多。它是一个干净,经过广泛测试并且文档齐全的代码,可以积极开发和支持。
    建模API - 很少有人从一个人试图解决的问题的确切和完整的表述开始。 Ceres的建模API经过精心设计,用户可以轻松地一次创建和修改目标函数。并且这样做不必担心解算器将如何处理由此导致的潜在问题的稀疏性/结构的变化。
    导数-提供导数可能是使用优化库最繁琐且容易出错的部分。 Ceres提供自动和数值导数。因此,您永远不必手动计算导数(除非您真的想要)。不仅如此,Ceres还允许您以任意组合混合自动,数字和分析导数。
   鲁棒损失函数-大多数非线性最小二乘问题涉及数据。如果有数据,则会有异常值。 Ceres允许用户使用LossFunction塑造其残差,以减少异常值的影响。
    局部参数化-在许多情况下,一些参数位于欧几里德空间以外的流形上,例如旋转矩阵。在这种情况下,用户可以通过指定LocalParameterization对象来指定局部切线空间的几何结构。
    求解器-选择根据大小,稀疏性结构,时间和内存预算以及解决方案质量要求,不同的优化算法将满足不同的需求。为此,Ceres Solver提供了各种优化算法:

  • Trust Region Solvers - Ceres支持Levenberg-Marquardt,Powell的Dogleg和SubspaceDogleg方法。所有这些方法的关键计算成本是线性系统的解决方案。为此,Ceres提供了各种线性求解器 - 密集QR和密集Cholesky分解(使用Eigen或LAPACK)用于密集问题,稀疏Cholesky分解(SuiteSparse,CXSparse或Eigen)用于大型稀疏问题。
  • 线搜索求解器 - 当问题太大以至于无法存储和分解雅可比矩阵或者需要低成本的低精度解决方案时,Ceres提供了许多基于行搜索的算法。这包括许多非线性共轭梯度变体,BFGS和LBFGS。

    速度 - Ceres Solver经过广泛优化,具有C ++模板,手写线性代数例程和基于OpenMP或TBB的雅可比评估多线程和线性求解器。
    解决方案质量-Ceres是Mondragon和Borchers用于对非线性最小二乘求解器进行基准测试的NIST问题集中性能最佳的求解器。
    协方差估计 - 通过评估协方差矩阵的全部或部分来评估解的灵敏度/不确定性。 Ceres是为数不多的能够让您大规模进行分析的求解器之一。
    社区-自从作为开源软件发布以来,Ceres开发了一个活跃的开发人员社区,提供新功能,错误修复和支持。
    便携性 - 在Linux,Windows,Mac OS X,Android和iOS上运行。
    BSD许可-BSD许可证可以灵活地发送您的应用程序。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值