VIO(notes) —— (2)融合算法

基于Bundle Adjustment 的VIO融合

什么是Bundle Adjustment

Bundle Adjustment( BA ),是指从视觉图像中提炼出最优的3D模型和相机参数(内参数和外参数)。考虑从任意特征点发射出来的几束光线( bundles of light rays),它们会在几个相机的成像平面上变成像素或是检测到的特征点。如果我们调整( adjustment)各相机姿态和各特征点的空间位置,使得这些光线最终收束到相机的光心,就称为BA(光束法平差)。bundle adjustment 其本质还是离不开最小二乘原理(几乎所有优化问题其本质都是最小二乘),目前bundle adjustment 优化框架最为代表的是ceres solver和g2o。
VIO(notes) —— (2)融合算法
如上图所示相机分别分三次在P1;P2;P3处进行拍摄(三维空间中的物体在二维相机底片上的投影)那现在就该说下什么叫重投影误差了,重投影也就是指的第二次投影,那到底是怎么投影的呢?
VIO(notes) —— (2)融合算法

让我们整理一下:

  • 其实第一次投影是指相机拍照时,将三维空间点投影到图像上,然后我们用这些图像对一些特征点进行三角剖分,利用几何信息构造三角形来确定图像的位置三维空间点P(相关内容请参考对极几何);
  • 最后用我们计算的三维点的坐标P(注意不是真实的)和我们计算的相机矩阵(当然不是真实的)进行第二次投影,也就是reprojection,然后计算坐标%5Chat%7BP%7D_2
  • 既然我们知道了重投影是什么,那么重投影误差是什么类型的误差呢?
    这个误差是指的真实三维空间点在图像平面上的投影P_1(也就是图像上的像素点)和重投影%5Chat%7BP%7D_2(其实是用我们的计算值得到的虚拟的像素点)的差值,因为种种原因计算得到的值和实际情况不会完全相符,也就是这个差值不可能恰好为0,此时也就需要将这些差值的和最小化获取最优的相机参数及三维空间点的坐标。
    VIO(notes) —— (2)融合算法

Bundle Adjustment的作用

BA不仅可以优化位姿(R和t),还可以优化特征点的空间位置。而我们又可以把BA看成是最小化重投影误差(Reprojection error)问题,同时这也是一个非线性最小二乘问题。BA属于SLAM中的后端,BA就是一个优化模型,其本质就是最小化重投影误差。

后端优化中重投影误差函数/BA问题

在视觉SLAM中,我们通过最小化路标点的重投影误差,实现对相机位姿的约束。
VIO(notes) —— (2)融合算法
对于VSLAM中的BA问题,有以下已知条件:

  • 状态量初始值:特征点的三维坐标;相机的姿势
  • 系统测量:不同图像上特征点的像素坐标

BA问题就是如何利用测量值来实现对初始状态量的最优估计?

  • 构造误差函数,通过最小二乘法得到状态量的最优估计,使重投影误差最小。 (理论预测值减去实际观测值)
    %5Cunderset%7B%5Cmathbf%7Bq%7D%2C%20%5Cmathbf%7Bp%7D%2C%20%5Cmathbf%7Bf%7D%7D%7B%5Carg%20%5Cmin%20%7D%20%5Csum_%7Bi%3D1%7D%5E%7Bm%7D%20%5Csum_%7Bj%3D1%7D%5E%7Bn%7D%5Cleft%5C%7C%5Cpi%5Cleft%28%5Cmathbf%7Bq%7D_%7Bw%20c_%7Bi%7D%7D%2C%20%5Cmathbf%7Bp%7D_%7Bw%20c_%7Bi%7D%7D%2C%20%5Cmathbf%7Bf%7D_%7Bj%7D%5Cright%29-%5Cmathbf%7Bz%7D_%7Bf_%7Bj%7D%7D%5E%7Bc_%7Bi%7D%7D%5Cright%5C%7C_%7B%5CSigma_%7Bi%20j%7D%7D
    符号定义:
  • q: 旋转四元数
  • p: 平移向量
  • %5Cmathrm%7Bf%7D: 特征点 3D 坐标
  • c_%7Bi%7Di摄像系统
  • %5Cpi%28%5Ccdot%29:投影功能
  • %5Cmathbf%7Bz%7D_%7Bf_%7Bj%7D%7D%5E%7Bc_%7Bi%7D%7D%3A%20c_%7Bi%7D 观察%5Cmathbf%7Bz%7D_%7Bf_%7Bj%7D%7D%5E%7Bc_%7Bi%7D%7D%3A%20c_%7Bi%7D
  • %5CSigma_%7Bi%20j%7D%3A%20%5CSigma 规范

VIO信息融合考虑的问题

VIO(notes) —— (2)融合算法
将IMU融入到视觉里程计中,除了要最小化特征点的重投影误差以外,还需要考虑如下问题:

  1. 相机与IMU的外参,包括旋转和平移
  2. 相机和IMU的帧率不同,如何实现两者数据上的融合
  3. IMU从b_1b_2时,有测量值z_%7Bb_1%20b_2%7D,如何构建IMU的测量误差函数
  4. 位姿的来源有IMU测量和视觉测量,如何设定多个信息源权重
  5. 融合信息后构造的误差函数如何解决

解决最小二乘问题

线性最小二乘解:最速下降法和牛顿法

非线性线性最小二乘解:Gauss-Newton 和 LM

最小二乘中遇到 outlier,通过添加鲁棒核函数

定义:

找到一个n维变量%5Cmathbf%7Bx%7D%5E%7B%2A%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bn%7D,使损失函数F%28x%29取局部最小值:
F%28%5Cmathbf%7Bx%7D%29%3D%5Cfrac%7B1%7D%7B2%7D%20%5Csum_%7Bi%3D1%7D%5E%7Bm%7D%5Cleft%28f_%7Bi%7D%28%5Cmathbf%7Bx%7D%29%5Cright%29%5E%7B2%7D
其中f_%7Bi%7D为残差函数,如实测值与预测值之差,有m%20%5Cgeq%20n。局部最小值意味着任何F%5Cleft%28%5Cmathrm%7Bx%7D%5E%7B%2A%7D%5Cright%29%20%5Cleq%20F%28%5Cmathrm%7Bx%7D%29都有F%5Cleft%28%5Cmathrm%7Bx%7D%5E%7B%2A%7D%5Cright%29%20%5Cleq%20F%28%5Cmathrm%7Bx%7D%29

假设损失函数

F%28%5Cmathbf%7Bx%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D%29%3DF%28%5Cmathbf%7Bx%7D%29%2B%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BH%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2BO%5Cleft%28%5C%7C%5CDelta%20%5Cmathbf%7Bx%7D%5C%7C%5E%7B3%7D%5Cright%29
其中,%5Cmathrm%7BJ%7D%5Cmathrm%7BH%7D分别是损失函数F对变量%5Cmathrm%7Bx%7D的一阶导数和二阶导数矩阵。
忽略泰勒展开的高阶项,损失函数变成二次函数,可以很容易地得到以下性质:

  • 如果在点x_s;处有导数为0,则称这个点为稳定点。
  • 在点x,处对应的Hessian为H;
  • 如果是正定矩阵,即它的特征值都大于0,则在x_s处有F(x)为
    局部最小值;
  • 如果是负定矩阵,即它的特征值都小于0,则在x_s处有F(x)为
    局部最大值;
  • 如果是不定矩阵,即它的特征值大于0也有小于0的,则x_s
    是鞍点。

基础知识:最速下降法、牛顿法

迭代下降

找到一个下降方向,使损失函数随着%5Cmathrm%7Bx%7D的迭代逐渐减小,直到%5Cmathrm%7Bx%7D收敛到%5Cmathrm%7Bx%7D%5E%7B%2A%7D
F%5Cleft%28%5Cmathrm%7Bx%7D_%7Bk%2B1%7D%5Cright%29%3CF%5Cleft%28%5Cmathrm%7Bx%7D_%7Bk%7D%5Cright%29
分为两步:一是求下降方向的单位向量%5Cmathrm%7Bd%7D,二是确定下降步长%5Calpha
假设%5Calpha足够小,我们可以对损失函数F%28%5Cmathbf%7Bx%7D%29进行一阶泰勒展开:
F%28%5Cmathbf%7Bx%7D%2B%5Calpha%20%5Cmathbf%7Bd%7D%29%20%5Capprox%20F%28%5Cmathbf%7Bx%7D%29%2B%5Calpha%20%5Cmathbf%7BJ%20d%7D
只需寻找下降方向并满足:
%5Cmathbf%7BJ%7D%20%5Cmathbf%7Bd%7D%3C0
通过 line search 方法找到下降的步长:%5Calpha%5E%7B%2A%7D%3D%5Coperatorname%7Bargmin%7D_%7B%5Calpha%3E0%7D%5C%7BF%28%5Cmathbf%7Bx%7D%2B%5Calpha%20%5Cmathbf%7Bd%7D%29%5C%7D

最速下降法——适用于迭代的开始

从下降方向的条件可知:%5Cmathbf%7BJ%20d%7D%3D%5C%7C%5Cmathbf%7BJ%7D%5C%7C%20%5Ccos%20%5Ctheta%2C%20%5Ctheta表示下降方向与梯度方向的夹角。当%5Ctheta%3D%5Cpi时,有
%5Cmathbf%7Bd%7D%3D-%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D
梯度的负方向是下降最快的方向。
缺点:在最优值附近振荡,收敛慢。

牛顿法——适用于接近最优值

局部最优点%5Cmathrm%7Bx%7D%5E%7B%2A%7D附近,如果%5Cmathrm%7Bx%7D%2B%5CDelta%20%5Cmathrm%7Bx%7D是最优解,则损失函数对%5CDelta%20%5Cmathrm%7Bx%7D的导数等于 0 ,对损失函数取一阶导有:
%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20%5CDelta%20%5Cmathbf%7Bx%7D%7D%5Cleft%28F%28%5Cmathbf%7Bx%7D%29%2B%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BH%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5Cright%29%3D%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%2B%5Cmathbf%7BH%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%3D%5Cmathbf%7B0%7D
得到:%5CDelta%20%5Cmathrm%7Bx%7D%3D-%5Cmathrm%7BH%7D%5E%7B-1%7D%20%5Cmathrm%7B~J%7D%5E%7B%5Ctop%7D
缺点:二阶导数矩阵的计算比较复杂。

阻尼法

将损失函数的二阶泰勒展开表示为
F%28%5Cmathbf%7Bx%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D%29%20%5Capprox%20L%28%5CDelta%20%5Cmathbf%7Bx%7D%29%20%5Cequiv%20F%28%5Cmathbf%7Bx%7D%29%2B%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BH%7D%20%5CDelta%20%5Cmathbf%7Bx%7D
求以下函数的最小化:
%5CDelta%20%5Cmathbf%7Bx%7D%20%5Cequiv%20%5Carg%20%5Cmin%20_%7B%5CDelta%20%5Cmathbf%7Bx%7D%7D%5Cleft%5C%7BL%28%5CDelta%20%5Cmathbf%7Bx%7D%29%2B%5Cfrac%7B1%7D%7B2%7D%20%5Cmu%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5Cright%5C%7D
其中,%5Cmu%20%5Cgeq%200为阻尼因子,%5Cfrac%7B1%7D%7B2%7D%20%5Cmu%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%3D%5Cfrac%7B1%7D%7B2%7D%20%5Cmu%5C%7C%5CDelta%20%5Cmathbf%7Bx%7D%5C%7C%5E%7B2%7D是惩罚项。 对新的损失函数求一阶导,并令其等于 0 有:
%5Cbegin%7Baligned%7D%20%5Cmathbf%7BL%7D%5E%7B%5Cprime%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%2B%5Cmu%20%5CDelta%20%5Cmathbf%7Bx%7D%20%26%3D%5Cmathbf%7B0%7D%20%5C%5C%20%5CRightarrow%28%5Cmathbf%7BH%7D%2B%5Cmu%20%5Cmathbf%7BI%7D%29%20%5CDelta%20%5Cmathbf%7Bx%7D%20%26%3D-%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cend%7Baligned%7D

进阶:高斯牛顿法,LM算法的具体实现

非线性最小二乘

1、符号说明
对于公式简化,可以将残差组合成向量形式。
%5Cmathbf%7Bf%7D%28%5Cmathbf%7Bx%7D%29%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bc%7D%20f_%7B1%7D%28%5Cmathbf%7Bx%7D%29%20%5C%5C%20%5Cldots%20%5C%5C%20f_%7Bm%7D%28%5Cmathbf%7Bx%7D%29%20%5Cend%7Barray%7D%5Cright%5D
然后有:%5Cquad%20%5Cmathbf%7Bf%7D%5E%7B%5Ctop%7D%28%5Cmathbf%7Bx%7D%29%20%5Cmathbf%7Bf%7D%28%5Cmathbf%7Bx%7D%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bm%7D%5Cleft%28f_%7Bi%7D%28%5Cmathbf%7Bx%7D%29%5Cright%29%5E%7B2%7D
同样,如果你还记得%5Cmathrm%7BJ%7D_%7Bi%7D%28%5Cmathrm%7Bx%7D%29%3D%5Cfrac%7B%5Cpartial%20f_%7Bi%7D%28%5Cmathrm%7Bx%7D%29%7D%7B%5Cpartial%20%5Cmathrm%7Bx%7D%7D,有:
%5Cfrac%7B%5Cpartial%20%5Cmathbf%7Bf%7D%28%5Cmathbf%7Bx%7D%29%7D%7B%5Cpartial%20%5Cmathbf%7Bx%7D%7D%3D%5Cmathbf%7BJ%7D%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bc%7D%20%5Cmathbf%7BJ%7D_%7B1%7D%28%5Cmathbf%7Bx%7D%29%20%5C%5C%20%5Cldots%20%5C%5C%20%5Cmathbf%7BJ%7D_%7Bm%7D%28%5Cmathbf%7Bx%7D%29%20%5Cend%7Barray%7D%5Cright%5D
2、基础
残差函数%5Cmathrm%7Bf%7D%28%5Cmathrm%7Bx%7D%29为非线性函数,其一阶泰勒近似有:
%5Cmathrm%7Bf%7D%28%5Cmathrm%7Bx%7D%2B%5CDelta%20%5Cmathrm%7Bx%7D%29%20%5Capprox%20%5Cell%28%5CDelta%20%5Cmathrm%7Bx%7D%29%20%5Cequiv%20%5Cmathrm%7Bf%7D%28%5Cmathrm%7Bx%7D%29%2B%5Cmathrm%7BJ%7D%20%5CDelta%20%5Cmathrm%7Bx%7D
特别注意这里的%5Cmathrm%7BJ%7D是残差函数%5Cmathrm%7Bf%7D的雅可比矩阵。代入损失函数:
%5Cbegin%7Baligned%7D%20F%28%5Cmathbf%7Bx%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D%29%20%5Capprox%20L%28%5CDelta%20%5Cmathbf%7Bx%7D%29%20%26%20%5Cequiv%20%5Cfrac%7B1%7D%7B2%7D%20%5Cboldsymbol%7B%5Cell%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cboldsymbol%7B%5Cell%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%20%5C%5C%20%26%3D%5Cfrac%7B1%7D%7B2%7D%20%5Cmathbf%7Bf%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%20%5C%5C%20%26%3DF%28%5Cmathbf%7Bx%7D%29%2B%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%20%5Cend%7Baligned%7D%5Ctag%201
这样,损失函数近似为二次函数,如果雅克比是满秩,则%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D正定,损失函数有最小值
另外,很容易获得:F%5E%7B%5Cprime%7D%28%5Cmathbf%7Bx%7D%29%3D%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%5Cright%29%5E%7B%5Ctop%7DF%5E%7B%5Cprime%20%5Cprime%7D%28%5Cmathbf%7Bx%7D%29%20%5Capprox%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D

高斯-牛顿法

令公式 (1) 的一阶导等于 0 ,得到:
%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5Cright%29%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Bgn%7D%7D%3D-%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D
上式一般见于论文%7B%5Ctext%20%7B%20%E7%9C%8B%E5%88%B0%E7%9A%84%20%7D%20%5Cmathbf%7BH%7D%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Bgn%7D%7D%3D%5Cmathbf%7Bb%7D%20%5Ctext%20%7B%20%EF%BC%8C%E7%A7%B0%E5%85%B6%E4%B8%BA%20normal%20equation.%20%7D%7D

LM算法

Levenberg (1944) 和 Marquardt (1963) 先后对高斯牛顿法进行了改进, 求解过程中引入了阻尼因子:
%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%2B%5Cmu%20%5Cmathbf%7BI%7D%5Cright%29%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Blm%7D%7D%3D-%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%20%5Cquad%20%5Ctext%20%7B%20with%20%7D%20%5Cmu%20%5Cgeq%200

疑问: LM 中阻尼因子有什么作用,它怎么设定呢?

1、阻尼因子的作用:

  • %5Cmu%3E0保证%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%2B%5Cmu%20%5Cmathbf%7BI%7D%5Cright%29正定,迭代向下进行。
  • %5Cmu很大,那么%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%3D-%5Cfrac%7B1%7D%7B%5Cmu%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%3D-%5Cfrac%7B1%7D%7B%5Cmu%7D%20F%5E%7B%5Cprime%7D%28%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D,接近最速下降法。
  • %5Cmu比较小,则%5CDelta%20%5Cmathrm%7Bx%7D_%7B%5Cmathrm%7Blm%7D%7D%20%5Capprox%20%5CDelta%20%5Cmathrm%7Bx%7D_%7B%5Cmathrm%7Bgn%7D%7D,接近高斯-牛顿法。
  • 阻尼因子%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D的大小与%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D的元素有关。正半定信息矩阵

2、阻尼因子初始值选取
%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D特征值%5Cleft%5C%7B%5Clambda_%7Bj%7D%5Cright%5C%7D和对应的特征向量为%5Cleft%5C%7B%5Cmathbf%7Bv%7D_%7Bj%7D%5Cright%5C%7D。经过%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D的特征值分解,我们有:%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%3D%5Cmathbf%7BV%7D%20%5Cboldsymbol%7B%5CLambda%7D%20%5Cmathbf%7BV%7D%5E%7B%5Ctop%7D可以得到:
%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Blm%7D%7D%3D-%5Csum_%7Bj%3D1%7D%5E%7Bn%7D%20%5Cfrac%7B%5Cmathbf%7Bv%7D_%7Bj%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BF%7D%5E%7B%5Cprime%20%5Ctop%7D%7D%7B%5Clambda_%7Bj%7D%2B%5Cmu%7D%20%5Cmathbf%7Bv%7D_%7Bj%7D
所以,一个简单的%5Cmu_%7B0%7D初值策略是:
%5Cmu_%7B0%7D%3D%5Ctau%20%5Ccdot%20%5Cmax%20%5Cleft%5C%7B%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5Cright%29_%7Bi%20i%7D%5Cright%5C%7D
通常根据需要设置%5Ctau%20%5Csim%5Cleft%5B10%5E%7B-8%7D%2C%201%5Cright%5D

在工程中,常取%5Cmu_%7B0%7D%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D的最大特征值的数量级一致:对角元素的最大值的数量级一致。

3、阻尼因子的更新策略
定性分析、直观感受阻尼系数的更新:
(1) 如果%5CDelta%20%5Cmathrm%7Bx%7D%20%5Crightarrow%20F%28%5Cmathrm%7Bx%7D%29%20%5Cuparrow,则%5Cmu%20%5Cuparrow%20%5Crightarrow%20%5CDelta%20%5Cmathrm%7Bx%7D%20%5Cdownarrow, 增大阻尼减小步长,拒绝本次迭代。
(2) 如果%5CDelta%20%5Cmathrm%7Bx%7D%20%5Crightarrow%20F%28%5Cmathrm%7Bx%7D%29%20%5Cdownarrow, 则%5Cmu%20%5Cdownarrow%20%5Crightarrow%20%5CDelta%20%5Cmathrm%7Bx%7D%20%5Cuparrow, 减小阻尼增大步长。加快收敛,减少迭代次数。
定量分析、阻尼因子更新策略由缩放因子决定:
%5Crho%3D%5Cfrac%7BF%28%5Cmathbf%7Bx%7D%29-F%5Cleft%28%5Cmathbf%7Bx%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Blm%7D%7D%5Cright%29%7D%7BL%28%5Cmathbf%7B0%7D%29-L%5Cleft%28%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Cmathrm%7Blm%7D%7D%5Cright%29%7D
在:
%5Cbegin%7Baligned%7D%20L%28%5Cmathbf%7B0%7D%29-L%5Cleft%28%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5Cright%29%3D%26-%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D-%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%20%5C%5C%20%26%20%5Cstackrel%7B%5Cmathrm%7Bb%7D%3D-%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7Bf%7D%7D%7B%3D%7D-%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5E%7B%5Ctop%7D%5Cleft%28-%5Cmathbf%7B2%20b%7D%2B%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D%2B%5Cmu%20%5Cmathbf%7BI%7D-%5Cmu%20%5Cmathbf%7BI%7D%5Cright%29%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5Cright%29%20%5C%5C%20%26%3D%5Cfrac%7B1%7D%7B2%7D%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%5E%7B%5Ctop%7D%5Cleft%28%5Cmu%20%5CDelta%20%5Cmathbf%7Bx%7D_%7B%5Coperatorname%7Blm%7D%7D%2B%5Cmathbf%7Bb%7D%5Cright%29%20%5Cend%7Baligned%7D
首先比例因子分母始终大于 0 , 如果:

  • %5Crho%3C0,则F%28%5Cmathbf%7Bx%7D%29%20%5Cuparrow,应为%5Cmu%20%5Cuparrow%20%5Crightarrow%20%5CDelta%20%5Cmathbf%7Bx%7D%20%5Cdownarrow,增大阻尼,减小步长。
  • 如果%5Crho%3E0且比较大,减小%5Cmu, 让 LM 接近 Gauss-Newton 使得系 统更快收敛。
  • 反之,如果是比较小的正数,则增大阻尼%5Cmu,减小迭代步长。
    1963 年 Marquardt 提出了一个如下的阻尼策略:
    %5Cbegin%7Baligned%7D%20%5Ctext%20%7B%20if%20%7D%20%5Crho%20%26%3C0.25%20%5C%5C%20%5Cmu%20%26%3A%3D%5Cmu%20%2A%202%20%5C%5C%20%5Ctext%20%7B%20elseif%20%7D%20%5Crho%20%26%3E0.75%20%5C%5C%20%5Cmu%20%26%3A%3D%5Cmu%20/%203%20%5Cend%7Baligned%7D

L-M 迭代法算法步骤

L-M 优化公式:%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cmathbf%7BJ%7D%2B%5Cmu%20%5Cmathbf%7BI%7D%5Cright%29%5Cleft%28%5Cmathbf%7BX%7D-%5Cmathbf%7BX%7D%5E%7B%2A%7D%5Cright%29%3D-%5Cmathbf%7BJ%7D%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cmathbf%7Bf%7D

  1. 设置初始状态量的初始值,计算收敛阈值%5Cvarepsilon和阻尼因子%5Cmu
  2. 使用系统的所有状态变量和测量数据分别计算残差%5Cboldsymbol%7Bf%7D_%7Bp%7D-%5Cboldsymbol%7BJ%7D_%7Bp%7D%20%5Cboldsymbol%7BX%7Df_%7BI%7D%5Cleft%28z_%7BI%7D%5E%7Bk%7D-h_%7BI%7D%5E%7Bk%7D%28X%29%5Cright%29%20%E3%80%81%20f_%7BC%7D%5Cleft%28z_%7BC%7D%5E%7Bk%7D-h_%7BC%7D%5E%7Bk%7D%28X%29%5Cright%29,并将它们整合到f
  3. 计算残差函数 计算关于状态向量 X 的雅可比矩阵 %5Cmathbf%7BJ%7D
  4. 解方程%5Cmathbf%7BX%7D-%5Cmathbf%7BX%7D%5E%7B%2A%7D%3D-%5Cleft%28%5Cmathbf%7BJ%7D%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cmathbf%7BJ%7D%5Cright%29%5E%7B-1%7D%20%5Cmathbf%7BJ%7D%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cmathbf%7Bf%7D,我们得到X%5E%7B%2A%7D
  5. 计算实际drop和近似drop的比例因子%5Crho,判断迭代成功。如果 %5Crho%3E0 ,
    更新v%3D2%2C%20%5Cmu%3D%5Cmu%5E%7B%2A%7D%20%5Cmax%20%5Cleft%28%5Cfrac%7B1%7D%7B3%7D%2C%201-%282%20%5Crho-1%29%5E%7B3%7D%5Cright%29,否则%5Cmu%3D%5Cmu%20%5Ctimes%20v%2C%20v%3D2%20%5Ctimes%20v
  6. 判断%5Cleft%5C%7C%5Cmathbf%7BX%7D-%5Cmathbf%7BX%7D%5E%7B%2A%7D%5Cright%5C%7C%3C%5Cvarepsilon, 若成立则结束; 不成立, 重复 2-5 步

终极:实现健壮的内核功能

引言:最小二乘中遇到 outlier 怎么处理? 核函数如何在代码中实现?
有多种方法 ,这里主要介绍 g2o 和 ceres 中使用的 Triggs Correction 。
Iriggs Correction
鲁棒核函数直接作用于残差f_%7Bk%7D%28%5Cmathbf%7Bx%7D%29,最小二乘函数变为如下形式:
%5Cmin%20_%7B%5Cmathbf%7Bx%7D%7D%20%5Cfrac%7B1%7D%7B2%7D%20%5Csum_%7Bk%7D%20%5Crho%5Cleft%28%5Cleft%5C%7Cf_%7Bk%7D%28%5Cmathbf%7Bx%7D%29%5Cright%5C%7C%5E%7B2%7D%5Cright%29
将误差的平方项记为s_%7Bk%7D%3D%5Cleft%5C%7Cf_%7Bk%7D%28%5Cmathbf%7Bx%7D%29%5Cright%5C%7C%5E%7B2%7D,则鲁棒核误差函数的二阶泰勒展开如下:
%5Cfrac%7B1%7D%7B2%7D%20%5Crho%28s%29%3D%5Cfrac%7B1%7D%7B2%7D%5Cleft%28%5Ctext%20%7B%20const%20%7D%2B%5Crho%5E%7B%5Cprime%7D%20%5CDelta%20s%2B%5Cfrac%7B1%7D%7B2%7D%20%5Crho%5E%7B%5Cprime%20%5Cprime%7D%20%5CDelta%5E%7B2%7D%20s%5Cright%29
上述函数中%5CDelta%20s_%7Bk%7D的计算稍微复杂一点:
%5Cbegin%7Baligned%7D%20%5CDelta%20s_%7Bk%7D%20%26%3D%5Cleft%5C%7Cf_%7Bk%7D%28%5Cmathbf%7Bx%7D%2B%5CDelta%20%5Cmathbf%7Bx%7D%29%5Cright%5C%7C%5E%7B2%7D-%5Cleft%5C%7Cf_%7Bk%7D%28%5Cmathbf%7Bx%7D%29%5Cright%5C%7C%5E%7B2%7D%20%5C%5C%20%26%20%5Capprox%5Cleft%5C%7Cf_%7Bk%7D%2B%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5Cright%5C%7C%5E%7B2%7D-%5Cleft%5C%7Cf_%7Bk%7D%28%5Cmathbf%7Bx%7D%29%5Cright%5C%7C%5E%7B2%7D%20%5C%5C%20%26%3D2%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%20%5Cend%7Baligned%7D
将上式代入上式有:
%5Cbegin%7Baligned%7D%20%5Cfrac%7B1%7D%7B2%7D%20%5Crho%28s%29%20%5Capprox%20%26%20%5Cfrac%7B1%7D%7B2%7D%5Cleft%28%5Crho%5E%7B%5Cprime%7D%5Cleft%5B2%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5Cright%5D%5Cright.%5C%5C%20%26%5Cleft.%2B%5Cfrac%7B1%7D%7B2%7D%20%5Crho%5E%7B%5Cprime%20%5Cprime%7D%5Cleft%5B2%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%5Cright%5D%5E%7B2%7D%2B%5Ctext%20%7B%20const%20%7D%5Cright%29%20%5C%5C%20%5Capprox%20%26%20%5Crho%5E%7B%5Cprime%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Cfrac%7B1%7D%7B2%7D%20%5Crho%5E%7B%5Cprime%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Crho%5E%7B%5Cprime%20%5Cprime%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20f_%7Bk%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Ctext%20%7B%20const%20%7D%20%5C%5C%20%3D%26%20%5Crho%5E%7B%5Cprime%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Cfrac%7B1%7D%7B2%7D%28%5CDelta%20%5Cmathbf%7Bx%7D%29%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%5Cleft%28%5Crho%5E%7B%5Cprime%7D%20I%2B2%20%5Crho%5E%7B%5Cprime%20%5Cprime%7D%20f_%7Bk%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%5Cright%29%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%2B%5Ctext%20%7B%20const%20%7D%20%5Cend%7Baligned%7D
对上式求和后,对变量%5CDelta%20%5Cmathrm%7Bx%7D求导,令其等于 0 ,得到:
%5Cbegin%7Baligned%7D%20%5Csum_%7Bk%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%5Cleft%28%5Crho%5E%7B%5Cprime%7D%20I%2B2%20%5Crho%5E%7B%5Cprime%20%5Cprime%7D%20f_%7Bk%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%5Cright%29%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%20%26%3D-%5Csum_%7Bk%7D%20%5Crho%5E%7B%5Cprime%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5C%5C%20%5Csum_%7Bk%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%5E%7B%5Ctop%7D%20W%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5CDelta%20%5Cmathbf%7Bx%7D%20%26%3D-%5Csum_%7Bk%7D%20%5Crho%5E%7B%5Cprime%7D%20f_%7Bk%7D%5E%7B%5Ctop%7D%20%5Cmathbf%7BJ%7D_%7Bk%7D%20%5Cend%7Baligned%7D
Example Cauchy Cost Function
柯西鲁棒核函数的定义为:
%5Crho%28s%29%3Dc%5E%7B2%7D%20%5Clog%20%5Cleft%281%2B%5Cfrac%7Bs%7D%7Bc%5E%7B2%7D%7D%5Cright%29
其中,c为控制参数。 s 的一阶和二阶导数是:
%5Crho%5E%7B%5Cprime%7D%28s%29%3D%5Cfrac%7B1%7D%7B1%2B%5Cfrac%7Bs%7D%7Bc%5E%7B2%7D%7D%7D%2C%20%5Cquad%20%5Crho%5E%7B%5Cprime%20%5Cprime%7D%28s%29%3D-%5Cfrac%7B1%7D%7Bc%5E%7B2%7D%7D%5Cleft%28%5Crho%5E%7B%5Cprime%7D%28s%29%5Cright%29%5E%7B2%7D

VIO(notes) —— (2)融合算法

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年3月31日 上午9:55
下一篇 2022年3月31日 上午11:45

相关推荐