一、先理解 ETAP 要解决的问题
ETAP 对应的是 ETAP: Event-based Tracking of Any Point,即"基于事件的任意点跟踪",发表于 CVPR 2025,并获 Highlight.
普通的 KLT 光流跟踪,主要依靠图像局部窗口在相邻帧之间的外观相似性;但事件相机没有天然的连续灰度图像,而且同一条物体边缘在不同运动方向下会产生不同的事件分布。

事件相机输入: 稀疏、异步的亮度变化事件。

ETAP 输出: 指定点在不同时间的二维位置及跟踪状态。
举个例子:相机观察一条黑白边缘,向右运动时,边缘两侧会产生一组事件;相机反向运动时,事件的空间分布和极性可能发生变化。
因此,ETAP 不只是寻找"下一时刻与当前局部图案最相似的位置",而是利用事件的时空表示和全局上下文学习点的运动关联。
二、ETAP 的整体算法流程

下面逐步拆解其中最重要的数学关系。
三、第一步:如何把事件流转换成神经网络能处理的数据?
3.1 原始事件的数学表示
事件相机的第 kkk 个事件表示为:
ek=(xk,τk,pk) e_k=(\mathbf{x}_k,\tau_k,p_k) ek=(xk,τk,pk)
其中:
| 符号 | 明确含义 |
|---|---|
| eke_kek | 第 kkk 个事件 |
| kkk | 事件的序号 |
| xk=(xk,yk)T\mathbf{x}_k=(x_k,y_k)^Txk=(xk,yk)T | 事件发生的像素位置,单位为像素 |
| xk,ykx_k,y_kxk,yk | 像素横、纵坐标 |
| τk\tau_kτk | 事件发生的时间戳 |
| pk∈{−1,+1}p_k\in\{-1,+1\}pk∈{−1,+1} | 事件极性,表示亮度变化方向 |
例如:
ek=(320,180,1.002003,+1) e_k=(320,180,1.002003,+1) ek=(320,180,1.002003,+1)
可以理解为:像素 (320,180)(320,180)(320,180) 在时间 1.0020031.0020031.002003 秒附近检测到一次正极性亮度变化。具体时间单位取决于数据集的时间戳定义。
3.2 为什么需要 Event Stack?
原始事件是异步的,不能直接当成普通图像张量输入常规 CNN。
ETAP 将每个跟踪时刻之前最近的一批事件转换成多通道表示:
It=F(Et) I_t=\mathcal{F}(E_t) It=F(Et)
其中:
- ItI_tIt:时刻 ttt 对应的事件表示张量。
- EtE_tEt:该时刻之前选取的事件集合。
- F\mathcal{F}F:将事件集合转换成栅格张量的预处理函数。
- ttt:跟踪时间步的索引。
ETAP 的论文采用固定事件数量的滑动窗口,并将事件组织成 10 个通道。这样,即使事件发生速率变化,也可以按预定时间步生成输入表示。
需要特别注意:固定事件数量不等于固定时间长度。
当场景运动很快、事件很多时,收集到固定数量的事件可能只需要很短时间;场景运动缓慢时,则可能需要更长时间。这会影响实际时间分辨率。
四、第二步:特征编码与多尺度特征图
ETAP 使用 CNN 编码器从事件表示中提取特征:
Dtλ=ϕλ(It) D_t^\lambda=\phi_\lambda(I_t) Dtλ=ϕλ(It)
其中:
| 符号 | 明确含义 |
|---|---|
| DtλD_t^\lambdaDtλ | 时刻 ttt、尺度 λ\lambdaλ 的特征图 |
| ϕλ\phi_\lambdaϕλ | CNN 编码及相应尺度的特征提取过程 |
| ItI_tIt | 输入事件张量 |
| λ\lambdaλ | 特征金字塔的尺度索引 |
| ddd | 每个空间位置的特征向量维数 |
ETAP 使用多尺度特征图,论文中的配置包含 4 个尺度,特征维数 d=128d=128d=128。
为什么需要多尺度?
- 高分辨率特征有利于精确定位。
- 低分辨率特征具有更大的感受野,有助于处理较大位移。
- 多尺度组合可以降低单一尺度下局部匹配不稳定的问题。
查询点初始化
ETAP 允许指定任意查询点,而不要求它必须是传统角点检测器找出的关键点。
设第 iii 个查询点在初始化时的位置为:

其中:
- iii:查询点的编号。
- qi\mathbf{q}^{i}qi:第 iii 个查询点的初始像素坐标。
- xtii\mathbf{x}^{i}_{t_i}xtii:该点(一个确定的空间物理点在图像上的投影点)在初始化时间 tit_iti 的二维坐标(在图像上的初始坐标u,v)。
- tit_iti:该点被初始化的时间索引。
网络在该位置的特征图上,通过双线性插值获取初始描述子:
Qtii=BilinearInterp(Dtiλ,xtii) Q^i_{t_i} = \operatorname{BilinearInterp} \left(D^\lambda_{t_i},\mathbf{x}^i_{t_i}\right) Qtii=BilinearInterp(Dtiλ,xtii)
这里 QtiiQ^i_{t_i}Qtii 是第 iii 个点的初始特征描述子,后续网络会根据不同时间的观测持续更新它。
双线性插值的意义是:查询点可能位于非整数像素坐标,因此不能总是直接取某一个网格位置的特征,而是利用邻近网格的特征加权计算。
关于 xtii\mathbf{x}^{i}_{t_i}xtii: 算法怎么知道不同tit_iti下、不同图像坐标(u,v)下对应的是同一个点?

五、第三步:Transformer 如何持续更新点位置?
这是 ETAP 的核心跟踪过程。
5.1 点轨迹的表示
定义第 iii 个点在跟踪窗口第 sss 个时间位置的状态:
Psi=(xsi,Qsi,vsi) P_s^i=(\mathbf{x}_s^i,Q_s^i,v_s^i) Psi=(xsi,Qsi,vsi)
其中:
- PsiP_s^iPsi:第 iii 个点在时间位置 sss 的状态。
- xsi∈R2\mathbf{x}_s^i\in\mathbb{R}^2xsi∈R2:二维像素坐标。
- Qsi∈RdQ_s^i\in\mathbb{R}^dQsi∈Rd:该点的特征描述子。
- vsi∈{0,1}v_s^i\in\{0,1\}vsi∈{0,1}:可见性标签,1 表示可见,0 表示不可见。
- sss:当前滑动窗口内部的时间索引。
- ddd:描述子的维度。
与传统逐点跟踪不同,ETAP 会同时维护多个点,并通过 Transformer 在点与点、时间与时间之间传递信息。
5.2 迭代更新公式
在第 mmm 次迭代中,网络预测位置增量和描述子增量:
(Δx~si,m,ΔQ~si,m)=γ(Pm,D) (\Delta\tilde{\mathbf{x}}_s^{i,m}, \Delta\tilde Q_s^{i,m}) = \gamma(\mathcal P^m,\mathcal D) (Δx~si,m,ΔQ~si,m)=γ(Pm,D)
然后更新:
x~si,m+1=x~si,m+Δx~si,m \tilde{\mathbf{x}}_s^{i,m+1} = \tilde{\mathbf{x}}_s^{i,m} + \Delta\tilde{\mathbf{x}}_s^{i,m} x~si,m+1=x~si,m+Δx~si,m
Q~si,m+1=Q~si,m+ΔQ~si,m \tilde Q_s^{i,m+1} = \tilde Q_s^{i,m} + \Delta\tilde Q_s^{i,m} Q~si,m+1=Q~si,m+ΔQ~si,m
公式中各符号的含义如下:
| 符号 | 明确含义 |
|---|---|
| γ\gammaγ | Transformer 跟踪更新网络 |
| Pm\mathcal P^mPm | 第 mmm 次迭代时所有待跟踪点的轨迹状态 |
| D\mathcal DD | 当前跟踪窗口中对应的多尺度特征图集合 |
| x~si,m\tilde{\mathbf{x}}_s^{i,m}x~si,m | 第 mmm 次迭代时点 iii 在位置 sss 的预测坐标 |
| Δx~si,m\Delta\tilde{\mathbf{x}}_s^{i,m}Δx~si,m | 网络预测的二维坐标修正量 |
| Q~si,m\tilde Q_s^{i,m}Q~si,m | 第 mmm 次迭代时的特征描述子 |
| ΔQ~si,m\Delta\tilde Q_s^{i,m}ΔQ~si,m | 网络预测的描述子修正量 |
| mmm | 迭代次数索引 |
| m+1m+1m+1 | 下一次迭代的索引 |
这些公式表达的是一种逐步修正机制:网络先给出初步位置,再根据特征相关性和时序上下文不断修正位置与描述子,而不是只做一次局部匹配。
5.3 空间注意力与时间注意力
ETAP 采用交替的注意力模块:
- 点间注意力:让不同点的轨迹状态相互交换信息。
- 时间注意力:让同一个点在不同时间的状态相互交换信息。
例如,一个点暂时经过纹理较弱的区域时,当前时刻的局部证据可能不足。网络可以参考前后时刻的轨迹信息,以及其他点的运动关联,帮助判断它更可能出现的位置。
这并不意味着网络一定能够恢复被完全遮挡的点,而是利用上下文提高预测稳定性。
5.4 特征相关性公式
ETAP 还会计算当前点描述子与周围候选位置的特征相关性:
Csi,m=⨁λ=1S⨁δ∈BΔ⟨Q~si,m,Dλ(x~si,mk2λ−1+δ)⟩ C_s^{i,m} = \bigoplus_{\lambda=1}^{S} \bigoplus_{\delta\in B_\Delta} \left\langle \tilde Q_s^{i,m}, D^\lambda \left( \frac{\tilde{\mathbf{x}}_s^{i,m}}{k2^{\lambda-1}} +\delta \right) \right\rangle Csi,m=λ=1⨁Sδ∈BΔ⨁⟨Q~si,m,Dλ(k2λ−1x~si,m+δ)⟩
为了避免把多尺度相关性误解成普通像素差,逐个解释符号:
- Csi,mC_s^{i,m}Csi,m:第 mmm 次迭代时,点 iii 在时间位置 sss 的相关性特征向量。
- ⨁\bigoplus⨁:将不同尺度、不同候选偏移位置的相关性结果拼接起来。
- SSS:特征金字塔的尺度数量;ETAP 的配置中 S=4S=4S=4。
- λ\lambdaλ:当前使用的特征尺度索引。
- δ\deltaδ:邻域中的二维整数偏移量。
- BΔB_\DeltaBΔ:候选位置偏移集合。
- Δ\DeltaΔ:定义候选邻域大小的半径参数。
- ⟨a,b⟩\langle \mathbf a,\mathbf b\rangle⟨a,b⟩:两个向量的内积,用来衡量特征相似性。
- Q~si,m\tilde Q_s^{i,m}Q~si,m:当前待跟踪点的描述子。
- Dλ(⋅)D^\lambda(\cdot)Dλ(⋅):在第 λ\lambdaλ 个尺度的特征图中,指定位置的特征向量。
- x~si,m\tilde{\mathbf{x}}_s^{i,m}x~si,m:当前估计的像素坐标。
- kkk:整体特征分辨率缩放因子;论文实现配置中 k=4k=4k=4。
- 2λ−12^{\lambda-1}2λ−1:不同金字塔层级对应的进一步分辨率缩放因子。
直观来说,网络会检查当前点周围的一批候选位置,判断哪个位置的特征更符合该点的描述子。多尺度的相关性一起交给 Transformer,用于预测下一次位置修正。
在论文给出的配置中,邻域包含 49 个偏移位置,4 个尺度拼接后得到 196 维的相关性特征。
六、ETAP 的重要创新:运动鲁棒的特征对齐损失
事件相机有一个特殊问题:相同场景在不同运动方向下,会产生不同的事件分布。
例如,同一条垂直边缘:
- 相机向左运动,可能主要产生一侧的亮度变化事件。
- 相机向右运动,事件出现的极性和时空分布可能相反。
- 普通 RGB 图像的场景外观则不会仅仅因为相机运动方向反转,就发生同样的事件模式变化。
如果网络只依赖事件特征相似性,可能把同一个真实点在不同运动条件下识别成不同的特征。
ETAP 为此设计了特征对齐损失(Feature Alignment Loss,简称 FA loss)。
6.1 核心公式
Lfa=∑t1∣Pt∣∑i,s(1−⟨u(dts,i),u(d~ts,i)⟩)2 \mathcal L_{\mathrm{fa}} = \sum_t \frac{1}{|\mathcal P_t|} \sum_{i,s} \left( 1- \left\langle u(d_t^{s,i}), u(\tilde d_t^{s,i}) \right\rangle \right)^2 Lfa=t∑∣Pt∣1i,s∑(1−⟨u(dts,i),u(d~ts,i)⟩)2
其中:
| 符号 | 明确含义 |
|---|---|
| Lfa\mathcal L_{\mathrm{fa}}Lfa | 特征对齐损失,越小表示对应特征越相似 |
| ∑t\sum_t∑t | 对不同训练时间窗口求和 |
| ttt | 训练窗口的时间索引 |
| ∣Pt∣|\mathcal P_t|∣Pt∣ | 时间窗口内参与计算的点数量 |
| ∑i,s\sum_{i,s}∑i,s | 对点编号 iii 和窗口内时间索引 sss 求和 |
| dts,id_t^{s,i}dts,i | 原始事件序列中,点 iii 在时间位置 sss 处采样到的特征向量 |
| d~ts,i\tilde d_t^{s,i}d~ts,i | 经过时间反转及随机旋转的对应事件序列中,同一物理点对应的特征向量 |
| u(a)u(\mathbf a)u(a) | 向量归一化函数,u(a)=a/∥a∥2u(\mathbf a)=\mathbf a/\|\mathbf a\|_2u(a)=a/∥a∥2 |
| ⟨⋅,⋅⟩\langle\cdot,\cdot\rangle⟨⋅,⋅⟩ | 两个归一化特征向量的内积,也就是余弦相似度 |
| ∥a∥2\|\mathbf a\|_2∥a∥2 | 向量 a\mathbf aa 的欧氏范数 |
6.2 这个公式究竟在优化什么?
对于两个已经归一化的特征向量,余弦相似度越接近 1,它们的方向就越接近。
如果:
⟨u(d),u(d~)⟩=1 \left\langle u(d),u(\tilde d)\right\rangle=1 ⟨u(d),u(d~)⟩=1
那么该项损失为 0,说明两组特征完全同向。
如果余弦相似度下降,则损失增加,网络会受到惩罚,从而学习在不同运动条件下仍能表达相同物理点的特征。
注意,这里追求的是同一物理点在不同运动条件下的描述子一致性,而不是强行要求所有点的描述子都一样。
6.3 时间反转为什么有用?
训练时,ETAP 会构造原始事件序列的时间反转版本,并进行一定的随机旋转增强。
这样,同一场景结构可以对应不同运动方向产生的事件模式。网络通过对齐相应点的特征,学习降低运动方向对描述子的影响。
ETAP 的总损失还包括轨迹位置预测损失 与可见性分类损失:
L=0.1Ltp+Lvis+0.1Lfa \mathcal L = 0.1\mathcal L_{\mathrm{tp}} + \mathcal L_{\mathrm{vis}} + 0.1\mathcal L_{\mathrm{fa}} L=0.1Ltp+Lvis+0.1Lfa
其中:
- L\mathcal LL:总训练损失。
- Ltp\mathcal L_{\mathrm{tp}}Ltp:轨迹预测损失,惩罚预测坐标与真实轨迹坐标之间的差异。
- Lvis\mathcal L_{\mathrm{vis}}Lvis:可见性预测损失,训练网络判断点是否仍然可见。
- Lfa\mathcal L_{\mathrm{fa}}Lfa:特征对齐损失。
- 0.10.10.1:论文所用的两个辅助损失的权重系数。
这三个目标分别约束"点的位置要准确""点是否可见要判断正确""同一点在不同运动条件下的特征要稳定"。
七、ETAP 的优缺点
优点
- 适合高速运动与复杂光照
事件相机具有高时间分辨率和高动态范围,能够减少传统帧相机在快速运动时的运动模糊问题。ETAP 利用这些特点进行事件域点跟踪。
- 利用全局时空上下文
Transformer 联合处理多个点和多个时间位置,减少了仅依赖局部窗口匹配的局限。
- 可以跟踪任意查询点
不要求输入点必须是传统角点检测器检测出的显著关键点,适合建立较丰富的点轨迹。
- 对运动引起的事件外观变化进行专门建模
FA loss 是针对事件视觉特点设计的训练机制,有助于提高不同运动条件下的特征一致性。
- 有公开代码和多数据集验证
官方实现覆盖 EDS、EC、EVIMO2、EventKubric、E2D2 等数据集,便于复现和比较。
缺点与限制
- 依赖训练数据与跨场景泛化能力
ETAP 的性能与合成事件数据的真实程度、训练分布和测试场景有关。真实相机噪声、不同传感器特性和特殊运动模式仍可能带来域差异。
- 没有颜色信息
纯事件输入主要反映亮度变化,无法像 RGB 图像那样直接利用颜色区分外观相似的区域。论文也将缺乏颜色信息列为局限之一。
- 静止场景或运动不足时,初始化可能困难
如果点初始化时没有足够的运动,也就没有足够事件来表达场景结构。论文指出,跟踪特征在没有运动、没有事件时可能无法很好地捕获场景外观。
- 它输出的是二维点轨迹,不是三维运动解
ETAP 不会仅凭跟踪结果直接输出相机六自由度位姿、三维点坐标或绝对尺度。后续还需要多视角几何、三角化、视觉惯性优化或其他状态估计模块。
- 计算开销与时间窗口设计需要权衡
CNN、相关性计算和 Transformer 迭代更新都需要计算资源。事件表示的窗口长度、更新频率、点数量和推理硬件会影响实时性。不能仅凭论文中的实验结论就认定它满足特定车载平台的实时要求。
- 跟踪不等于始终可见或始终正确
遮挡、低事件率、动态物体、重复结构和快速运动都可能造成轨迹中断或错误关联。可见性预测能帮助判断失效,但不能保证所有情况下都能恢复真实点位置。
补充:ETAP原理介绍中也用了滑动窗口 跟踪窗口 和 时间窗口啊? 怎么就能减少对局部窗口的依赖?

