Event representations

原始事件流是稀疏、异步的元组列表 ek=(xk,tk,pk)e_k = (\mathbf{x}_k, t_k, p_k)——几乎没有下游算法能够直接处理这种格式。在进行跟踪、建图或输入神经网络之前,大多数系统会先将一批事件转换为某种中间表示。表示方式的选择是基于事件视觉领域的核心设计决策之一,需要在时间保真度和与现有算法的兼容性之间做出权衡。

事件帧/直方图

在一个时间窗口内(或固定事件数量内)累积事件,形成一张二维图像:

H(x,y)=kpkδ(xk(x,y))H(x, y) = \sum_k p_k \cdot \delta(\mathbf{x}_k - (x, y))

这种方式简单,与任何基于图像的算法(特征检测、CNN、直接对齐)都兼容,是许多跟踪前端的基础。代价是:窗口内部的时间结构被丢弃,且”图像”的外观取决于运动速度和窗口长度。

时间面

在每个像素处存储最近一次事件发生的时间,通常再经过指数衰减处理:

T(x,t)=exp ⁣(ttlast(x)τ)\mathcal{T}(\mathbf{x}, t) = \exp\!\left(-\frac{t - t_{\text{last}}(\mathbf{x})}{\tau}\right)

这编码了活动的新近性——最近活跃的像素较亮,陈旧的像素则逐渐淡去——生成平滑、富含梯度的图,非常适合用于配准和数据关联。例如,ESVO的跟踪就是针对时间面进行对齐。衰减常数 τ\tau 是一个真正需要调节的参数:太短则时间面稀疏,太长则会把历史信息模糊在一起。

体素网格

将事件按空间和离散化时间分箱到一个三维张量中:

V(x,y,b)=k:tkbinbpkδ(xk(x,y))V(x, y, b) = \sum_{k:\, t_k \in \text{bin}_b} p_k \cdot \delta(\mathbf{x}_k - (x, y))

体素网格在保留粗粒度时间结构的同时,仍是一个标准二维/三维CNN可以处理的稠密张量——这是诸如DEVO等学习式事件流水线的默认输入——代价是内存开销和固定的分箱选择。

脉冲张量/事件点云

将事件本身视为 (x,y,t)(x, y, t) 空间中的点,由类PointNet的网络或原生处理异步脉冲的脉冲神经网络(SNN)来处理。这是最忠实的表示方式(完全没有聚合),但需要专用的架构,对SNN而言还需要神经形态硬件才能实现效率优势。

运动补偿事件图像

第五种表示方式值得特别提及,因为运动估计本身被纳入了表示之中。在累积之前,先按照候选运动(相机位姿轨迹、光流)将每个事件扭曲到一个共同的参考时刻:

Hw(x)=kpkδ ⁣(xW(xk,tk;θ))H_{\mathbf{w}}(\mathbf{x}) = \sum_k p_k \cdot \delta\!\left(\mathbf{x} - \mathbf{W}(\mathbf{x}_k, t_k;\, \boldsymbol{\theta})\right)

如果运动假设 θ\boldsymbol{\theta} 是正确的,由同一场景边缘产生的事件会落在同一像素上,图像就会清晰;如果假设错误,图像就会模糊。对比度最大化将这一点转化为一个目标函数——选择使 HwH_{\mathbf{w}} 的清晰度(例如方差)最大化的运动——这是该领域用于自运动和光流估计的基本的基于模型的工具之一。同样的思路也出现在ESVIO中作为基于IMU的运动补偿,将事件扭曲到参考时刻可以使场景边缘变得清晰,从而便于匹配。

表示方式的选择

表示方式时间保真度兼容性典型用途
事件帧低(窗口内被压缩)最高(任意图像算法)跟踪前端、CNN
时间面中等(仅保留新近性)配准、数据关联(ESVO)
体素网格中高(分箱)高(CNN)学习式VO(DEVO)
运动补偿图像高(利用逐事件时间信息)中(需要运动估计)对比度最大化、VIO前端
脉冲/点完整低(需专用架构)SNN、类PointNet模型

在构建这些表示时常见的陷阱包括:

对SLAM的意义

每一个基于事件的SLAM系统首先都要隐含地回答”我们该如何处理原始事件流?“这一问题,而答案会塑造后续的一切:事件帧使得类似帧式的跟踪流水线成为可能,时间面使得ESVO中的立体匹配和地图配准成为可能,运动补偿图像是对比度最大化跟踪和ESVIO前端的基础,而体素网格则使得复用基于深度学习的帧式VO架构(DPVO/DROID风格)应用于事件数据(如DEVO)成为可能。理解这些表示方式——以及它们各自丢弃了什么信息——是批判性阅读事件SLAM文献的最快途径。

相关条目