Spiking-YOLO: Spiking Neural Network for Energy-Efficient Object Detection |AAAI 2020
Spiking-YOLO:脉冲神经网络高效的目标检测
本文提出Spiking-YOLO是脉冲神经网络在目标检测领域的首次成功使用,具有高性能低功耗的优势。
Abstract
在过去的十年中,深度神经网络(DNNs)在各种应用中都表现出了显著的性能。随着我们试图解决更先进的问题,对计算和电力资源的需求也越来越大。脉冲神经网络(SNNs)由于其事件驱动和低功耗的特点,作为第三代神经网络受到了广泛的关注。然而,SNN很难训练,主要是由于它们复杂的神经元动力学和不可微的脉冲操作。此外,它们的应用局限于相对简单的任务,如图像分类。在这项研究中,我们研究了SNNs在一个更具挑战性的回归问题(即目标检测)中的性能退化原因。通过深入分析,我们提出了两种新的方法:逐通道归一化和阈值不平衡的符号神经元,这两种方法都为深度SNN提供了快速、准确的信息传输。因此,我们提出了首个基于脉冲的目标检测模型,称为Spiking-YOLO。实验结果表明,在数据集PASCAL-VOC和MS-COCO上与Tiny YOLO的效果相当(高达98%)。此外,在神经形态芯片上Spiking-YOLO消耗的能量大约比Tiny YOLO小280倍,并且收敛速度比以前的SNN转换方法快2.3~4倍。
Introduction
深度神经网络(deep neural networks,DNNs)最近取得成功的主要原因之一,可以归因于高性能计算系统的发展和大量用于模型训练的数据的可用性。然而,在实际应用中解决更多复杂和高级的问题,需要更复杂的模型和训练数据,这导致计算开销和功耗显著增加。为了克服这些挑战,许多研究人员尝试使用剪枝、压缩和量化来设计计算效率和能量效率高的DNN,其中一些已经显示出很有希望的结果。尽管做出了这些努力,但随着更深入、更复杂的神经网络获得更高的精度,对计算和电力资源的需求将增加。
脉冲神经网络(SNNs)是第三代神经网络,它以脉冲神经元为计算单元,模拟信息在人脑中的编码和处理过程。与传统的神经网络不同,SNN通过由一系列脉冲(离散)组成的脉冲序列的精确定时(时间)来传输信息,而不是通过一个真实值(连续)。也就是说,SNN在信息传输中利用时间,就像在生物神经系统中一样,从而提供稀疏但强大的计算能力。此外,当接收到脉冲时,脉冲神经元将输入整合到膜电位中,当膜电位达到一定阈值时,产生(发放)脉冲,从而实现事件驱动计算。由于脉冲事件的稀疏性和事件驱动的计算,SNN提供卓越的能效 ,是神经形态结构中首选的神经网络。
尽管SNN潜力巨大,但它仅限于相对简单的任务(如,图像分类)和较小的数据集(例如,MNIST和CIFAR),其结构相当浅。应用范围有限的一个主要原因是由于脉冲神经元的复杂动力学和不可微操作,缺乏可扩展的训练算法。DNN-SNN转换方法作为一种替代方法,近年来得到了广泛的研究。这些方法基于将预先训练的参数(如权重和偏差)从DNN导入SNN的思想。DNN到SNN的转换方法在深层SNN中取得了与原始DNN(如VGG和ResNet)相当的结果,在MNIST和CIFAR数据集的结果具有竞争力,而ImageNet数据集的结果与DNN的精度相比则不尽如人意。
在本研究中,使用DNN到SNN的转换方法来探讨深度SNN中一个更先进的机器学习问题,即目标检测。目标检测被认为是更具挑战性的,因为它涉及到识别多个重叠对象和计算边界框的精确坐标。因此,在预测神经网络的输出值(即回归问题)时,它需要很高的数值精度,而不像在图像分类中那样选择一个概率最高的类(即argmax函数)。在深入分析的基础上,提出了将目标检测应用于深度SNN时存在的几个问题:a)传统归一化方法效率低下;b)SNN域中缺少一种有效的leaky-ReLU实现方法。
为了克服这些问题,我们提出了两种新的方法:通道归一化和阈值不平衡的有符号神经元。因此,提出了一个基于脉冲的目标检测模型,称为Spiking-YOLO。作为SNNs中目标检测的第一步,我们实现了基于Tiny YOLO的Spiking-YOLO。
这是第一个用于目标检测的深度SNN,在非平凡数据集PASCAL VOC和MS-COCO上获得了与DNN相当的结果。作者贡献可以总结如下:
- 深度SNN的首个目标检测模型首次提出了一个在深度SNN中实现高效目标检测的模型Spiking YOLO。在非平凡数据集上,Spiking YOLO的结果与原始DNN相当,即98%。
- 逐通道归一化 提出了了一个针对深度SNN的细粒度归一化方法。所提出的方法能够在多个神经元中获得更高但适当的放电率,从而在深度SNN中实现了快速、准确的信息传输。
- 阈值不平衡的有符号神经元提出了一种在SNN域中准确有效地实现leaky-ReLU的方法。该方法易于在最小开销的神经形态芯片上实现。
Related work
DNN-to-SNN conversion
与DNN相反,SNN使用由一系列脉冲组成的脉冲序列在神经元之间传递信息。IF神经元将输入z累加到膜电位Vmem
由于事件驱动的性质,SNN提供节能操作。然而,在各种应用中部署snn时,它们很难训练,这一直是主要的障碍之一。
SNNs的训练方法包括具有脉冲时间依赖可塑性(STDP) 的无监督学习和具有梯度下降和误差反向传播的有监督学习。尽管STDP在生物学上更为合理,但其学习效果明显低于监督学习。最近的工作提出了一种监督学习算法,该算法的函数逼近SNNs的不可微部分(IF),以提高学习性能。尽管做了这些努力,但以往的工作大多局限于浅层snn上的图像分类任务和MNIST数据集。
Object detection
目标检测通过绘制边界框,定位图像或视频中的单个或多个对象,然后识别其类别。因此,目标检测模型不仅包括对目标进行分类的分类器,还包括预测边界框的精确坐标(x轴和y轴)和大小(宽度和高度)的回归器。由于预测边界框的精确坐标是关键,因此目标检测被认为是比图像分类更具挑战性的任务,在图像分类中,argmax函数被用来简单地选取一个概率最高的类。
基于区域的CNN(R-CNN)被认为是目标检测领域最重要的进展之一。为了提高检测性能和速度,人们提出了各种R-CNN的扩展版本,即fast R-CNN、faster R-CNN和Mask R-CNN。然而,基于R-CNN的网络由于采用多级检测方案,推理速度慢,不适合实时目标检测。
作为一种替代方法,提出了一步检测方法,提取边界框信息,在统一的网络中对目标进行分类。在一级检测模型中,“单点多盒检测器”(SSD)和“你只看一次”(YOLO)实现了最先进的性能。尤其是在实时目标检测中,YOLO具有较高的推理速度(FPS),且不存在显著的精度损失。因此我们选择了Tiny YOLO作为目标检测模型。
Methods
在目标检测中,识别多个目标并在其周围绘制边界框(即回归问题)是一个巨大的挑战:预测网络的输出值需要很高的数值精度。
利用传统的DNN-SNN转换方法在深度SNN中进行目标检测时,其性能严重下降,无法检测到任何目标。
作者深入分析强调了这种性能下降的可能原因:a)大量神经元的放电率极低;b)SNN中缺乏一种有效的leaky-ReLU实现方法。为了克服这些问题,我们提出了两种新的方法:通道归一化和阈值不平衡的有符号神经元。
Channel-wise data-based normalization
Conventional normalization methods
在典型的SNN中,确保神经元根据输入的大小产生脉冲序列,并在不丢失任何信息的情况下传输这些脉冲序列是至关重要的。然而,在给定的时间步长下,神经元的激活不足或过度激活都可能导致信息丢失。例如,如果阈值电压Vth非常大或输入很小,那么膜电位Vmem将需要很长时间才能达到Vth,从而导致低发射率(即未激活)。相反,如果Vth非常小或输入很大,那么Vmem很可能会超过Vth,并且无论输入值是多少,神经元都会产生脉冲(即过度激活)。值得注意的是,发射率可以定义为N/T,其中N是给定时间步长T中的脉冲总数。最大发射率将是100%,因为每个时间步长都可以产生脉冲。
为了防止神经元激活不足或过度激活,需要仔细选择权值和阈值电压,以保证神经元的有效和平衡激活。各种基于数据的归一化方法被提出。层归一化(Layer-wise normalization,简称layer-norm)是最著名的归一化方法之一;layer-norm通过在DNN中运行训练数据集计算出对应层的最大激活来归一化特定层中的权重。这是基于一个假设,即训练和测试数据集的分布是相似的。此外,请注意,使用最大激活归一化权重的效果与归一化输出激活的效果相同。layer-norm计算
作为layer-norm的一个扩展版本,引入了一种使用最大激活的99.9%来归一化激活的方法;这增加了对异常值的鲁棒性,并确保了神经元的充分激活。然而,我们的实验表明,当使用传统的归一化方法在深度SNN中应用目标检测时,该模型的性能会显著下降。
Analysis of layer-norm limitation
图1表示从layer-norm获得的每个通道中的归一化最大激活值。Tiny YOLO由八个卷积层组成;x轴表示通道索引,y轴表示归一化的最大激活值。蓝线和红线分别表示每个层中归一化激活的平均值和最小值。如图1所示,对于特定卷积层,每个通道上的归一化激活的偏差相对较大。例如,在Conv1层中,对于某些通道(如通道6、7和14),归一化最大激活接近1,对于其他通道(如通道1、2、3、13和16),归一化最大激活接近0。其他卷积层也一样。显然,layer-norm在许多通道中产生异常小的归一化激活(即,激活不足),这些通道在归一化之前具有相对较小的激活值。
这些非常小的归一化激活在图像分类中未被检测到,但在解决深度SNN中的回归问题时可能是非常困难的。例如,要传输0.7,需要7个脉冲和10个时间步长。应用相同的逻辑,传输0.007需要7个脉冲和1000个时间步长,而不会丢失任何信息。因此,要发送非常小(例如0.007)或精确(例如0.9007与0.9000)的值而不造成任何损失,需要大量的时间步长。时间步长被认为是被传输信息的分辨率。因此,极小的归一化激活会产生较低的触发率,当时间步长小于所需时,会导致信息丢失。
Proposed normalization method
提出了一种更细粒度的规范化方法,称为通道归一化(channel-wise normalization,简称channel-norm),以实现深度SNN中快速高效的信息传输。我们的方法通过最大可能激活(99.9%)以通道方式而不是传统的层方式来归一化权重。提出的channel-norm可以表示为
如前所述,最大激活是从训练数据集计算出来的。在下一层中,归一化激活必须乘以λl-1i,以在归一化之前获得原始激活。具体方法如算法1和图2所示。
以通道方式归一化激活可消除极小激活(即,欠激活),在归一化之前有很小的激活值。换言之,神经元被归一化以获得更高但适当的放电率,从而在短时间内实现准确的信息传输。
Analysis of the improved firing rate
在图3中,x轴和y轴分别表示在对数尺度上产生特定放电率的神经元的放电率和数量。对于channel-norm,许多神经元产生高达80%的放电率。然而,在layer-norm中,大多数神经元产生的放电率在0%到3.5%之间。这是清楚表明了,channel-norm消除了极小的激活,更多的神经元产生更高但适当的放电率。此外,图4显示了卷积层1中每个通道的放电率。显然,channel-norm在大多数通道中产生更高的放电率。特别是在通道2中,channel-norm产生的放电率比layer-norm高20倍。此外,图5显示了20个采样神经元的脉冲活动的光栅图。可见,应用channel-norm时,许多神经元放电更为规律。
详细分析验证了细粒度channel-norm可以更好地归一化激活,防止激活不足导致低放电率。换句话说,极小的激活被适当地归一化,这样神经元就可以在短时间内准确地传递信息。在图像分类等简单应用中,这些小的激活可能不重要,对网络的最终输出影响不大;但是,它们在回归问题中是关键的,并且显著影响模型的精度。因此,channel-norm是解决深度SNNs中更高级的机器学习问题的可行方案。
Signed neuron featuring imbalanced threshold
Limitation of leaky-ReLU implementation in SNNs
ReLU是最常用的激活函数之一,它只保留正输入值,并丢弃所有负值;当x≥0时,f(x)= x,否则f(x)=0。与ReLU不同,leaky-ReLU包含带leaky项的负值,斜率α,通常设置为0.01;当x≥0时,f(x)=x,否则f(x)=αx。
以往的DNN-SNN转换方法大多集中于IF神经元向ReLU的转换,而完全忽略了激活函数负区域的漏项。请注意,在Tiny YOLO中,负激活占51%以上。为了扩展SNNs中绑定到负区域的激活函数,添加了第二个Vth项(-1)。他们的方法成功地将BinaryNet转换为SNNs,其中BinaryNet的激活在CIFAR-10上被限制为+1或-1。
目前,各种DNN都使用leaky-ReLU作为激活函数,但还没有一种在SNN域中实现leaky-ReLU的准确有效的方法。leaky-ReLU可以在SNNs中实现,除了第二Vth项(-1)外,只需将负激活乘以斜率α。然而,这在生物学上是不合理的(脉冲是一个离散的信号),在神经形态芯片上使用时可能是一个巨大的挑战。例如,斜率α的浮点乘法需要额外的硬件。
The notion of imbalanced threshold
本文介绍了一种具有不平衡阈值(以下简称IBT)的有符号神经元,它不仅能解释正、负激活,而且能准确、有效地补偿leaky-ReLU负区间的leaky项。该方法还通过对负区间引入不同的阈值电压Vth,neg来保持脉冲的离散特性。第二阈值电压Vth,neg等于负Vth除以斜率α的,而Vth,pos等于Vth。这将在leaky-ReLU的负区间代替leaky漏项(斜率α)。带有IBT的有符号神经元的潜在动力学表现为
如图6所示,如果斜率α=0.1,则负责正激活Vth,pos的阈值电压为1V,而负责负激活Vth,neg的阈值电压为-10V;因此,必须对Vmem进行10倍以上的积分,以产生leaky-ReLU中负激活的脉冲。
值得注意的是,有符号的神经元也能实现兴奋性和抑制性神经元,这在生物学上更为合理。使用带IBT的有符号神经元,leaky-ReLU可以在SNNs中准确实现,并且可以以最小的开销直接映射到当前的神经形态结构。此外,该方法将为将各种DNN模型转换为SNN提供更多的应用机会。
Evaluation
Experimental setup
作为深入SNNs中目标检测的第一步,我们使用了实时目标检测模型Tiny YOLO,它是YOLO的一个简单而有效的版本。在SNNs中实现了max-pooling和batch-normalization。Tiny YOLO在非平凡数据集PASCAL VOC和MS COCO上进行了测试。模型模拟基于TensorFlow-Eager,并在NVIDIA Tesla V100 GPUs上进行了所有的实验。
Experimental results
Spiking-YOLO detection results
为了验证和分析所提方法的功能,我们研究了有无channel-norm和带有IBT的有符号神经元的影响。如图7所示,当使用channel-norm和带有IBT的有符号神经元时,Spiking-YOLO在VOC-PASCAL和MS-COCO上分别达到51.83%和25.66%的显著性能。Tiny YOLO的目标mAP为53.01%(PASCAL VOC)和26.24%(MS COCO)。事实上,channel-norm比layer-norm在目标检测方面有很大的优势,特别是在PASCAL VOC上(53.01%比48.94%),并且收敛速度更快。例如,要达到layer-norm的最大mAP(48.94),channel-norm只需要大约3500个时间步长(快2.3倍)。在MS-COCO中也观察到类似的结果,其中channel-norm的收敛速度甚至比layer-norm快(4倍)。具体结果见表1。
值得注意的是,没有提出的方法,模型无法检测到目标,VOC PASCAL和MS COCO的检测率分别为6.87%和2.82%。当使用channel-norm时,模型仍然难以检测到目标,检测率最多约7.31%和3.02%。这是一个很好的迹象表明,带IBT的有符号神经元在leaky-ReLU中准确地实现了漏项。因此,其余的实验是以IBT为默认值的有符号神经元进行的。
为了进一步分析,我们对两种不同的输出解码方案进行了额外的实验:一种是基于累积Vmem,另一种是基于脉冲计数。Vmem/Vth的商表示脉冲计数,余数四舍五入。余数将最终成为一个错误和丢失的信息。因此,基于Vmem的输出解码方案对于解释脉冲序列更为精确;图7验证了这个断言。基于Vmem的输出解码方案优于基于脉冲计数的方案,在channel-norm上收敛更快。
图8说明了随着时间步长的增加Spiking-YOLO在检测目标时的效果。对于每一个样本,最左边的图像(Tiny YOLO)都显示了Spiking-YOLO试图复制 ground truth label 。在左上角的样本(三艘船)中,仅经过1000个时间步长,用channel-norm的Spiking-YOLO就成功地检测到了所有三个目标。同时,用layer-norm的Spiking-YOLO未能检测到任何目标。经过2000个时间步长,它开始在目标周围绘制边界框,但是在单个目标上绘制了多个边界框,并且它们的大小都不准确。检测性能随着时间步长的增加而提高,但仍不令人满意;要达到所提出的channel-norm的检测性能,需要5000个时间步长。图8中的其他样本也显示了Spiking-YOLO卓越的性能。所提出的channel-norm在较短时间内准确检测多目标和小目标方面显示出明显的优势。
Spiking-YOLO energy efficiency
为了研究Spiking-YOLO的能效,我们考虑了两种不同的方法:a)数字信号处理中Spiking-YOLO和Tiny YOLO 的计算操作;b)神经形态芯片上Spiking-YOLO 和gpu上Tiny YOLO的比较。
首先,DNN中的大多数操作发生在卷积层中,在卷积层中主要负责执行乘法累加(MAC)操作。然而,SNN执行累加(AC)操作,因为脉冲事件是二进制操作其输入仅在接收脉冲时集成(或累加)到膜电位中。为了公平比较,我们只关注用于对单个图像执行目标检测的计算能力(MAC和AC)。根据(Horowitz 2014),32位浮点(FL)MAC操作消耗4.6 pJ(0.9+3.7 pJ),AC操作消耗0.9 pJ。32位整数(INT)MAC操作消耗3.2pJ(0.1+3.1pJ)和AC操作消耗0.1pJ。基于这些措施,我们计算了Tiny YOLO和Spiking-YOLO的能耗通过FLOPs(浮点运算)乘以MAC和AC计算的能耗,如下所示。我们根据2016年《雷蒙》上报告的Tiny YOLO的FLOPs,在我们的模拟中计算了Spiking-YOLO的FLOPs。图9显示,无论采用何种归一化方法,Spiking-YOLO都显示出卓越的能效,对于32位FL和INT操作,它比Tiny YOLO高出2000倍以上。
其次,神经形态芯片上的SNN具有优异的能量效率,这是神经网络的一个重要和理想方面。我们分别比较了在最新的GPU(泰坦V100)和神经形态芯片(TrueNorth)上运行时,Tiny YOLO和Spiking-YOLO的能量消耗。Titan V100的功率和GFLOPS(每秒千兆浮点运算)从(NVIDIA 2017)获得,TrueNorth的GFLOPS/W来自(Merolla等人。2014年)中。我们将一个时间步长定义为1毫秒(1 kHz同步信号)在(Merolla等人。2014年)中。
根据在表2中的计算,当在TrueNorth上运行时,Spiking-YOLO消耗的能量大约小于Tiny YOLO的280倍。实验结果表明,所提出的 channel-norm比layer-norm收敛快得多,因此,由于具有相似的功耗,采用 channel-norm的Spiking-YOLO的能耗大约小于采用layer-norm的4倍。请注意,当代的GPU是更先进的计算技术,TrueNorth芯片于2014年首次引入。随着神经形态芯片的不断发展和更好的性能,我们可以期待更高的能量和计算效率。
Conclusion
本文提出了首个SNN模型Spiking YOLO,它通过在非平凡数据集PASCAL VOC和MS-COCO上获得与原始DNN相似的结果,成功地执行了目标检测。为此,提出了两种新的方法。作者认为,这项研究是解决深层SNNs中更先进的机器学习问题的第一步。