Ceres

Ceres 笔记

1. 安装

Ceres intallation

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),为待求解的优化变量
\[\rho_{i}\left(\left\|f_{i}\left(x_{i_{1}}, \ldots, x_{i_{k}}\right)\right\|^{2}\right)\]
  • 残差块(Residual Blocks),其中
\[f_i\]
  • 代价函数(Cost function),可理解为误差项
\[\rho_{i}\]
  • 损失函数(Loss function),为核函数,消除 outlier 的影响
\[l_{j} \quad u_{j}\]
  • 优化变量的边界

这里的损失函数和机器学习中的损失函数的含义有所区别。机器学习中的损失函数的概念和代价函数相似。

目标函数由许多平方项经过一个核函数之后求和组成,如果核函数是一个常量,并且不限制优化变量的边界,那么就可以得到一个无约束的最小二乘问题。

使用 Ceres 求解问题,需要做以下几件事:

  • 定义每个参数块,可以是平凡的向量(double 数组),也可以是四元数,李代数这种特殊的结构
  • 定义残差块的计算方式
  • 定义雅克比的计算方式,可以使用 Ceres 提供的自动求导功能,也可以手动指定
  • 把所有的参数块和残差块加入 Ceres 定义的 Problem 对象中,调用 Solve 函数求解即可,求解之前可以传入配置信息,例如迭代次数,终止条件等

3. Ceres 求解优化问题步骤

3.1