一种基于FPGA的计算优化的卷积神经网络加速器转让专利

申请号 : CN201811493592.X

文献号 : CN109598338B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陆生礼庞伟舒程昊范雪梅吴成路邹涛

申请人 : 东南大学东南大学—无锡集成电路技术研究所南京三宝科技股份有限公司

摘要 :

本发明公开一种基于FPGA的计算优化的卷积神经网络加速器,包括AXI4总线接口、数据缓存区、预取数据区、结果缓存区、状态控制器及PE阵列;数据缓存区用于缓存通过AXI4总线接口从外部存储器DDR中读取的特征图数据、卷积核数据和索引值;预取数据区用于从特征图子缓存区预取需要并行输入PE阵列的特征图数据;结果缓存区用于缓存每行PE的计算结果;状态控制器用于控制加速器工作状态,实现工作状态间的转换;PE阵列用于读取预取数据区和卷积核子缓存区中的数据进行卷积操作。此种加速器利用参数稀疏性、重复权重数据和激活函数Relu的特性,提前结束冗余计算,减少计算量,并通过减少访存次数来降低能耗。

权利要求 :

1.一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:包括AXI4总线接口、数据缓存区、预取数据区、结果缓存区、状态控制器及PE阵列;

所述数据缓存区用于缓存通过AXI4总线接口从外部存储器DDR中读取的特征图数据、卷积核数据和索引值;数据缓存区包含M个特征图子缓存区和C个卷积核子缓存区;

预取数据区用于从特征图子缓存区预取需要并行输入PE阵列的特征图数据;

PE阵列由FPGA实现,包含R*C个PE单元,每列PE单元对应配置一个卷积核子缓存区,根据实际计算的每层参数决定实际使用的特征图子缓存区个数;所述PE阵列用于读取预取数据区和卷积核子缓存区中的数据进行卷积操作,不同列的PE单元计算得到不同输出特征图,不同行的PE计算得到同一输出特征图的不同行;

所述PE单元包含输入缓存区、权重缓存区、输入检索区、权重检索区、PE控制单元、预先激活单元和乘累加单元,其中,输入缓存区和权重缓存区分别用于存放卷积计算所需要的特征图数据和权重数据,输入检索区和权重检索区分别用于存放查找特征图数据和权重数据的索引值;PE控制单元用于控制PE单元工作状态,读取索引区索引值,根据索引值读取缓存区的数据,送入乘累加单元计算,并配置乘累加单元模式和是否启动预先激活单元;预先激活单元用于检测卷积计算的部分和,若部分和小于0,则停止计算输出0;乘累加单元用于进行卷积计算,能够配置为正常乘累加计算模式或利用权重重复的计算优化模式;

所述PE控制单元确定乘累加单元的卷积计算优化模式为预先激活模式或权重重复模式,针对每一层选择不同计算优化模式;确定方法是:采用两位模式标志位确定计算优化模式,高位为0进行正常乘累加计算;高位为1为利用权重重复的计算优化模式;低位为0不进行预先激活;低位为1为预先激活模式;

所述PE单元包含两种计算优化模式,为预先激活模式和权重重复模式,预先激活模式是指实时监控卷积部分和正负,若为负则终止计算,直接输出Relu结果零,若为正则继续卷积计算;权重重复模式是指对于权重相同的卷积操作,先将对应权重相同的特征图数据相加,再和权重相乘,减少乘法次数和对权重数据的访存次数;

结果缓存区包含R个结果子缓存区,每行PE单元对应配置一个结果子缓存区,用于缓存每行PE单元的计算结果;

状态控制器用于控制加速器工作状态,实现工作状态间的转换。

2.如权利要求1所述的一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:

所述权重检索区包含多个权重子检索区,权重按从正到负、零权重最后的顺序写入权重子缓冲区,对应的输入索引值和权重索引值也按该顺序写入检索区;将权重和索引值排序的操作离线完成;卷积计算时,根据权重索引值,依次读取权重缓冲区的权重。

3.如权利要求2所述的一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:

所述权重索引值用一位权重变换标志位来表示是否更换计算权重,标志位为0,则权重不变,延用上一时钟权重;标志位为1,则权重改变,下一时钟按顺序读取权重子缓冲区中的下一权重。

4.如权利要求3所述的一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:

所述权重重复模式中,在权重变换标志位为0时的输入特征图先做累加操作,并将累加结果保存在寄存器中;在权重变换标志位为1时,做完累加操作后,将累加的部分和送入乘法单元和权值相乘,并把结果存入寄存器中。

5.如权利要求1所述的一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:

所述状态控制器由7个状态构成,分别为:等待、写特征图、写输入索引、写卷积核、写权重索引、卷积计算、计算结果发送,每个状态将相应的控制信号发送到相应的子模块,完成相应功能。

6.如权利要求1所述的一种基于FPGA的计算优化的卷积神经网络加速器,其特征在于:

所述AXI4总线接口将多个数据拼接成一个多位数据发送。

说明书 :

一种基于FPGA的计算优化的卷积神经网络加速器

技术领域

[0001] 本发明属于电子信息以及深度学习领域,特别涉及一种基于FPGA(Filed Programmable Gate Array)的计算优化的卷积神经网络加速器硬件结构。

背景技术

[0002] 近年来,深度神经网络的使用增长迅速,对世界经济和社会活动产生了重大影响。深度卷积神经网络技术在许多机器学习领域受到广泛关注,包括语音识别、自然语言处理和智能图像处理,特别是图像识别领域,深度卷积神经网络取得了一些显著的成果。在这些领域中,深度卷积神经网络能够实现超越人类的准确性。深度卷积神经网络的卓越性源自于它能够对大量数据进行统计学习之后从原始数据中提取高级特征。
[0003] 深度卷积神经网络是众所周知的计算密集型网络,而卷积操作占总操作数的90%以上。通过利用卷积计算时的运行信息和算法结构来减少这些大量的计算,即减少推理所需工作成为了新一轮的热点研究方向。
[0004] 深度卷积神经网络的高精度是以高计算复杂度为代价的。除了计算密集,卷积神经网络需要存储数百万甚至近亿的参数。这种网络的大尺寸对底层加速硬件提出了吞吐量和能量效率的挑战。
[0005] 目前,已经提出了基于FPGA、GPU(Graphic Processing Unit,图形处理器)和ASIC(Application Specific Integrated Circuit,专用集成电路)设计的各种加速器来提高深度卷积神经网络的性能。基于FPGA的加速器由于其性能好,能量效率高,开发周期短,重构能力强等优点被广泛研究。与通用架构不同,FPGA允许用户定制所设计硬件的功能,以适应各种资源和数据使用模式。
[0006] 基于前述分析,现有技术中存在卷积计算时冗余计算量过大的问题,本案由此产生。

发明内容

[0007] 本发明的目的,在于提供一种基于FPGA的计算优化的卷积神经网络加速器,其利用参数稀疏性、重复权重数据和激活函数Relu的特性,提前结束冗余计算,减少计算量,并通过减少访存次数来降低能耗。
[0008] 为了达成上述目的,本发明的解决方案是:
[0009] 一种基于FPGA的计算优化的卷积神经网络加速器,包括AXI4总线接口、数据缓存区、预取数据区、结果缓存区、状态控制器及PE阵列;
[0010] AXI4总线接口为通用的总线接口,可以将加速器挂载到任意使用AXI4协议的总线设备上工作;
[0011] 数据缓存区用于缓存通过AXI4总线接口从外部存储器DDR中读取的特征图数据、卷积核数据和索引值;数据缓存区包含M个特征图子缓存区和C个卷积核子缓存区,每列PE对应配置一个卷积核子缓存区,根据实际计算的每层参数决定实际使用的特征图子缓存区个数;其中,特征图子缓冲区个数M根据卷积神经网络当前层卷积核大小、输出特征图大小、卷积窗口偏移确定;
[0012] 预取数据区用于从特征图子缓存区预取需要并行输入PE阵列的特征图数据;
[0013] 结果缓存区包含R个结果子缓存区,每行PE对应配置一个结果子缓存区,用于缓存每行PE的计算结果;
[0014] 状态控制器用于控制加速器工作状态,实现工作状态间的转换;
[0015] PE阵列由FPGA实现,用于读取预取数据区和卷积核子缓存区中的数据进行卷积操作,不同列的PE计算得到不同输出特征图,不同行的PE计算得到同一输出特征图的不同行。PE阵列包含R*C个PE单元;每个PE单元包含两种计算优化模式,预先激活模式和权重重复模式。
[0016] 上述PE单元包含输入缓存区、权重缓存区、输入检索区、权重检索区、PE控制单元、预先激活单元和可配置乘累加单元,输入缓存区和权重缓存区分别用于存放卷积计算所需要的特征图数据和权重数据;输入检索区和权重检索区分别用于存放查找特征图数据和权重数据的索引值;PE控制单元用于控制PE单元工作状态,读取索引区索引值,根据索引值读取缓存区的数据,送入乘累加单元计算,并配置乘累加单元模式和是否启动预先激活单元;预先激活单元用于检测卷积计算的部分和,若部分和小于0,则停止计算输出0;乘累加单元用于进行卷积计算,可配置为正常乘累加计算模式,或利用权重重复的计算优化模式。
[0017] 上述PE控制单元确定乘累加单元的卷积计算优化模式为预先激活模式或权重重复模式,针对每一层选择不同计算优化模式;确定方法是:采用两位模式标志位确定计算优化模式,高位为0进行正常乘累加计算;高位为1为利用权重重复的计算优化模式;低位为0不进行预先激活;低位为1为预先激活模式。
[0018] 上述权重检索区包含多个权重子检索区,权重按从正到负、零权重最后的顺序写入权重子缓冲区,对应的输入索引值和权重索引值也按该顺序写入检索区;将权重和索引值排序的操作离线完成;卷积计算时,根据权重索引值,依次读取权重缓冲区的权重。
[0019] 上述权重索引值用一位权重变换标志位来表示是否更换计算权重,标志位为0,则权重不变,延用上一时钟权重;标志位为1,则权重改变,下一时钟按顺序读取权重子缓冲区中的下一权重。
[0020] 上述PE单元包含两种计算优化模式,为预先激活模式和权重重复模式,预先激活模式是指实时监控卷积部分和正负,若为负则反馈给PE控制单元终止计算,直接输出Relu结果零,若为正则继续卷积计算;权重重复模式是指对于权重相同的卷积操作,先将对应权重相同的特征图数据相加,再和权重相乘,减少乘法次数和对权重数据的访存次数。
[0021] 上述权重重复模式中,在权重变换标志位为0时的输入特征图先做累加操作,并将累加结果保存在寄存器中。在权重变换标志位为1时,做完累加操作后,将累加的部分和送入乘法单元和权值相乘,并把结果存入寄存器中。
[0022] 上述状态控制器由7个状态构成,分别为:等待、写特征图、写输入索引、写卷积核、写权重索引、卷积计算、计算结果发送,每个状态将相应的控制信号发送到相应的子模块,完成相应功能。
[0023] 上述AXI4总线接口数据位宽大于单个权重或特征图数据位宽,故将多个数据拼接成一个多位数据发送,提高数据传输速度。
[0024] 采用上述方案后,本发明利用卷积计算时的运行信息和算法结构,减少了冗余无用的计算和参数数据的读取,并利用FPGA硬件平台对卷积神经网络进行加速,可以提高DCNN的实时性,实现了较高的计算性能,并且降低了能耗。

附图说明

[0025] 图1是本发明的结构示意图;
[0026] 图2是本发明PE结构示意图;
[0027] 图3是输入索引和权值索引工作示意图;
[0028] 图4是预先激活单元工作示意图。

具体实施方式

[0029] 以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
[0030] 如图1所示,为本发明设计的卷积神经网络加速器硬件结构,以PE阵列大小以16*16,卷积核大小3*3,卷积核步长1为例,其工作方式如下:
[0031] PC通过PCI‑E接口将数据分区缓存在外部存储器DDR中,数据缓存区通过AXI4总线接口读取特征图数据按行缓存在3个特征图子缓存区中,输入索引值以相同方式缓存在特征图子缓存区。通过AXI4总线接口读取的权重数据依次缓存在16个卷积核子缓存区,权重索引值以相同方式缓存在卷积核子缓存区。预取缓存区按行顺序依次读取3个特征图子缓存区数据,共读取3*18个16位特征图数据,每个时钟周期并行输出16个位特征图数据,并行输入3个特征图数据。预取缓存区的输出数据送入PE阵列每行第一PE,并依次传递给每行相邻PE。输入索引值以相同方式送入PE阵列。输入特征图数据缓存在每个PE的输入子缓存区中,输入索引值缓存在输入检索区中。权重数据和权重索引值通过16个卷积核子缓冲区,并行输入PE阵列每列第一个PE中,并依次传递个每列相邻PE。最终缓存在PE中的权重子缓存区和权重检索区中。PE单元根据配置的计算优化模式,根据索引值,从输入子缓存区和权重子缓存区中读取数据,进行卷积计算,并将累加结果并行送入16个结果子缓存区,每行PE的计算结果存放在同一个结果子缓存区中。
[0032] 结合图2所示,PE单元可以通过两位模式标志位S1S0配置两种计算优化模式,预先激活模式和权重重复模式。S1S0配置为01时为预先激活模式,启动预先激活单元,对乘累加操作的部分和结果进行监测,如果部分和值为负,则提前输出Relu结果0并停止当前卷积窗计算;S1S0配置为10时为权重重复模式,启动输入累加单元,对权重相同的乘法操作,先做加法,将输入数据先进行累加存储在寄存器中,直到权重发生改变,将累加结果送入乘累加单元,进行乘累加操作。当权重为0时,PE单元将关闭计算单元,直接输出部分和结果。
[0033] 参照图3,PE控制单元通过输入索引值,依次从输入子缓存区取特征图数据送入计算单元。权值索引值用一位权重变换标志位来表示,若权重索引值为0则权重不变,若权重索引值为1则按顺序读取下一权重。权重和索引值按权值从正到负顺序排列,零权重放在最后,该排序工作离线完成。如图3所示,前四个输入数据对应着同一权值x,中间两个输入数据对应着同一权值y,最后三个输入数据对应着同一权值z。
[0034] 参照图4,预先激活单元启用后,将部分和值和零值进行比较,若部分和值大于零则继续计算输出最终结果;若部分和值小于零,则将终止计算信号发送给PE控制单元,PE控制单元关闭计算,直接输出Relu后的结果零。
[0035] 将卷积运算展开为向量乘累加操作使得网络结构和硬件架构更加匹配,根据运算信息和算法结构简化计算,提高了计算效率并降低了能耗。本实施例具体状态转换过程如下:
[0036] 初始化后加速器进入等待状态,状态控制器等待AXI4总线接口发送的状态信号state,当state为00001时,进入写卷积核状态;当state为00010时,进入写权重索引状态;当state为00100时,进入写特征图状态;当state为01000时,进入写输入索引状态;当数据接收完毕后,等待state为10000,进入卷积计算状态。当计算结束后,自动跳入发送计算结果状态,并在发送完成后跳回等待状态。
[0037] 写特征图:若进入该状态,等待AXI4总线接口数据有效信号拉高,同时依次使能3个特征图子缓存区,第一个子缓存区存储特征图第一行数据;第二个子缓存区存储特征图第二行数据;第三个子缓存区存储特征图第三行数据;特征图第四行数据跳回存储在第一个子缓存区中…按此顺序存储完特征图数据后,第一个时钟周期取三个子缓存区存储的特征图第一、二、三行的第一个数据送入预取缓存区;第二个时钟周期取三个子缓存区存储的特征图第四、五、六三行的第一个数据送入预取缓存区…在特征图行遍历后,按此顺序依次取第二、三…个数据送入预取缓存区。预取缓存区共存储3*18个特征图数据,存储完成后,每个时钟周期并行输出16个特征图数据送入PE阵列每行第一个PE中,并依次传递给每行相邻PE,最终存储在PE的输入子缓存区中。
[0038] 写输入索引:若进入该状态,按特征图数据存储模式,最终将数据存储在PE的输入检索区中。
[0039] 写卷积核:若进入该状态,等待AXI4总线接口数据有效信号拉高,同时依次使能16个卷积核子缓存区,第一个卷积核子缓存区存储第一个输出通道对应的卷积核值;第二个卷积核子缓存区存储第二个输出通道对应的卷积核值…16个卷积核子缓存区存储完毕后,每个子缓存区每个时钟输出一个数据,16个权重数据并行输入PE阵列每列第一个PE,并依次传递个同列相邻PE,最终缓存在PE单元中的权重缓冲区中。
[0040] 写权重索引:若进入该状态,按卷积核数据存储模式,最终将数据存储在PE的权重检索区中。
[0041] 卷积计算:若进入该状态,PE控制单元根据模式标志位S1S0配置PE单元的计算优化模式,并根据权重索引值和输入索引值,从权重子缓冲区和输入子缓冲区中读取数据送入乘累加单元进行计算,当进行了3*3*输入通道数次乘累加计算后,标志着所有数据都已计算完成,下个时钟将跳入发送计算结果状态。
[0042] 发送计算结果:若进入该状态,计算结果从16个计算结果缓存区中依次读出。将每个计算结果缓存区中的第一个输出通道数据取出,每四个拼凑成一个64位输出数据,通过AXI4总线接口发送到外部存储器DDR。依次将16个输出通道数据都发送到外部存储器DDR中,加速器跳回等待状态。
[0043] 通过状态控制器可以对参数进行修改,支持修改运行时图像大小,卷积核大小,步长大小,输出特征图大小,输出通道数多少。利用运行状态和算法结构,跳过冗余计算,因此减少了不必要的计算和访存,提高了卷积神经网络加速器效率,并降低了能耗。
[0044] 以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。