【事件相机整理】角点检测与跟踪总结

本文仅用于自己学习整理,不保证内容的完整性和准确性,仅供其他朋友参考。转载请注明出处

前言

角点检测与跟踪,是特征提取与跟踪(Feature tracking)下研究较多的内容。相对其他上层任务来说(物体分类、SLAM等),是一个较为底层的工作。但也有着较多的研究。在这里做一些总结,会不断进行补充。

1、角点检测与跟踪的分类

文献【1】将特征检测进行了一些归类。

第一类是利用事件流数据,寻找某种模板,实现检测与跟踪,例如寻找在颗粒检测时(particle detection)多采用聚集的事件,我认为这是一些比较简单的形状可以这么搞,也没见太多。主要见到的还是在一些名为颗粒检测的论文中看到,即不考虑形状啥的,只要有一团,就是要找的特征。文献【2】【3】是两个particle tracking的研究。

第二类是参考了Frame-based的特征的特性,进行的检测与跟踪。具体来说,基于事件的角点检测考虑了一个角点的在frame下的形状等属性。这里分类可以再细分为以下两种:

  1. 结合Frame图像的方法,例如从frame中进行提取特征后,利用Event去跟踪;
  2. 不结合Frame,只使用Event的方法。

根据我目前看论文的情况,就“角点检测”这个任务来说,只使用Event数据进行检测与跟踪的方法居多,基本上不需要参考Frame的数据。

其实还可以找到第三类,结合学习的方法进行角点检测与跟踪。这里提到的"学习",又可以进行细分:

  1. 基于统计的机器学习方法,例如【1】就是利用大量的角点数据生成随机森林的方式,从而判断某个事件是否为角点;
  2. 基于卷积神经网络的方法,即采用卷积的方法判断是否为角点。这又可以进一步细分为,是否需要事件积累,或者称为“同步”还是“异步”。所谓积累或同步,是指积累一定时间段或一定数量的事件后,形成事件积累图,然后利用卷积方法找角点;而异步的方法,是重新设计了卷积的形式,将卷积应用在离散的时间序列上,实现卷积【4】。
  3. 基于脉冲神经网络的方法,Spiking Neural Network。但提到这种方法对于密集的事件可能效果不好。

抛开这种分类方法,还有其它的分类依据,例如:同步还是异步?许多文章会强调 Asynchronous,即表示他们的方法是异步的。异步一般是可逐事件处理的(Event-by-event),而对立的方法则需要进行accumulate (Group of events)。可以发现,这些分类依据是交叉的,并不能说只要利用了Frame数据就一定是同步或者异步,毕竟连CNN都能搞成异步的。


2、Time surface / SAE

“时间表面”(我自己瞎翻译的, Time Surface)【5】,或叫做“激活事件表面”(也是我自己瞎翻译的,Surface of Active Events),缩写为SAE,是一种事件数据流的表示方式,在角点检测中使用尤为频繁。简单来说,每个像素上发生的最新的一个事件的时间戳,构成的表面,就是SAE。直观上看就是下图:
【事件相机整理】角点检测与跟踪总结_第1张图片 【事件相机整理】角点检测与跟踪总结_第2张图片【事件相机整理】角点检测与跟踪总结_第3张图片
这三个图表达了一个意思,沿某一方向运动时,边缘造成最新的SAE对应的值更大,而发生事件更早的地方值更小。图1是在Image上画出来的拖尾的感觉,图2展示出SAE具有“阶梯状”(一写论文会采用Step描述SAE特性)。
若写成数学表达式,则为一个映射:
S : ( x , y ) ∈ R 2 → t ∈ R S: (x, y) \in R^2 \to t \in R S:(x,y)R2tR 即SAE对应的映射S,将一个像素的二维坐标映射到一个一维的时间戳。这就是最基本的SAE。

2.1 Normalized SAE

时间归一化SAE【6】(没有专有名词,论文中采用 "Time-window normalization"这一描述),指的是在一个时间窗内的时间戳,全部映射到[0, 1]之间。使用这种方式可以方便的计算一些距离,例如论文中的Descriptor Distance使用了归一化时间的SAE进行计算。

2.2 Speed Invariant Time Surface

在文章【1】中提出,缩写为SITS。当一个边缘运动速度不同时,传统的SAE会有很大的差距,速度越快,SAE表面的坡度越小,速度越慢,则越抖。为此文章提出的Speed Invariant的方法可以避免速度的影响。
基本思路是,当一个事件发生时,找空间大小为 ( 2 r + 1 ) × ( 2 r + 1 ) (2r+1)\times(2r+1) (2r+1)×(2r+1)的窗口,之中如果有其他事件且时间戳比当前的大,则那个事件对应的改进时间戳(不是严格意义的时间)进行-1操作,并将这个事件的改进时间戳设置为最大值 ( 2 r + 1 ) 2 (2r+1)^2 (2r+1)2,由此一来,SAE的改进时间戳以1递减,从而保证了SAE的梯度是恒定的,改进时间戳与实际时间戳无关,也就是与速度无关。
【事件相机整理】角点检测与跟踪总结_第4张图片改进前后的样子如图,第一列是传统SAE,第二列是2.1节提到的归一化,可以发现类似于进行了均衡化;第三列是Speed Invariant的方法,保证了相邻时间戳像素的SAE以1递减,更加均匀。

2.3 Filtered SAE

论文【7】提出了Filtered SAE与对应的Arc*角点检测方法。Filtered SAE基本思想是,我不用最新的时间戳,而是用滤波之后的。这里用FSAE进行缩写,文章中用 S ∗ S^* S表示新的SAE,传统的SAE用 S S S表示。
改进方法的直观解释如图,不是采用最新的时间戳,而是采用最新时间戳对应的一段时间之内的最早的时间戳作为当前SAE的值,从图上看就是时间戳的下界。
【事件相机整理】角点检测与跟踪总结_第5张图片改进方法的数学形式是:
S ∗ : ( x , y ) ∈ R 2 → ( t r , t l ) ∈ R 2 S^*: (x, y) \in R^2 \to (t_r, t_l)\in R^2 S:(x,y)R2(tr,tl)R2 将原有的映射 S S S从二维像素映射为一维的时间,改进为映射为二维时间, t r t_r tr表示reference, t l t_l tl表示 latest。每个事件到来时更新latest,然后找一段儿时间之内的(论文取值为50ms)的同极性的最早时间戳作为ref。

这种表示方式的好处:滤掉了一个边缘产生的大量数据,保证了时间戳的稳定即SAE的平滑,降低了数据量。

2.4 Local SAE 与 Global SAE

【8】提出采用Global SAE方法代替上面的Local SAE,说是这种表示更加简洁。具体使用使会取出一个local的SAE。没太搞懂为什么Global SAE会更方便,或许和数据结构有关。先放到这里。

3. 几种典型角点检测与跟踪方法

3.1 第一个角点检测方法

【9】这篇文章是论文中公认的第一个角点检测的研究。看发表在了Neural networks上就可以推测其概念上的影响比实用性要强一些(开个玩笑,但个人感觉更实用的方法更多的发表在和视觉或机器人相关的期刊会议,而不是偏生物的这些)。

本文的基本思想是,角点是由两条直线相交的,所以在时空窗口内回归平面,即时间窗口中的直线,从而相交找角点。由于回归方法可以增量进行,所以是一个异步的方法。这篇文章虽然实用性不高(平面回归耗时较多),但毕竟算是第一篇嘛,还是异步的方法,所以地位还是有的。

3.2 Harris角点检测 eHarris

【10】是Event-based Harris角点检测方法,其角点的定义形式,以及求解方法,都是直接来自Harris方法,利用eigen求解两个特征向量,判断是否都足够大从而判断是否是Harris角点。
【事件相机整理】角点检测与跟踪总结_第6张图片该方法有被后人实现,用作对比。参考FAST角点检测的开源代码:https://github.com/uzh-rpg/rpg_corner_events

3.3 FAST角点检测 eFAST

【11】提出了基于事件的FAST角点检测方法,与传统FAST方法判断周围一圈灰度值是否连续大于小于的方法类似,eFAST采用SAE方法,比较一圈上SAE的值是否连续大于/小于中心值,从而判断是否为FAST角点。
【事件相机整理】角点检测与跟踪总结_第7张图片为保证鲁棒性,选取两个圆圈,半径3与半径4。对于半径3圆圈,若有连续3-6个像素小于或大于中心的SAE,且半径4的圆圈有连续4-8个,那么则认为是一个FAST角点。

有代码实现:https://github.com/uzh-rpg/rpg_corner_events

3.4 Arc* 方法(检测+跟踪)

【7】中的方法,包括了角点检测与跟踪。

角点检测
角点检测方法与eFAST类似,但更加细节。首先所采用的SAE是Filtered SAE(2.3介绍的),然后从半径3的圆圈上,寻找最新的时间戳,之后沿顺时针和逆时针方向搞两个指针Ecw和Eccw,分头遍历,当Ecw的时间戳比Eccw小时,Ecw移动到下一个位置;反之移动Eccw直到比Ecw的小。来回交替,直到两个碰面。由此统计各自走过的长度,在3-6之间(半径4的在4-8之间),则认为是角点。
【事件相机整理】角点检测与跟踪总结_第8张图片个人认为这种搜索方法比eFAST相比,是不是更鲁棒一些啊。不会因为一两个突变的导致不连续大于或小于。

跟踪
跟踪采用一种树的方式。寻找最新角点附近有无之前的事件,如果有则作为子节点附属到距离最近的事件(父节点)上,如果没有其他事件则自己作为树的根节点,开始生长。同时有一个时间阈值,如果空间窗内的事件早于时间阈值,也认为是新的角点。
【事件相机整理】角点检测与跟踪总结_第9张图片理论上来说,如果角点检测稳定,则必然是1像素相邻的,但论文保险起见空间窗选取了5pixel。这种跟踪方式个人感觉也很有趣。

3.5 ACE方法 (检测+跟踪)

【6】采用这种方法,与Arc的作者是同一个人,虽然都是18年论文且跟踪方法相似,但我感觉Arc方法更美妙一些,可能是ACE的改进版。这种方法的检测采用Normalized SAE(2.1节),然后比较局部SAE的描述子距离,从而判断边缘与角点。感觉不好玩就不深入学习了。

3.6 eFAST* 与 eHarris* 角点检测

这两种检测方法是【7】论文的Arc方法用作比较的,将Filtered SAE改进eHarris和eFAST方法,表现出Filter SAE的有效性且Arc方法的有效性。

3.7 FA-Harris 角点检测

【8】提出的角点检测方法。名曰具有3个单元:Global SAE管理单元,角点筛选单元,以及角点细化单元。但更像是之前方法的大杂烩。

【事件相机整理】角点检测与跟踪总结_第10张图片首先维护一个全局SAE(2.4节),之后利用Arc*方法【7】筛选可能的角点,再利用类似于eHarris的方法对角点中心位置进行细化。之所以这么搞,兼顾了FAST的快速优势,以及Harris的精度优势,将FAST做初步提取之后Harris细化。性能上也有不小的提升。或许好用,但感觉没有新意。

3.8 其他跟踪方法

还有许多特征跟踪方法,这些方法不局限于角点的跟踪,采用的方法也多种多样,例如“多假设特征跟踪”【12】,“模板跟踪”【13】,“概率数据关联法”【14】,这些方法打算放到“特征跟踪”专题中进行整理总结。对了,这些名字也是我自己翻译概括的,毕竟我目前还没见到过中文论文提到这些方法。


4、心得体会

集中精力学习了多篇角点检测与跟踪的论文,对大体内容有了了解,最新的论文的思路没有跳出旧有的设计方案,可见现阶段的研究开始出现了重复的感觉。

有些地方自己没有深入研究,先放到这里作为提醒:
1. 没有考虑性能上的问题。没有关注以上方法的性能,精度与时间等;
2. 没有研究代码实现。论文中比较速度时,代码写的方式不同效率能差好多,毕竟数据量这么大,如何更新、如何检索,这如果自己实现代码需要进一步研究。

根据现有的论文,我大胆推测一下一步的研究方向,我个人感觉还有些地方可以去做
1. 现阶段缺少有效的评价指标。由于Event-based的方法跟踪和检测频率远高于Frame-based方法,所以不能直接用Frame-based直接作为GT,评价精度;
2. 缺少统一的测试数据集。虽然大多采用shapes_xxx.bag这个数据集,但没有benchmark,也没有带有GT的数据集,如果有的话方便比较许多;
3. 缺少完整的性能比较。各种方法也是各说各话,如果有一篇研究完整的对比分析了这些方法,那会客观很多,主要还是许多代码没有开源,自己实现没有可比性。


Reference

【1】Jacques Manderscheid, et al. Speed Invariant Time Surface for Learning to Detect Corner Points with Event-Based Cameras. CVPR(2019)
【2】Drazen, D., et al. Toward real-time particle tracking using an event-based dynamic vision sensor. Experiments in Fluids(2011)
【3】Borer, D.J…Large-scale 3D Particle Tracking with Dynamic Vision Sensors
【4】Cedric Scheerlinck. Asynchronous Spatial Image Convolutions for Event Cameras. RAL(2019)
【5】R. Benosman, C. Clercq, et al. Asynchronous Frameless Event-Based Optical Flow. Neural Networks(2012)
【6】Ignacio Alzugaray. ACE: An Efficient Asynchronous Corner Tracker for Event Cameras. 3DV(2018)
【7】Ignacio Alzugaray. Asynchronous Corner Detection and Tracking for Event Cameras in Real Time. RAL(2018)
【8】Ruoxiang Li, et al. FA-Harris: A Fast and Asynchronous Corner Detector for Event Cameras. IROS(2019)
【9】Xavier Clady, et at. Asynchronous event-based corner detection and matching. Neural networks(2015)
【10】Valentina Vasco, et al. Fast event-based Harris corner detection exploiting the advantages of event-driven cameras. IROS(2016)
【11】Mueggler, E. Fast Event-based Corner Detection. BMVC(2017)
【12】Ignacio Alzugaray. Asynchronous Multi-Hypothesis Tracking of Features with Event Cameras. 3DV(2019)
【13】Beat Kueng, et al. Low-Latency Visual Odometry using Event-based Feature Tracks. IROS(2016)
【14】Alex Zihao Zhu. Event-based feature tracking with probabilistic data association. ICRA(2017)

你可能感兴趣的:(事件相机理论学习)