Ceres
11 Nov 2021Ceres 笔记
1. 安装
2. 概念介绍
Ceres 求解的最小二乘问题最一般的形式如下——带边界的核函数最小二乘
\[\begin{array}{ll} \min _{\mathbf{x}} & \frac{1}{2} \sum_{i} \rho_{i}\left(\left\|f_{i}\left(x_{i_{1}}, \ldots, x_{i_{k}}\right)\right\|^{2}\right) \\ \text { s.t. } & l_{j} \leq x_{j} \leq u_{j} \end{array}\]在这个问题中:
\[x_{i_{1}}, \ldots, x_{i_{k}}\]- 参数块(Parameter Blocks),为待求解的优化变量
- 残差块(Residual Blocks),其中
- 代价函数(Cost function),可理解为误差项
- 损失函数(Loss function),为核函数,消除 outlier 的影响
- 优化变量的边界
这里的损失函数和机器学习中的损失函数的含义有所区别。机器学习中的损失函数的概念和代价函数相似。
目标函数由许多平方项经过一个核函数之后求和组成,如果核函数是一个常量,并且不限制优化变量的边界,那么就可以得到一个无约束的最小二乘问题。
使用 Ceres 求解问题,需要做以下几件事:
- 定义每个参数块,可以是平凡的向量(double 数组),也可以是四元数,李代数这种特殊的结构
- 定义残差块的计算方式
- 定义雅克比的计算方式,可以使用 Ceres 提供的自动求导功能,也可以手动指定
- 把所有的参数块和残差块加入 Ceres 定义的 Problem 对象中,调用 Solve 函数求解即可,求解之前可以传入配置信息,例如迭代次数,终止条件等
