ceres基本概念

ceres主要用于解决非线性最小二乘问题和通用的无约束最小化问题

Non-linear Least Squares

  1. ceres基本概念解决形如左侧的非线性最小二乘法问题
  2. 加和中的项取名为ResidualBlock残差块,其中f表示依赖于参数块xi的CostFunction。[xi1, xi2, …, xik]叫做ParameterBlock参数块
  3. ρi是Loss Function,用于减小outliers对于非线性最小二乘法带来的影响,是一个数值函数
  4. 在ceres中使用了仿函数functor,即使用时像函数一样的被调用,由该仿函数产生一个对象,并以此对象作为算法的一个参数。类别定义中必须自定义仿函数云算子operator(),这之后就可以在仿函数的对象后面加上一对小括号,以此调用仿函数所定义的operator(),这个operator()将在类实例化时被用到,非参数的元素传入类中,这样就免去了一些对公共变量的全局化的维护
  5. 定义了CostFunctor以后,CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor); 这个AutoDiffCostFunction将会以CostFunctor作为输入,然后自动对其进行微分,同时给予它一个CostFunction接口
  6. CostFunctor是用于计算a vector of residuals and Jacobian matrices。即这个损失函数是用于计算向量f(x1, …, xk)和Jacobian度量ceres基本概念。使用CostFunction::Evaluate()函数来计算对应的残差向量和Jacobian矩阵
    7.ceres基本概念
    当要得到一个可自动进行微分操作的损失函数,那么就必须要定义一个模板化的operator()函数,它会以模板参数T的方式来计算损失函数。具体使用方式如下:
    ceres基本概念
    ceres基本概念
    此时的参数即代表:该functor从两个2维参数中计算1个一维的输出