第一篇文献

SpikingJelly: An open-source machine learning infrastructurepla tform for spike-based intelligence

解决的问题

该文献为了解决在SNN领域较为混乱的网络框架、难以彼此通用复现的SNN结构以及与软硬件不兼容等问题,提出的一个基于cupy的深度学习框架,该框架建立于torch的接口上,内层使用Cupy完成对Cuda的调用,底层仍然使用C++语言实现高性能运算。该框架的中文名称为“惊蛰”,名字还取得不错。

主要内容

框架的整体架构图
整个框架的架构如上图,该框架的用户文档可参见:用户文档。在使用感受上,该框架具有以下特点:

  1. 接口与torch的nn接口高度类似,能够方便torch用户的使用;
  2. 在生理学和计算神经学上涉足不深,更多地抽象脉冲的物理和数学模型,并将其与深度学习相结合。
  3. 传播过程将整个脉冲序列分为多个单独的时间点,因此可以按单步传播(在同一个时间戳上传播整个网络,然后进入下一时间戳)和多步传播(在同一个脉冲序列上传播整层网络,然后再进行下一层),两种方式计算结果相同。
    单步传播和多步传播
  4. 拥有多个内置的数据集,可直接下载,但是使用实验室网络有点卡,需要代理。
  5. 支持自定义神经元模型(即可以不用LIF模型),但是自定义过程有点繁琐且需要CUDA编程的知识,不太理解。

框架评价

这确实我所寻找的多个SNN框架之中最有希望的一个(虽然他们自己也是这么说的),确实它的接口是最友好的,并且使用体验上也是最方便的。接下来就是需要从所有使用它的文献中进行学习和复现,牢牢记住我的目标:将事件流和图像流结合起来,完成图像测量的任务,戴琼海院士团队提出的两篇文献都可以进行参考。

第二篇文献

Image De-occlusion via Event-enhanced Multi-modal Fusion Hybrid Network

解决的问题

其实就是高分辨率重构,在有大量遮挡物的情况下对场景前面的细节重构。整个解决问题的框架仍然是使用相机相对于场景平移采集视频和事件流,然后处理该事件流与视频得到重构图像(需要用到多视图重构的内容)。

主要内容

框架与前一篇看过的插帧文章是高度同源的,设计的融合Unet是一模一样的架构,在具体的实现细节上有所不同,可以看出两篇文章有着明显的递进关系。
重构网络处理框架

  1. 事件流处理:与插帧文章文章是一样的,都是为了充分利用事件流里面的时间戳信息,努力将事件流的价值发挥至最大,因此都将事件流分两路处理:一路按手工选择的事件描述生成类似图像的事件曲面以保留理多轮廓,另一路则通过SNN描述提取器以保留更多的时间特征,(还有可以改进的空间)。
  2. 事件流经SNN描述提取器后得到的是体素栅格,可以直接使用常规的卷积神经网络处理(已经可以视为是通常意义上的多通道图像了)与图像流经两个下采样编码器后按
    拼接后融合,并经过解码器输出生成的重构图像,注意,这里的重构信息已经由网络给出,不需要手工计算重构矩阵之类的。
  3. 误差函数的设计:误差函数仍然分为不同的物理意义,即:L=αLpixel+βLipips+γLcmp\mathcal{L}=\alpha\mathcal{L}_\mathrm{pixel}+\beta\mathcal{L}_\mathrm{ipips}+\gamma\mathcal{L}_\mathrm{cmp},分别指代生成图像的逐像素误差、特征图误差和批次误差(即多张图像中正负样本与参考样本的特征图之差的商)。

方法评价

本文的方法仍然反映了戴琼海院士团队在事件流与图像流特征融合方面的深厚造诣,其设计的网络架构具有一定的普适性,能够完成不同类型的任务。关于本文所提出的框架可以改进的地方,除了套用现成的框架模型以外,还没有想到一个好的点子,不过,本文的模型确实也可以用于事件流的仿真生成上。

第三篇文献

这其实应该是两篇文献,来自同一个课题组:
Time Lens++: Event-based Frame Interpolation with Parametric Nonlinear Flow and Multi-scale Fusion

Time Lens: Event-based Video Frame Interpolation

解决的问题

这两篇文献都是针对快速插帧的方法,探讨的是如何将事件相机采集取得的事件点与图像关键帧融合,得到对图像关键帧之间任意时间精度下的帧补充。两篇文献使用的方法具有承接关系,因此在这里一起讨论。

主要内容

两篇文献都使用的是基于生成式网络来完成插帧,尚未使用到数据驱动的事件描述,均使用体素栅格作为直接输入进入变分自编码器完成编码,未涉及到脉冲神经网络的使用。
Time Lens的整体框架图
Time Lens++的整体框架图
在图像的合成中,有以下两个特色:

  1. 使用到了多种插帧方法的整合,两篇文献中均同时使用到了事件流的综合插帧(类似于运动信息插帧)、卷曲插帧(类似于光流估计插帧),然后将两种插帧方法使用卷曲精炼Warping refinement完成图像统一,然后将所有插帧结果使用注意力机制进行平均。
  2. Time Lens++中,该文献另外增加了新设计的运动插值估计器Motion spline estimator,即专门使用多帧关键帧图像和事件流的对应特征点,将特征点作为样条曲线的固定点,形成一条样条曲线,用样条曲线估计在高速运动位置处的特征点漂移。
    运动插值估计器
  3. 融合模块,在Time Lens++中,将来自Time Len残差连接模块进行改进,在上采样环节中增加了门压缩模块,即将残差连接加入至上采样模块内部,实现对生成图像信息的增强。

方法评价

这两篇文献,均是使用了纯手工设计的事件描述(体素栅格)就可以取得较好的插帧效果,不输于文献,设计的网络均是生成式全卷积网络,在事件流与图像流的融合模块中,使用直接的Warp连接即可完成图像的生成与精炼,这个具体的实现可以去复现一下。

两篇文献都还只是使用了手工设计的事件描述,说不定,加入SNN的事件描述后,能够取得更好的效果呢?没有人试过。

第四篇文献

How to Calibrate Your Event Camera

解决的问题

这篇文献是解决事件相机的标定问题的, 即如何在不引入复杂的标定板(像闪烁的LED灯、一直在变化的标定板)的情况下,将事件相机的内参数矩阵和外参数矩阵标定出来。本文的一个核心是使用事件流的图像重构,得到重构的标定板,以重构的标定板完成对事件相机的标定。

主要内容

标定的核心思路是:选取一定的时间间隔作为重构图像的采样间隔,在该间隔内使用E2VID提出的重构算法将事件流重构为图像流,以此获取在该时间间隔内的标定板图像,然后根据重构的标定板图像,完成对标定板角点的提取以及标定等工作,标定的结果将直接受到重构模型的影响。此时如果保证事件相机不发生运动,则可以从图像流中获取较多的标定板图像,提高标定的精度。

将该方法的标定结果与使用LED闪烁板的标定结果相比较(以后者的标定结果为参考真值),使用重投影误差(标定效果的必要但不充分条件)可知该方法的标定误差较小。

方法评价

本文的方法提供了一个轻量的标定思路,在不需要复杂的闪烁标定板的前提下,仍然可以仅用一个事件相机就完成标定工作,思路是将从事件流中重构标定图像,所以重构的模型将会直接影响到标定的结果,文献没有研究重构模型向后的误差传递,这部分可以作为进一步内容研究。

第五篇文献

Attention Spiking Neural Networks

解决的问题

这篇文献是为了解决在SNN网络中运算效率与准确率难以兼顾的问题,SNN更加接近于人脑的神经元构造,因此在SNN中加入注意力机制应该会取得比CNN更好的效果。本文提出的三类注意力机制可以减少SNN网络的脉冲次数,并增加其准确率。

主要内容

递归结构解释LIF神经元SNN网络
本文的第一个亮点是使用递归神经网络结构解释LIF的SNN网络,将膜电位看作是一种类似于状态变量的存在,后面复杂的激活则对应RNN的输出模块,这种解释比较有新意,而且符合神经元存在状态和特点。
网络整体架构
根据前述的RNN结构,在网络整体上将呈现出递归结构,而所谓的注意力机制便是施加于特征提取器(卷积层)后面的加权模块。该模块分为以下三种注意力构成:
三种注意力机制
从左到右,该图中的三种机制分别是:

  1. 时间注意力机制:在整个脉冲周期内,不同时间抽样处施加不同的权重。
  2. 通道注意力机制:在特征图中对不同的通道施加权重,类似于一般的注意力机制。
  3. 空间注意力机制:对特征图中不同分布位置处按块施加权重,类似于Transformer的注意力机制。
    三种注意力机制的设计位置也有讲究,例如,空间和通道注意力机制在本文中被设计在RNN单元内,而时间注意力机制被设计在特征提取器外,
    三种注意力机制安放位置
    消融实验证实,三种注意力机制确实能够提升准确率和计算效能。

方法评价

本文的方法在于将CNN领域的注意力机制直接搬到了SNN中,确实也增强了深度SNN的准确率和计算效能。该方法是建立在将事件流直接通过脉冲卷积输入至注意力中。头晕眼花,不想写了。

第六篇文献

Event-Based Angular Velocity Regression with Spiking Networks

解决的问题

本文其实相当于一个机器视觉的应用,即如何单纯地使用事件点来完成对角速度的测量,算是一个尝试。

主要内容

使用的网络框架很简单,即SCNN,共五层SCNN外加最后一层压平并全连接,甚至都没有使用到池化层。Loss函数是简单的RMSE,选用的脉冲框架是Slayer,得到的结果如下表所示:

方法 SNN-6 ANN-6 ResNet-50
相对误差 66.3% 59.0% 66.8%

方法评价

一眼就可以看出,本文提出的方法结果误差反正就是极其大,根本没有办法使用。其实问题我认为出在Loss函数的设计上,测量某一个角速度相当于在一个L2L_2空间中完成一次搜索,因此直接将该Loss函数选为RMSE是极其不合适的,根据论文The Unreasonable Effectiveness of Deep Features as a Perceptual Metric可知,直接使用类似F范数的Loss将导致生成图像的模糊,这里也将导致预测的角速度值在整个脉冲时间内模糊,同时将三个轴的角速度各自模糊到另外的轴上造成进一步误差,完全不能得到相应的效果。

关于本文的Loss函数,我认为可能的改进思路有以下两点:

  1. 借鉴论文The Unreasonable Effectiveness of Deep Features as a Perceptual Metric的思路,找到某一个更深层次的特征,例如该论文中选用的是各层CNN提取的特征图,对特征图求解F范数,可以在更高的维度上避免 模糊。只不过,这里的角速度不能直接对应回姿态的深层次特征,如何设计还有点困难。
  2. 目前正在尝试的方法,加入关于导数的正则项,导数本质上也相当于一个深层次的特征(只不过是手工设计的罢了),导数特征仍然存在问题,即导数项中也可以存在模糊,除非求解二阶、三阶以至于N阶导数,否则都得不到去除模糊的正确结果。
  3. SpikingJelly里面提供的模板方法这里是不能用的,模板是一个分类的方法,只需要从一系列脉冲中输出一个值就够了,而这里是需要从一系列脉冲中输出一系列的值,每个时间都需要有输出,因此不能只用一个CNN,而应当使用RNN(或GRU这种记忆的环节),这部分的实验正在进行了,实际上,单独一个SNN就可以完成这个记忆环节,只不过,SpikingJelly的模型好像不是特别好用。

另外的,本文的网络结构简单是本文的优势,如果真的要把这个结果部署,大的模型,尤其是生成式模型是不可能实现实时性的。

第七篇文献

Combining Events and Frames using Recurrent Asynchronous Multimodal Networks for Monocular Depth Prediction

解决的问题

如何完成在快速移动的场景中对重构深度的估计,如何兼顾估计的效率和精度。本文研究了使用事件流与图像流相结合的网络架构设计对行进中的汽车正前方深度信息的估计,提出的网络名称为“异步循环多模态网络”(RAM-Net)。

主要内容

本文的网络架构设计图如下所示:
使用GRU的深度估计网络
该网络使用RNN的变体GRU(即门控循环单元)作为网络的核心设计部分,引入自编码器将图像编码为矢量加入至门控单元的输入端,完成对信息的记忆和提取,根据生成式网络的一般特点,使用解码器完成对编码矢量的连续解码,直接得到深度图像。该文献的方法具有以下的应用特点:

  1. 使用激光雷达直接获取参考真值,使用该参考真值可以直接生成标准的深度图像以完成对网络的训练。
  2. 引入GRU并进行调整使其可以用于图像编码矢量,该模块的主要作用是加强对前一时刻记忆力信息,使之前后的深度估计结果具有较好的相关性。
  3. Loss函数的设计由两部分组成,包括图像、事件的特征误差以及被称为是“尺度不变误差”的误差,该误差公式出自于另一篇文献,据查为对数距离的误差,所谓对数距离,就是将两个图像对应像素点处估计得到的深度的对数之差(消除尺度因素)的差(类似于重投影误差,保证结果是无偏的),可用下式表示为:

di=logyilogy^iD(y,y^)=1n2ij[(logyiyj)(logy^iy^j)]2\begin{aligned} d_i&=\log y_i-\log\hat{y}_i\\ D(y,\hat{y})&=\frac{1}{n^2}\sum_i\sum_j[(\log\frac{y_i}{y_j})-(\log\frac{\hat{y}_i}{\hat{y}_j})]^2 \end{aligned}

;另一部分的误差也来自于文献,被称为多模态下尺度不变的梯度匹配误差,具体算法是将上一结果中的对数距离按横纵两个方向求偏导数,然后求1范数,即可得到该误差,如下式:

Lgrad=1nki(ΔxRik+ΔyRik)\mathcal{L}_\mathrm{grad}=\frac{1}{n}\sum_k\sum_i(|\Delta_xR_i^k|+|\Delta_yR_i^k|)

该文献整体上来看,是将两项前面的工作结合了一下,改进了文献所使用的数据模态形式(加入了事件流数据)因此取得了一定的改进效果,创新地设计了卷积编码的GRU网络,将事件流按体素栅格的手工描述方式处理得到深度图像。

方法评价

方法提供的事件流结合思路仍然是将事件当作体素栅格使用,这种方法可以兼容常用的三维卷积神经网络,但是有一个问题:体素栅格往往代表事件流是稀疏的,使用三维卷积神经网络还是比较亏的,大部分的计算都是零,因此如能使用SNN完成一次编码,应该能够压缩事件流的描述量同时减少信息丢失,能得到更好的效果。