CN113762491B - 一种基于fpga的卷积神经网络加速器 - Google Patents

一种基于fpga的卷积神经网络加速器 Download PDF

Info

Publication number
CN113762491B
CN113762491B CN202111187875.3A CN202111187875A CN113762491B CN 113762491 B CN113762491 B CN 113762491B CN 202111187875 A CN202111187875 A CN 202111187875A CN 113762491 B CN113762491 B CN 113762491B
Authority
CN
China
Prior art keywords
layer
data
convolution
formula
shift
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
CN202111187875.3A
Other languages
English (en)
Other versions
CN113762491A (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.)
Nanjing Tech University
Original Assignee
Nanjing Tech 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 Nanjing Tech University filed Critical Nanjing Tech University
Publication of CN113762491A publication Critical patent/CN113762491A/zh
Application granted granted Critical
Publication of CN113762491B publication Critical patent/CN113762491B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

本发明公开一种基于FPGA的卷积神经网络加速器,该卷积神经网络的网络结构包括输入层、第一卷积层、第二卷积层、第一池化层、第二池化层、第一全连接层、第二全连接层和输出层,输入层,接收图像,图像依次经过第一卷积层、第一池化层、激活函数、第二卷积层、第二池化层、激活函数、第一全连接层、第二全连接层运算后,得到多个特征值,然后在Softmax分类层中将特征值概率归一化得出最大概率值对应的下标即为分类结果。本发明实现了高速度的FPGA加速器,在权重数量和准确率之间做了一个很好的折中。

Description

一种基于FPGA的卷积神经网络加速器
技术领域
本发明属于神经网络技术领域,具体是涉及一种基于FPGA的卷积神经网络加速器。
背景技术
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,其主要包括卷积层、池化层和全连接层等,它的权值共享减少了传统全连接型网络所需的参数的数量。CNN可以提取出图像中的深度特征,并且避免了过多的数据的处理,还保持着较高的识别率。近些年来,卷积神经网络已经在语音识别、目标检测、人脸识别等领域取得了重大成就。
卷积神经网络作为一个计算密集型模型,其核心所在的卷积运算带来的计算量极为庞大,而便携式嵌入式设备自身的计算能力难以应付如此庞大的计算量,用低功耗硬件进行神经网络加速已经成为当下的研究热点。现场可编程门阵列(FPGA)作为一种可编程器件,含有丰富的逻辑资源,有着高性能、低功耗和可重构性的优点,可以以多路并行的方式实现CNN中大量独立的卷积运算。在1994年,DS Reay首次用FPGA搭建了神经网络加速器,由于当时神经网络没有受到重视,基于FPGA的加速器技术并未受到重视。在2012年ILSVRC挑战赛上,里程碑式的网络AlexNet出现,神经网络掀起热潮。由于神经网络的计算量和参数数量日益增多,研究者开始寻找可重复编程且功耗低的硬件平台,FPGA部署CNN开始广泛出现在各个国际会议和期刊,直至2018年,基于FPGA的神经网络加速器方向在IEEE EXPLORE上发表的论文数量达到69篇。
然而FPGA开发板上存储空间和资源毕竟有限,以识别MNIST手写数字数据集的经典卷积神经网络LeNet为例,识别率可以达到98%以上,但其权重参数总量达430000个以上,会耗费FPGA开发板上较多的存储空间和资源。
发明内容
发明目的:本发明目的在于针对现有技术的不足,提供一种基于FPGA平台的轻量级卷积神经网络加速系统,以减少CNN的权重参数数量,节省FPGA片上资源消耗。
技术方案:本发明所述基于FPGA的卷积神经网络加速器,该卷积神经网络的网络结构包括输入层、第一卷积层、第二卷积层、第一池化层、第二池化层、第一全连接层、第二全连接层和输出层,
输入层,接收图像,图像依次经过第一卷积层、第一池化层、激活函数、第二卷积层、第二池化层、激活函数、第一全连接层、第二全连接层运算后,得到多个特征值,然后在Softmax分类层中将特征值概率归一化得出最大概率值对应的下标即为分类结果;
第一卷积层和第二卷积层,均采用通道内并行,通道间串行的卷积展开方式,单通道的卷积结果输出至与该卷积层对应的缓存器,该缓存器通过重复读取求和再存储的方式得到对应卷积层最终卷积结果;
一卷积层、一池化层与一激活函数作为一个分层,两分层间具有缓存区,分层输出的特征图以及对应的偏置单元和宽度参数存入该缓存区内,用于下一分层循环读取的输入;
第一全连接层和第二全连接层,在其前一级分层输出存储完毕后,全连接层开始读取其前一级分层输出的特征图以及对应的偏置单元和宽度,通过DSP乘法器将特征图和宽度进行乘积,然后对当前神经元的乘积值进行累和,在累和结束时加上偏置单元作为最后的神经元输出。
本发明进一步优选地技术方案为,对卷积层和池化层的权重参数采用float32量化为int8的量化算法,进行量化和反量化,具体方法为:
a、计算尺度变换参数s和0值偏移参数z:
根据浮点数x与定点数之间的相互转换关系式:
Figure BDA0003300034020000021
其中x代表待量化的浮点数,q(x)代表x量化后的定点数,floor()用于截断小数,s代表scale,作用是尺度缩放,将浮点数缩放到固定区间内,z代表zero point,即浮点数0量化后的偏移量;
得到量化需要的尺度变换参数s和0值偏移参数z,其计算方法如式:
Figure BDA0003300034020000031
其中xmax和xmin分别是浮点数x的最大值和最小值,pmax和pmin分别是量化值p(x)的最大值和最小值;
b、无偏置的时候,卷积或池化运算公式如式:
Figure BDA0003300034020000032
其中N代表卷积核参数个数,xi是输入数据,wi是权重,y代表该层的卷积输出,xi、wi和y都是float32型浮点数;
对xi和wi进行量化,得到式:
Figure BDA0003300034020000033
则通过反量化可以将xi和wi表示为式:
Figure BDA0003300034020000034
将式(5)代入式(3)中,得到式:
Figure BDA0003300034020000035
卷积输出y为浮点数,在输入给下一层卷积时,也需要进行量化,y量化及反量化如式:
Figure BDA0003300034020000036
将式(7)代入到式(6)中,得到式:
Figure BDA0003300034020000037
每一层输出到下一层需要使用的数据即是y量化后的数据q(y),对式(8)变形得到式:
Figure BDA0003300034020000041
得到下一层需要的量化数据,当前层功能完成;
式(9)中存在浮点数
Figure BDA0003300034020000042
令/>
Figure BDA0003300034020000043
则M是个浮点数,令M=2-nM0,其中n和M0都是正整数,n取0到15之间,使得M和2-nM0误差在2-16之内,将式(9)改写为式:
Figure BDA0003300034020000044
其中M0(q(wi)-zw)(q(xi)-zx)和zy属于整型运算,2-n在FPGA中进行左移n位实现;
c、在加上偏置b时,则式(9)变为式:
Figure BDA0003300034020000045
其中q(b)是b的量化结果,sb是自的scale,zb是b的zero point;
q(b)以int32进行存储,同时令sb=sxsw,则下一层需要的量化结果表示为式:
Figure BDA0003300034020000046
作为优选地,在计算scale需要待量化值的最大值和最小值,使用至少100份数据进行测试每层的特征图的最大值和最小值,得到的scale结果,用来预测scale;
得到M后,寻找与M最接近的2-nM0,令n在0到15之间,M0
Figure BDA0003300034020000047
Figure BDA0003300034020000048
中使得误差更小的数;其中第二全连接层作为最后一层,不需要寻找2-nM0,计算时直接丢弃/>
Figure BDA0003300034020000049
优选地,卷积层采用5×5的卷积核,流水线生成5×5的待卷积区域,采用shiftram移位寄存器作为缓存区生成5×5的待卷积区域和卷积核;
单个shift ram在模块使能时,当时钟上升沿来临,将输入端端数据存入shiftram中,shift ram中原有的数据依次向左移位,最后一个数据舍弃;4个shift ram首尾相接,达到整体数据移位的效果,4个shift ram的输出加上最初的输入得到5×5矩阵中的一列;得到5×5的矩阵需要25个寄存器来接收五个shift ram输出的数据,同样采用移位接收的方式,流水线的产生5×5的待卷积区域和卷积核和;
在接收到5×5的卷积核和待卷积区域后,将其并行展开,通过例化25个DSP定点乘法器将25个乘法运算并行进行,通过1个时钟的延时得到乘积运算结果,再对这25个数据进行累和运算,此时数据位宽为16bit;累和运算时通过6级流水线来分解卷积运算的累和操作,其中用到的扩展数据皆为0,首先将25个数据扩展成26个数据,26个数据进行两两求和,得到13个17bit数据,为第一级流水线;将13个数据扩展成14个数据,14个数据进行两两求和,得到7个18bit数据,为第二级流水线;将7个数据扩展成8个数据,两两求和得到4个19bit数据,为第三级流水线;将4个数据两两求和得到2个20bit数据,为第四级流水线;将2个数据两两求和得到1个21bit数据,为第五级流水线,最后加上32bit的偏置,得到最终的卷积结果。
优选地,池化层采用的是2×2的Maxpooling,首先设置一个width为32bit、depth为上一层通道长一半的shift ram,通过shift ram不断生成矩阵的一列数据,用四个寄存器进行移位存储shift ram得到的一列数据,从而生成流水线的2×2的池化窗口,池化的步长设置为2,流水线生成的2×2窗口为间隔有效,得到2×2的窗口后,通过两个组合逻辑将四个数两两对比取最大值,得到的两个输出再通过一个组合逻辑进行比较输出最大值,得到的结果即为池化层的输出。
优选地,该卷积神经网络的训练采用的数据集是MNIST数据集,首先从torchvision中下载MNISIT数据集,将epoch设置为15,batchsize设置64,学习率设置为0.0001,误差使用交叉熵,梯度下降采用的方式是随机梯度下降。
有益效果:(1)本发明基于FPGA平台的卷积神经网络加速系统,通过Pytorch设计软件层面的卷积神经网络,以LeNet为基础构建轻量级卷积神经网络,选择了一种通用性和性能都较好的卷积展开方式,且其有利于DSP复用,最终实现了高速度的FPGA加速器,可以应用于手写数字识别中,本发明的网络中的权重参数总量为17250个,远小于Lenet的430000个参数数量,而准确率相较于Lenet准确率仅下降了1.5%,该网络在权重数量和准确率之间做了一个很好的折中;
(2)在Pytorch框架中,CNN网络各层的权重参数都是以float32格式进行存储和运算,而FPGA无法直接进行浮点数运算,DSP单元也更擅长定点数运算,同时考虑到计算量和存储问题,本发明对卷积神经网络的参数进行量化,结构易于DSP复用,同时在量化中误差来源主要有两项,一是反量化的误差,二是2-nM0近似M的误差,在500样本下,本发明量化前后精度误差很小,Pytorch训练的网络和最终部署到FPGA端的精度误差只有0.2%,可以忽略不计。
附图说明
图1为本发明的卷积神经网络的网络结构图;
图2为本发明的卷积神经网络加速器的硬件框架图;
图3为shift ram原理图;
图4为shift ram连接图;
图5为卷积层对应缓存器的工作流程图;
图6为两分层间缓存区的工作流程图;
图7为全连接层工作流程图;
图8为实施例的卷积神经网络的功耗参数图。
具体实施方式
下面通过附图对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。
实施例:一种基于FPGA的卷积神经网络加速器,该卷积神经网络的网络结构包括输入层、第一卷积层、第二卷积层、第一池化层、第二池化层、第一全连接层、第二全连接层和输出层。
卷积展开的方式主要可以分为以下三种:
1、卷积并行。
2、不同输入通道间并行。
3、不同卷积核之间并行。
加速器期望的状态是卷积并行、不同输入通道间并行、不同卷积核之间并行,同时在此基础上搭建流水线,以期达到全局流水线的理想情况,但并行展开度越高,需要的DSP资源越多,在此种情况下,第一层卷积层,共需要250个DSP,对于第二层卷积层则需要5000个DSP,即两层共5250个DSP。ZYNQ-7020系列DSP仅有220个,而大型网络时需要的DSP数量更多,所以全局并行不可行。
综上,可以得出三种并行情况不能同时实现的结论,所以需要进行舍弃,其中一种情况进行并行或者两中情况并行。由于满足两种情况下时也都超过了220个DSP,考虑到资源问题、卷积模块中流水线设计和DSP的易复用性,本发明采用通道内并行,通道间串行的卷积展开方式,硬件框架如图2,由于输入通道间串行计算,所以卷积是单通道进行的,而最终的卷积是所有通道卷积的累和,所以加入了单通道卷积累和及缓存模块。
输入层,接收1×28×28像素的图片,图像依次经过第一卷积层、第一池化层、激活函数、第二卷积层、第二池化层、激活函数、第一全连接层、第二全连接层运算后,得到多个特征值,然后在Softmax分类层中将特征值概率归一化得出最大概率值对应的下标即为分类结果。
卷积层:
本发明的CNN网络有两个卷积层,卷积模块的硬件设计如图3,其卷积是每个卷积核的单通道和对应特征图通道进行卷积串行实现的。
卷积数据是通过从Block Ram中读入,由于本发明采用的都是5×5的卷积核,所以需要流水线生成5×5的待卷积区域,由于数据流是一个个读入,为了生成5×5的待卷积区域和卷积核,需要利用缓存进行存储四行或者五行的数据,本发明采用shift ram移位寄存器生成5×5的矩阵。单个shift ram的移位原理如图3,在模块使能时,当时钟上升沿来临,将输入端端数据存入shift ram中,shift ram中原有的数据依次向左移位,最后一个数据舍弃。本发明采用4个shift ram作为缓存区生成5×5的矩阵,其中4个shift ram连接方式如图4,四个shift ram进行首尾相接,达到整体数据移位的效果,4个shift ram的输出加上最初的输入就可以得到5×5矩阵中的一列。四个shift ram最多得到5×5矩阵的一列,所以得到5×5的矩阵需要25个寄存器来接收五个shift ram输出的数据,其采用的也是移位接收的方式,这样即可流水线的产生5×5的待卷积区域和卷积核和。在接收到5×5的卷积核和待卷积区域后,将其并行展开,通过例化25个DSP定点乘法器将25个乘法运算并行进行,通过1个时钟的延时得到乘积运算结果,下面则需要对这25个数据进行累和运算,此时的数据位宽为16bit,25个16bit的数据同时进行累和会是复杂的运算,这就会导致高频率下时序必不收敛,此时通过流水线的方式来分解这个复杂运算,以保证系统可以稳定运行在高频系统时钟下。本发明共通过6级流水线来分解卷积运算的累和操作,其中用到的扩展数据皆为0。首先将25个数据扩展成26个数据,26个数据进行两两求和,得到13个17bit数据,此为第一级流水线;将13个数据扩展成14个数据,14个数据进行两两求和,得到7个18bit数据,此为第二级流水线;将7个数据扩展成8个数据,两两求和得到4个19bit数据,此为第三级流水线;后继续两两求和得到最终的一个21bit的结果,此为第四级和第五级流水线。最后将加上32bit的偏置,得到最终的卷积结果。由于本设计的并行展开方式是单个卷积核通道内并行、通道间穿行,所以偏置在此层并未加入,防止出现重复累加偏置的问题。
本发明中的卷积并行展开方式采用的是通道内并行,通道间串行,卷积层的输出结果是单通道的卷积结果,而卷积层的最终输出是各个通道间累和后加上偏置的结果,所以需要为卷积层设置一个缓存器,最简单的方式就是将卷积层输出的所有通道卷积结果进行缓存,然后进行读出累和,但此种方式会占用大量的存储空间,当卷积通道数量过多时,会导致片上ram不足,所以本发明只设置了单个通道深度的缓存区,通过重复读取求和再存储的方式得到最终卷积结果,其实现原理图如图5所示。在当前卷积核的第一个通道通过卷积层输出结果时,结果直接存储到缓存区中。在后续通道的结果通过卷积层输出以待缓存时,则将当前缓存区的内容读出,由于片上ram读取数据会存在两个时钟的延时,所以将当前卷积的输出结果和使能进行两级缓存,此时缓存区的内容读出,将缓存区读出的内容和当前通道卷积输出的结果进行累和操作,然后再存入原缓存区中,当卷积核最后一通道卷积输出时,此时和缓存区读出内容进行累和后得到最终卷积输出结果,此时不必再存入缓存,而是直接输出,最后加上32bit的偏置后再通过Relu激活函数后输出到池化层。
池化层:
本发明的池化采用的是2×2的Maxpooling,池化层的操作本质和卷积层类似,都是矩阵运算,只是此处是生成2×2的矩阵,首先设置一个width为32bit、depth为上一层通道长一半的shift ram,通过shift ram不断生成矩阵的一列数据,用四个寄存器进行移位存储shift ram得到的一列数据即可生成流水线的2×2的池化窗口,由于池化的步长设置为2,所以流水线生成的2×2窗口并非连续有效,而是间隔有效。得到2×2的窗口后,通过两个组合逻辑将四个数两两对比取最大值,得到的两个输出再通过一个组合逻辑进行比较输出最大值,此时得到的结果即为池化层的输出。
层间缓存:
卷积神经网络可以把卷积层+池化层+激活函数称为一个layer,每个layer需要循环多次读入feature map,所以feature map需要有一个缓存区进行缓存以备循环读出,而一个layer的输出会作为下一个layer的输入,所以每个layer的输出必须要设置一个缓存区进行缓存数据,缓存的设计流程图如图6,在每个layer间用block ram来缓存每个layer的输出,同时还会存储weight和bias。在layer输出时,将每个数据存储入block ram中,当最后卷积核卷积完毕时,将读使能置1,下一个layer开始读取block ram中的featuremap,同时读取weight和bias。
全连接层:
在上一个layer输出存储完毕后,使能读信号,全连接层开始读取feature map、weight和bias,通过DSP乘法器将feature map和weight进行乘积,然后对当前神经元的乘积值进行累和,在累和结束时加上bias作为最后的神经元输出,全连接层的设计流程图如图7。
量化:
在Pytorch框架中,CNN网络各层的权重参数都是以float32格式进行存储和运算,而FPGA无法直接进行浮点数运算,DSP单元也更擅长定点数运算,同时考虑到计算量和存储问题,需要对卷积神经网络的参数进行量化。
具体方法为:
a、计算尺度变换参数s和0值偏移参数z:
根据浮点数x与定点数之间的相互转换关系式:
Figure BDA0003300034020000091
其中x代表待量化的浮点数,q(x)代表x量化后的定点数,floor()用于截断小数,s代表scale,作用是尺度缩放,将浮点数缩放到固定区间内,z代表zero point,即浮点数0量化后的偏移量;
得到量化需要的尺度变换参数s和0值偏移参数z,其计算方法如式:
Figure BDA0003300034020000101
其中xmax和xmin分别是浮点数x的最大值和最小值,pmax和pmin分别是量化值p(x)的最大值和最小值;
b、无偏置的时候,卷积或池化运算公式如式:
Figure BDA0003300034020000102
其中N代表卷积核参数个数,xi是输入数据,wi是权重,y代表该层的卷积输出,xi、wi和y都是float32型浮点数;
对xi和wi进行量化,得到式:
Figure BDA0003300034020000103
则通过反量化可以将xi和wi表示为式:
Figure BDA0003300034020000104
将式(5)代入式(3)中,得到式:
Figure BDA0003300034020000105
卷积输出y为浮点数,在输入给下一层卷积时,也需要进行量化,y量化及反量化如式:
Figure BDA0003300034020000106
将式(7)代入到式(6)中,得到式:
Figure BDA0003300034020000107
每一层输出到下一层需要使用的数据即是y量化后的数据q(y),对式(8)变形得到式:
Figure BDA0003300034020000111
得到下一层需要的量化数据,当前层功能完成;
式(9)中存在浮点数
Figure BDA0003300034020000112
令/>
Figure BDA0003300034020000113
则M是个浮点数,令M=2-nM0,其中n和M0都是正整数,n取0到15之间,使得M和2-nM0误差在2-16之内,将式(9)改写为式:
Figure BDA0003300034020000114
其中M0(q(wi)-zw)(q(xi)-zx)和zy属于整型运算,2-n在FPGA中进行左移n位实现;
c、在加上偏置b时,则式(9)变为式:
Figure BDA0003300034020000115
其中q(b)是b的量化结果,sb是b的scale,zb是b的zero point;
q(b)以int32进行存储,同时令sb=sxsw,则下一层需要的量化结果表示为式:
Figure BDA0003300034020000116
在计算scale需要待量化值的最大值和最小值,使用至少100份数据进行测试每层的特征图的最大值和最小值,得到的scale结果如下表,用来预测scale;
Figure BDA0003300034020000117
Figure BDA0003300034020000121
得到M后,寻找与M最接近的2-nM0,令n在0到15之间,M0
Figure BDA0003300034020000122
Figure BDA0003300034020000123
中使得误差更小的数,得到的结果和误差如下表:
Type n M0 error
conv1 15 27 6.94e-6
conv2 14 15 3.07e-6
fc1 14 19 1.25e-5
其中fc2作为最后一层,不需要寻找2-nM0,计算时直接丢弃
Figure BDA0003300034020000124
量化的好坏需要用精度损失来衡量,即量化后的测试集准确率和未量化之前的准确率之间的误差,本发明的误差来源主要有两项,一是反量化的误差,二是2-nM0近似M的误差。在500样本下,本设计的精度误差如下表。从表中可以看出,量化前后精度误差很小,Pytorch训练的网络和最终部署到FPGA端的精度误差只有0.2%,可以忽略不计。
准确率 误差
量化前 97%
量化后 97% 0%
M近似 96.8% 0.2%
性能测试:
本实施例中的CNN网络是基于LeNet设计的轻量级卷积神经网络,使用的数据集是MNIST数据集,使用的FPGA平台是ZYNQ-7020系列开发板,其中包含一块FPGA芯片和两个ARM-A9处理器。使用的EDA(Electronic design automation)工具是Xilinx公司的vivado2018.3;软件工具使用的anaconda+python3.6,使用的深度学习框架是Pytorch1.7.0。
本实施例中,PL端设计的卷积神经网络加速器消耗的资源如下表所示。其中两层卷积层分别使用了25个DSP用作卷积通道内并行展开,三层反量化共使用了6个DSP,两层全连接层乘法共使用了2个DSP,综上共使用了58个DSP,其中三个中间层存储共占用了9片BRAM,协助卷积完成共用了2片BRAM,共11片BRAM。从表中可以看出,本发明设计的加速器仅使用了非常少量的资源,符合初始设计预期。
Resource Utilization available Utilization%
LUT 2110 53200 3.97
LUTRAM 151 17400 0.87
FF 3555 106400 3.34
BRAM 11 140 7.86
DSP 58 220 26.36
IO 6 125 4.8
MMCM 1 4 25
本实施例的功耗评估通过xilinx的EDA工具vivado得出,其功耗评估如图8所示。PL端的加速器的总体功率为0.402W,其中主要功率在于Dynamic消耗,即FPGA动态变换状态的消耗,而MMCM就是用于倍频的资源消耗,将低频时钟倍频到高频时钟需要的功率占用也较高,除此外最高的功耗即是DSP和BRAM的消耗,DSP主要用于并行乘积展开使用,BRAM用于中间的参数存储,两者是CNN网络的核心。从图中可以看出加速器的功耗较低,其工作结温为29.6度也处于芯片的适宜状态。
CNN加速器的性能评估主要包括在两个方面,一个是精度,一个是速度,其中精度已经进行了对比,和Pytorch框架上的精度相比只下降了0.2%。而速度方面,为了体现CNN卷积神经网络加速器的优势,本实施例与CPU平台进行推理速度的对比,其中CPU的具体情况如下:
嵌入式CPU平台:ARM-A9嵌入式CPU,工作频率是1Ghz。
本实施例加速器于ARM-A9嵌入式CPU的推理速度对比如下表,FPGA设计的加速器推理1帧耗时0.267ms,ARM-A9推理1帧耗时1310ms,FPGA的推理速度是其4906倍。
与CPU对比
Device ARM-A9 FPGA
Clock(Hz) 1G 200M
Memory(MB) 1024 4.9
Latency per img(ms) 1310 0.267
FPS(seconds-1) 0.76 3748
通过对比,本实施例基于FPGA设计的低功耗、低资源消耗的CNN加速器,同时结构易于DSP复用,并展示了加速器资源消耗、功率和精度,表明本设计可以充分应用在资源和功耗受限的嵌入式平台;同时将本设计与ARM-A9嵌入式CPU推理对比,充分表明本设计对于卷积神经网络具有非常好的加速功效。
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上作出各种变化。

Claims (5)

1.一种基于FPGA的卷积神经网络加速器的实现方法,其特征在于,该卷积神经网络的网络结构包括输入层、第一卷积层、第二卷积层、第一池化层、第二池化层、第一全连接层、第二全连接层和输出层,
输入层,接收图像,图像依次经过第一卷积层、第一池化层、激活函数、第二卷积层、第二池化层、激活函数、第一全连接层、第二全连接层运算后,得到多个特征值,然后在Softmax分类层中将特征值概率归一化得出最大概率值对应的下标即为分类结果;
第一卷积层和第二卷积层,均采用通道内并行,通道间串行的卷积展开方式,单通道的卷积结果输出至与该卷积层对应的缓存器,该缓存器通过重复读取求和再存储的方式得到对应卷积层最终卷积结果;
一卷积层、一池化层与一激活函数作为一个分层,两分层间具有缓存区,分层输出的特征图以及对应的偏置单元和宽度参数存入该缓存区内,用于下一分层循环读取的输入;
第一全连接层和第二全连接层,在其前一级分层输出存储完毕后,全连接层开始读取其前一级分层输出的特征图以及对应的偏置单元和宽度,通过DSP乘法器将特征图和宽度进行乘积,然后对当前神经元的乘积值进行累和,在累和结束时加上偏置单元作为最后的神经元输出;
对卷积层和池化层的权重参数采用float32量化为int8的量化算法,进行量化和反量化,具体方法为:
a、计算尺度变换参数s和0值偏移参数z:
根据浮点数x与定点数之间的相互转换关系式:
Figure QLYQS_1
(1);
其中
Figure QLYQS_4
代表待量化的浮点数,/>
Figure QLYQS_5
代表/>
Figure QLYQS_9
量化后的定点数,/>
Figure QLYQS_3
用于截断小数,/>
Figure QLYQS_6
代表
Figure QLYQS_8
,作用是尺度缩放,将浮点数缩放到固定区间内,/>
Figure QLYQS_10
代表/>
Figure QLYQS_2
,即浮点数/>
Figure QLYQS_7
量化后的偏移量;
得到量化需要的尺度变换参数s和0值偏移参数z,其计算方法如式:
Figure QLYQS_11
(2);
其中
Figure QLYQS_12
和/>
Figure QLYQS_13
分别是浮点数/>
Figure QLYQS_14
的最大值和最小值,/>
Figure QLYQS_15
和/>
Figure QLYQS_16
分别是量化值/>
Figure QLYQS_17
的最大值和最小值;
b、无偏置的时候,卷积或池化运算公式如式:
Figure QLYQS_18
(3);
其中
Figure QLYQS_20
代表卷积核参数个数,/>
Figure QLYQS_23
是输入数据,/>
Figure QLYQS_25
是权重,/>
Figure QLYQS_21
代表该层的卷积输出,/>
Figure QLYQS_22
、/>
Figure QLYQS_24
Figure QLYQS_26
都是/>
Figure QLYQS_19
型浮点数;
Figure QLYQS_27
和/>
Figure QLYQS_28
进行量化,得到式:
Figure QLYQS_29
(4);
则通过反量化可以将
Figure QLYQS_30
和/>
Figure QLYQS_31
表示为式:
Figure QLYQS_32
(5);
将式(5)代入式(3)中,得到式:
Figure QLYQS_33
(6);
卷积输出
Figure QLYQS_34
为浮点数,在输入给下一层卷积时,也需要进行量化,/>
Figure QLYQS_35
量化及反量化如式:
Figure QLYQS_36
(7);
将式(7)代入到式(6)中,得到式:
Figure QLYQS_37
(8);
每一层输出到下一层需要使用的数据即是
Figure QLYQS_38
量化后的数据/>
Figure QLYQS_39
,对式(8)变形得到式:
Figure QLYQS_40
(9);
得到下一层需要的量化数据,当前层功能完成;
式(9)中存在浮点数
Figure QLYQS_43
,令/>
Figure QLYQS_48
,则/>
Figure QLYQS_50
是个浮点数,令/>
Figure QLYQS_42
,其中/>
Figure QLYQS_46
和/>
Figure QLYQS_47
都是正整数,/>
Figure QLYQS_49
取0到15之间,使得/>
Figure QLYQS_41
和/>
Figure QLYQS_44
误差在/>
Figure QLYQS_45
之内,将式(9)改写为式:
Figure QLYQS_51
(10);
其中
Figure QLYQS_52
和/>
Figure QLYQS_53
属于整型运算,/>
Figure QLYQS_54
在FPGA中进行左移/>
Figure QLYQS_55
位实现;
c、在加上偏置
Figure QLYQS_56
时,则式(9)变为式:
Figure QLYQS_57
(11);
其中
Figure QLYQS_58
是/>
Figure QLYQS_59
的量化结果,/>
Figure QLYQS_60
是/>
Figure QLYQS_61
的/>
Figure QLYQS_62
是/>
Figure QLYQS_63
的/>
Figure QLYQS_64
Figure QLYQS_65
以/>
Figure QLYQS_66
进行存储,同时令/>
Figure QLYQS_67
,则下一层需要的量化结果表示为式:
Figure QLYQS_68
(12)。
2.根据权利要求1所述的基于FPGA的卷积神经网络加速器的实现方法,其特征在于,在计算
Figure QLYQS_69
需要待量化值的最大值和最小值,使用至少100份数据进行测试每层的特征图的最大值和最小值,得到的scale结果,用来预测scale;
得到
Figure QLYQS_71
后,寻找与/>
Figure QLYQS_73
最接近的/>
Figure QLYQS_75
,令n在0到15之间,/>
Figure QLYQS_72
取/>
Figure QLYQS_74
Figure QLYQS_76
中使得误差更小的数;其中第二全连接层作为最后一层,不需要寻找/>
Figure QLYQS_77
,计算时直接丢弃/>
Figure QLYQS_70
3.根据权利要求1所述的基于FPGA的卷积神经网络加速器的实现方法,其特征在于,卷积层采用5×5的卷积核,流水线生成5×5的待卷积区域,采用shift ram移位寄存器作为缓存区生成5×5的待卷积区域和卷积核;
单个shift ram在模块使能时,当时钟上升沿来临,将输入端端数据存入shift ram中,shift ram中原有的数据依次向左移位,最后一个数据舍弃;4个shift ram首尾相接,达到整体数据移位的效果,4个shift ram的输出加上最初的输入得到5×5矩阵中的一列;得到5×5的矩阵需要25个寄存器来接收五个shift ram输出的数据,同样采用移位接收的方式,流水线的产生5×5的待卷积区域和卷积核和;
在接收到5×5的卷积核和待卷积区域后,将其并行展开,通过例化25个DSP定点乘法器将25个乘法运算并行进行,通过1个时钟的延时得到乘积运算结果,再对这25个数据进行累和运算,此时数据位宽为16bit;累和运算时通过6级流水线来分解卷积运算的累和操作,其中用到的扩展数据皆为0,首先将25个数据扩展成26个数据,26个数据进行两两求和,得到13个17bit数据,为第一级流水线;将13个数据扩展成14个数据,14个数据进行两两求和,得到7个18bit数据,为第二级流水线;将7个数据扩展成8个数据,两两求和得到4个19bit数据,为第三级流水线;将4个数据两两求和得到2个20bit数据,为第四级流水线;将2个数据两两求和得到1个21bit数据,为第五级流水线,最后加上32bit的偏置,得到最终的卷积结果。
4.根据权利要求3所述的基于FPGA的卷积神经网络加速器的实现方法,其特征在于,池化层采用的是
Figure QLYQS_78
的/>
Figure QLYQS_79
,首先设置一个width为32bit、depth为上一层通道长一半的shift ram,通过shift ram不断生成矩阵的一列数据,用四个寄存器进行移位存储shift ram得到的一列数据,从而生成流水线的/>
Figure QLYQS_80
的池化窗口,池化的步长设置为2,流水线生成的/>
Figure QLYQS_81
窗口为间隔有效,得到/>
Figure QLYQS_82
的窗口后,通过两个组合逻辑将四个数两两对比取最大值,得到的两个输出再通过一个组合逻辑进行比较输出最大值,得到的结果即为池化层的输出。
5.根据权利要求1所述的基于FPGA的卷积神经网络加速器的实现方法,其特征在于,该卷积神经网络的训练采用的数据集是MNIST数据集,首先从torchvision中下载MNISIT数据集,将epoch设置为15,batchsize设置64,学习率设置为0.0001,误差使用交叉熵,梯度下降采用的方式是随机梯度下降。
CN202111187875.3A 2021-08-10 2021-10-12 一种基于fpga的卷积神经网络加速器 Active CN113762491B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2021109113931 2021-08-10
CN202110911393 2021-08-10

Publications (2)

Publication Number Publication Date
CN113762491A CN113762491A (zh) 2021-12-07
CN113762491B true CN113762491B (zh) 2023-06-30

Family

ID=78799238

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111187875.3A Active CN113762491B (zh) 2021-08-10 2021-10-12 一种基于fpga的卷积神经网络加速器

Country Status (1)

Country Link
CN (1) CN113762491B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115879530B (zh) * 2023-03-02 2023-05-05 湖北大学 一种面向rram存内计算系统阵列结构优化的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106228240A (zh) * 2016-07-30 2016-12-14 复旦大学 基于fpga的深度卷积神经网络实现方法
CN109784489A (zh) * 2019-01-16 2019-05-21 北京大学软件与微电子学院 基于fpga的卷积神经网络ip核
CN109934339A (zh) * 2019-03-06 2019-06-25 东南大学 一种基于一维脉动阵列的通用卷积神经网络加速器
CN110782022A (zh) * 2019-10-31 2020-02-11 福州大学 一种面向可编程逻辑器件移动终端的小型神经网络的实现方法
CN113222129A (zh) * 2021-04-02 2021-08-06 西安电子科技大学 一种基于多级缓存循环利用的卷积运算处理单元及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106228240A (zh) * 2016-07-30 2016-12-14 复旦大学 基于fpga的深度卷积神经网络实现方法
CN109784489A (zh) * 2019-01-16 2019-05-21 北京大学软件与微电子学院 基于fpga的卷积神经网络ip核
CN109934339A (zh) * 2019-03-06 2019-06-25 东南大学 一种基于一维脉动阵列的通用卷积神经网络加速器
CN110782022A (zh) * 2019-10-31 2020-02-11 福州大学 一种面向可编程逻辑器件移动终端的小型神经网络的实现方法
CN113222129A (zh) * 2021-04-02 2021-08-06 西安电子科技大学 一种基于多级缓存循环利用的卷积运算处理单元及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
A Holistic Approach for Optimizing DSP Block Utilization of a CNN implementation on FPGA;Kamel ABDELOUAHAB 等;《ACM》;全文 *
Throughput-Optimized FPGA Accelerator for Deep Convolutional Neural Networks;ZHIQIANG LIU 等;《ACM》;第10卷(第3期);全文 *
面向场景字符识别关键算法的多平台异构加速研究;贺江;《中国优秀硕士学位论文全文数据库 信息科技辑》(第02期);全文 *

Also Published As

Publication number Publication date
CN113762491A (zh) 2021-12-07

Similar Documents

Publication Publication Date Title
CN113033794B (zh) 基于深度可分离卷积的轻量级神经网络硬件加速器
CN113283587B (zh) 一种Winograd卷积运算加速方法及加速模块
Dai et al. SparseTrain: Exploiting dataflow sparsity for efficient convolutional neural networks training
CN113762491B (zh) 一种基于fpga的卷积神经网络加速器
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
Xiyuan et al. A Review of FPGA‐Based Custom Computing Architecture for Convolutional Neural Network Inference
CN110598844A (zh) 一种基于fpga的并行卷积神经网络加速器及加速方法
CN110110852B (zh) 一种深度学习网络移植到fpag平台的方法
Xiao et al. FPGA-based scalable and highly concurrent convolutional neural network acceleration
Shi et al. Design of parallel acceleration method of convolutional neural network based on fpga
Li et al. A hardware-efficient computing engine for FPGA-based deep convolutional neural network accelerator
Nag et al. ViTA: A vision transformer inference accelerator for edge applications
Yang et al. A sparse CNN accelerator for eliminating redundant computations in intra-and inter-convolutional/pooling layers
Kawamoto et al. A 1.15-TOPS 6.57-TOPS/W neural network processor for multi-scale object detection with reduced convolutional operations
Tsai et al. An on-chip fully connected neural network training hardware accelerator based on brain float point and sparsity awareness
Li et al. FPGA implementation of LSTM based on automatic speech recognition
Choi et al. Bit-width reduction and customized register for low cost convolutional neural network accelerator
CN115222028A (zh) 基于fpga的一维cnn-lstm加速平台及实现方法
Huang et al. A low-bit quantized and hls-based neural network fpga accelerator for object detection
Xian et al. Weight Isolation-Based Binarized Neural Networks Accelerator
Wang et al. TB-DNN: A thin binarized deep neural network with high accuracy
Lou et al. OctCNN: An energy-efficient FPGA accelerator for CNNs using octave convolution algorithm
Jia et al. A 11.6 μ W Computing-on-Memory-Boundary Keyword Spotting Processor with Joint MFCC-CNN Ternary Quantization
Cheng Design and implementation of convolutional neural network accelerator based on fpga
Yang et al. A 1.6-mW sparse deep learning accelerator for speech separation

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
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20211207

Assignee: Kaben (Shenzhen) medical equipment Co.,Ltd.

Assignor: NANJING University OF TECHNOLOGY

Contract record no.: X2023980053128

Denomination of invention: A Convolutional Neural Network Accelerator Based on FPGA

Granted publication date: 20230630

License type: Common License

Record date: 20231221