VSLAM学习(二) 非线性优化

目录
VSLAM学习(一) 三维运动、相机模型、SLAM模型
VSLAM学习(二) 非线性优化
VSLAM学习(三) 单目相机位姿估计
VSLAM学习(四) Bundle Adjustment

一、前置知识点

1.1 最小二乘项

最小二乘是一种求参数优化损失的方法,不了解的可以去看我的另一篇博文:【线性回归与最小二乘】

例如,
多维高斯分布概率密度: x ∼ N ( μ , Σ ) \boldsymbol x\sim N(\boldsymbol \mu,\bold \Sigma) xN(μ,Σ),其中 x , μ ∈ R n , Σ ∈ R n × n \boldsymbol x,\boldsymbol \mu\in \mathbb{R}^n, \bold \Sigma\in \mathbb{R}^{n\times n} x,μRn,ΣRn×n

f ( x ) = 1 ( 2 π ) n d e t ( Σ ) e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) f(\boldsymbol x)=\frac{1}{\sqrt{(2\pi)^ndet(\bold \Sigma)}}\mathrm{exp}\Big(-\frac{1}{2}(\boldsymbol x-\boldsymbol \mu)^T\mathbf{\Sigma}^{-1}(\boldsymbol x-\boldsymbol \mu)\Big) f(x)=(2π)ndet(Σ) 1exp(21(xμ)TΣ1(xμ))

在优化中一般使用其负对数形式:

− l n [ f ( x ) ] = C + 1 2 ( x − μ ) T Σ − 1 ( x − μ ) -ln[f(\boldsymbol x)]=\boldsymbol C+\frac{1}{2}(\boldsymbol x-\boldsymbol \mu)^T\mathbf{\Sigma}^{-1}(\boldsymbol x-\boldsymbol \mu) ln[f(x)]=C+21(xμ)TΣ1(xμ)
其中二次型 1 2 ( x − μ ) T Σ − 1 ( x − μ ) \displaystyle{\frac{1}{2}(\boldsymbol x-\boldsymbol \mu)^T\mathbf{\Sigma}^{-1}(\boldsymbol x-\boldsymbol \mu)} 21(xμ)TΣ1(xμ)称为马氏距离,就是一种最小二乘项
要求 f ( x ) f(\boldsymbol{x}) f(x)的最大值,即是要求马氏距离的最小值。

1.2 牛顿迭代法

牛顿法是一种在实数域和复数域上近似求解方程的方法,原理大致如下

以最简单的一元函数为例,若要求一元方程 f ( x ) = 0 f(x)=0 f(x)=0的解,可先随机选取一个初值值 x 0 x_0 x0,但显然 f ( x 0 ) ≠ 0 f(x_0)≠0 f(x0)=0,那么我们对函数 f ( x ) f(x) f(x)关于 x 0 x_0 x0进行一阶泰勒展开:

f ( x 1 ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x 1 − x 0 ) f(x_1)≈f(x_0)+f'(x_0)(x_1-x_0) f(x1)f(x0)+f(x0)(x1x0)

我们希望找到 f ( x 1 ) = 0 f(x_1)=0 f(x1)=0,即

f ( x 0 ) + f ′ ( x 0 ) ( x 1 − x 0 ) = 0 f(x_0)+f'(x_0)(x_1-x_0)=0 f(x0)+f(x0)(x1x0)=0
所以有
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x_0)} x1=x0f(x0)f(x0)
此为一轮迭代
之后可以重复以上方法往下找 x 2 , x 3 , ⋅ ⋅ ⋅ x_2,x_3,··· x2,x3,,直到误差允许的范围内为止
过程大致如下图所示

Newton's method

牛顿迭代法
我的思考:

假如所求方程为 x 2 − 1 = 0 x^2-1=0 x21=0,那么此时的迭代公式为

x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) = x 0 − x 0 2 − 1 2 x 0 = x 0 2 + 1 2 x 0 x_1=x_0-\frac{f(x_0)}{f'(x_0)}=x_0-\frac{x_0^2-1}{2x_0}=\frac{x_0}{2}+\frac{1}{2x_0} x1=x0f(x0)f(x0)=x02x0x021=2x0+2x01

但若我取初值 x 0 = 0 x_0=0 x0=0,会导迭代时 x 1 → ∞ x_1\rightarrow\infty x1,这样牛顿法是不是就失效了?

二、状态估计问题

回顾滤波器中的贝叶斯法则:

P ( x │ z ) = P ( z ∣ x ) P ( x ) P ( z ) ∝ P ( z ∣ x ) P ( x ) P(x│z)=\frac{P(z|x)P(x)}{P(z)}\propto P(z|x)P(x) P(xz)=P(z)P(zx)P(x)P(zx)P(x)

现在目标是要去求解状态变量(这里将待求的位姿信息和路标信息全部整合到一个变量中) x = { x 1 , ⋅ ⋅ ⋅ , x n , y 1 , ⋅ ⋅ ⋅ , y m } \boldsymbol x={\{x_1,···,x_n,y_1,···,y_m\}} x={x1,,xn,y1,,ym}的值

由于 P ( x │ z ) P(x│z) P(xz)比较难直接表示,所以要借助两种办法

  1. 最大后验估计 (Maximize a Posterior)

x M A P ∗ = arg ⁡ max ⁡ P ( x ∣ z ) = arg ⁡ max ⁡ P ( z ∣ x ) P ( x ) \boldsymbol x_{MAP}^*=\arg\max P(x|z)=\arg\max P(z|x)P(x) xMAP=argmaxP(xz)=argmaxP(zx)P(x)
2) 最大似然估计 (Maximize Likelhood Estimation)

x M L E ∗ = arg ⁡ max ⁡ P ( z ∣ x ) \boldsymbol x_{MLE}^*=\arg\max P(z|x) xMLE=argmaxP(zx)

来求出 x \boldsymbol x x的状况

先以最简单的形式来举例,假设噪声都是高斯噪声:
v k , j ∼ N ( 0 , Q k , j ) \boldsymbol v_{k,j}\sim N(\boldsymbol 0,\boldsymbol Q_{k,j}) vk,jN(0,Qk,j)
根据观测方程
z k , j = h ( y j , x k ) + v k , j \boldsymbol z_{k,j}=h(\boldsymbol y_j,\boldsymbol x_k)+\boldsymbol v_{k,j} zk,j=h(yj,xk)+vk,j
于是
z − h ( x ) ∼ N ( 0 , Q ) o r z ∼ N ( h ( x ) , Q ) o r P ( z ∣ x ) = N ( h ( x ) , Q ) \boldsymbol z-h(\boldsymbol x)\sim N(0,\boldsymbol Q) \\ or \\ \boldsymbol z\sim N(h(\boldsymbol x),\boldsymbol Q) \\ or \\ \mathrm{P}(\boldsymbol z|\boldsymbol x)=N(h(\boldsymbol x),\boldsymbol Q) zh(x)N(0,Q)orzN(h(x),Q)orP(zx)=N(h(x),Q)

求解最大似然估计:

x ∗ = arg ⁡ max ⁡ P ( z ∣ x ) = arg ⁡ min ⁡ ( ( z − h ( x ) ) T Q − 1 ( z − h ( x ) ) ) = arg ⁡ min ⁡ ( v T Q − 1 v ) \begin{aligned} \boldsymbol x^*&=\arg\max P(z|x) \\ &=\arg\min\Bigg(\Big(\boldsymbol z-h(\boldsymbol x)\Big)^T\bold Q^{-1}\Big(\boldsymbol z-h(\boldsymbol x)\Big)\Bigg) \\ &=\arg\min(\boldsymbol v^T\bold Q^{-1}\boldsymbol v) \end{aligned} x=argmaxP(zx)=argmin((zh(x))TQ1(zh(x)))=argmin(vTQ1v)
说明求后验概率最大化等价于求误差的最小二乘

对于slam模型的两个方程的噪声项(之后记为误差项)

e u , k = x k − f ( x k − 1 , u k ) e z , k , j = z k , j − h ( y j , x k ) \begin{aligned} \boldsymbol e_{\boldsymbol u,k}&=\boldsymbol x_k-f(\boldsymbol x_{k-1},\boldsymbol u_k) \\ \boldsymbol e_{\boldsymbol z,k,j}&=\boldsymbol z_{k,j}-h(\boldsymbol y_j,\boldsymbol x_k) \end{aligned} eu,kez,k,j=xkf(xk1,uk)=zk,jh(yj,xk)

对所有误差的马氏距离求和(构造惩罚函数):

min ⁡ J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e z , k , j T Q k , j − 1 e z , k , j \min J(\boldsymbol x, \boldsymbol y)=\sum_k\boldsymbol e_{\boldsymbol u,k}^T\boldsymbol R_k^{-1}\boldsymbol e_{\boldsymbol u,k}+\sum_k\sum_j\boldsymbol e_{\boldsymbol z,k,j}^T\boldsymbol Q_{k,j}^{-1}\boldsymbol e_{\boldsymbol z,k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j

三、非线性最小二乘

对于求解最小二乘问题的极值相当于也是利用迭代的思想去逼近最优解

min ⁡ x F ( x ) = 1 2 ∥ f ( x ) ∥ 2 2 \min \limits_{\boldsymbol x} F(\boldsymbol x)=\frac{1}{2}\|f(\boldsymbol x)\|^2_2 xminF(x)=21f(x)22

3.1 一阶梯度法(最速下降法)

将目标函数 F ( x ) F(\boldsymbol x) F(x) x k x_k xk附近作一阶泰勒展开

F ( x + Δ x ) ≈ F ( x ) + J ( x ) Δ x F(\boldsymbol x+\Delta\boldsymbol x)≈F(\boldsymbol x)+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x F(x+Δx)F(x)+J(x)Δx

其中 J \boldsymbol J J为Jacobian矩阵

J ( x ) = D x F ( x ) = ∇ x T F ( x ) = ∂ F ( x ) ∂ x T = ( ∂ F ( x ) ∂ x 1 , ∂ F ( x ) ∂ x 2 , ⋅ ⋅ ⋅ , ∂ F ( x ) ∂ x n ) \begin{aligned} \boldsymbol J(\boldsymbol x)&=\mathrm D_{\boldsymbol x}F(\boldsymbol x)=\nabla^{\mathrm T}_{\boldsymbol x}F(\boldsymbol x)=\frac{\partial F(\boldsymbol x)}{\partial\boldsymbol x^{\mathrm T}} \\ &=\Big(\frac{\partial F(\boldsymbol x)}{\partial x_1},\frac{\partial F(\boldsymbol x)}{\partial x_2},···,\frac{\partial F(\boldsymbol x)}{\partial x_n}\Big) \end{aligned} J(x)=DxF(x)=xTF(x)=xTF(x)=(x1F(x),x2F(x),,xnF(x))

取梯度反方向,做梯度下降

Δ x ∗ = − J T ( x ) \Delta\boldsymbol x^*=-\boldsymbol J^{\mathrm T}(\boldsymbol x) Δx=JT(x)

这只是确定了方向,一般情况下,还需确定一个步长
记步长为 α ≥ 0 \alpha\ge0 α0,根据迭代

x k + 1 = x k + α Δ x ∗ \boldsymbol x_{k+1}=\boldsymbol x_{k}+\alpha\Delta\boldsymbol x^* xk+1=xk+αΔx

所以目标就是求

min ⁡ α F ( x k + 1 ) = min ⁡ α F ( x k + α Δ x ∗ ) \min\limits_{\alpha}F(\boldsymbol x_{k+1})=\min\limits_{\alpha}F(\boldsymbol x_{k}+\alpha\Delta\boldsymbol x^*) αminF(xk+1)=αminF(xk+αΔx)

可以直接求驻点来解得 α \alpha α

φ ( α ) = F ( x k + α Δ x ∗ ) φ ′ ( α ) = 0 \varphi(\alpha)=F(\boldsymbol x_{k}+\alpha\Delta\boldsymbol x^*) \\ \varphi'(\alpha)=0 φ(α)=F(xk+αΔx)φ(α)=0

方法特点:
贪心算法,两次寻路方向正交,产生ZigZag现象(走锯齿路线),导致迭代次数增加

3.2 二阶梯度法(牛顿法)

将目标函数 F ( x ) F(\boldsymbol x) F(x) x x x附近作二阶泰勒展开

F ( x + Δ x ) ≈ F ( x ) + J ( x ) Δ x + 1 2 Δ x T H ( x ) Δ x F(\boldsymbol x+\Delta\boldsymbol x)≈F(\boldsymbol x)+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x+\frac{1}{2}\Delta\boldsymbol x^{\mathrm T}\boldsymbol H(\boldsymbol x)\Delta\boldsymbol x F(x+Δx)F(x)+J(x)Δx+21ΔxTH(x)Δx

其中 H \boldsymbol H H为Hessian矩阵

H ( x ) = ∇ x 2 F ( x ) = = ∂ 2 F ( x ) ∂ x ∂ x T = ( ∂ 2 F ( x ) ∂ x 1 2 … ∂ 2 F ( x ) ∂ x 1 ∂ x n ⋮ ⋱ ⋮ ∂ 2 F ( x ) ∂ x n ∂ x 1 … ∂ 2 F ( x ) ∂ x n 2 ) \begin{aligned} \boldsymbol H(\boldsymbol x)&=\nabla^2_{\boldsymbol x}F(\boldsymbol x)==\frac{\partial^2 F(\boldsymbol x)}{\partial\boldsymbol x\partial\boldsymbol x^{\mathrm T}} \\ &= \begin{pmatrix} \displaystyle{\frac{\partial^2 F(\boldsymbol x)}{\partial x_1^2}} & \dots & \displaystyle{\frac{\partial^2 F(\boldsymbol x)}{\partial x_1\partial x_n}} \\ \vdots & \ddots & \vdots \\ \displaystyle{\frac{\partial^2 F(\boldsymbol x)}{\partial x_n\partial x_1}} & \dots & \displaystyle{\frac{\partial^2 F(\boldsymbol x)}{\partial x_n^2}} \end{pmatrix} \end{aligned} H(x)=x2F(x)==xxT2F(x)=x122F(x)xnx12F(x)x1xn2F(x)xn22F(x)

要求函数 F ( x ) F(\boldsymbol x) F(x)的极值,也就是求驻点,即 F ′ ( x ) = 0 F'(\boldsymbol x)=0 F(x)=0的点
将上面的二阶泰勒展开式对 Δ x \Delta\boldsymbol x Δx求导,得

F ′ ( x + Δ x ) ≈ J T ( x ) + H ( x ) Δ x F'(\boldsymbol x+\Delta\boldsymbol x)≈ \boldsymbol J^{\mathrm T}(\boldsymbol x)+\boldsymbol H(\boldsymbol x)\Delta\boldsymbol x F(x+Δx)JT(x)+H(x)Δx

  • 注意对 Δ x Δ\boldsymbol x Δx求导的意思,也就是 x \boldsymbol x x是常数。

令一阶导数等于0,得

H Δ x = − J T \boldsymbol H\Delta\boldsymbol x=-\boldsymbol J^{\mathrm T} HΔx=JT

H H H可逆,则可得到牛顿迭代公式为

x k + 1 = x k − H − 1 J T \boldsymbol x_{k+1}=\boldsymbol x_k-\boldsymbol H^{-1}\boldsymbol J^{\mathrm T} xk+1=xkH1JT

  • 额外补充知识点
     对于一阶梯度 J = 0 \boldsymbol J=0 J=0的点,
     若Hessian矩阵 H \boldsymbol H H正定的(所有特征值都是正的),则该临界点是局部极小点
     若Hessian矩阵 H \boldsymbol H H负定的(所有特征值都是负的),则该临界点是局部极大点
     若Hessian矩阵 H \boldsymbol H H不定的(特征值有正有负),则该临界点是鞍点

方法缺点:
求解Hessian矩阵 H \boldsymbol H H过于复杂

3.3 高斯-牛顿法

牛顿法是直接对二范数 ∥ f ( x + Δ x ) ∥ 2 2 \|f(\boldsymbol x+\Delta\boldsymbol x)\|^2_2 f(x+Δx)22进行泰勒展开
而高斯-牛顿法是先对函数作泰勒展开,之后再求二范数

f ( x + Δ x ) ≈ f ( x ) + J ( x ) Δ x Δ x ∗ = arg ⁡ min ⁡ Δ x 1 2 ∥ f ( x ) + J ( x ) Δ x ∥ 2 f(\boldsymbol x+\Delta\boldsymbol x)≈f(\boldsymbol x)+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x \\ \Delta\boldsymbol x^*=\arg\min\limits_{\Delta\boldsymbol x}\frac{1}{2}\Big\|f(\boldsymbol x)+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x\Big\|^2 f(x+Δx)f(x)+J(x)ΔxΔx=argΔxmin21f(x)+J(x)Δx2

展开待优化式:

1 2 ∥ f ( x ) + J Δ x ∥ 2 = 1 2 ( f ( x ) + J Δ x ) T ( f ( x ) + J Δ x ) = 1 2 ( ∥ f ( x ) ∥ 2 2 + 2 f T ( x ) J Δ x + Δ x T J T J Δ x ) \begin{aligned} \frac{1}{2}\Big\|f(\boldsymbol x)+\boldsymbol J\Delta\boldsymbol x\Big\|^2&=\frac{1}{2}\Big(f(\boldsymbol x)+\boldsymbol J\Delta\boldsymbol x\Big)^{\mathrm T}\Big(f(\boldsymbol x)+\boldsymbol J\Delta\boldsymbol x\Big) \\ &=\frac{1}{2}\Big(\|f(\boldsymbol x)\|^2_2+2f^{\mathrm T}(\boldsymbol x)\boldsymbol J\Delta\boldsymbol x+\Delta\boldsymbol x^{\mathrm T}\boldsymbol J^{\mathrm T}\boldsymbol J\Delta\boldsymbol x\Big) \end{aligned} 21f(x)+JΔx2=21(f(x)+JΔx)T(f(x)+JΔx)=21(f(x)22+2fT(x)JΔx+ΔxTJTJΔx)

求导求驻点

J T f + J T J Δ x = 0 J T J Δ x = − J f \boldsymbol J^{\mathrm T}f+\boldsymbol J^{\mathrm T}\boldsymbol J\Delta\boldsymbol x=0 \\ \boldsymbol J^{\mathrm T}\boldsymbol J\Delta\boldsymbol x=-\boldsymbol Jf JTf+JTJΔx=0JTJΔx=Jf

J T J = H , − J T f = g \boldsymbol J^{\mathrm T}\boldsymbol J=\boldsymbol H,-\boldsymbol J^{\mathrm T}f=\boldsymbol g JTJ=H,JTf=g,即得到增量方程

H Δ x = g \boldsymbol H\Delta\boldsymbol x=\boldsymbol g HΔx=g

计算 J T J \boldsymbol{J}^{\mathrm T}\boldsymbol{J} JTJ比牛顿法计算Hessian矩阵要容易的多,但是 J T J \boldsymbol{J}^{\mathrm T}\boldsymbol{J} JTJ是半正定的,不一定可逆

3.4 Levenberg-Marquardt方法

上面两种优化都属于线性搜索(Line Search)方式
而这里的LM方法属于置信区域(Trust Region)模式

ρ = f ( x + Δ x ) − f ( x ) J ( x ) Δ x \rho = \frac{f(\boldsymbol x+\Delta\boldsymbol x)-f(\boldsymbol x)}{\boldsymbol J(x)\Delta\boldsymbol x} ρ=J(x)Δxf(x+Δx)f(x)

实际下降一阶近似下降的比值

  • 比值越大,说明一阶近似越可靠,还可加大近似范围
  • 比值越小,说明一阶近似越不可靠,需要减小近似范围

LM方法确定迭代增量的时候,将增量约束与此范围之内:
min ⁡ Δ x 1 2 ∥ f ( x + J ( x ) Δ x ) ∥ 2 , s . t . ∥ D Δ x ∥ 2 ≤ μ \min\limits_{\Delta\boldsymbol x}\frac{1}{2}\|f(\boldsymbol x+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x)\|^2 , \quad\quad\quad s.t.\|\boldsymbol D\Delta\boldsymbol x\|^2≤\mu Δxmin21f(x+J(x)Δx)2,s.t.DΔx2μ
其中 μ \mu μ是信赖区域半径(初始随机取值), D \boldsymbol D D是区域形状

确定增量前,先要计算 ρ \rho ρ

  • ρ > 3 4 \displaystyle{\rho>\frac{3}{4}} ρ>43,则放大范围, μ = 2 μ \mu=2\mu μ=2μ
  • ρ < 1 4 \displaystyle{\rho<\frac{1}{4}} ρ<41,则缩小范围, μ = 1 2 μ \displaystyle{\mu=\frac{1}{2}\mu} μ=21μ

对于区域形状 D \boldsymbol D D,Levenberg和Marquardt提出的有所不同

  • Levenberg提出 D = I \boldsymbol D=\boldsymbol I D=I,相当于把 Δ x \Delta\boldsymbol x Δx约束在一个球中
  • Marquardt提出 D \boldsymbol D D取成非负对角阵,通常使用 J T J \boldsymbol J^{\mathrm T}\boldsymbol J JTJ对角元素的平方根,相当于把 Δ x \Delta\boldsymbol x Δx约束在一个椭球中

所以整个问题相当于求解一个条件极值
可以使用拉格朗日乘数法

min ⁡ Δ x 1 2 ( ∥ f ( x + J ( x ) Δ x ) ∥ 2 + λ ∥ D Δ x ∥ 2 ) \min\limits_{\Delta\boldsymbol x}\frac{1}{2}\Big(\|f(\boldsymbol x+\boldsymbol J(\boldsymbol x)\Delta\boldsymbol x)\|^2+\lambda\|\boldsymbol D\Delta\boldsymbol x\|^2\Big) Δxmin21(f(x+J(x)Δx)2+λDΔx2)

还是求解增量方程

( J T J + λ D T D ) Δ x = − J f o r ( H + λ D T D ) Δ x = g \big(\boldsymbol J^{\mathrm T}\boldsymbol J+\lambda\boldsymbol D^{\mathrm T}\boldsymbol D\big)\Delta\boldsymbol x=-\boldsymbol Jf \\ or \\ \big(\boldsymbol H+\lambda\boldsymbol D^{\mathrm T}\boldsymbol D\big)\Delta\boldsymbol x=\boldsymbol g (JTJ+λDTD)Δx=Jfor(H+λDTD)Δx=g

可以看出,就是比G-N方法多了一个 λ D T D \lambda\boldsymbol D^{\mathrm T}\boldsymbol D λDTD

以Levenberg为例( D = I \boldsymbol D=\boldsymbol I D=I)
增量方程即为

( H + λ I ) Δ x = g \big(\boldsymbol H+\lambda\boldsymbol I\big)\Delta\boldsymbol x=\boldsymbol g (H+λI)Δx=g
这相当于给矩阵 H \boldsymbol H H增加了它的正定性,并且:

  • λ \lambda λ很小的时候, H \boldsymbol H H占主体地位,LM方法接近高斯牛顿法
  • λ \lambda λ很大的时候, λ I \lambda\boldsymbol I λI占主体地位,LM方法接近于最速下降法

所以可以将LM方法看做是一阶法与二阶法的一个混合折中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值