1

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

 2 years ago
source link: https://blog.kehan.xyz/2020/03/04/%E8%AE%BA%E6%96%87%E9%98%85%E8%AF%BB-Low-Latency-Visual-Odometry-using-Event-based-Feature-Tracks/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 问题:

        arg⁡min⁡R,t=∑(pi,mi)∈Matchesbi∥Rpi+t−mi∥2\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} argR,tmin​=(pi​,mi​)∈Matches∑​bi​∥Rpi​+t−mi​∥2

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

      3. 针对 Tracking 的一些改进

        1. 由于这些 Event 其实都是边缘特征触发的,所以相当于是有一个结构的约束的。所以看上面的那个求解 ICP 的公式,那个 bib_ibi​ 其实相当于加了一个约束,它的大小与 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}s=(ox​,oy​)⊤ 表示一个范围在 ±3\pm 3±3 个像素的偏移。然后枚举所有 s\mathbf {s}s 的值,找出使得下面值最小的 s\mathbf {s}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) d(H1​,H2​,s)=x∑​min(H1​(x),H2​(x+s))

          如果 s\mathbf {s}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=argmin⁡T12∑iwi∥ui−π(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} Tk​=Targmin​21​i∑​wi​∥ui​−π(T,pi​)∥2

      wiw_iwi​ 是鲁棒核函数:

      wi={(1−x2b2)2∣x∣≤∣b∣0otherwisew_{i}=\left\{\begin {array}{ll} \left (1-\frac {x^{2}}{b^{2}}\right)^{2} & |x| \leq|b| \\ 0 & \text {otherwise} \end {array}\right. wi​={(1−b2x2​)20​∣x∣≤∣b∣otherwise​

      其中 x=∥ui−π(T,pi)∥x=\left\|\mathbf {u}_{i}-\pi\left (\mathbf {T}, \mathbf {p}_{i}\right)\right\|x=∥ui​−π(T,pi​)∥,b=5b=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。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK