前言: CVPR 2022 workshop 用transformer提取事件特征
Event Transformer. A sparse-aware solution for efficient event data processing
引言
从事件相机中提取信息目前已有的比较好的方法可以分为:效果最好的方法是frame-based,用卷积神经网络或循环神经网络,其次是利用图卷积、点卷积、脉冲神经网络等方法来更好的利用事件的稀疏性质
我们的方法Event Transformer (EvT)解决了事件的稀疏特性,同时还取得了最好的效果
我们的创新点在于
第一:通过将voxel图片打成patch,只计算有着足够数量点的patch
第二:提出一种 a compact transformer-like backbone based on attention mechanisms,其中latent memory vectors只需要最小的计算资源
方法
EvT的处理流程如下,最后的任务是做分类
首先将事件转换成
的voxel图片,B代表timebins个数,2代表2极性,voxel中存的是落到一个单位cell的事件数量,然后对voxel作取对数处理,来平衡掉某些cell的数量极端(大)的情况
然后这样的一个voxel F’在空间上被分成不同的patch,patch的空间尺寸是P * P,当一个patch中的点的数量大于百分之m,则被视为激活patch,最后没有被激活的patch就被丢弃,然后设置一个阈值n,如果patch中的点仍然小于这个阈值,则加宽时间窗e time-window,使得处理更多的点,然后重新计算激活patch
最后,一个patch的尺寸 (P,P, B,2)将特征展平为(P ×P × B × 2)=input_dim,则看成 T ×dim 的向量 ,
网络的backbone如下
输入的尺寸是 (T,dim) ,latent memory vectors尺寸是(M,dim)
首先将输入进行特征映射到高维(T,dim)变成(T,D),FF1 则只有一个初始的FF,concat position embedding 和一个FF,FF2则是有两层feed forward,加上一个跳跃连接
主干网络
主干网络是由一个cross-Attention 和N个 Self-Attention构成,先进行cross-transformer,然后进行self-transformer
即T × D 与M ×D 做attention,得到新的向量 M ×D,新的向量M×D自己与自己作attention(N次),得到新的M ×D作输出同时更新memory
更新memory:直接相加
(当然这里图中和文中都没有提到的是,它是一个循环网络,即在每个不同的时间窗口进行图示的第二部分backbone processing,因此memory可以记录之前时刻的信息)
吐槽一下发布的代码,所说训练测试代码都有,但超参数文件没给啊!!连网络结构都写到超参数文件里去了啊啊啊可恶!!看了一个下午研究某个输入变量到底指的啥,发现还不如手敲来得快…
实验
由于是作分类,这里直接将最终的latent vector 过两层MLP然后average pooling
实验超参数设置:
patch尺寸:6 × 6
百分比阈值m : 7.5(做了log之后)
最小点阈值n : 16
时间窗:特定数据集不同
timebins:特定数据集不同
特征维D:128
latent vector长度M:96
初始化latent vector:均值0方差0.2的正态分布
位置编码:16维傅里叶
注意力头:position token1或 2,其他是4
训练参数:
略
结果
长距离分类
短距离分类
效率比较
总结
结合了循环神经网络的transformer,应该在NLP中比较常见,但没怎么在视觉任务中见到过