SVO之逆深度滤波

概率深度模型

贝叶斯推断

深度的测量包括两种,一种是正确的测量,一种是由于遮挡、图像变换或重复纹理导致的错误的测量。如块匹配时,有可能包括误差很大的外点。

研究发现:

好的测量值通常是分布在正确深度值附近的。

错误的测量是在深度范围[Zmin,Zmax][Z_{min},Z_{max}]之间的均匀分布。

因此,我们得到的结果通常是二者的混合。使用高斯+均匀分布混合模型来描述测量值的似然概率分布:
(1)p(xnZ,π)=πN(xnZ,τn2)+(1π)U(xnZmin,Zmax) p \left( x _ { n } | Z , \pi \right) = \pi N \left( x _ { n } | Z , \tau _ { n } ^ { 2 } \right) + ( 1 - \pi ) U \left( x _ { n } | Z _ { \min } , Z _ { \max } \right) \tag{1}
其中ZZ是真实深度,π\pi是为内点的概率,τn2\tau_n^2是好的测量的方差,与两个相机的相对位置有关。

我们需要置信度来决定深度是否收敛,或者失败。最大后验不具有这个功能,EM算法容易陷入局部最优。使用贝叶斯推断,最大化后验分布。二阶矩来作为估计的置信度。
(2)p(Z,πx1xN)p(Z,π)np(xnZ,π) p ( Z , \pi | x _ { 1 } \ldots x _ { N } ) \propto p ( Z , \pi ) \prod _ { n } p \left( x _ { n } | Z , \pi \right) \tag{2}
求解这个问题,需要建立稠密的二维直方图如下图所示,会大大提升计算量。
SVO之逆深度滤波

参数近似后验

使用单模态参数后验,近似为深度高斯分布乘内点率Beta分布,有:
(3)q(Z,πan,bn,μn,σn2):=Beta(πan,bn)N(Zμn,σn2) q ( Z , \pi | a _ { n } , b _ { n } , \mu _ { n } , \sigma^2 _ { n } ) : = \operatorname { Beta } ( \pi | a _ { n } , b _ { n } ) N ( Z | \mu _ { n } , \sigma _ { n } ^ { 2 } ) \tag{3}
其中an,bna_n, b_n分别表示在种子点生命周期内的内点,外点测量值出现的次数。μn,σn2\mu_n, \sigma_n^2分别代表深度的均值和方差。若n-1是正确的后验,则递推的有新后验(Beta分布乘以二项分布还是Beta分布):
(4)C×p(xnZ,π)q(Z,πan1,bn1,μn1,σn12) C \times p \left( x _ { n } | Z , \pi \right) q ( Z , \pi | a _ { n - 1 } , b _ { n - 1 } , \mu _ { n - 1 } , \sigma _ { n - 1 } ^ { 2 } )\tag{4}
参数化近似之后的计算结果也会收敛到相同的值,若收敛到错误值也可以通过外点率很低判断出来。
SVO之逆深度滤波
深度估计的成功与否,与patch选择的好坏有直接关系。

种子点使我们想要估计深度的一个像素,通过内点率来判断是否为外点,当没有搜索到局部最大值时,增加bnb_n的值作为惩罚。

文献1中由于帧间小运动,使用上一次估计均值附近的w个像素半径内进行搜索。
SVO之逆深度滤波

种子点的修剪

分为三种情况:

  • 收敛,从list中移除,生成3D点;
  • 未收敛,从list中删除;
  • 等待,需要时间去收敛。

分别对应三种判断机制:

  • 当前分布有99%概率内点率π<ηoutlier\pi<\eta_{outlier},则失败
  • 内点率大于ηinlier\eta_{inlier},并且深度方差σn<ϵ\sigma_n< \epsilon,则成功
  • 其它

参数近似推导

变分推断推导2

对于观测量X\bf X,隐变量Z\bf Z:
(5)lnp(X)=L(q)+KL(qp) \ln p ( \mathbf { X } ) = \mathcal { L } ( q ) + \mathrm { KL } ( q \| p ) \tag{5}
其中定义:
(6)L(q)=q(Z)ln{p(X,Z)q(Z)}dZ \mathcal { L } ( q ) = \int q ( \mathbf { Z } ) \ln \left\{ \frac { p ( \mathbf { X } , \mathbf { Z } ) } { q ( \mathbf { Z } ) } \right\} \mathrm { d } \mathbf { Z } \tag{6}

(7)KL(qp)=q(Z)ln{p(ZX)q(Z)}dZ \mathrm { KL } ( q \| p ) = - \int q ( \mathbf { Z } ) \ln \left\{ \frac { p ( \mathbf { Z } | \mathbf { X } ) } { q ( \mathbf { Z } ) } \right\} \mathrm { d } \mathbf { Z } \tag{7}

与EM算法的差别在于,这里不包含参数θ\theta,因为它是随机变量包含在了隐变量ZZ中了。

我们的目标是最大化下界函数(6),使它接近最大似然的效果,这等价于最小化KL差异。即可以选择合适的q(Z)q(Z)使得
KL差异消失,所以我们选择q(Z)=p(ZX)q({\bf Z})=p({\bf Z|X}),带入公式(7)可以发现ln()\ln()中结果是1,即KL=0。

合理的限制q(Z)q({\bf Z})族的方法是使用参数分布q(Zω)q({\bf Z}|\omega),下界函数(6)也变成了参数ω\omega的函数。

Z\bf Z分解成独立的连乘形式:
(8)q(Z)=i=1Mqi(Zi) q ( \mathbf { Z } ) = \prod _ { i = 1 } ^ { M } q _ { i } \left( \mathbf { Z } _ { i } \right) \tag{8}
把公式(8)带入公式(6)得到:
(9)L(q)=iqi{lnp(X,Z)ilnqi}dZ=qj{lnp(X,Z)ijqidZi}dZjqjlnqjdZj+ const =qjlnp~(X,Zj)dZjqjlnqjdZj+const \begin{aligned} \mathcal { L } ( q ) & = \int \prod _ { i } q _ { i } \left\{ \ln p ( \mathbf { X } , \mathbf { Z } ) - \sum _ { i } \ln q _ { i } \right\} \mathrm { d } \mathbf { Z } \\ & = \int q _ { j } \left\{ \int \ln p ( \mathbf { X } , \mathbf { Z } ) \prod _ { i \neq j } q _ { i } \mathrm { d } \mathbf { Z } _ { i } \right\} \mathrm { d } \mathbf { Z } _ { j } - \int q _ { j } \ln q _ { j } \mathrm { d } \mathbf { Z } _ { j } + \text { const } \\ & = \int q _ { j } \ln \widetilde { p } \left( \mathbf { X } , \mathbf { Z } _ { j } \right) \mathrm { d } \mathbf { Z } _ { j } - \int q _ { j } \ln q _ { j } \mathrm { d } \mathbf { Z } _ { j } + \mathrm { const } \end{aligned} \tag{9}
定义新的分布:
(10)lnp~(X,Zj)=Eij[lnp(X,Z)]+const \ln \widetilde { p } \left( \mathbf { X } , \mathbf { Z } _ { j } \right) = \mathbb { E } _ { i \neq j } [ \ln p ( \mathbf { X } , \mathbf { Z } ) ] + \rm const \tag{10}
其中:
(11)Eij[lnp(X,Z)]=lnp(X,Z)ijqidZi \mathbb { E } _ { i \neq j } [ \ln p ( \mathbf { X } , \mathbf { Z } ) ] = \int \ln p ( \mathbf { X } , \mathbf { Z } ) \prod _ { i \neq j } q _ { i } \mathrm { d } \mathbf { Z } _ { i }\tag{11}
优化公式(9)可以把他想成负的qj(Zj)q_j({\bf Z}_j)p~(X,Zj)\tilde p({\bf X},{\bf Z}_j) 的KL差别,因此最大公式(6)就是使其最小化,取qj(Zj)=p~(X,Zj)q _ { j } \left( \mathbf { Z } _ { j } \right) = \widetilde { p } \left( \mathbf { X } , \mathbf { Z } _ { j } \right),因此得到最优解:
(12)lnqj(Zj)=Eij[lnp(X,Z)]+const \ln q _ { j } ^ { \star } \left( \mathbf { Z } _ { j } \right) = \mathbb { E } _ { i \neq j } [ \ln p ( \mathbf { X } , \mathbf { Z } ) ] + \rm const \tag{12}
对其进行归一化:
(13)qj(Zj)=exp(Eij[lnp(X,Z)])exp(Eij[lnp(X,Z)])dZj q _ { j } ^ { \star } \left( \mathbf { Z } _ { j } \right) = \frac { \exp \left( \mathbb { E } _ { i \neq j } [ \ln p ( \mathbf { X } , \mathbf { Z } ) ] \right) } { \int \exp \left( \mathbb { E } _ { i \neq j } [ \ln p ( \mathbf { X } , \mathbf { Z } ) ] \right) \mathrm { d } \mathbf { Z } _ { j } } \tag{13}
以上是变分推断的一种方法。

后验参数近似

beta分布参考

对于公式(2)可以分为先验和似然两部分。

针对先验部分,假设深度ZZ和内点率π\pi独立有:
(14)p(Z,π)=p(Z)p(π) p ( Z , \pi ) = p ( Z ) p ( \pi ) \tag{14}
针对似然部分公式(1),引入二进制(0,1)的隐变量yny_n
(15)p(xnZ,π,yn)=N(xnZ,τn2)ynU(xn)1yn p \left( x _ { n } | Z , \pi , y _ { n } \right) = N \left( x _ { n } | Z , \tau _ { n } ^ { 2 } \right) ^ { y _ { n } } U \left( x _ { n } \right) ^ { 1 - y _ { n } } \tag{15}

(16)p(ynπ)=πyn(1π)1yn p \left( y _ { n } | \pi \right) = \pi ^ { y _ { n } } ( 1 - \pi ) ^ { 1 - y _ { n } } \tag{16}

根据公式(14)~(16)可以得到联合分布函数:
(17)p(XY,Z,π)=[n=1Np(xnZ,π,yn)p(ynπ)]p(Z)p(π) p ( \mathcal { X } \mathcal { Y } , Z , \pi ) = \left[ \prod _ { n = 1 } ^ { N } p \left( x _ { n } | Z , \pi , y _ { n } \right) p \left( y _ { n } | \pi \right) \right] p ( Z ) p ( \pi ) \tag{17}
其中将隐变量Y\mathcal Y边缘化掉,就是后验分布。

使用q(Y,Z,π)q({\mathcal Y},Z,\pi)来近似后验p(Y,Z,πX)p({\mathcal Y},Z,\pi|{\mathcal X}),使其满足
(18)q(Y,Z,π)=qY(Y)qZ,π(Z,π) q ( \mathcal { Y } , Z , \pi ) = q _ { \mathcal { Y } } ( \mathcal { Y } ) q _ { Z , \pi } ( Z , \pi ) \tag{18}
根据公式(12)可以得到,为什么可以?答:根据公式(5)可知,我们想要最大化(6)也就是最小化(7)。从公式(9)到(12)的推导中是最大化(6)的过程。即满足公式(12),就满足了公式(7)最小,也说明了q和p之间的差异最小,可以使用q(Y,Z,π)q({\mathcal Y},Z,\pi) 来近似p(Y,Z,πX)p({\mathcal Y},Z,\pi|{\mathcal X})
(19)lnqZ,π(Z,π)=EY[lnp(X,Y,Z,π)]+const \ln q _ { Z , \pi } ( Z , \pi ) = E _ { \mathcal { Y } } [ \ln p ( \mathcal { X } , \mathcal { Y } , Z , \pi ) ] + const\tag{19}

(20)lnqY(Y)=EZ,π[lnp(X,Y,Z,π)]+const \ln q _ { \mathcal { Y } } ({\mathcal Y} ) = E _ { Z , \pi } [ \ln p ( \mathcal { X } , \mathcal { Y } , Z , \pi ) ] + const \tag{20}

将公式(17)带入公式(19)得到
(21)lnqZ,π(Z,π)=n=1NEY[yn](lnN(xnZ,τn2)+lnπ)+n=1N(1EY[yn])(lnU(xn)+ln(1π))+lnp(Z)+lnp(π)+const. \begin{aligned} \ln q _ { Z , \pi } ( Z , \pi ) = & \sum _ { n = 1 } ^ { N } E _ { \mathcal { Y } } \left[ y _ { n } \right] \left( \ln N \left( x _ { n } | Z , \tau _ { n } ^ { 2 } \right) + \ln \pi \right) \\ & + \sum _ { n = 1 } ^ { N } \left( 1 - E _ { \mathcal { Y } } \left[ y _ { n } \right] \right) \left( \ln U \left( x _ { n } \right) + \ln ( 1 - \pi ) \right) \\ & + \ln p ( Z ) + \ln p ( \pi ) + \text {const.} \end{aligned} \tag{21}
这里为什么只考虑公式(19),因为公式(20)之后是要被边缘化掉的。对公式(21)取exp指数:
(22)qZ,π(Z,π)=[n=1NN(xnZ,τn2)rn]πS(1π)NSp(Z)p(π) q _ { Z , \pi } ( Z , \pi ) = \left[ \prod _ { n = 1 } ^ { N } N \left( x _ { n } | Z , \tau _ { n } ^ { 2 } \right) ^ { r _ { n } } \right] \pi ^ { S } ( 1 - \pi ) ^ { N - S } p ( Z ) p ( \pi ) \tag{22}
这里推导有些疑问,公式(21)中的均匀分布怎么没了?公式(22)中定义:
(23)rn=EY[yn]S=n=1Nrn r _ { n } = E _ { \mathcal { Y } } \left[ y _ { n } \right] \\ S = \sum _ { n = 1 } ^ { N } r _ { n } \tag{23}
如果选择共轭先验即ZZ符合高斯先验,π\pi符合均匀分布先验。因此我们可以认为公式(22)具有Gaussian×BetaGaussian \times Beta 的形式。Beta分布的形式为:
(24)Beta(πa,b)=Γ(a+b)Γ(a)Γ(b)πa1(1π)b1 \operatorname { Beta } ( \pi | a , b ) = \frac { \Gamma ( a + b ) } { \Gamma ( a ) \Gamma ( b ) } \pi ^ { a - 1 } ( 1 - \pi ) ^ { b - 1 } \tag{24}
因此有公式(3),根据公式(2)利用贝叶斯推断,使用一阶矩二阶矩进行匹配的方式进行更新:
(25)p(xZ,π)q(Z,πa,b,μ,σ2) p ( x | Z , \pi ) q ( Z , \pi | a , b , \mu , \sigma ^ { 2 } ) \tag{25}
将公式(1)和公式(3)代入公式(25),就有:
(26)(πN(xZ,τ2)+(1π)U(x))N(Zμ,σ2)Beta(πa,b) \left( \pi N ( x | Z , \tau ^ { 2 } ) + ( 1 - \pi ) U ( x ) \right) N ( Z | \mu , \sigma ^ { 2 } ) \text {Beta} ( \pi | a , b ) \tag{26}
根据BetaBeta分布的性质,以及对高斯分布进行配方得到(推导可以参考3,参考笔记数学知识)
(27)aa+bN(xμ,σ2+τ2)N(Zm,s2)Beta(πa+1,b)+ba+bU(x)N(Zμ,σ2)Betaa(πa,b+1) \begin{array} { l } { \frac { a } { a + b } N ( x | \mu , \sigma ^ { 2 } + \tau ^ { 2 } ) N ( Z | m , s ^ { 2 } ) \operatorname { Beta } ( \pi | a + 1 , b ) } \\ { + \frac { b } { a + b } U ( x ) N ( Z | \mu , \sigma ^ { 2 } ) \operatorname { Beta } a ( \pi | a , b + 1 ) } \end{array} \tag{27}
在我推导过程中注意到公式(27)成立要有个条件即(μx)2=0(\mu-x)^2=0才成立

其中定义:
(28)1s2=1σ2+1τ2m=s2(μσ2+xτ2) \frac { 1 } { s ^ { 2 } } = \frac { 1 } { \sigma ^ { 2 } } + \frac { 1 } { \tau ^ { 2 } } \\ m = s ^ { 2 } \left( \frac { \mu } { \sigma ^ { 2 } } + \frac { x } { \tau ^ { 2 } } \right) \tag{28}
我们设符号:
(29)C1=aa+bN(xμ,σ2+τ2)C2=ba+bU(x)C=C1+C2 C _ { 1 } = \frac { a } { a + b } N ( x | \mu , \sigma ^ { 2 } + \tau ^ { 2 } ) \\ C _ { 2 } = \frac { b } { a + b } U ( x ) \\ C=C_1+C_2 \tag{29}
对公式(27)求一阶矩二阶矩(见数学知识笔记):

ZZ的一阶矩和二阶矩分别为:
(30)1C{C1m+C2μ}1C{C1(m2+s2)+C2(μ2+σ2)} \frac { 1 } { C } \left\{ C _ { 1 } m + C _ { 2 } \mu \right\} \\ \frac { 1 } { C } \left\{ C _ { 1 } \left( m ^ { 2 } + s ^ { 2 } \right) + C _ { 2 } \left( \mu ^ { 2 } + \sigma ^ { 2 } \right) \right\} \tag{30}
π\pi求一阶矩和二阶矩分别为:
(31)1C{C1a+1a+b+1+C2aa+b+1}1C{C1(a+1)(a+2)(a+b+1)(a+b+2)+C2a(a+1)(a+b+1)(a+b+2)} \frac { 1 } { C } \left\{ C _ { 1 } \frac { a + 1 } { a + b + 1 } + C _ { 2 } \frac { a } { a + b + 1 } \right\} \\ \frac { 1 } { C } \left\{ C _ { 1 } \frac { ( a + 1 ) ( a + 2 ) } { ( a + b + 1 ) ( a + b + 2 ) } + C _ { 2 } \frac { a ( a + 1 ) } { ( a + b + 1 ) ( a + b + 2 ) } \right\} \tag{31}
设新的后验分布为:
(32)q(Z,πa,b,μ,σ2) q ( Z , \pi | a ^ { \prime } , b ^ { \prime } , \mu ^ { \prime } , \sigma ^ { \prime 2 } ) \tag{32}
对公式(32)求一阶矩和二阶矩为:

ZZ的一阶矩和二阶矩分别为:
(33)μμ2+σ2 \mu' \\ {\mu'}^2+{\sigma'}^2 \tag{33}
π\pi求一阶矩和二阶矩分别为:
(34)aa+ba(a+1)(a+b)(a+b+1) \frac { a ^ { \prime } } { a ^ { \prime } + b ^ { \prime } } \\ \frac { a ^ { \prime } \left( a ^ { \prime } + 1 \right) } { \left( a ^ { \prime } + b ^ { \prime } \right) \left( a ^ { \prime } + b ^ { \prime } + 1 \right) } \tag{34}
令公式(30)和公式(33),公式(31)和公式(34)分别相等就得到了参数的更新公式:
(35)μ=C1m+C2μμ2+σ2=C1(m2+s2)+C2(μ2+σ2)f=anan+bn=C1a+1a+b+1+C2aa+b+1e=an(an+1)(an+bn)(an+bn+1)=C1(a+1)(a+2)(a+b+1)(a+b+2)+C2a(a+b+2)(a+b+1)(a+b+2) \begin{aligned} \mu ^ { \prime } & = C _ { 1 } ^ { \prime } m + C _ { 2 } ^ { \prime } \mu \\ \mu ^ { \prime 2 } + \sigma ^ { \prime 2 } & = C _ { 1 } ^ { \prime } \left( m ^ { 2 } + s ^ { 2 } \right) + C _ { 2 } ^ { \prime } \left( \mu ^ { 2 } + \sigma ^ { 2 } \right) \\ f=\frac { a _ { n } ^ { \prime } } { a _ { n } ^ { \prime } + b _ { n } ^ { \prime } } & = C _ { 1 } ^ { \prime } \frac { a + 1 } { a + b + 1 } + C _ { 2 } ^ { \prime } \frac { a } { a + b + 1 }\\ e= \frac { a _ { n } ^ { \prime } \left( a _ { n } ^ { \prime } + 1 \right) } { \left( a _ { n } ^ { \prime } + b _ { n } ^ { \prime } \right) \left( a _ { n } ^ { \prime } + b _ { n } ^ { \prime } + 1 \right) } & = C _ { 1 } ^ { \prime } \frac { ( a + 1 ) ( a + 2 ) } { ( a + b + 1 ) ( a + b + 2 ) } + C _ { 2 } ^ { \prime } \frac { a ( a + b + 2 ) } { ( a + b + 1 ) ( a + b + 2 ) } \end{aligned} \tag{35}
其中:
(36)C1=C1CC2=C2C \begin{array} { l } { C _ { 1 } ^ { \prime } = \frac { C _ { 1 } } { C } } \\ { C _ { 2 } ^ { \prime } = \frac { C _ { 2 } } { C } } \end{array} \tag{36}


Details4

测量更新

一个像素被初始化,然后被每个视图更新。设置初始参数如下:

a0=10, b0=10a_0=10, \ b_0=10

μ0=0.5(dmin+dmax), σ=σmax\mu_0=0.5(d_{min}+d_{max}), \ \sigma=\sigma_{max}

note: 这里σmax\sigma_{max}表示99%的概率位于[dmin,dmax][d_{min},d_{max}]之间

使用逆深度表示,使用当前估计的方差限制极线搜索(怎么理解???)

不确定性测量

距离近的帧不容易发生遮挡,距离远的帧基线长有助于三角化但是容易有遮挡。

SVO之逆深度滤波

根据上图的关系,有:
(37)a=rpt \mathbf { a } = _ { r } \mathbf { p } - \mathbf { t } \tag{37}

(38)α=arccos(ftt) \alpha = \arccos \left( \frac { \mathbf { f } \cdot \mathbf { t } } { \| \mathbf { t } \| } \right) \tag{38}

(39)β=arccos(atat) \beta = \arccos \left( - \frac { \mathbf { a } \cdot \mathbf { t } } { \| \mathbf { a } \| \cdot \| \mathbf { t } \| } \right) \tag{39}

其中f=rprp{\bf f}=\frac{_r{\bf p}}{\|_r{\bf p}\|},根据公式(37)到(39)可以得到图中的参数。令ff是相机的焦距,角度旋转一个像素加到β\beta上,有如下计算:
(40)β+=β+2tan1(12f) \beta ^ { + } = \beta + 2 \tan ^ { - 1 } \left( \frac { 1 } { 2 f } \right) \tag{40}

(41)γ=παβ+ \gamma = \pi - \alpha - \beta ^ { + } \tag{41}

(42)rp+=tsinβ+sinγ \left\| _ { r } \mathbf { p } ^ { + } \right\| = \| \mathbf { t } \| \frac { \sin \beta ^ { + } } { \sin \gamma } \tag{42}

对于公式(40)因为焦距ff是垂直于图像平面的,因此有这个公式,近似认为是等边三角形。

因此我们可以计算出不确定度:
(43)τk2=(rp+rp)2 \tau _ { k } ^ { 2 } = \left( \left\| _ { r } \mathbf { p } ^ { + } \right\| - \left\| _ { r } \mathbf { p } \right\| \right) ^ { 2 } \tag{43}
其中公式(40)求增角时,使用一种近似,焦距与图像平面垂直,认为足够小当做了中位线。


Reference


  1. Video-based, Real-Time Multi View Stereo ↩︎

  2. Pattern Recognition and Machine Learning ↩︎

  3. https://blog.****.net/u013004597/article/details/52069741 ↩︎

  4. REMODE: Probabilistic, Monocular Dense Reconstruction in Real Time ↩︎