论文/Graph-Based Object Classification for Neuromorphic Vision Sensing 论文解读
Title
Graph-Based Object Classification for Neuromorphic Vision Sensing
Summary
NVS 可以显著提高采样率,同时显著提高能量效率和对光照变化的鲁棒性。然而 NVS 不使用帧表示图像,所以不能利用最先进的循环神经网络(CNNs)。我们提出了一个基于 NVS 的紧凑的图表示,并使用结合残差网络来做分类,这种残差 Graph CNN 保持了尖峰事件的时空一致性,同时需要较少的计算和存储。 现在所有的图像识别的数据都是来源于 CMOS APS。然而 APS 的传感对于机器学习系统来说是很麻烦的,因为它的帧速率有限,帧间冗余度高,在变化的光照下快门调整缓慢而模糊,并且需要高功率。
近年来出现了基于 NVS 的摄像头,这种硬件可以输出异步事件流(也称为“峰值”),可以反映场景反射比的变化。这一种图像表示方式大大减少了内存使用、功耗和跨时间的冗余信息,同时提供了低延迟和非常高的动态范围。可以用于图像识别。然而由于缺少 NVS 的数据集和这方面算法方面的研究,基于 NVS 的图像识别效果一直不如基于 APS 的图像识别。以前的方法要么人为地将事件分组为帧形式,要么派生出复杂的特征描述,在复杂的任务中并不一定能提供良好的特征,并且对噪声敏感。因此本论文提出了使用图来表示 NVS 的事件流,并且使用残差图卷积神经网络作为训练模型,只用了 1/5 的 ResNet50 的卷积操作就实现了 state-of-the-art 的准确率。本论文的使用的图卷积是基于空间的图卷积(另一种是谱卷积)。 除此之外,目前可用的大多数 NVS 数据集是从模拟器生成的,或通过显示屏回放 APS数据集,再使用 NVS 设备录制的。
但是通过上述方式获得的数据集不能捕捉场景反射比变化,因此论文作者还创建并提供了一个美国手语24个字母(a-Y,不包括J)的 NVS 记录数据集。
SYSTEM OVERVIEW
基于 NVS 数据的分类网络架构如下:首先采用非均匀采样策略获得一小组神经形态事件进行计算和记忆高效处理然后将采样事件构造成一个半径邻域图,并由我们提出的残差图CNNs进行处理,进行目标分类。 如下图:
NVS 的事件序列可以表示为:$ {e_{i}}{N}={x{i}, y_{i}, t_{i}, p_{i}}{N} $,其中 $ (x{i}, y_{i}) ^{H W} $ 表示尖峰事件发生的坐标,$ t_{i} $ 表示事件的时间,$ p_{i} $ 表示事件的极性(取值为 +1,-1),N 是时间的数量。为了减少存储和计算的功耗,使用了均匀网格采样来减少事件的数量。在有向图 $ ={, , } $ 上定了采样事件,其中ν是顶点集,ε是边集,U包含局部定义连接节点之间空间关系的伪坐标(基于半径邻域图策略定义了图中节点的连通性)。只有当相邻节点的加权欧氏距离 $ d_{i,j} $ 小于半径距离R时,它们之间的欧氏距离被定义为加权时空距离:$ d_{i, j}= $。其中 \(\alpha\) 和 \(\beta\) 是权重参数,用于补偿空间和时间网格分辨率差异。两个点 $ i,j $ 之间的连通性表示为: $ u(i, j)=$。
$ {e_{i}}{i=1}^{k} $ 表示从 k 个点里面随机采样出一个点 $ e{i} $,共采样 m 个点的集合: $ {e_{i}}_ $。
图卷积可以分为两种。一种是谱卷积,这种方法需要相同的图形输入,并同时处理整个图形,因此不适用于每次输入一样的大型图形。另一种是空间卷积,这种方法与传统的 CNN 中的卷积类似,使用卷积核加权的邻域信息为每个顶点聚集一个新的特征向量。因此对于 NVS 数据集,使用空间卷积的方法。对于点 i 的卷积操作可以定义为: \[ (f \otimes g)(i)=\frac{1}{|\mathfrak{N}(i)|} \sum_{j \in \mathfrak{N}(i)} f(j) \cdot g(u(i, j)) \]
其中 \(f(i)\) 表示点 i 的特征,$ (i) $ 表示点 i 的相邻点集合,$g(u(i, j)) $ 表示一个卷积核参数。
$ =(g_{1}, , g_{l}, , g_{M_{i n}}) $ 表示同一层中的多个卷积核,\(f_{l}\) 表示一个点的多维特征。那么更 加规范化的卷积操作如下: \[ (\mathbf{f} \otimes \mathbf{g})(i)=\frac{1}{|\mathfrak{N}(i)|} \sum_{l=1}^{M_{i n}} \sum_{j \in \mathfrak{N}(i)} f_{l}(j) \cdot g_{l}(u(i, j)) \] 卷积核函数借鉴了 SplineCNN 中的方法:$ g_{l}()={p P} w{p, l} {i=1}^{d} N{i, p_{i}}(u_{i}) $ ,故卷积函数完整表示为: \[ \begin{aligned} \operatorname{Conv}_{l^{\prime}}=& \xi\left(\frac{1}{\mathfrak{N}(i) |} \sum_{l=1}^{M_{\mathrm{in}}} \sum_{j \in \mathfrak{N}(i)} f_{l}(j) \cdot \sum_{p \in P} w_{p, l}\right.\\ &\left.\cdot \prod_{i=1}^{d} N_{i, p_{i}}\left(u_{i}\right)+b_{l^{\prime}}\right) \end{aligned} \] 其中 $ l^{}=1, . ., M_{} $ 表示第 \(l^{\prime}\) 个输出。为了加速收敛,使用了 batch normalization,如下: \[ f_{l^{\prime}}^{\prime}=\frac{f_{l}-E\left(f_{l^{\prime}}\right)}{\sqrt{\operatorname{Var}\left(f_{l^{\prime}}\right)+\epsilon}} \cdot \gamma+\beta \]
池化层:首先基于节点坐标把图切分为多个簇,每个簇的点数量是固定的,然后在一个簇内聚合所有节点,然后计算新节点的新坐标和特征。对于点 $ (x_{i}^{}, y_{i}^{}) {H{} W^{}} $,每个簇的点数量定义为 $ {} {} \(,则池化后的点数量为:\) ] $。每个簇被池化称为一个点,池化后的点坐标是每个簇中的点坐标而平均值,特征向量是平均值或者最大值。如果两个簇之间有连接的节点,我们假设这两个簇中池化之后的节点有一条边连接。
残差图卷积(Residual Graph CNN):把一个残差直接连接看作是一个图卷积层,每个维度的核大小为1,它与输出未来映射的维度相匹配。把直接连接过来的特征和原来的节点特征进行元素相加,然后利用ReLU激活函数。与 ResNet 类似,这里不展开了。
数据集:现有的大部分 NVS 数据集都是在 APS 数据集的基础上回放拍摄得到的,或者用模拟软件生成的,丢失了一些场景反射比变化信息,不能反映真实世界的情况。因此创建了大型数据集:ASL-DVS:包含 24 个类别的手势字母数据集,在室内环境拍摄,每一个字母收集了 4200 个数据,每个数据长度为100毫秒。
Evaluation
- 与其他 NVS 数据集的算法对比:使用了 N-MNIST、MNIST-DVS、N-Caltech101、CIFAR10-DVS、N-CARS、ASL-DVS 共 6 个数据集。对于每个样本,提取 30 毫秒的事件流,对于卷积核的 k 设置为 8,半径 R 设置为 3,权重参数 \(\alpha\) 和 \(\beta\) 设置为 1 和 $0.5 ^{-5} $。对于 N-MNIST 和 MNIST-DVS,样本数据量小,因此使用两层 residual block;其他数据集则使用 3 层 residual block。由于每个数据集的空间分辨率不一样,因此使用不同的池化簇大小。还比较了没有残差项的 G-CNNs ,和带有残差项的 RG-CNNs。然后 dropout 设置为 0.5,并且使用了数据增强,包括镜像翻转、旋转等操作。使用 Adam 优化器,batch size 为64。和其他算法进行了比较,包括 HOTS , H-First, SNN and HATS;还和其他的卷积操作的算法进行了比较:包括 GCN, Cheb- Conv, MoNet and GIN,结果表明本论文提出的 RG-CNNs 取得了最好的结果。
- 与传统的 Deep CNN 对比:与 VGG 19, Incep- tion V4 和 ResNet 50 进行了对比。为了构造符合这些 CNN 的数据格式,将 NVS 数据分隔成 30 毫秒的片段,并聚合成为 2 个channel,具有与NVS传感器相同的分辨率,每个 channel 在每个位置分别编码正事件和负事件的数量。 并且对这些数据进行了增强,包括放大、随机裁剪、翻转和归一化。使用梯度下降法,momentum 为 0.9,L2 正则化稀疏为 \(\(0.1 \times 10^{-4}\)\),学习率为 \(10^{-3}\)。上尽管进行了很多的数据增强和L2正则化,但是从传统 CNN 获得的结果仍然比不上 直接使用 NVS 数据集的方法,因为事件转换成帧图像包含的信息变少了。另一方面,在几乎所有的数据集上,我们的方法的的准确性都超过了传统的基于帧的 CNN。
- 比较了浮点操作的次数和时间复杂度,传统 CNN 计算浮点计算次数的方式如下:
\[ \mathrm{FLOPs}=2 H W\left(C_{\mathrm{in}} K^{2}+1\right) C_{\mathrm{out}} \]
其中 H、W 和 \(C_{in}\) 分别表示 高度、宽度和输入特征的通道数,K 是卷积核大小,\(C_{out}\)是输出通道数。
对于图卷积来说,浮点计算次数如下: \[ \begin{aligned} \mathrm{FLOPs} &=N_{\mathrm{edge}}(m+1)^{d}\left(3 C_{\mathrm{in}} C_{\mathrm{out}}+7 d\right)&+\left(N_{\mathrm{edge}}+N_{\mathrm{node}}\right) C_{\mathrm{out}} \end{aligned} \] 包含 3 个部分:
包含 3 个部分:
- 在 B-spline 中有 $ N_{}(m+1)^{d} $ 个线程计算 7d 个浮点计算(4 个加计算和 3 个相乘计算),\(N_{edge}\) 是边的数量,d 是图中坐标的维度
- \(3N_{\mathrm{edge}} C_{\mathrm{in}} C_{\mathrm{out}}(m+1)^{d}\),3 来自每个卷积核的的1个加法和2个乘法,\(C_{in}\) 和 \(C_{out}\) 分别是输入和输出通道的数目
- \(\left(N_{\text {edge }}+N_{\text {node }}\right) C_{\text {out }}\):\(N_{node}\) 是图中节点的数量
G-CNNS和RG-CNNS的权重数量更少,与传统深度 CNN 相比需要的计算量较少。主要原因是图表示是紧凑的,从而减少了需要处理的数据量。
Conclusion
提出了一种基于图的神经形态尖峰事件表示方法,允许快速的端到端任务训练和推理。
在基于 NVS 的分类任务中引入了残差图 CNNs(RG-CNNs)。结果表明,与传统的 CNN 相比,它们所需的计算量和存储量较小,而在各种数据集上的计算量和存储量均优于现有的CNN。
创建了真实世界条件下的最大 NVS 视觉数据集,并将其开源给研究社区。