共计 3600 个字符,预计需要花费 9 分钟才能阅读完成。
作者:大兵小将
原文地址:https://zhuanlan.zhihu.com/p/608167836
编辑:一点人工一点智能
原文: 主动驾驶中建图定位办法:优化的实质
01 优化的“实质”
先从滤波讲起~
SLAM 首先是一个状态预计问题:在前端中,咱们须要从 k - 1 时刻的状态量 登程,推断出 k 时刻的状态,最简略的状况下,状态仅蕴含位姿,如果用四元数表白旋转的话,状态向量就是 7 维的(position 3 + orientation 4)。咱们用来实现状态预计的信息有:k- 1 时刻到 k 时刻之间的静止测量 和 k 时刻的环境观测。。
下面局部,咱们构建了两个时刻间的优化问题,并能够用各种优化策略取去求解。但相比于滤波办法,这并没有什么优越性,其精度和效率都是等价的。
优化办法真正的劣势在于它能够思考更多时刻的信息,从而大大晋升精度。这里得提一下贝叶斯滤波框架的局限:贝叶斯滤波办法依赖马尔可夫性,也即每一时刻的状态仅与上一时刻无关,这就决定了上一时刻之前的测量信息将被丢掉。
优化办法则能够思考所有时刻的测量信息,下面局部中,咱们仅思考了两个时刻间的误差项,当初,咱们把所有过往时刻(1, 2, … k-1, k)的误差项都增加到指标函数中,咱们以所有时刻的状态为自变量,求指标函数(也即总体误差)的最小值,这样就失去了整体的最优状态预计!精度大大晋升。当然,因为咱们思考了所有时刻的信息,此时的维度会十分大,并且随着工夫的推移维度将越来越大!但所幸,指标函数中的单个误差项并不是与所有时刻的状态都相干,所以求解过程中的相关矩阵会呈现出稠密性,这就容许咱们对高维问题实时求解。
咱们也能够只取相近若干时刻的状态进行优化(而非所有时刻),也即构建一个“滑窗”。在此基础上,更高级的做法是,对滑窗边缘的那个时刻,咱们对其进行边缘化解决以使其可能交融更早时刻的信息(而不是把更早时刻的信息间接丢掉),这样,咱们就构建了“滑窗优化”,这方面的代表作如 VINS。
优化作为一种办法,既能够用于前端,也能够用于后端,甚至你想用的任何中央。用于后端时,通常是全局的优化,也即“思考所有时刻的状态和所有测量误差项”的优化。产生闭环时,意味着以后时刻的状态 和历史上某一个时刻的状态 之间构建了误差项,因为位姿漂移,这个误差项往往很大!当咱们再去对全局误差进行最小化时,咱们就须要“微调”全局各个时刻的状态量,以把这个误差“扩散”到各个时刻去,从而实现全局误差的最小化。这个“微调”的过程,同样由优化来实现。
因而,从以上各个角度来看,一个古代的 SLAM 零碎,实质上就是一个优化的零碎,SLAM 实质上就是一个优化问题。而所有的视觉里程计,激光里程计,轮式,imu 等等,它们的作用就是构建出一个个的误差项。
一个误差项,也即一个束缚。
02 线性化与非线性化优化问题
优化问题实质来说都是最小二乘问题,其要害的中央在于:如何设计与建设 SLAM 的 problem structure:
除非现实状况下,理论中都是非线性化问题,然而咱们不晓得非线性模型,无奈求解理论问题,于是咱们通过对非线性问题进行线性化剖析,疏忽一些因素,构建线性化方程求解非线性化问题。
非线性化:1、艰深来说,非线性优化就是求函数的极值,2、再多说一句,在非线性优化外面通常求最小值。
1、咱们想求一个 函数的极值问题的时候,线性函数是最简略的,因为是线性的嘛,枯燥增或者枯燥减,那么找到边界就能够求到极值。例如 f(x)=ax+b。
2、简略的非线性函数也是很容易求得极值的,例如 f(x)=x*x. 能够通过求导失去极值点,而后求得其极值。
3、然而对于简单的非线性函数,或者简单的数学模型,求导很艰难或者无奈求导的时候怎么求极值呢?那么就呈现了很多非线性优化的算法。来解决对于简单数学模型的求极值的问题。
03 全局优化与局部优化
全局优化的英文是(global optimization)
1、全局优化是找到在整个可行区域内使指标函数 最小的 可行点 x 的问题。艰深来说就是从所有可能的 x 值外面找到最小值 2、通常,可能是一个十分艰难的问题,随着参数数量的减少,难度将成倍增加。比方下面的例子是 x1 和 x2 两个参数,有着不同的组合形式。那么如何有 x1~x100 个参数呢,会有多少种组合形式呢?3、实际上,除非晓得无关 f 的非凡信息,否则甚至无奈确定是否找到了真正的全局最优值,因为可能会呈现 f 值的忽然降落,且这个值暗藏在您尚未查找的参数空间中。
局部优化的英文是(local optimization)
1、局部优化是一个容易得多的问题。它的指标是找到一个仅是部分最小值的可行点 x:f(x)小于或等于所有左近可行点的 f 值 2、通常,非线性优化问题可能有很多部分最小值,算法确定的最小值地位通常取决于用户提供给算法的终点。3、另一方面,即便在十分高维的问题中(尤其是应用基于梯度的算法),局部优化算法通常也能够疾速定位部分最小值。
04 优化应用的办法
具体的优化求解策略包含最速降落法、牛顿法、高斯 - 牛顿法(G-N),基于信赖区域的 L - M 法等。
1、梯度降落法
函数的降落方向将永远为函数的负梯度方向
梯度降落法是一个一阶最优化算法,通常也称为最速降落法。要应用梯度降落法找到一个函数的部分极小值,必须向函数上以后点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜寻。因而指保留一阶梯度信息。毛病是过于贪婪,容易走出锯齿路线。
2、牛顿法
牛顿法是一个二阶最优化算法,根本思维是利用迭代点处的一阶导数 (梯度) 和二阶导数 (Hessen 矩阵) 对指标函数进行二次函数近似。因而保留二阶梯度信息。毛病是须要计算 H 矩阵,计算量太大。
3、高斯牛顿法
其实其就是应用上式,对牛顿法的 H 矩阵进行替换
有可能为奇怪矩阵或变态,Δx 也会造成后果不稳固,因而稳定性差
4、LM 信赖区域法
然而这个近似假如的成立是有肯定水平限度的,咱们能够设立一个正值变量△使得模型在一个以 x 为圆心为半径的圆中被视为能够准确近似。这个圆就是咱们所说的信赖区域。而后咱们就能够基于以下公式求解变动值 h。
LM 算法大抵与高斯牛顿算法实践雷同,然而不同于高斯牛顿算法,LM 算法是基于信赖区域实践 (Trust Region Method) 进行计算的。这是因为高斯牛顿法中的泰勒开展只有在开展点左近才会有比拟好的成果,因而为了确保近似的准确性咱们须要设定一个具备肯定半径的区域作为信赖区域。
基于信赖区域咱们可能从新构建一个更无效的优化框架
采纳信赖区域法咱们就须要明确该区域该怎么确定。在 LM 算法中信赖区大小的确定也是使用增益比例来进行断定的。
05 非线性优化解进化问题
对于 SLAM 而言,视觉传感器须要纹理信息决定特色点,间隔传感器须要空间几何构造信息决定特色点,在特色点不足时,状态预计办法会进行进化。定位的进化次要是因为束缚的缩小,比方 NDT 须要三个正交方向的束缚能力很好的匹配,但若在狭长的走廊上或者隧道环境,条件繁多,即便人肉眼观看激光雷达数据,也很难判断机器人所处的地位。因为激光“看到”的环境都是一样的,在隧道方向是没有束缚的;并且在隧道中 GPS 信号是没的,只能依附高精度的姿势传感器和轮速机的交融来做,当然随着运行工夫的减少,误差会缓缓减少。
解决进化的罕用办法有:
1)当呈现进化时换一种办法; 这要求在设计时须要一个备用办法可用 2)在状态预计过程中退出人工束缚,如恒速模型的束缚。即便问题自身是可解决的状况下也会带来不必要的误差。咱们的办法是在原始问题的局部子空间增加束缚。原始问题的解能够分为非进化方向和进化方向,在解决问题时,首先确定进化方向,而后将求出原始问题非进化方向的解,对于进化方向的解应用猜想值。在最初的实际算法中,只应用非线性优化解在非进化方向的重量,不思考进化方向的重量。
失常状况下,束缚应该是散布在空间中的多个方向,从各个角度束缚解,如上面所示,绿色点示意问题的解,被非进化束缚限度在了一个小区域。这样的解就比拟精确,束缚产生小变动时,解的变动也很小,被限度在一个部分区域,这样的解就是一个比拟现实的解。
如果解的束缚大多近似平行,那么他们就是进化的方向(蓝色箭头示意的方向),这个时候解在进化方向收到的束缚就很差。思考相对平行时,解的束缚也是一个平行的方向,那么这种状况下的解是须要防止的,如果其中一个束缚产生了小的偏移,那么解所在的部分区域会产生较大的变动,这样的解是比拟蹩脚的解。
每次求解时
· 优化解 = 原始解在非进化方向投影 + 估计值在进化方向投影(理论算法中能够将进化方向解抛弃,只思考非进化方向)
1. 综述:机器学习中的模型评估、模型抉择与算法抉择!
2. 多相机视觉零碎的坐标零碎标定与对立及其利用
3. 书籍举荐 -《深度学习的数学了解》
4. Kalman 滤波艰深了解 + 理论利用
5. 书籍举荐 -《深度学习中的正则化》
6. 最新|3D SLAM 对于 z 轴精度的优化思路整顿