译者 |  VincentLee

来源 | 晓飞的算法工程笔记

脉冲神经网络(Spiking neural network, SNN)将脉冲神经元作为计算单元,能够模仿人类大脑的信息编码和处理过程。不同于CNN使用具体的值(continuous)进行信息传递,SNN通过脉冲序列(discrete)中每个脉冲发射时间(temporal)进行信息的传递,能够提供稀疏但强大的计算能力。脉冲神经元将输入累积到膜电压,当达到具体阈值时进行脉冲发射,能够进行事件驱动式计算。由于脉冲事件的稀疏性以及事件驱动的计算形式,SNN能提供卓越的能源利用效率,是神经形态结构的首选神经网络。

尽管SNN有很多好处,但目前仅能处理相对简单的任务,由于神经元复杂的动态性以及不可导的操作,暂时没有一个可扩展的训练方法。DNN-to-SNN是近期广泛的SNN训练方法,该方法将目标DNN转化成SNN的中间DNN网络进行训练,然后转成SNN并复用其训练的参数,在小数据集分类上能达到不错的性能,但是在大数据集上分类结果不太理想。

论文打算使用DNN-to-SNN转化方法将SNN应用到更复杂的目标检测领域中,图片分类只需要选择分类就好,而目标检测则需要神经网络进行高度准确的数字预测,难很多。在深入分析后,论文实现YOLO的转换主要面临以下两个问题:

  • 常用的SNN归一化方法过于低效,导致脉冲发射频率过低。由于SNN需要设定阈值进行脉冲发射,所以要对权值进行归一化,这样有利于阈值的设定,而常用的SNN归一化方法在目标检测中显得过于低效,后面会详细阐述

  • 在SNN领域,没有高效leaky-ReLU的实现,因为要将YOLO转换为SNN,YOLO中包含大量leaky-ReLU,这是很重要的结构,但目前还没有高效的转换方法

为此,论文使用channel-wise归一化(Channel-wise normalization)和阈值不平衡的有符号神经元(signed neuron with imbalanced threshold)来分别解决以上问题,搭建了基于SNN的目标检测模型Spiking-YOLO,论文的贡献总结如下:

  • 深度SNN在目标检测领域的第一次尝试

  • channel-wise归一化,深度SNN的细粒度归一化方法,使得多个神经元更高但仍然合适的频率发射脉冲,进而让SNN信息传递更快且更准确

  • 阈值不平衡的有符号神经元,提出leaky-ReLU在SNN领域的高效实现,在神经芯片上也能够轻量级集成

SNN神经元简述

SNN使用脉冲序列进行神经元间的信息传递,IF(integrate-and-fire)神经元累积输入到膜电压

第层的第个神经元的膜电压计算如公式1,为脉冲,为临界电压,为神经元的输入

由多个输入累加,和为权重和偏置

当膜电压大于临界电压时产生脉冲,为单位阶跃函数(unit step function),满足输出1,不满足则输出0。由于SNN是事件驱动的,能源利用率相当高,但难以训练是SNN在所有应用上的主要障碍。

方法

论文直接使用DNN-to-SNN转换方法将SNN应用到目标检测中,发现性能下降得十分严重,在分析性能下降原因后,得出两个主要原因:a) 大量神经元的脉冲发射频率过低 b) SNN缺少leaky-ReLU的高效实现。

Channel-wise data-based normalization

  • Conventional normalization methods

在SNN中,根据输入的幅度产生脉冲序列进行无损的内容传递是极为重要的。但在固定时间,激活过度或激活不足的神经元内将可能导致内容损失,这和临界电压的设置有关。设置过高,神经元需要累积很长时间的电压才能发射脉冲,相反则会过多地发射脉冲。发射频率通常定义为,为个timestep的脉冲发射总数,最大的发射率为100%,即每个timestep都发射脉冲

为了防止神经元的激活过度和激活不足,权值和临界电压都需要精心地选择。为此,很多研究提出了归一化的方法,比如常用的Layer-wise normalization(layer-norm)。该方法通过该层的最大化激活值来归一化层的权值,如公式4,和为权重,为输出特征图最大值。经过归一化后,神经元的输出就归一到,方便设定临界电压。由于最大激活值从训练集得到的,所以测试集和训练集需要有相同的分布,但论文实验发现这种常规的归一化方法在目标检测任务上会导致明显的性能下降。

  • Analysis of layer-norm limitation

图1展示了通过layer-norm后的各层每个channel的最大激活值,蓝色和红色的线分别为每层的平均激活值和最小激活值。可以看到每层的归一化后的激活值偏差较大,总体而言,layer-norm使得神经元的channel偏向激活不足,这在仅需选择分类的图片分类任务是不被察觉的,但对于需要预测准确值的检测任务的回归则不一样。比如传递0.7,则需要在10个timestep脉冲7次,0.007则需要在1000timestep脉冲7次。当tempstep本身就很少时,过低的发射率可能会因发射不到足够的脉冲而导致信息丢失。

  • Proposed normalization method

论文提出更细力度的归一化方法,channel-wise normalization(channel-norm),该方法在每层的channel维度上,使用最大激活值对权值进行归一化。

channel-wise归一化方法如公式5,和为维度下标,层权值通过在每个channel使用最大激活值进行归一化,该值依然是从训练集计算的。对于非首层中,归一化的激活值必须乘上来将输入还原为上一层归一化前的值,再进行本层的归一化,不然传递的信息会越来越小。

具体的逻辑如图2和算法1,channel-wise的归一化方法能够消除激活值特别小的问题,即得到更高但合适的发射频率,在短时间内也能准确地传递信息。

  • Analysis of the improved firing rate

如图3所示,对于channel-norm,大多数的神经元能接近80%的发射率,而对于layer-norm,大多数的神经元的发射率在0到3.5%之间,这明显表明channel-norm避免了过小的激活值使得更多神经发射频率更高且合适。

另外从图4可以看出,channel-norm在大多数的channel上能产生更高的发射频率,特别在channel 2。

图5则随机采样了20个神经元,记录其脉冲活动,使用channel-norm使得大多数神经元能够更有规律地发射脉冲
从上面的分析可以看出,channle-norm能够避免过小的归一化激活值,从而保持较高的脉冲发射频率,使得神经元能够在短时间内准确地传递信息,是深度SNN在解决更高级的机器学习问题的一种可行解决方案

Signed neuron featuring imbalanced threshold

  • Limitation of leaky-ReLU implementation in SNNs

ReLU是最常用的激活函数,保留正值而去掉所有的负值,目前的DNN-to-SNN方法都专注于IF神经元与ReLU间的转换,忽略了激活函数中的负值,而在Tiny-YOLO中,负值激活占了51%。leaky-ReLU是目前最常用的激活,通过leakage项来保留负值,一般为0.01,但目前还没有准确且高效的SNN实现方法。此前有研究提出负临界电压(-1),使得可以存在正负激活,然后在这基础乘以来转换leaky-ReLU,但这违背了生物学(脉冲是离散信号),而在神经芯片上也需额外的模块进行浮点运算。

  • The notion of imbalanced threshold

论文提出阈值不平衡的有符号神经元(IBT),在负值区域使用临界电压,不仅可以传递正负激活值,保持离散型,还可以高效和准确地仿照leaky-ReLU的leakage项。

如图6所示,假设,在时,,膜电压需要积累多10倍来发射负激活,类似于leaky-ReLU。

评估

Spiking-YOLO detection results

实验的目的是无损地将Tiny-YOLO的转移为SNN,结果如图7所示,使用channel-norm和IBT能有效地提升性能,且使用的timestep更少

论文尝试了不同的解码方式,分别为膜电压和脉冲数,由于脉冲数的余数要舍弃,这会带来误差和信息损失,所以基于膜电压进行解压会更准确

Spiking-YOLO energy efficiency

DNN主要使用相乘累积(multiply-accumulate , MAC)操作,而SNN则主要是累积操作(accumulate, AC),因为脉冲是二值的(1或-1),当接受到脉冲时,不用实时乘权重就可以知道结果。32-bit浮点型MAC和AC分别需要3.6pJ和0.9pJ,而32-bit整数型MAC和AC分别为3.2pJ和0.1pJ。如图9所示,不管使用哪种归一化方法,Spiking-YOLO的计算耗能仅为Tiny-YOLO的1/2000倍,能源利用十分高效。

论文在实际设备上对比了Spiking-YOLO(TrueNorth chip)和Tiny-YOLO(Titan V100),因为channel-norm的发射率较高且合适,所以使用了更少的timestep,能源消耗最少。

结论

论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次尝试,实现了与卷积神经网络相当的性能,而能源消耗极低。论文内容新颖,比较前沿,推荐给大家阅读。

参考内容

  • Towards spike-based machine intelligence with neuromorphic computing (https://www.nature.com/articles/s41586-019-1677-2)

  • Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition (https://link.springer.com/article/10.1007/s11263-014-0788-3)

论文地址:

https://arxiv.org/abs/1903.06530

【end】◆有奖征文◆推荐阅读超轻量级中文OCR,支持竖排文字识别、ncnn推理,总模型仅17M网红直播时的瘦脸、磨皮等美颜功能是如何实现的?比特币最主流,以太坊大跌,区块链技术“万金油”红利已结束 | 区块链开发者年度报告一文了解 Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控!用 3 个“鸽子”,告诉你闪电网络是怎样改变加密消息传递方式的!出生小镇、高考不顺、复旦执教、闯荡硅谷,59 岁陆奇为何如此“幸运”?你点的每个“在看”,我都认真当成了AI

脉冲神经网络在目标检测的首次尝试,性能堪比CNN | AAAI 2020相关推荐

  1. Spiking-YOLO : 前沿!脉冲神经网络在目标检测的首次尝试 | AAAI 2020

    点击我爱计算机视觉标星,更快获取CVML新技术 论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次成功尝试,实现了与卷积神经网络相当的性能,而能源消耗极低.论文内容新颖,比较前沿,推 ...

  2. 基于深度卷积神经网络的目标检测研究综述

    基于深度卷积神经网络的目标检测研究综述 人工智能技术与咨询 来自<光学精密工程> ,作者范丽丽等 摘要:作为计算机视觉中的基本视觉识别问题,目标检测在过去的几十年中得到了广泛地研究.目标检 ...

  3. 熬了几个大夜,学完一套985博士总结的「卷积神经网络、目标检测、OpenCV」学习笔记(20G高清/PPT/代码)...

    AI 显然是最近几年非常火的一个新技术方向,从几年前大家认识到 AI 的能力,到现在产业里已经在普遍的探讨 AI 如何落地了. 我们可以预言未来在很多的领域,很多的行业,AI 都会在里边起到重要的作用 ...

  4. 04.卷积神经网络 W3.目标检测(作业:自动驾驶 - 汽车检测)

    文章目录 1. 问题背景 2. YOLO 模型 2.1 模型细节 2.2 分类阈值过滤 2.3 非极大值抑制 2.4 完成过滤 3. 在照片上测试已预训练的YOLO模型 3.1 定义类别.anchor ...

  5. 基于卷积神经网络的目标检测算法

    基于卷积神经网络的目标检测算法 1 滑窗法 滑窗法的思路及其简单,首先需要已经训练好的一个分类器,然后把图片按照一定间隔和不同的大小分成一个个窗口,在这些窗口上执行分类器.如果得到较高的分数分类,就认 ...

  6. 卷积神经网络之目标检测总结

    概述 传统的目标检测任务主要通过人工提取特征模型建立,常用的特征包括:HOG.SIFT.Haar等,特征提取模型之后进行支持向量机或者Adaboost的分类任务,进而得到我们所关注的目标结果.由于特征 ...

  7. 目标检测YOLO实战应用案例100讲-基于轻量化神经网络的目标检测算法研究与应用

    目录 基于轻量化深度神经网络的目标检测方法研究 基于深度学习的目标检测方法

  8. 学界 | 斯坦福提出高速视频目标检测系统NoScope:速度超现有CNN上千倍

    卷积神经网络在目标检测任务上已经取得了优良的表现,但它们的计算成本比较高.速度比较慢,不适用于大规模的实时视频处理.为了解决这个问题,斯坦福大学的几位研究者提出了一个名叫 NoScope 的系统,将目 ...

  9. 04.卷积神经网络 W3.目标检测

    文章目录 1. 目标定位 2. 特征点检测 3. 目标检测 4. 滑动窗口的卷积实现 5. Bounding Box预测(YOLO) 6. 交并比 7. 非极大值抑制 8. Anchor Boxes ...

最新文章

  1. 新建gradle项目时总在下载gradle.zip
  2. iBatis.Net系列(一)-简介
  3. spring依赖注入_Spring3:类型安全依赖项注入
  4. Mybatis(14)多表查询
  5. 9. 求数组任意次最值
  6. alt php,我怎样才能在PHP中获取a p标签的alt属性?
  7. 腾讯 2016 春季实习校招二面回忆(C++后台)
  8. 从用户的角度看解决方案
  9. Jupyter notebook内使用(添加)虚拟环境
  10. nvidia-smi介绍
  11. coin3D中导入机器人模型
  12. LiveGBS国标GB/T28181|GB35114流媒体服务(LiveSMS)如何配置节点集群
  13. 建筑有言丨如果大学有一个最好的专业,那就是建筑学
  14. 第7期 DApp 榜单:长夜将至,我们将至死守望
  15. pixel 3 变焦_D3变焦—缺少的手册
  16. Daily record-November
  17. uniapp 使用微信扫一扫功能扫描指定二维码查看返回值
  18. 微信内点击链接或扫描二维码直接打开手机默认浏览器打开指定网页
  19. 云主机和电脑主机服务器有什么区别?
  20. 信息竞赛:DEV C++常用技巧

热门文章

  1. 《实施Cisco统一通信管理器(CIPT1)》一2.4 使用分布式呼叫处理的多站点WAN部署模型...
  2. 程序员的量化交易之路(25)--Cointrader之MarketData市场数据实体(12)
  3. NuGet 无法连接到远程服务器-解决方法
  4. 电脑开机显示Invalidsystemdisk
  5. 自动驾驶安全框架开发进展综述
  6. centOS外部浏览器无法访问tomcat8000端口解决办法
  7. 【12.16】VC++调用Word OLE进行自动化生成报表
  8. 使用Google 官方的控件SwipeRefreshLayout实现下拉刷新功能
  9. 列举一些常见的系统系能瓶颈 Common Bottlenecks
  10. 《ASP.NET MVC4 WEB编程》学习笔记------Web API 续