论文阅读 - Event-based Stereo Visual Odometry

本文由我在 计算机视觉工坊 首发,在我的个人博客转载。

“Event-based Stereo Visual Odometry” 是港科大沈劭劼老师组的一篇新工作。其基于双目的 Event Camera 来实现 Visual Odometry。

Event-based Stereo Visual Odometry 论文阅读

Zhou, Yi, Guillermo Gallego, and Shaojie Shen. “Event-based Stereo Visual Odometry.” arXiv preprint arXiv:2007.15548 (2020).

“Event-based Stereo Visual Odometry” 是港科大沈劭劼老师组的一篇新工作。其基于双目的 Event Camera 来实现 Visual Odometry。

Overview

文章主要贡献:

  • 一个基于双目 Event Camera 的 Visual Odometry,
  • 提出一种新的基于优化的方法来实现逆深度的估计。
  • 基于估计出的逆深度的概率分布,提出一种 fusion 的方式,来提升三维重建的密度和精度。
  • 通过 3D-2D 进行 registration 来进行 tracking。

系统概述:

image-20200918115436324

系统流程:

image-20200918115007025

下面从几个主要模块来进行梳理。

Event Representation

使用 Time-surface map (TS) 来表征 Events,从而将时间信息加入了考虑。示意图如下:

image-20200920204822776

即选一个时间点,离当前时刻越近,越亮。计算公式如下:

T(x,t)exp(ttlast(x)δ)\mathcal{T}(\mathbf{x}, t) \doteq \exp \left(-\frac{t-t_{\mathrm{last}}(\mathbf{x})}{\delta}\right)

可知,其区间为(0,1](0,1],然后将其归一化到[0,255][0,255]区间。

一个 TS 图示例如下:

image-20200920205742668

Mapping: Stereo Depth Estimation

Mapping 部分的描述,首先描述了如何对 Event 进行逆深度估计,然后描述了如何进行完整的 semi-dense 的建图。

按照一定的时间频率合成 TS 图,计算每一个 TS 的时间内每一个 event 的逆深度(local depth map),然后选取一个窗口进行合成 semi-dense 的地图。其中,作者提到在实现时,TS 图的合成频率为 100Hz,窗口大小为20。

Inverse Depth Estimation for an Event

首先,如何对一个 Event 进行深度估计的几何示意图:

image-20200920210701335

构造一个 objective function(基于一个event在两个相机中触发时的时间一致性):

ρ=argminρC(x,ρ,Tleft(,t),Tright(,t),Ttδt:t)\rho^{\star}=\underset{\rho}{\arg \min } C\left(\mathbf{x}, \rho, \mathcal{T}_{\mathrm{left}}(\cdot, t), \mathcal{T}_{\mathrm{right}}(\cdot, t), \mathbf{T}_{t-\delta t: t}\right)

其中,ρ1/Z\rho^{\star} \doteq 1 / Z^{\star} 是左目相机的一个 event: etϵ(x,tϵ,p)e_{t-\epsilon} \equiv(\mathbf{x}, t-\epsilon, p) (with ϵ[0,δt]\epsilon \in[0, \delta t]) 的逆深度;CC为:

C()x1,iW1,x2,iW2τleft t(x1,i)τright t(x2,i)22C(\cdots) \doteq \sum_{\mathbf{x}_{1, i} \in W_{1}, \mathbf{x}_{2, i} \in W_{2}}\left\|\tau_{\text {left }}^{t}\left(\mathbf{x}_{1, i}\right)-\tau_{\text {right }}^{t}\left(\mathbf{x}_{2, i}\right)\right\|_{2}^{2}

其中,

x1=π(ctTctϵπ1(x,ρk))x2=π((rightTleftctTctϵπ1(x,ρk))\begin{array}{l} \mathbf{x}_{1}=\pi\left({ }^{c_{t}} \mathbf{T}_{c_{t-\epsilon}} \cdot \pi^{-1}\left(\mathbf{x}, \rho_{k}\right)\right) \\ \mathbf{x}_{2}=\pi\left({ }^{(\mathrm{right}} \mathbf{T}_{\mathrm{left}} \cdot c_{t} \mathbf{T}_{c_{t-\epsilon}} \cdot \pi^{-1}\left(\mathbf{x}, \rho_{k}\right)\right) \end{array}

然后对其优化即可。这个优化过程论文中还提到了很多细节,如如何给一个初始化的逆深度等,具体请见论文。也就是说,进行逆深度估计的算法流程为:

image-20200920214716590

Semi-Dense Reconstruction

作者首先拟合出前面步骤估计出的逆深度的概率分布,然后推导出一种两个概率分布 fusion 后进行更新的方式,最后提出 fusion 的策略。

首先,根据上文通过优化方式计算出逆深度的过程,以及根据实验数据,拟合出逆深度服从 Student’s t-distribution。一些详细的数学解释请见原论文。

在一些数据集中,拟合出的参数:

image-20200921162857994

有了上述的概率分布,这个时候就可以在前面的逆深度估计的优化函数中再加入一些 tricks,以来增强其鲁棒性质,具体请见原论文与引用。

有了概率分布,就可以进行两个之间的 fusion 了。见论文公式12a-12d。

假设有一个先验 St(μa,sa,νa)S t\left(\mu_{a}, s_{a}, \nu_{a}\right),测量值St(μb,sb,νb)S t\left(\mu_{b}, s_{b}, \nu_{b}\right),则更新:

ν=min(νa,νb)μ=sa2μb+sb2μasa2+sb2s2=ν+(μaμb)2sa2+sb2ν+1sa2sb2sa2+sb2ν=ν+1\begin{aligned} \nu^{\prime} &=\min \left(\nu_{a}, \nu_{b}\right) \\ \mu &=\frac{s_{a}^{2} \mu_{b}+s_{b}^{2} \mu_{a}}{s_{a}^{2}+s_{b}^{2}} \\ s^{2} &=\frac{\nu^{\prime}+\frac{\left(\mu_{a}-\mu_{b}\right)^{2}}{s_{a}^{2}+s_{b}^{2}}}{\nu^{\prime}+1} \cdot \frac{s_{a}^{2} s_{b}^{2}}{s_{a}^{2}+s_{b}^{2}} \\ \nu &=\nu^{\prime}+1 \end{aligned}

有了以上的基础,为了得到更为稠密的地图,将多个已估计出逆深度的 TS 进行 fusion 的操作。Fusion 的策略如下图所示:

image-20200920214443295

检查是否进行 replace/remain 的操作的判断方法如下:

μb2σbμaμb+2σb\mu_{b}-2 \cdot \sigma_{b} \leq \mu_{a} \leq \mu_{b}+2 \cdot \sigma_{b}

其中,

σb=sbνb/(νb2)\sigma_{b}=s_{b} \sqrt{\nu_{b} /\left(\nu_{b}-2\right)}

至此,建出一个semi-dense的map的步骤就结束了。

Camera Tracking

进行 Tracking 部分的主要思想是,首先每一个 event 对应的 camera 的 pose 都可能是不同的,但其实无需在这个时间分辨率上做,按照 TS 的频率来即可。然后通过将 TS 与 深度图进行 align 即可。

image-20200921175744623

那公式来表征:

θ=argminθxSrefF(τˉleftFk(W(x,ρ;θ)))2\boldsymbol{\theta}^{\star}=\underset{\boldsymbol{\theta}}{\arg \min } \sum_{\mathbf{x} \in \mathcal{S}^{\mathcal{F}}_{\mathrm{ref}}}\left(\bar{\tau}_{\mathrm{left}}^{\mathcal{F}_{k}}(W(\mathbf{x}, \rho ; \boldsymbol{\theta}))\right)^{2}

其中,θ\boldsymbol{\theta} 即为要估计出的位姿。

W(x,ρ;θ)πleft(T(πref1(x,ρ),G(θ)))W(\mathbf{x}, \rho ; \boldsymbol{\theta}) \doteq \pi_{\mathrm{left}}\left(T\left(\pi_{\mathrm{ref}}^{-1}(\mathbf{x}, \rho), G(\boldsymbol{\theta})\right)\right)

G(θ):R6SE(3)G(\boldsymbol{\theta}): \mathbb{R}^{6} \rightarrow \operatorname{SE}(3)

这也就是常见的图像 align 的操作。然后更进一步,将 θ\boldsymbol{\theta} 改为增量式的(具体见论文公式17-18):

F(Δθ)xSFref(τˉleftFk(W(W(x,ρ;Δθ);θ)))2F(\Delta \boldsymbol{\theta}) \doteq \sum_{\mathbf{x} \in \mathcal{S}^{\mathcal{F}_{\mathrm{ref}}}}\left(\bar{\tau}_{\mathrm{left}}^{\mathcal{F}_{k}}(W(W(\mathbf{x}, \rho ; \Delta \boldsymbol{\theta}) ; \boldsymbol{\theta}))\right)^{2}

W(x,ρ;θ)W(x,ρ;θ)W(x,ρ;Δθ)W(\mathbf{x}, \rho ; \boldsymbol{\theta}) \leftarrow W(\mathbf{x}, \rho ; \boldsymbol{\theta}) \circ W(\mathbf{x}, \rho ; \Delta \boldsymbol{\theta})

作者在实验过程中测试了这个 Objective function 的优化,效果可见还不错:

image-20200921180425251

Experimental

作者做了丰富大量的实验,以及算法中是否加一些 trick 的对比。这里截取一些:

image-20200921180926891

image-20200921181002282

image-20200921181023550

image-20200921181040708

image-20200921181116145

image-20200921181141100

image-20200921181149353

image-20200921181155453


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!联系作者。