概率深度模型
贝叶斯推断
深度的测量包括两种,一种是正确的测量,一种是由于遮挡、图像变换或重复纹理导致的错误的测量。如块匹配时,有可能包括误差很大的外点。
研究发现:
好的测量值通常是分布在正确深度值附近的。
错误的测量是在深度范围 [ Z m i n , Z m a x ] [Z_{min},Z_{max}] [Zmin,Zmax]之间的均匀分布。
因此,我们得到的结果通常是二者的混合。使用高斯+均匀分布混合模型来描述测量值的似然概率分布:
(1) p ( x n ∣ Z , π ) = π N ( x n ∣ Z , τ n 2 ) + ( 1 − π ) U ( x n ∣ Z min , Z max ) 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} p(xn∣Z,π)=πN(xn∣Z,τn2)+(1−π)U(xn∣Zmin,Zmax)(1)
其中 Z Z Z是真实深度, π \pi π是为内点的概率, τ n 2 \tau_n^2 τn2是好的测量的方差,与两个相机的相对位置有关。
我们需要置信度来决定深度是否收敛,或者失败。最大后验不具有这个功能,EM算法容易陷入局部最优。使用贝叶斯推断,最大化后验分布。二阶矩来作为估计的置信度。
(2) p ( Z , π ∣ x 1 … x N ) ∝ p ( Z , π ) ∏ n p ( x n ∣ Z , π ) p ( Z , \pi | x _ { 1 } \ldots x _ { N } ) \propto p ( Z , \pi ) \prod _ { n } p \left( x _ { n } | Z , \pi \right) \tag{2} p(Z,π∣x1…xN)∝p(Z,π)n∏p(xn∣Z,π)(2)
求解这个问题,需要建立稠密的二维直方图如下图所示,会大大提升计算量。
参数近似后验
使用单模态参数后验,近似为深度高斯分布乘内点率Beta分布,有:
(3) q ( Z , π ∣ a n , b n , μ n , σ n 2 ) : = Beta ( π ∣ a n , b n ) N ( Z ∣ μ n , σ n 2 ) 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} q(Z,π∣an,bn,μn,σn2):=Beta(π∣an,bn)N(Z∣μn,σn2)(3)
其中 a n , b n a_n, b_n an,bn分别表示在种子点生命周期内的内点,外点测量值出现的次数。 μ n , σ n 2 \mu_n, \sigma_n^2 μn,σn2分别代表深度的均值和方差。若n-1是正确的后验,则递推的有新后验(Beta分布乘以二项分布还是Beta分布):
(4) C × p ( x n ∣ Z , π ) q ( Z , π ∣ a n − 1 , b n − 1 , μ n − 1 , σ n − 1 2 ) 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} C×p(xn∣Z,π)q(Z,π∣an−1,bn−1,μn−1,σn−12)(4)
参数化近似之后的计算结果也会收敛到相同的值,若收敛到错误值也可以通过外点率很低判断出来。
深度估计的成功与否,与patch选择的好坏有直接关系。
种子点使我们想要估计深度的一个像素,通过内点率来判断是否为外点,当没有搜索到局部最大值时,增加 b n b_n bn的值作为惩罚。
文献1中由于帧间小运动,使用上一次估计均值附近的w个像素半径内进行搜索。
种子点的修剪
分为三种情况:
- 收敛,从list中移除,生成3D点;
- 未收敛,从list中删除;
- 等待,需要时间去收敛。
分别对应三种判断机制:
- 当前分布有99%概率内点率 π < η o u t l i e r \pi<\eta_{outlier} π<ηoutlier,则失败
- 内点率大于 η i n l i e r \eta_{inlier} ηinlier,并且深度方差 σ n < ϵ \sigma_n< \epsilon σn<ϵ,则成功
- 其它
参数近似推导
变分推断推导2
对于观测量 X \bf X X,隐变量 Z \bf Z Z:
(5) ln p ( X ) = L ( q ) + K L ( q ∥ p ) \ln p ( \mathbf { X } ) = \mathcal { L } ( q ) + \mathrm { KL } ( q \| p ) \tag{5} lnp(X)=L(q)+KL(q∥p)(5)
其中定义:
(6) L ( q ) = ∫ q ( Z ) ln { p ( X , Z ) q ( Z ) } d Z \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} L(q)=∫q(Z)ln{
q(Z)p(X,Z)}dZ(6)
(7) K L ( q ∥ p ) = − ∫ q ( Z ) ln { p ( Z ∣ X ) q ( Z ) } d Z \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} KL(q∥p)=−∫q(Z)ln{ q(Z)p(Z∣X)}dZ(7)
与EM算法的差别在于,这里不包含参数 θ \theta θ,因为它是随机变量包含在了隐变量 Z Z Z中了。
我们的目标是最大化下界函数(6),使它接近最大似然的效果,这等价于最小化KL差异。即可以选择合适的 q ( Z ) q(Z) q(Z)使得
KL差异消失,所以我们选择 q ( Z ) = p ( Z ∣ X ) q({\bf Z})=p({\bf Z|X}) q(Z)=p(Z∣X),带入公式(7)可以发现 ln ( ) \ln() ln()中结果是1,即KL=0。
合理的限制 q ( Z ) q({\bf Z}) q(Z)族的方法是使用参数分布 q ( Z ∣ ω ) q({\bf Z}|\omega) q(Z∣ω),下界函数(6)也变成了参数 ω \omega ω的函数。
把 Z \bf Z Z分解成独立的连乘形式:
(8) q ( Z ) = ∏ i = 1 M q i ( Z i ) q ( \mathbf { Z } ) = \prod _ { i = 1 } ^ { M } q _ { i } \left( \mathbf { Z } _ { i } \right) \tag{8} q(Z)=i=1∏Mqi(Zi)(8)
把公式(8)带入公式(6)得到:
(9) L ( q ) = ∫ ∏ i q i { ln p ( X , Z ) − ∑ i ln q i } d Z = ∫ q j { ∫ ln p ( X , Z ) ∏ i ≠ j q i d Z i } d Z j − ∫ q j ln q j d Z j + const = ∫ q j ln p ~ ( X , Z j ) d Z j − ∫ q j ln q j d Z j + c o n s t \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} L(q)=∫i∏qi{
lnp(X,Z)−i∑lnqi}dZ=∫qj⎩⎨⎧∫lnp(X,Z)i̸=j∏qi