CN108470190B - 基于fpga定制脉冲神经网络的图像识别方法 - Google Patents

基于fpga定制脉冲神经网络的图像识别方法 Download PDF

Info

Publication number
CN108470190B
CN108470190B CN201810193174.2A CN201810193174A CN108470190B CN 108470190 B CN108470190 B CN 108470190B CN 201810193174 A CN201810193174 A CN 201810193174A CN 108470190 B CN108470190 B CN 108470190B
Authority
CN
China
Prior art keywords
address
convolution
pulse
layer
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810193174.2A
Other languages
English (en)
Other versions
CN108470190A (zh
Inventor
任全胜
赵君伟
肖国文
周一
何娴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN201810193174.2A priority Critical patent/CN108470190B/zh
Publication of CN108470190A publication Critical patent/CN108470190A/zh
Application granted granted Critical
Publication of CN108470190B publication Critical patent/CN108470190B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/29Graphical models, e.g. Bayesian networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Image Analysis (AREA)

Abstract

本发明公布了一种基于FPGA定制脉冲神经网络的图像识别方法,通过在FPGA平台定制化卷积脉冲神经网络来进行图像识别;卷积脉冲神经网络包括卷积层、降采样层、全连接层和分类层;图像识别方法包括:产生脉冲序列、卷积运算、降采样、全连接和分类识别过程;具体实现采用的开发平台为Xilinx FPGA开发板Virtex‑7,采用的开发软件为Vivado,编程语言为Verilog。本发明可以识别数值神经网络无法识别的脉冲序列信息,在高速场景下具有识别速度更快、准确率更高、功耗更低的优势。

Description

基于FPGA定制脉冲神经网络的图像识别方法
技术领域
本发明属于脉冲神经网络、类脑计算、FPGA技术领域,涉及神经网络的脉冲化实现,尤其涉及一种基于FPGA定制脉冲神经网络的图像识别方法。
背景技术
近几年来,人工神经网络发展迅速,特别是以深度学习技术为典型代表的神经网络的研究和应用,在国内已掀起一股热潮。这类神经网络多以数值神经网络为主,随着网络规模的不断增大,在GPU、CPU等计算平台上的功率也在迅速增加,功耗已经成为一个不容忽视的问题。此外,数值神经网络随着网络复杂度的提升,大大降低了信息处理速度,因此在高速实时场景下的效果不好。FPGA(Field-Programmable Gate Array,现场可编程门阵列)具有低功耗、灵活性好、并行计算能力强等优点,成为神经网络的一大定制化平台。
脉冲神经网络被誉为“第三代神经网络”,相比于目前广为流行的数值神经网络,脉冲神经网络更具有仿生特性,可以处理脉冲时间序列,即可以识别通过脉冲序列来编码的图像,在信息处理机制方面,脉冲神经网络与人脑更为相似。因此,脉冲神经网络也被纳入“类脑计算”的范畴。
但是,现有基于FPGA的神经网络定制化技术大多是对数值神经网络的实现,尚无法实现基于FPGA的卷积脉冲神经网络定制化,进而也没有基于FPGA定制卷积脉冲神经网络的图像识别应用,这在“类脑计算”领域中是一个尚待研究的内容。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于FPGA定制脉冲神经网络的图像识别方法,在FPGA平台上实现定制化卷积脉冲神经网络,为类脑计算提供了一种新的实现方案,并进一步为图像识别提供了一种新的技术途径。
本发明的核心是在FPGA平台实现了定制化卷积脉冲神经网络,首先将脉冲序列输入到脉冲神经网络的卷积层,脉冲序列可以由DVS(Dynamic Vision Sensor,动态视觉传感器)摄像头等仿生视觉传感器产生,也可以通过对数值图片进行脉冲转化的方式产生;卷积层通过离散卷积算法对脉冲序列做卷积运算,并将运算结果以脉冲地址的形式传递给降采样层;然后降采样层接收卷积层传递来的脉冲地址,根据接收的脉冲地址数据使用离散的平均池化算法进行运算,并将结果以脉冲地址的形式传递给全连接层;全连接层的每一个等效神经元以不同权重连接降采样层的每一个等效神经元,并对降采样层传递来的脉冲地址进行处理,再将运算结果传递给分类层;分类层由10个等效神经元组成,对应于0~9十个数字,每个神经元统计由全连接层传递到各自的脉冲数量;最后,统计一段足够长的时间内各个分类层神经元的脉冲数量,以数量最多的神经元所代表的数字作为识别结果。本发明方法创造性的实现了脉冲神经网络算法在FPGA平台的定制,为类脑计算在FPGA平台的实现提供了一种新的技术方案,并进一步为图像识别提供了一种新的技术途径。
本发明提供的技术方案是:
一种基于FPGA定制脉冲神经网络的图像识别方法,针对通过脉冲序列编码的图像,在FPGA平台定制化卷积脉冲神经网络进行图像识别,卷积脉冲神经网络包括卷积层、降采样层、全连接层和分类层;所述图像识别方法包括:产生脉冲序列、卷积运算、降采样、全连接和分类识别过程;包括如下步骤:
1)将脉冲序列输入到卷积脉冲神经网络的卷积层;
脉冲序列可以由DVS(Dynamic Vision Sensor,动态视觉传感器)摄像头等仿生视觉传感器产生,也可以通过对数值图片进行脉冲转化的方式产生;通过脉冲序列获取脉冲地址;
2)卷积脉冲神经网络的卷积层通过离散卷积算法对脉冲序列做卷积运算,并将运算结果以脉冲地址的形式传递给降采样层;
3)降采样层接收卷积层传递来的脉冲地址,根据接收的脉冲地址数据使用离散的平均池化算法进行运算,并将运算结果以脉冲地址的形式传递给全连接层;
4)全连接层的每一个等效神经元以不同权重连接降采样层的每一个等效神经元,并对降采样层传递来的脉冲地址进行处理,再将运算结果传递给分类层;
5)分类层的每个等效神经元统计由全连接层传递到各自的脉冲数量;最后,统计一段时间内各个分类层神经元的脉冲数量,以数量最多的神经元所代表的数字作为识别结果。
本发明在具体实施中,基于FPGA定制脉冲神经网络的实现的开发平台采用Xilinx(赛灵思)公司的Xilinx FPGA开发板Virtex-7,开发软件采用Vivado,编程语言是Verilog。
针对上述基于FPGA定制脉冲神经网络的图像识别方法,步骤1)产生脉冲序列,并输入神经网络;具体地,当对动态图像进行识别时,FPGA开发板外接仿生视觉传感器(如DVS摄像头等),并产生相应的脉冲序列,将脉冲序列直接输入脉冲网络;当对静态图像进行识别时,先将静态图像(具体实施中选取的图像测试集为MNIST,选用分辨率为28*28的手写体数字灰度图像)存储在FPGA开发板的存储空间中,然后进行脉冲地址编码,将脉冲地址输入神经网络。产生脉冲序列执行一个完整周期的操作,包括:
11)用随机数发生器产生一个0~783之间的整数,该数字作为待识别灰度图像的像素地址;
12)读取待识别图像在该地址的像素灰度;
13)用随机数发生器产生一个0~255之间的整数,将该数字与上一步读出的像素灰度比较大小;
14)如果随机数大于等于该像素灰度,则将该像素地址写入卷积层的输入FIFO(First In First Out,先进先出)模块,如果随机数小于该像素灰度,则不进行写入操作,并进入下一个操作周期。
针对上述基于FPGA定制脉冲神经网络的图像识别方法,步骤2)卷积运算具体执行如下操作:
通过脉冲序列得到脉冲地址,当卷积层接收到一个脉冲地址为(x,y)的数据后,开始进行卷积运算,计算过程如式1:
Sum(i,j)+=kernel(x-i,y-j) (式1)
其中,kernel为卷积核;每个卷积权重的位置标记为(m,n),m=x-i,n=y-j;Sum(i,j)为卷积运算结果;
卷积核kernel的大小为5*5,每个卷积核的权重通过数值卷积神经网络进行训练,然后导入到脉冲神经网络使用即可,每个卷积权重的位置标记为(m,n),m=x-i,n=y-j且m,n∈[0,4],则卷积后输出地址的范围为x′,y′∈[0,23],i,j为移动坐标,满足max(x-3,0)≤i≤min(x,23),max(y-3,0)≤j≤min(y,23)。
由于脉冲神经网络中选用的是LIF(Leaky Integrate and Fire,漏电流积分激发)型神经元,因此,当卷积运算结果到达一定的阈值(本发明具体实施中阈值设定为255)之后,该神经元就会激发,激发后对自身复位,然后进入下一次激发态的等待状态中。
上述卷积运算在FPGA上的硬件实现包括:5个两状态状态机,1个输入FIFO,1个输出FIFO,1个单口BRAM(Block Random Access Memory,块随机存储器);其中,状态机主要解决计算环节的控制,两状态包括1状态和2状态;流水线主要提高计算效率;FIFO用于存储输入或输出的脉冲地址,BRAM用于存储卷积计算的结果。
状态机1包含2个操作步骤:
1)判断一个卷积计算周期(从卷积层输入FIFO中读取一个新的脉冲地址,移动坐标根据脉冲地址进行移位操作,依次从状态机1至状态机5完成每个计算步骤)是否结束,如果一个计算周期已经结束(卷积核是5*5,因此一个卷积计算周期至多有25步,本发明中的实现方式是:在FPGA中设定了一个计数变量,每当从卷积层输入FIFO中读取一个新的脉冲地址,计数变量复位为0,然后每个时钟周期计数变量自增1,当计数变量增长到24时,作为一个计算周期结束的标志),则从卷积层输入FIFO中读取一个新的脉冲地址,如果该计算周期未结束,则保留当前的脉冲地址;
2)根据当前脉冲地址计算移动坐标i,j,并把当前脉冲地址传递给下一个计算步骤;
状态机2包含2个操作步骤:
1)读取上一个步骤传递过来的当前脉冲地址,并将其分解为行地址和列地址;
2)判断当前脉冲的行地址和列地址是否在有限卷积区间内,并把判断结果传递给下一个计算步骤;
状态机3包含2个操作步骤:
1)开启BRAM的读取使能,如果当前脉冲行地址和列地址均在有效卷积范围内,则在单口BRAM的对应地址取出存储的数据(BRAM中的所有存储数据初始化为0),如果当前脉冲行地址或列地址不在有效卷积范围内,则在BRAM的无效地址取出一个无效数字,取出后的数字不参与卷积运算,不影响正常计算流程;
2)关闭BRAM的读取使能,则BRAM切换成写入模式,保证状态机5在2状态时将运算结束的数据写回BRAM的对应地址;Xilinx IP(Intellectual Property,知识产权)核BRAM配置成写入优先的模式时,读取操作有一个时钟的延迟,因此该状态预留一个时钟,保证状态1中对应地址的数据顺利取出;Xilinx IP核是FPGA芯片开发中的功能模块。
状态机4包含2个操作步骤:
1)把状态机3中给定BRAM地址的数据加上相应的卷积权重;
2)判断上一个计算步骤中的运算结果是否超过阈值,如果超过阈值,则自身复位为0,并向卷积层输出FIFO写入当前地址,表示当前地址向降采样层发送了一个脉冲;如果运算结果没有超过阈值,则保留当前值,不向卷积层输出FIFO写入数据;
状态机5包含2个操作步骤:
1)读取状态机4中状态2的运算结果并传递给下一个计算步骤,由于此时BRAM处于读取状态,因此需要等待一个时钟才能写入;
2)BRAM此时处于写入状态,因此,将上一个计算步骤中传递的数据写入BRAM相应的地址内;至此,一个完整的基于FPGA框架的卷积运算流程结束。
针对上述基于FPGA定制脉冲神经网络的图像识别方法,步骤3)降采样层从卷积输出FIFO中读取卷积层传递过来的脉冲地址,使用平均池化算法对每个脉冲地址做降采样操作,并将运算结果写入降采样BRAM中;降采样层的FPGA实现具体包括3个两状态状态机构成的6级流水线操作流程,模拟LIF神经元模型,每个运算周期结束后,判断运算结果是否超过阈值,如果超过阈值,则自身复位并向降采样FIFO写入对应脉冲地址,如果没有超过阈值,则保留当前结果。
针对上述基于FPGA定制脉冲神经网络的图像识别方法,步骤4)中,全连接层模拟LIF神经元模型,每一个神经元以不同的权重与降采样层的每个神经元连接;在FPGA的设计方案中,这种全连接关系由地址映射表来实现。
针对上述基于FPGA定制脉冲神经网络的图像识别方法,步骤5)分类识别过程中,分类层由10个等效神经元组成,对应于0~9十个数字。分类层的神经元各自配备一个计数器,当每个神经元的运算结果超过阈值后,不再发送脉冲地址,而是自身的计数器执行加1的操作。通过比较一段足够长的时间内各分类层神经元计数器统计数字的大小,来判定识别结果。
上述基于FPGA定制脉冲神经网络的图像识别方法可以实现对手写体数字图像的准确识别,该脉冲神经网络中的权重参数包括卷积核权重、全连接层的神经元权重、分类层的神经元权重,权重参数均通过同等规模的数值神经网络用BP(Back Propagation,后向传播)算法训练得到。
与现有技术相比,本发明的有益效果是:
本发明提出了一种基于FPGA的脉冲神经网络图像识别算法的实现方案,可以对手写体数字图像进行准确识别。本发明在FPGA平台实现了定制化卷积脉冲神经网络得为在FPGA平台上实现类脑计算提供了新的技术方案,并进一步为图像识别提供了一种新的技术途径。本发明具有类脑计算的优势,相比已经广泛流传的数值神经网络算法,本发明可以识别数值神经网络无法识别的脉冲序列信息,在高速场景下具有识别速度更快、准确率更高的优势;相比于在CPU、GPU平台运行的脉冲神经网络,本发明具有功耗更低的优势。
附图说明
图1为本发明方法的流程框图。
图2为本发明具体实施中脉冲地址卷积算法的FPGA实现方案的流程框图。
图3为本发明具体实施中降采样层FPGA实现方案的流程框图。
图4为本发明具体实施中Brian Simulator对脉冲神经网络卷积层的仿真输出结果(左)与FPGA搭建的脉冲神经网络卷积层的输出结果(右)。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种基于FPGA的脉冲神经网络定制化方法及图像识别应用,在FPGA平台实现定制化卷积脉冲神经网络,使得可以在FPGA平台上实现类脑计算,并进一步为图像识别提供了一种新的技术途径。
基于FPGA的脉冲神经网络定制化包括:产生脉冲序列、卷积运算、降采样、全连接和分类识别;具体包括如下步骤:
步骤一:脉冲序列的产生
(1)如果对动态图像进行识别,FPGA开发板外接DVS摄像头等仿生视觉传感器,传感器镜头对准图像并产生相应的脉冲序列,将传感器产生的脉冲序列直接输入脉冲网络;
(2)如果是对静态图像进行识别,则需要先将分辨率为28*28的手写体数字灰度图像存储在FPGA开发板的存储空间中,然后进行脉冲地址编码,将脉冲地址输入神经网络。实现方案的一个完整周期包括:
1)用随机数发生器产生一个0~783之间的整数,该数字作为待识别灰度图像的像素地址;
2)读取待识别图像在该地址的像素灰度;
3)用随机数发生器产生一个0~255之间的整数,将该数字与上一步读出的像素灰度比较大小;
4)如果随机数大于等于该像素灰度,则将该像素地址写入卷积层的输入FIFO,如果随机数小于该像素灰度,则不进行写入操作,并进入下一个操作周期。
步骤二:卷积运算
包括脉冲地址卷积算法的实现方法及其在FPGA平台的具体实现方案流程;图2是脉冲地址卷积算法的FPGA实现方案流程;
(1)脉冲地址卷积算法的实现方法:
1)输入的脉冲地址是一个点坐标,横坐标和纵坐标范围均是[0,27],规定图像左上角的像素地址为(0,0),右下角的像素地址为(27,27)。当卷积层接收到一个脉冲地址为(x,y)的数据后,开始进行卷积运算,实现过程如下:
Sum(i,j)+=kernel(x-i,y-j) (式1)
其中,卷积核kernel的大小为5*5,每个卷积核的权重通过数值卷积神经网络进行训练,然后导入到脉冲神经网络使用即可,每个卷积权重的位置标记为(m,n),显然m=x-i,n=y-j且m,n∈[0,4],则卷积后输出地址的范围为x′,y′∈[0,23],i,j为移动坐标,满足max(x-3,0)≤i≤min(x,23),max(y-3,0)≤j≤min(y,23)。
2)由于脉冲神经网络中选用的是LIF型神经元,因此,当卷积运算结果到达一定的阈值之后,该神经元就会激发,激发后对自身复位,然后进入下一次激发态的等待状态中。
因此,卷积层的处理过程表示如下:
其中,Conv_out_FIFO_wr_en是卷积层输出FIFO的写入使能控制信号。
(2)脉冲地址卷积算法的FPGA上的硬件实现方案流程:
整体设计架构是FPGA的“状态机+流水线”。“状态机”主要解决的问题是计算环节的控制,“流水线”主要解决的问题是提高计算效率。整体方案由5个两状态机,1个输入FIFO,1个输出FIFO,1个单口BRAM组成。FIFO用于存储输入或输出的脉冲地址,BRAM用于存储卷积计算的结果。如附图2所示:
状态机1包含2个操作步骤:
1)判断一个卷积运算周期(卷积核是5*5,因此卷积运算周期至多有25步)是否结束,如果一个完整的计算周期已经结束,则从卷积层输入FIFO中读取一个新的脉冲地址,如果该计算周期未结束,则保留当前的脉冲地址;
3)根据当前脉冲地址计算移动坐标i,j,并把当前脉冲地址传递给下一个计算步骤;
状态机2包含2个操作步骤:
3)读取上一个步骤传递过来的当前脉冲地址,并将其分解为行地址和列地址;
4)判断当前脉冲的行地址和列地址是否在有限卷积区间内,并把判断结果传递给下一个计算步骤;
状态机3包含2个操作步骤:
3)开启BRAM的读取使能,如果当前脉冲行地址和列地址均在有效卷积范围内,则在单口BRAM的对应地址取出存储的数据(BRAM中的所有存储数据初始化为0),如果当前脉冲行地址或列地址不在有效卷积范围内,则在BRAM的无效地址取出一个无效数字,取出后的数字不参与卷机运算,不影响正常计算流程;
4)关闭BRAM的读取使能,则BRAM切换成写入模式,保证状态机5在2状态时将运算结束的数据写回BRAM的对应地址;Xilinx IP核BRAM配置成写入优先的模式时,读取操作有一个时钟的延迟,因此该状态预留一个时钟,保证状态1中对应地址的数据顺利取出;
状态机4包含2个操作步骤:
3)把状态机3中给定BRAM地址的数据加上相应的卷积权重;
4)判断上一个计算步骤中的运算结果是否超过阈值,如果超过阈值,则自身复位为0,并向卷积层输出FIFO写入当前地址,表示当前地址向降采样层发送了一个脉冲;如果运算结果没有超过阈值,则保留当前值,不向卷积层输出FIFO写入数据;
状态机5包含2个操作步骤:
3)读取状态机4中状态2的运算结果并传递给下一个状态,由于此时BRAM处于读取状态,因此需要等待一个时钟才能写入;
4)BRAM此时处于写入状态,因此,将上一个状态传递的数据写入BRAM相应的地址内;至此,一个完整的基于FPGA框架的卷积运算流程结束。
其中,
选用两状态机的关键原因是:Xilinx IP核单口BRAM的读写操作不能够在一个时钟下同时完成,因此通过两状态机,控制读操作和写操作分开进行,避免读写冲突故障产生;
选用单口BRAM而不是双口BRAM的原因:虽然双口BRAM的读写操作独立进行,但如果在同一个时刻,双口BRAM的两个端口的读写地址相同,则会产生读写地址冲突的问题。因此,选用单口BRAM,控制读操作和写操作交替进行;
5个两状态状态机级联,在计算流程上组成流水线。5个状态机的初始状态都处于1状态,当下一个时钟到来后,5个状态机同步进入到2状态,2状态读取1状态的计算结果,当下一个时钟到来后,5个状态机同步进入到1状态,在计算流程上处于后级的状态机读取上一级状态机中2状态的计算结果。如此完成一个计算循环。
步骤三:降采样
图3是降采样层FPGA实现方案的流程框图;如图3所示,包括如下过程:
(1)降采样层从卷积输出FIFO中读取卷积层传递过来的脉冲地址,使用平均池化算法对每个脉冲地址做降采样操作,并将运算结果写入降采样BRAM中。降采样模拟LIF神经元模型,每个运算周期结束后,判断运算结果是否超过阈值,如果超过阈值,则自身复位并向降采样FIFO写入对应脉冲地址,如果没有超过阈值,则保留当前结果。
(2)降采样层FPGA实现方案的整体架构由“状态机+流水线”组成,总共包含3个两状态状态机,构成一个6级流水线操作流程。如附图3所示:
状态机1包含2个操作步骤:
1)将BRAM设定为读取模式,从卷积层输出FIFO读取脉冲地址,将该地址的行地址和列地址均做右移1位的操作,在运算结果上等同于将卷积层传送过来的上下左右相邻位置的4个脉冲地址映射为降采样层的1个脉冲地址,由此实现将卷积层输出的24*24的脉冲地址范围降低为12*12的脉冲地址范围,并将右移后的地址赋值给BRAM的读取地址;
2)将BRAM设定为写入模式,即关闭BRAM的读取模式,等待一个时钟,使数据能够从BRAM对应读取地址顺利取出;
状态机2包含2个操作步骤:
1)把从BRAM读出的数据(降采样层BRAM内存储的数据全部初始化为0)做降采样运算,具体操作方法:将取出的数据与卷积层阈值的四分之一相加(由于在状态机1中将卷积层每相邻4个脉冲地址映射为降采样层中的1个脉冲地址,因此降采样层的激发阈值也要做相应调整,即阈值升高4倍或者权重降低为原来的四分之一,本方案中选用后者);
2)判断运算结果是否超过阈值,如果超过阈值,则自身复位并将该地址写入降采样FIFO,如果没有超过阈值,则保留当前运算结果;
状态机3包含2个操作步骤:
1)读取状态机2中状态2的运算结果,由于此时单口BRAM处于读取状态,因此等待一个时钟;
2)把运算结果写回BRAM的对应地址,至此,一个完整的降采样计算周期结束。
步骤四:全连接
全连接层模拟LIF神经元模型,每一个神经元以不同的权重与降采样层的每个神经元连接,在FPGA的设计方案中,这种全连接关系由地址映射表来实现。具体实现方法是:将所有的权重参数存储在Xilinx IP核ROM中,每当系统时钟到达一个上跳沿,则从降采样层FIFO读取一个脉冲地址,全连接层中的全部神经元同步加上该脉冲地址映射的权重参数,加和运算结束后,判断每个神经元的结果是否超过阈值(阈值与选用的神经元模型有关,本方案中各层脉冲神经网络均模拟了LIF神经元,因此阈值相同),如果超过阈值,则复位并向分类层发送自身的地址信息,如果没有超过阈值,则保留当前结果,并等待下一次计算。
步骤五:分类识别
分类层模拟LIF神经元模型,由10个模拟神经元组成,分别对应0~9十个数字的分类结果。FPGA实现方法与全连接层相似,不同点在于,分类层的神经元各自配备一个计数器,当每个神经元的运算结果超过阈值后,不再发送脉冲地址,而是自身的计数器执行加1的操作。最终通过比较一段足够长的时间内(时间的长度需要根据脉冲的密集程度以及预期准确率来确定,当选择的时间段长度可以保证识别准确率达到预期指标后,即可认为足够长,例如本发明中为5毫秒)各分类层神经元计数器统计数字的大小,来判定识别结果。
本发明方法实现了脉冲神经网络在FPGA平台的定制化,可以实现对手写体数字图像的准确识别,该脉冲神经网络中的权重参数(包括卷积核权重、全连接层的神经元权重、分类层的神经元权重)均通过同等规模的数值神经网络用BP(Back Propagation,后向传播)算法训练得到,因此,本方案实现的脉冲神经网络具备线下识别功能,尚不具备线上学习功能。本发明方法中实现的对手写体数字图像的识别仅是图像识别的一种具体应用场景,通过对该方案中权重参数的训练和更新,可实现对其他类型图像的识别。
在具体实施中对本发明方法的实现过程中进行调试,具体是:在搭建FPGA脉冲神经网络之前,项目组先在Brian Simulator(一种脉冲神经网络仿真工具,可以验证所设计的脉冲神经网络在功能上的可行性)搭建了一套类似结构的脉冲神经网络进行仿真,并将逐层的仿真数据保存。在FPGA平台搭建脉冲神经网络的过程中,使用UART将各层的调试数据发送到PC端,并与Brian平台的仿真结果逐层比对。图4是Brian Simulator对脉冲神经网络卷积层的仿真输出结果(左)与FPGA搭建的脉冲神经网络卷积层的输出结果(右);如图4所示,寻找差异,并通过差异来分析FPGA设计中所存在的错误。经过反复比对和调试,使得FPGA搭建的脉冲神经网络的各层运算结果与Brian平台的各层仿真结果相一致,最终实现将脉冲神经网络算法移植到FPGA平台的目的。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (8)

1.一种基于FPGA定制脉冲神经网络的图像识别方法,通过在FPGA平台定制化卷积脉冲神经网络来进行图像识别;所述卷积脉冲神经网络包括卷积层、降采样层、全连接层和分类层;所述图像识别方法包括:产生脉冲序列、卷积运算、降采样、全连接和分类识别过程;包括如下步骤:
1)将图像的脉冲序列输入到卷积脉冲神经网络的卷积层;
2)卷积脉冲神经网络的卷积层通过离散卷积算法对脉冲序列做卷积运算,并将运算结果以脉冲地址的形式传递给降采样层;
3)降采样层接收卷积层传递来的脉冲地址,根据接收的脉冲地址数据使用离散的平均池化算法进行运算,并将运算结果以脉冲地址的形式传递给全连接层;
4)全连接层的每一个等效神经元以不同权重连接降采样层的每一个等效神经元,并对降采样层传递来的脉冲地址进行处理,再将运算结果传递给分类层;
5)分类层的每个等效神经元统计由全连接层传递到各自的脉冲数量;统计一段时间内各个分类层神经元的脉冲数量,以数量最多的神经元所代表的数字作为识别结果;
卷积运算在FPGA上的硬件实现包括:5个两状态状态机,1个输入FIFO模块,1个输出FIFO模块,1个单口BRAM;其中,状态机用于计算环节的控制,两状态包括1状态和2状态;FIFO模块用于存储输入或输出的脉冲地址,BRAM用于存储卷积计算的结果;
状态机1的操作步骤为:判断一个卷积运算周期是否结束,如果一个完整的计算周期已经结束,则从卷积层输入FIFO模块中读取一个新的脉冲地址,如果该计算周期未结束,则保留当前的脉冲地址;根据当前脉冲地址计算移动坐标,并把当前脉冲地址传递给下一个计算步骤;
状态机2的操作步骤为:读取上一个步骤传递过来的当前脉冲地址,并将其分解为行地址和列地址;判断当前脉冲的行地址和列地址是否在有限卷积区间内,并把判断结果传递给下一个计算步骤;
状态机3的操作步骤为:开启BRAM的读取使能,如果当前脉冲行地址和列地址均在有效卷积范围内,则在单口BRAM的对应地址取出存储的数据;如果当前脉冲行地址或列地址不在有效卷积范围内,则在BRAM的无效地址取出一个无效数字,取出后的数字不参与卷积运算;关闭BRAM的读取使能,则BRAM切换成写入模式,保证状态机5在2状态时将运算结束的数据写回BRAM的对应地址;当BRAM配置成写入优先的模式时,读取操作有一个时钟的延迟,该状态预留一个时钟,保证状态1中对应地址的数据顺利取出;
状态机4的操作步骤为:把状态机3中给定BRAM地址的数据加上相应的卷积权重;判断上一个计算步骤中的运算结果是否超过阈值,如果超过阈值,则自身复位为0,并向卷积层输出FIFO模块写入当前地址,表示当前地址向降采样层发送了一个脉冲;如果运算结果没有超过阈值,则保留当前值,不向卷积层输出FIFO模块写入数据;
状态机5的操作步骤为:读取状态机4中状态2的运算结果并传递给下一步骤,此时BRAM处于读取状态,需要等待一个时钟才能写入;BRAM处于写入状态,将上一步骤传递的数据写入BRAM相应的地址内;结束基于FPGA的卷积运算流程。
2.如权利要求1所述的图像识别方法,其特征是,步骤1)图像的脉冲序列由仿生视觉传感器产生或通过对数值图片进行脉冲转化的方式产生。
3.如权利要求1所述的图像识别方法,其特征是,步骤1)产生图像的脉冲序列执行一个完整周期的操作,包括:
11)用随机数发生器产生一个0~783之间的整数,该数字作为待识别灰度图像的像素地址;
12)读取待识别图像在该地址的像素灰度;
13)用随机数发生器产生一个0~255之间的整数,将该数字与像素灰度比较大小;
14)如果步骤13)中随机数大于等于像素灰度,则将该像素地址写入卷积层的输入FIFO模块;如果随机数小于该像素灰度,则不进行写入操作,并进入下一个操作周期。
4.如权利要求1所述的图像识别方法,其特征是,步骤2)卷积运算具体执行如下操作:
通过脉冲序列得到脉冲地址,当卷积层接收到一个脉冲地址为(x,y)的数据后,开始进行卷积运算,计算过程如式1:
Sum(i,j)+=kernel(x-i,y-j) (式1)
其中,Sum(i,j)为卷积运算结果;kernel为卷积核,大小为5*5;脉冲神经网络中的权重参数包括卷积核权重、全连接层的神经元权重、分类层的神经元权重;每个卷积核的权重通过数值卷积神经网络进行训练,再导入到脉冲神经网络使用;每个卷积权重的位置标记为(m,n),m=x-i,n=y-j;m,n∈[0,4];i,j为移动坐标,满足max(x-3,0)≤i≤min(x,23),max(y-3,0)≤j≤min(y,23);
脉冲神经网络中选用的是LIF型神经元;当卷积运算结果到达设置阈值,该神经元会激发,激发后对自身复位,然后进入下一次激发态的等待状态中。
5.如权利要求1所述的图像识别方法,其特征是,所述基于FPGA定制脉冲神经网络的实现采用的开发平台为Xilinx FPGA开发板Virtex-7,采用的开发软件为Vivado,编程语言为Verilog。
6.如权利要求5所述的图像识别方法,其特征是,步骤3)中,降采样层的FPGA实现具体包括3个两状态状态机构成的6级流水线操作流程,模拟LIF神经元模型,每个运算周期结束后,判断运算结果是否超过阈值,如果超过阈值,则自身复位并向降采样FIFO模块写入对应脉冲地址,如果没有超过阈值,则保留当前结果。
7.如权利要求5所述的图像识别方法,其特征是,步骤4)中,全连接层的全连接关系由FPGA的地址映射表实现。
8.如权利要求5所述的图像识别方法,其特征是,步骤5)中,分类层由10个等效神经元组成;分类层的神经元各自配备一个计数器,当每个神经元的运算结果超过阈值后,不再发送脉冲地址,自身的计数器执行加1操作;各分类层神经元计数器统计数字的大小为各个分类层神经元的脉冲数量。
CN201810193174.2A 2018-03-09 2018-03-09 基于fpga定制脉冲神经网络的图像识别方法 Active CN108470190B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810193174.2A CN108470190B (zh) 2018-03-09 2018-03-09 基于fpga定制脉冲神经网络的图像识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810193174.2A CN108470190B (zh) 2018-03-09 2018-03-09 基于fpga定制脉冲神经网络的图像识别方法

Publications (2)

Publication Number Publication Date
CN108470190A CN108470190A (zh) 2018-08-31
CN108470190B true CN108470190B (zh) 2019-01-29

Family

ID=63265089

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810193174.2A Active CN108470190B (zh) 2018-03-09 2018-03-09 基于fpga定制脉冲神经网络的图像识别方法

Country Status (1)

Country Link
CN (1) CN108470190B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110020715B (zh) * 2018-10-16 2020-11-27 量子超并(北京)科技有限公司 利用波动和脉冲信号混合编码的神经网络识别方法与装置
CN109472734B (zh) * 2018-10-18 2022-12-27 江苏第二师范学院(江苏省教育科学研究院) 一种基于fpga的目标检测网络及其实现方法
CN109739703B (zh) * 2018-12-28 2020-01-17 中科寒武纪科技股份有限公司 调错方法及相关产品
CN109902802B (zh) * 2019-01-22 2020-12-29 西安电子科技大学 基于fpga的卷积神经网络训练系统及方法
CN110543939B (zh) * 2019-06-12 2022-05-03 电子科技大学 一种基于fpga的卷积神经网络后向训练的硬件加速实现装置
CN111062450B (zh) * 2019-12-30 2023-03-24 西安电子科技大学 基于fpga和scnn架构的图像分类装置及方法
CN111275742B (zh) * 2020-01-19 2022-01-11 北京大学 一种目标识别方法、装置、系统及计算机可读存储介质
CN111583094B (zh) * 2020-05-09 2023-04-25 之江实验室 一种基于fpga的图像脉冲编码方法及系统
CN111898737B (zh) * 2020-07-24 2024-04-30 北京灵汐科技有限公司 一种图像转脉冲的方法及装置
CN111860790A (zh) * 2020-08-04 2020-10-30 南京大学 一种提高深度残差脉冲神经网络精度以优化图像分类的方法及其系统
CN112966814B (zh) * 2021-03-17 2023-05-05 上海新氦类脑智能科技有限公司 融合脉冲神经网络信息处理方法及融合脉冲神经网络
CN114723023B (zh) * 2022-03-03 2024-04-23 北京大学 数据通信方法及系统、脉冲神经网络运算系统
CN114819114B (zh) * 2022-07-04 2022-09-13 南京大学 脉冲神经网络硬件加速器及其在卷积运算中的优化方法
CN115246559A (zh) * 2022-07-22 2022-10-28 鄂尔多斯市国源矿业开发有限责任公司 一种工业皮带纵撕识别的方法
CN116155843B (zh) * 2023-02-01 2024-04-16 北京大学 一种基于pynq的脉冲神经网络芯片数据通信方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106023605A (zh) * 2016-07-15 2016-10-12 姹ゅ钩 一种基于深度卷积神经网络的交通信号灯控制方法
CN107092959A (zh) * 2017-04-07 2017-08-25 武汉大学 基于stdp非监督学习算法的硬件友好型脉冲神经网络模型
CN107122798A (zh) * 2017-04-17 2017-09-01 深圳市淘米科技有限公司 基于深度卷积网络的引体向上计数检测方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104933722B (zh) * 2015-06-29 2017-07-11 电子科技大学 一种基于Spiking‑卷积神经网络模型的图像边缘检测方法
CN105760930B (zh) * 2016-02-18 2018-06-05 天津大学 用于aer的多层脉冲神经网络识别系统
CN106407990A (zh) * 2016-09-10 2017-02-15 天津大学 基于事件驱动的仿生目标识别系统
CN106650922B (zh) * 2016-09-29 2019-05-03 清华大学 硬件神经网络转换方法、计算装置、软硬件协作系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106023605A (zh) * 2016-07-15 2016-10-12 姹ゅ钩 一种基于深度卷积神经网络的交通信号灯控制方法
CN107092959A (zh) * 2017-04-07 2017-08-25 武汉大学 基于stdp非监督学习算法的硬件友好型脉冲神经网络模型
CN107122798A (zh) * 2017-04-17 2017-09-01 深圳市淘米科技有限公司 基于深度卷积网络的引体向上计数检测方法及装置

Also Published As

Publication number Publication date
CN108470190A (zh) 2018-08-31

Similar Documents

Publication Publication Date Title
CN108470190B (zh) 基于fpga定制脉冲神经网络的图像识别方法
CN110472627A (zh) 一种端到端的sar图像识别方法、装置及存储介质
CN109464803B (zh) 虚拟对象控制、模型训练方法、装置、存储介质和设备
CN107885316A (zh) 一种基于手势的交互方法及装置
CN110968866B (zh) 一种面向深度强化学习模型对抗攻击的防御方法
CN108805977A (zh) 一种基于端到端卷积神经网络的人脸三维重建方法
CN110102050A (zh) 虚拟对象显示方法、装置、电子设备及存储介质
CN106991408A (zh) 一种候选框生成网络的生成方法及人脸检测方法
CN108156519A (zh) 图像分类方法、电视设备及计算机可读存储介质
CN106997236A (zh) 基于多模态输入进行交互的方法和设备
CN109214366A (zh) 局部目标重识别方法、装置及系统
CN110991362A (zh) 一种基于注意力机制的行人检测模型
CN109543632A (zh) 一种基于浅层特征融合引导的深层网络行人检测方法
CN110458060A (zh) 一种基于对抗学习的车辆图像优化方法及系统
CN109934847A (zh) 弱纹理三维物体姿态估计的方法和装置
CN108734673A (zh) 去网纹系统训练方法、去网纹方法、装置、设备及介质
CN108983968A (zh) 一种基于虚拟现实的图像大数据交互控制系统及方法
CN110378208A (zh) 一种基于深度残差网络的行为识别方法
CN110263654A (zh) 一种火焰检测方法、装置及嵌入式设备
CN106651915A (zh) 基于卷积神经网络的多尺度表达的目标跟踪方法
CN116109798A (zh) 图像数据处理方法、装置、设备及介质
CN111259950B (zh) 一种基于3d模型训练yolo神经网络的方法
CN107633196A (zh) 一种基于卷积神经网络的眼球移动预测方案
CN110008961A (zh) 文字实时识别方法、装置、计算机设备及存储介质
CN110390673A (zh) 一种监控场景下基于深度学习的香烟自动检测方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant