Introduction

Ceres 可以鲁棒的解决以下形式的带有边界约束的非线性最小二乘问题

minx12iτi(fi(xi1,...,xik)2)s.t.  ljxjμj\min_{\mathbf{x}}\frac{1}{2}\sum_{i}^{}\tau _{i}\left ( \parallel f_i\left(x_{i1}, ..., x_{ik}\right)\parallel ^2 \right )\\ s.t.\ \ l_j \le x_j \le \mu_{j}

这种形式的问题广泛出现在科学研究和工程领域中,从统计学中的 fitting curves 问题到计算机视觉中的 3D models from photographs 问题。

在本章中,我们将学习如何使用 Ceres Solver 求解上述问题,本章中描述的所有示例以及更完整工作代码可以在 examples 目录中找到。

表达式 τi(fi(xi1,,xik)2)\tau _{i}\left(\left\|f_{i}\left(x_{i_{1}}, \ldots, x_{i_{k}}\right)\right\|^{2}\right) 在 Ceres 中是一个 ResidualBlock ,其中 fi()f_{i}(\cdot) 在 Ceres 中是一个 CostFunction ,它的计算又需要 xijx_{ij} 这些参数的参与, [xi1,,xik]\left[x_{i_{1}}, \ldots, x_{i_{k}}\right] 统称一个参数块。在大多数优化问题中,小组标量一起出现。例如,平移向量的三个分量和定义相机姿态的四元数的四个分量。我们将这样一组小标量称为 ParameterBlock。当然 ParameterBlock 也可以只有一个分量。ljl_{j} and uju_{j} 是参数块 xjx_{j} 的上下界。 τi\tau _{i} 是一个 Lossfunction。它是一个标量函数,用于减小非线性优化问题中的异常值对优化的影响。

在特殊情况下,当 τi(x)=x\tau _{i}(x)=x,是一个恒等映射,并且 lj=l_{j}=-\infty and uj=u_{j}=\infty 我们就能得到常见的非线性优化问题形式如下:

12ifi(xi1,,xik)2\frac{1}{2} \sum_{i}\left\|f_{i}\left(x_{i_{1}}, \ldots, x_{i_{k}}\right)\right\|^{2}

Last updated