论文阅读 - Low-Latency Visual Odometry using Event-based Feature Tracks

Low-Latency Visual Odometry using Event-based Feature Tracks 通过手工设计的 feature 和 feature tracking 的方法,将问题转化为传统 VO,但又不失 Event 带来的高速和异步的特性。

Low-Latency Visual Odometry using Event-based Feature Tracks

Kueng, B., Mueggler, E., Gallego, G., Scaramuzza, D.,
Low-Latency Visual Odometry using Event-based Feature Tracks,
IEEE/RSJ Int. Conf. Intelligent Robots and Systems (IROS), 2016, pp. 16-23. PDF. YouTube

本篇概要

通过手工设计的 feature 和 feature tracking 的方法,将问题转化为传统 VO,但又不失 Event 带来的高速和异步的特性。

实验设置

使用 DAVIS,跟踪 event-based feature 从而实现一个低延迟的 VO。

A lowlatency visual odometry algorithm for the DAVIS sensor using event-based feature tracks.

主要过程

首先在 DAVIS 的灰度帧中检测 feature,然后利用 event 流进行异步的跟踪。然后这些特征被输入到 VO 算法中,通过最小化投影误差计算场景的 local probabilistic 3D map 以及做 6-DoF 的位姿估计。位姿估计是 event-based 的,所以具有低延迟的特性。

对比已有工作

None of the previous event-based motion estimation methods is based on tracking complex, natural features in the event stream.

算法实现

  • 特征提取与跟踪部分

    算法整体流程:

    详细说明:

    • 通过灰度 Frames 进行特征提取。算法流程:
    1. 通过 Canny 边缘提取和 Harris 角点检测。
    2. 在最突出、分布均匀的角点周围,再其 edge 图上选取一个一定大小的 patch。Frame 的帧率并不需要固定,这些相当于是提供初始的特征;并且在特征点丢失的情况下再补充特征点。如 Fig.4 的 (a)->(b) 图示意。这个 patch 中的边缘点的集合称为 model point set
    • 通过 Events 数据进行 feature tracking:

      1. 将新产生的 Event 归到上一步划分的 patch 中。每组 Events patch 的里面的 Events 的数量和上一步检测到的边缘点的数量一致,每个 patch 集合中的 Events 称为 data point set。然后维护一个队列,先进先出。每次每个 patch 中的 Event 发生更新后,就单独对更新的 patch 重新运行一次 registration。

      2. registration 是通过将上述的 model point set 和 data point set 通过 ICP(3D 点推广到 2D 点)进行配准,从而找出匹配点。这一步相当于是让 Events 去适配目前的 feature。

        一个典型的 ICP 问题:

        argminR,t=(pi,mi)MatchesbiRpi+tmi2\arg \min _{\mathbf {R}, \mathbf {t}}=\sum_{\left (\mathbf {p}_{i}, \mathbf {m}_{i}\right) \in \text {Matches}} b_{i}\left\|\mathbf {Rp}_{i}+\mathbf {t}-\mathbf {m}_{i}\right\|^{2}

        这样来找出 Event 和 Edge 点的对应的匹配关系。

      3. 针对 Tracking 的一些改进

        1. 由于这些 Event 其实都是边缘特征触发的,所以相当于是有一个结构的约束的。所以看上面的那个求解 ICP 的公式,那个 bib_i 其实相当于加了一个约束,它的大小与 data point set 中后 1/4 的 Event 中落在当前 Event 周围 3*3 像素中的个数成正比。

        2. 为了更好的长期跟踪 feature,还通过基于 Event 累计触发量直方图的方式,通过调整 feature 的位置来增加长期跟踪的鲁棒性。因为时间长的话,偏移比较大的时候,Events 就无法很好的和目前的 feature 进行 ICP 了,这个时候就再去调整 feature 在图片上的二维坐标就 OK 了。比如针对这个特征,刚开始选择 M1 数量个 Events 根据触发数量合成直方图,然后用当前最近的 M2 个 Event 合成的直方图,然后定义一个 s=(ox,oy)\mathbf {s}=\left (o_{x}, o_{y}\right)^{\top} 表示一个范围在 ±3\pm 3 个像素的偏移。然后枚举所有 s\mathbf {s} 的值,找出使得下面值最小的 s\mathbf {s}

          d(H1,H2,s)=xmin(H1(x),H2(x+s))d\left (H_{1}, H_{2}, \mathbf {s}\right)=\sum_{\mathbf {x}} \min \left (H_{1}(\mathbf {x}), H_{2}(\mathbf {x}+\mathbf {s})\right)

          如果 s\mathbf {s} 大于一个阈值,就把他应用到 feature 中。M1 和 M2 是大于 N(也就是 data point set 的大小的),并且为了得到一个较好的初始值,M1 是可以大于 M2 的。下图是当 M2=5N 的时候的直方图情况:

  • VO 部分

    有了上面的特征点的部分,那么接下的 VO 部分其实就是传统的 VO 了:

    1. 通过深度滤波器(depth-filters),恢复出 3D 场景的结构。

    2. 通过最小化重投影误差求解出相机的位姿

      有个细节,这一步通过高斯牛顿法 (G-N) 优化、初值选用上一帧的 pose 就可以了,因为两帧 event 之间的运动是非常非常小的,使用 G-N 的优化速度很快,不需要使用 L-M 了。

      Tk=argminT12iwiuiπ(T,pi)2\mathbf {T}_{k}=\underset {\mathbf {T}}{\operatorname {argmin}} \frac {1}{2} \sum_{i} w_{i}\left\|\mathbf {u}_{i}-\pi\left (\mathbf {T}, \mathbf {p}_{i}\right)\right\|^{2}

      wiw_i 是鲁棒核函数:

      wi={(1x2b2)2xb0otherwisew_{i}=\left\{\begin {array}{ll} \left (1-\frac {x^{2}}{b^{2}}\right)^{2} & |x| \leq|b| \\ 0 & \text {otherwise} \end {array}\right.

      其中 x=uiπ(T,pi)x=\left\|\mathbf {u}_{i}-\pi\left (\mathbf {T}, \mathbf {p}_{i}\right)\right\|b=5b=5 pixels。

    和 SVO 中的做法是一样的。

    具体细节就不再详述了。

对比与实验

作者做了 Feature 跟踪性能的分析、VO 精度的对比分析、系统运行时间消耗的分析。详细的实验数据见原论文。

  • Feature 跟踪性能的分析:

    patch 大小为 19*19 时,

    • 在 checkerboard-like 的场景中跟踪 8 秒,跟踪错误的平均误差为 1.5pixels;在自然场景中跟踪 6 秒,跟踪错误的平均误差为 2.5pixels。

    • 一个特征被跟踪的生命周期,经过直方图 refine 之后:

  • VO 性能分析:

    细节:当前跟踪的 feature 数量维持在 120 个左右的时候比较合适;当小于 100 的时候效果较差。

    Event-based VO 与 Ground Truth、Frame-based VO (SVO) 三者的对比。可以看出,在精度上还是比传统 VO(SVO)稍差。

  • 运行时间分析:

    在 Core i7-4710MQ CPU @ 2.50GHz with 8GB RAM 配置的机器上、C++ 单线程实现的情况下,events 的处理速度平均为 160kevents/s。