《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?

本文主要是介绍《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学习高翔《视觉SLAM十四讲》中的理论知识,在第六章非线性优化中,解释了为何求解最大概率问题能够转化为最小二乘的优化问题。然而书中有些证明省略掉了,经过请教搞清楚了,特此记在这里。或许能够对其他朋友有帮助。

关键词:如何从求: max ⁡ P ( z , u ∣ x , y ) \max P(z, u|x, y) maxP(z,ux,y) 得到求:
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(x,y)=\sum_k e_{u,k}^T R_k^{-1} e_{u,k} + \sum_k \sum_j e_{z,k,j}^T Q_{k,j}^{-1} e_{z,k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j 采用的是《视觉SLAM十四讲(第二版)》,公式编号与第一版稍微有一点儿不一样,但不影响理解。

1. 从后验到似然

我们需要估计的量为:所有的状态 x x x 和路标 y y y,不加角标表示所有的时刻,即 x 0 , 1 , 2... K x_{0,1,2...K} x0,1,2...K。而我们已知的是实际的观测 z z z 和我们的输入量(控制量) u u u,所以我们要求的是 x , y x, y x,y 的条件概率分布(式6.4) P ( x , y ∣ z , u ) P(x, y|z, u) P(x,yz,u) 利用贝叶斯公式写成(式-6.5):
P ( x , y ∣ z , u ) = P ( z , u ∣ x , y ) P ( x , y ) P ( z , u ) ∝ P ( z , u ∣ x , y ) P ( x , y ) P(x, y|z, u) = \frac{P(z, u|x, y) P(x,y)}{P(z, u)} \propto P(z, u|x, y)P(x,y) P(x,yz,u)=P(z,u)P(z,ux,y)P(x,y)P(z,ux,y)P(x,y) 由于我们要求的是 x , y x,y x,y 所以不用考虑分母的 z , u z,u z,u ,而后面的 P ( x , y ) P(x,y) P(x,y) 是先验,我们在未知可能的先验时这部分没有用,(一般设为均匀分布?)所以省略,于是关于最优的 x , y x,y x,y 写成求解最大似然估计(式-6.7):
( x , y ) M L E ∗ = a r g max ⁡ P ( z , u ∣ x , y ) (x, y)^*_{MLE} = arg\max P(z, u|x, y) (x,y)MLE=argmaxP(z,ux,y) 从而得出了从后验到似然

2. 后验式子的变形

P ( z , u ∣ x , y ) = P ( z ∣ x , y ) P ( u ∣ x , y ) = P ( z ∣ x , y ) P ( u ∣ x ) P(z, u|x, y)=P(z|x, y) P(u|x, y) = P(z|x, y)P(u|x) P(z,ux,y)=P(zx,y)P(ux,y)=P(zx,y)P(ux)
因为观测与控制独立,所以有第一个等号;而控制只和实际的位置有关,与标志 y y y无关,所以有第二个等式。
对于观测,第 z k , j z_{k,j} zk,j 个观测(用 k k k 表示第 k k k 个位置, j j j 表示第 j j j 个标志物)只和第 k k k 个位置的状态 x x x,和第 j j j 个标志物有关,所以有:
P ( z ∣ x , y ) = P ( z 1 , 1 , z 2 , 1 , z 2 , 3 , . . . . z k , j ∣ x , y ) = ∏ k , j P ( z k , j ∣ x k , y j ) P(z|x, y)=P(z_{1,1}, z_{2,1}, z_{2,3}, .... z_{k, j}|x, y)=\prod_{k,j} P(z_{k, j}|x_k, y_j) P(zx,y)=P(z1,1,z2,1,z2,3,....zk,jx,y)=k,jP(zk,jxk,yj) 这里把 z z z 展开了,随意写了第二个式子(可以认为是在第1个位置看到了路标1,第2个位置看到了路标1和3,等),由于每次观测相互独立,所以可以写成条件概率连乘的形式。
对于控制,第 k k k 个控制量只和前一次与后一次的位置状态 x x x 有关(这也是马尔科夫假设)而与其它的位置无关,所以可以写成:
P ( u ∣ x ) = P ( u 1 : K ∣ x 0 : K ) = ∏ k P ( u k ∣ x k − 1 , x k ) P(u|x) = P(u_{1:K}|x_{0:K}) = \prod_k P(u_k|x_{k-1}, x_k) P(ux)=P(u1:Kx0:K)=kP(ukxk1,xk) 于是整理两个式子,可以得到书中的 式6.11
P ( z , u ∣ x , y ) = ∏ k P ( u k ∣ x k − 1 , x k ) ∏ k , j P ( z k , j ∣ x k , y j ) P(z, u|x, y)=\prod_k P(u_k|x_{k-1}, x_k) \prod_{k,j}P(z_{k,j}|x_k, y_j) P(z,ux,y)=kP(ukxk1,xk)k,jP(zk,jxk,yj) 然而按照这个式子继续推,不能直观的得到后续结果,因为观测部分有明确的观测模型,而控制部分没有! 具体的介绍请看第4部分。

3. 观测部分变形

首先补充观测方程:
z k , j = h ( y j , x k ) + v k , j z_{k,j} = h(y_j, x_k) + v_{k,j} zk,j=h(yj,xk)+vk,j 即观测 z z z 是实际的(与位置 x x x 和实际路标 y y y 有关的)观测模型(例如相机成像模型)的真实测量, h ( x , y ) h(x,y) h(x,y) 叠加一个观测噪声 v v v
如果我们假设实际的观测结果,是以:真实观测值为期望,协方差矩阵为噪声协方差的正态分布,即(省略了不重要的角标):
P ( z ∣ x , y ) = N ( h ( x , y ) , Q ) P(z|x, y) = N(h(x,y), Q) P(zx,y)=N(h(x,y),Q) 则我们在计算最大的 P ( z ∣ x , y ) P(z|x, y) P(zx,y)即为计算最小的 − l n ( P ( z ∣ x , y ) ) -ln(P(z|x, y)) ln(P(zx,y)),而这部分可以进一步写成(省略与 x , y x,y x,y无关项):
( z − h ( x , y ) ) T Q − 1 ( z − h ( x , y ) ) (z-h(x,y))^T Q^{-1}(z-h(x,y)) (zh(x,y))TQ1(zh(x,y)) 这就是式6.10,而如果定义观测误差如下:
e z = z − h ( x , y ) e_z = z-h(x, y) ez=zh(x,y) 则我们通过对(式-6.11),即连乘式子求对数,连乘变为累加,最小化后半部分的观测,则式6.11的观测部分写成:
∑ k ∑ j e z , k , j T Q − 1 e z , k , j \sum_k \sum_j e_{z,k,j}^T Q^{-1} e_{z, k, j} kjez,k,jTQ1ez,k,j 便得到了观测部分的目标函数形式。

4. 运动部分变形

而对于控制部分并不能直接从(式-6.11)得到!
因为运动方程写作:
x k = f ( x k − 1 , u ) + w k x_k = f(x_{k-1}, u) + w_k xk=f(xk1,u)+wk
即这一时刻的位置由上一时刻的位置和施加的控制量产生的运动模型 f f f 叠加一个噪声 w w w 确定。并不能写作(式-6.11)中的控制量由一个包含前一时刻和当前时刻的位置的方程决定。(其实也可以这样定义一个方程,但不能写成控制方程 f f f 的形式)。
于是需要将 P ( u ∣ x ) P(u|x) P(ux) 进行变形。
首先,有式子:
P ( x ∣ u ) = P ( x 0 ∣ x 0 ‾ ) ∏ k = 1 K P ( x k ∣ x k − 1 , u k ) P(x|u) = P(x_0|\overline{x_0}) \prod_{k=1}^K P(x_k|x_{k-1}, u_k) P(xu)=P(x0x0)k=1KP(xkxk1,uk) 这个关键的式子来自于《机器人学中的状态估计》第3章(式-3.5),具体解释为,在控制下的全部 x x x 可以写成在初始分布的估计值 x 0 ‾ \overline{x_0} x0 的一个条件概率分布和后面的连乘。补充一下个人的证明过程:
P ( x ∣ u ) = P ( x 0 : K ∣ u 1 : K , x 0 ‾ ) = P ( x 0 ∣ x 0 ‾ ) P ( x 1 ∣ x 0 , u 0 ) P ( x 2 ∣ x 1 , u 1 ) . . . P ( x K ∣ x K − 1 , u K ) P(x|u)=P(x_{0:K}|u_{1:K}, \overline{x_0}) = P(x_0|\overline{x_0}) P(x_1|x_0, u_0) P(x_2|x_1, u_1)...P(x_K|x_{K-1}, u_K) P(xu)=P(x0:Ku1:K,x0)=P(x0x0)P(x1x0,u0)P(x2x1,u1)...P(xKxK1,uK) 第一个等号为展开向量为所有单个的状态(注意 x 0 ‾ \overline{x_0} x0 是定义在条件中的),后面为条件独立+马尔科夫。
那么我重写了(式-6.11)的控制部分:
a r g max ⁡ P ( u ∣ x ) = a r g max ⁡ P ( x ∣ u ) P ( u ) P ( x ) = a r g max ⁡ P ( x ∣ u ) arg \max P(u|x)=arg \max \frac{P(x|u)P(u)}{P(x)} = arg \max P(x|u) argmaxP(ux)=argmaxP(x)P(xu)P(u)=argmaxP(xu) 第一个等号为贝叶斯公式,第二个等号由于所求 x x x 与控制 u u u 无关,且分母为先验是未知的,所以省略。再带入《机器人学中的状态估计》这个式子,便写成了(还不太具体明白 P ( x 0 ∣ x 0 ‾ ) P(x_0|\overline{x_0}) P(x0x0)这部分如何处理):
∏ k P ( x k ∣ x k − 1 , u k ) \prod_k P(x_k|x_{k-1}, u_k) kP(xkxk1,uk) 于是,式6.11在求取最大值时的参数 x , y x, y x,y 被改写成了:
a r g max ⁡ P ( z , u ∣ x , y ) = a r g max ⁡ ∏ k P ( x k ∣ x k − 1 , u k ) ∏ k , j P ( z k , j ∣ x k , y j ) arg \max P(z,u|x,y)= arg \max \prod_k P(x_k|x_{k-1}, u_k)\prod_{k,j}P(z_{k,j}|x_k, y_j) argmaxP(z,ux,y)=argmaxkP(xkxk1,uk)k,jP(zk,jxk,yj) 这样前半部分利用控制方程,与观测部分相同,定义运动误差 e u , k = x k − f ( x k − 1 , u k ) e_{u,k}=x_k-f(x_{k-1}, u_k) eu,k=xkf(xk1,uk),再假设正态分布的期望与方差,从而最终写成目标函数(式-6.13)形式:
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(x,y)=\sum_k e_{u,k}^T R_k^{-1} e_{u,k} + \sum_k \sum_j e_{z,k,j}^T Q_{k,j}^{-1} e_{z,k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j

5. 后续

后面将目标函数变形,得到求解最小二乘问题即可。

6. 小结

首先,书上没有写出来的可能不是那么直接就能看出来,实际自己一写就能发现问题。其次,折腾半天挺有成就感的。最后,多看别的书籍虽然很痛苦但确实有帮助。以及,写博客敲公式好累。

这篇关于《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849081

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];