详细推导过程
最近看高博关于octomap介绍地博文,其中对每个叶子节点在一系列观测数据下被占据的概率公式,看着有点绕,这里记录梳理过程。
首先公式是这样的
P
(
n
∣
z
1
:
t
)
=
[
1
+
1
−
P
(
n
∣
z
t
)
P
(
n
∣
z
t
)
1
−
P
(
n
∣
z
1
:
t
−
1
)
P
(
n
∣
z
1
:
t
−
1
)
P
(
n
)
1
−
P
(
n
)
]
−
1
P(n|z_{1:t})=[1+\frac{1-P(n|z_t)}{P(n|z_t)}\frac{1-P(n|z_{1:t-1})}{P(n|z_{1:t-1})}\frac{P(n)}{1-P(n)}]^{-1}
P(n∣z1:t)=[1+P(n∣zt)1−P(n∣zt)P(n∣z1:t−1)1−P(n∣z1:t−1)1−P(n)P(n)]−1
其中P(n)为未观测前叶子节点是否被占据的先验概率,基于均匀假设认为空间中一个叶子节点被占据为均匀分布,即
P
(
n
)
=
0.5
P(n)=0.5
P(n)=0.5。
P
(
n
∣
z
1
:
t
)
P(n|z_{1:t})
P(n∣z1:t)为对该叶子节点进行$1 \to t $次观测后该叶子节点被占据的概率,使用了第t次观测下被占据的概率和$1 \to t-1 $的数据和先验概率进行计算。
传感器对空间一个点的测量的测量过程,可以看作是传感器向一个空间点发射了一只箭,如果空间点处确实有物体,并且被传感器成功探测到,那么称这次测量是命中的(hit),如果有物体却没有被探测到,则称这次探测错过了目标(miss),这两个参数在octamap中就是传感器的命中参数和丢失参数。比如命中概率为0.7,错过概率为0.3。
但工程中没有直接使用这个概率,而是使用了对数几率变换(这里可能是追求一个更保险的做法),先将每次测量概率都转换到实数域上,如此对多次测量结果进行一个累计的量化,最后再转化为概率。
Y
=
log
(
P
1
−
P
)
Y=\log ({\frac{P}{1-P}})
Y=log(1−PP)
这里的Y称为log-odds,即对数几率。
对每次测量结果,其累计量化方式是累加,即
Y
1
:
2
=
Y
1
+
Y
2
=
log
(
P
1
1
−
P
1
)
+
log
(
P
2
1
−
P
2
)
Y_{1:2}=Y_1+Y_2=\log ({\frac{P_1}{1-P_1}})+\log ({\frac{P_2}{1-P_2}})
Y1:2=Y1+Y2=log(1−P1P1)+log(1−P2P2)
=
log
(
P
1
1
−
P
1
P
2
1
−
P
2
)
=
>
log
(
P
1
:
t
−
1
1
−
P
1
:
t
−
1
P
t
1
−
P
t
)
=\log ({\frac{P_1}{1-P_1}}{\frac{P_2}{1-P_2}})=>\log ({\frac{P_{1:t-1}}{1-P_{1:t-1}}}{\frac{P_t}{1-P_t}})
=log(1−P1P11−P2P2)=>log(1−P1:t−1P1:t−11−PtPt)
这里的P含义发生了变化,指每次测量结果,如果命中,为0.7,未命中,为0.3。(P(n)=0.5,则原公式最后一项为1,略去不写)
然后利用对数几率函数 (logistic function) 这种“sigmoid”函数,将累计值转换回[0,1]区间:
f
=
1
1
+
exp
(
−
z
)
f=\frac{1}{1+\exp (-z)}
f=1+exp(−z)1
完整的写法为:
f
=
1
1
+
exp
[
−
log
(
P
1
:
t
−
1
1
−
P
1
:
t
−
1
P
t
1
−
P
t
P
(
n
)
1
−
P
(
n
)
)
]
f=\frac{1}{1+\exp[-\log ({\frac{P_{1:t-1}}{1-P_{1:t-1}}}{\frac{P_t}{1-P_t}}{\frac{P(n)}{1-P(n)}})]}
f=1+exp[−log(1−P1:t−1P1:t−11−PtPt1−P(n)P(n))]1
=
1
[
1
+
1
−
P
t
P
t
1
−
P
1
:
t
−
1
P
1
:
t
−
1
P
(
n
)
1
−
P
(
n
)
]
=
原
式
=\frac{1}{[1+\frac{1-P_t}{P_t}\frac{1-P_{1:t-1}}{P_{1:t-1}}\frac{P(n)}{1-P(n)}]}=原式
=[1+Pt1−PtP1:t−11−P1:t−11−P(n)P(n)]1=原式
原博文高博的解析过程为:
对数几率确实是累加的,但最后通过sigmoid函数转化为概率时不能当作累加。但最后实际使用的概率,则会在一个区间内进行截断处理,处理完后,再使用sigmoid函数转换为概率。
这里的
l
m
a
x
与
l
m
i
n
指
叶
节
点
最
大
和
最
小
占
据
概
率
l_{max}与l_{min}指叶节点最大和最小占据概率
lmax与lmin指叶节点最大和最小占据概率,而这种处理方式,原论文表示这可以起到一种数据压缩的作用(不是很理解为啥可以数据压缩)
- 我们确保了地图中的保密性是有界的,因此该模型可以快速地适应环境的变化。此外,我们能够通过修剪来压缩邻近的体素(见第二节。3.4)。正如我们将在第二节中讨论的那样。5.4,这导致必须维持的体素数量大大减少。截断实现的压缩不再完全无损,因为接近零的信息丢失了。然而,在截断阈值之间,保留了完整的概率。(论文原文翻译)
总结:先通过对数几率转换,映射为实数域变量,然后进行累计计算,累计结果通过sigmoid函数映射回[0,1]区间。
参考
OctoMap: an efficient probabilistic 3D mapping framework based on octrees
SLAM拾萃(1):octomap
对数几率回归(logistic regression)逻辑回归