ES-ImageNet: A Million Event-Stream Classification Dataset for Spiking Neural Networks
(博主是本文作者之一)
文章 : https://www.frontiersin.org/articles/10.3389/fnins.2021.726582/full
代码:
https://github.com/lyh983012/ES-imagenet-master
数据集下载:下载链接
这里介绍一下这篇文章。本文的写作的动机是:随着事件驱动算法,特别是脉冲神经网络(SNN)在神经形态视觉处理方面的不断改进,迫切需要一个更具挑战性的事件流数据集。在这篇文章提出之前,事件数据集一般使用DVS相机拍摄或者转录静态数据的模拟动画。这篇文章希望用一个简单的方法仿真ImageNet-1K,探讨由静态图片生成事件数据的衡量指标(实际上是一个带量化的阈值边缘检测器),并且使用SNN算法做验证。
贡献为以下三点:
(i) 我们介绍了一个新的大规模ES数据集ES ImageNet及其benchmark。
(ii)提出了一种称为ODG的新算法(实际上就是个边缘检测器搭配一套验证方法和恢复方法)。
(iii)提供了几种分析数据集的方法。
背景
文章整理了现有的一些DVS或ES数据集如下:
方法
转换方法很简单:
- 将RGB图像转到HSV,认为V通道encode了光强信息
- 将图片模拟出一个9帧的运动序列,两两差分得到8帧的差分信息
- 过阈值,得到亮度信息增减超过阈值的,记为正事件或者负事件
- 稀疏存储
下图即运动路径和生成的事件帧
(1)运动路径的确定:
A是之前模拟静态图像运动的常用做法“快速眼动”,B是CIFAR10-DVS的运动,作者认为相反方向的运动对于low-level信息的抽取是冗余的,并且在E图用2D信息熵衡量了这三种方法抽取出来的事件恢复灰度图之后得到的信息熵的大小。
###(2) 阈值的确定:
做了个预实验,用5k张图+不同阈值转换了一下,看事件率。最后决定放在5%上,看起来比较moderate,并且存储代价不会那么大。
(3)恢复质量
由于用固定路径做生成,实际上隐含了生成路径的信息,可以直接逆过程恢复一个还行的灰度图。这对用户自己做数据增强比较有帮助,如果在生成中就引入了随机就丢失了这个信息。
实验
实验用的SNN结构如下:
其中用了LIF模型和LIAF模型,LIF模型搭ResNet的思路就是直接将CNN模块替换成CSNN模块——每个卷积层后面添加一个膜电位更新机制,并把ResBlock的ReLU也替换成一个LIF神经元
实验结果如下表:(以Github更新为准,论文中只有图上的结果)
baseline / Benchmark
Network | layer | Type Test Acc/% | # of Para | FP32+/GFLOPs | FP32x/GFLOPs |
---|---|---|---|---|---|
ResNet18 | 2D-CNN | 41.030 | 11.68M | 1.575 | 1.770 |
ResNet18 | 3D-CNN | 38.050 | 28.56M | 12.082 | 12.493 |
ResNet18 | LIF | 39.894 | 11.69M | 12.668 | 0.269 |
ResNet18 | LIAF | 42.544 | 11.69M | 12.668 | 14.159 |
ResNet34 | 2D-CNN | 42.736 | 21.79M | 3.211 | 3.611 |
ResNet34 | 3D-CNN | 39.410 | 48.22M | 20.671 | 21.411 |
ResNet34 | LIF | 43.424 | 21.80M | 25.783 | 0.288 |
ResNet18+imagenet-pretrain (a) | LIF | 43.74 | 11.69M | 12.668 | 0.269 |
ResNet34 | LIAF | 47.466 | 21.80M | 25.783 | 28.901 |
ResNet18+self-pretrain | LIAF | 50.54 | 11.69M | 12.668 | 14.159 |
ResNet18+imagenet-pretrain (b) | LIAF | 52.25 | 11.69M | 12.668 | 14.159 |
ResNet34+imagenet-pretrain © | LIAF | 51.83 | 21.80M | 25.783 | 28.901 |
Note: model (a), (b) and © are stored in ./pretrained_model
目前的实验结果最好只到了52%多点,不过这个结果还算不错,可以参考另外一篇相似的工作——用DVS拍摄ImageNet数据集,这篇工作的top精度在48%,说明这个量级的精度在这种类型的数据集上是合理的
链接:N-IamgeNet
也欢迎试试这个数据集,这两篇工作发表的时间好近,感受到科研竞争了hh
论文中最后分析了SNN的功耗和计算量。虽然本人为作者但是还是要自我批评一句这部分比较虚,因为并没有很好的硬件支持,而是从一个优化的计算架构上做的理论推导,具体功耗是我们实验室拿FPGA测的op级别的平均功耗,但是没有实现这样的一个具体计算架构。