1.本技术涉及卷积神经网络加速器技术领域,涉及一种卷积神经网络加速器。
背景技术:2.随着人工智能技术的飞速发展,出现了以卷积神经网络(convolutional neural network,cnn)为基础的深度学习技术。局部感知和权值共享的结构使得cnn能够更好地进行特征提取,从而降低网络模型的复杂度。
3.在变电站中,诸多设备需要使用图像处理技术进行信息采集、数据处理等,传统的图像处理方法通常采用人工特征提取,难以进行大规模的快速应用,cnn技术的引入极大的增强了图像处理技术在变电站中的应用。
4.然而随着cnn网络性能的增强,cnn网络所需要的计算力也越来越高,为了加速对卷积神经网络的运算,有必要提供一种卷积神经网络加速器。
技术实现要素:5.基于此,有必要针对上述技术问题,提供一种卷积神经网络加速器。
6.一种卷积神经网络加速器,包括:卷积加速模块和池化加速模块;所述卷积加速模块的并行输出通道数与所述池化加速模块的并行输入通道数相等;所述卷积加速模块包括卷积行缓存单元、卷积滑窗单元、卷积计算单元、数据累加单元和卷积输出单元;
7.所述卷积行缓存单元,用于对具有第一行数、第一列数和多输入通道的待卷积输入数据进行读取,得到具有第二行数、所述第一列数和所述多输入通道的待卷积缓存数据,对所述待卷积缓存数据进行行缓存;其中,所述第二行数与卷积核的行数一致;
8.所述卷积滑窗单元,用于从所述待卷积缓存数据中,提取具有所述第二行数、第二列数和所述多输入通道的待卷积特征数据;所述第二列数与所述卷积核的列数一致;
9.所述卷积计算单元,用于将所述待卷积特征数据与预设组数的卷积核进行通道对应的卷积计算,得到所述预设组数的卷积计算结果,将所述预设组数的卷积计算结果传输至数据累加单元;其中,每组卷积核所包括的卷积核的数量与所述输入通道的数量一致,所述预设组数与所述卷积加速模块的并行输出通道数一致;
10.所述数据累加单元,用于对同组的卷积计算结果进行累加,得到对应于所述待卷积特征数据的所述预设组数的卷积输出数据,并将对应于所述待卷积特征数据的所述预设组数的卷积输出数据写入所述卷积输出单元;
11.所述卷积输出单元,用于在基于对应于所述待卷积特征数据的所述预设组数的卷积输出数据,形成对应于所述待卷积输入数据的所述预设组数的卷积输出数据的情况下,将对应于所述待卷积输入数据的所述预设组数的卷积输出数据输入至所述池化加速模块;
12.所述池化加速模块,用于对对应于所述待卷积输入数据的所述预设组数的卷积输出数据进行池化处理。
13.在其中一个实施例中,所述池化加速模块包括池化行缓存单元、池化滑窗单元、池
化计算单元和池化输出单元;
14.所述池化行缓存单元,用于对所述卷积输出单元输出的对应于所述待卷积输入数据的所述预设组数的卷积输出数据进行读取,得到具有第三行数和第三列数的待池化缓存数据,对所述待池化缓存数据进行行缓存;其中,所述第三行数与池化核的行数一致;
15.所述池化滑窗单元,用于从所述待池化缓存数据汇中提取具有所述第三行数和第四列数的待池化特征数据;其中,所述第四列数与所述池化核的列数一致;
16.所述池化计算单元,用于利用池化核对所述待池化特征数据进行池化计算,得到池化计算结果;
17.所述池化输出单元,用于将所述池化计算结果作为池化输出数据进行输出。
18.在其中一个实施例中,
19.所述卷积加速模块和所述池化加速模块部署在卷积神经网络加速器的可编程逻辑部分,所述卷积神经网络加速器还包括处理系统部分;所述处理系统部分,用于向所述卷积行缓存单元传输所述待卷积输入数据;
20.所述处理系统与所述卷积行缓存单元之间的并行数据传输通道数小于所述卷积加速模块的并行输入通道数,且所述并行数据传输通道数与所述并行输入通道数具有整数倍关系。
21.在其中一个实施例中,卷积神经网络的各网络层的权重、偏置和输入数据被进行舍弃高位保留低位的溢出处理;所述各网络层的输出数据被进行定点数据的最大值替代的溢出处理;所述各网络层的中间处理数据被进行位宽扩大的溢出处理。
22.在其中一个实施例中,所述各网络层的权重和偏置被进行舍弃高位保留低位的溢出处理之前,还被进行第一预处理;所述第一预处理为:用定点数据的最大值替代大于定点数据范围的权重或偏置。
23.在其中一个实施例中,所述各网络层的输入数据被进行舍弃高位保留低位的溢出处理之前,还被进行第二预处理;所述第二预处理为:对所述输入数据进行归一化处理并将归一化处理后的输入数据映射至特定数据区间;所述特定数据区间是根据定点数据的整数部分位宽和量化因子确定的。
24.在其中一个实施例中,所述定点数据的位宽和量化因子是对所述卷积神经网络中的数据进行定点化处理并对定点化处理后的数据进行误差统计确定的。
25.在其中一个实施例中,所述卷积输出单元为fifo单元;
26.所述卷积行缓存单元,用于在所述fifo单元处于非空状态时,对所述待卷积输入数据进行读取。
27.在其中一个实施例中,所述卷积行缓存单元每进行一次待卷积输入数据的读取,则对所述fifo单元进行与所述fifo单元的深度对应次数的写入。
28.在其中一个实施例中,
29.所述数据累加单元,用于在所述fifo单元处于非满状态时,对所述fifo单元进行数据写入。
30.上述卷积神经网络加速器,包括卷积加速模块和池化加速模块;所述卷积加速模块的并行输出通道数与所述池化加速模块的并行输入通道数相等,实现卷积神经网络加速器的层间流水化运算,提高卷积神经网络加速器对卷积神经网络的运算速度。
31.进一步地,所述卷积加速模块包括卷积行缓存单元、卷积滑窗单元、卷积计算单元、数据累加单元和卷积输出单元;所述卷积行缓存单元,用于对具有第一行数、第一列数和多输入通道的待卷积输入数据进行读取,得到具有第二行数、所述第一列数和所述多输入通道的待卷积缓存数据,对所述待卷积缓存数据进行行缓存;其中,所述第二行数与卷积核的行数一致;所述卷积滑窗单元,用于从所述待卷积缓存数据中,提取具有所述第二行数、第二列数和所述多输入通道的待卷积特征数据;所述第二列数与所述卷积核的列数一致;所述卷积计算单元,用于将所述待卷积特征数据与预设组数的卷积核进行通道对应的卷积计算,得到所述预设组数的卷积计算结果,将所述预设组数的卷积计算结果传输至数据累加单元;其中,每组卷积核所包括的卷积核的数量与所述输入通道的数量一致,所述预设组数与所述卷积加速模块的并行输出通道数一致;所述数据累加单元,用于对同组的卷积计算结果进行累加,得到对应于所述待卷积特征数据的所述预设组数的卷积输出数据,并将对应于所述待卷积特征数据的所述预设组数的卷积输出数据写入所述卷积输出单元;所述卷积输出单元,用于在基于对应于所述待卷积特征数据的所述预设组数的卷积输出数据,形成对应于所述待卷积输入数据的所述预设组数的卷积输出数据的情况下,将对应于所述待卷积输入数据的所述预设组数的卷积输出数据输入至所述池化加速模块;上述方式实现了对卷积神经网络的卷积层的5层流水化运算,提高对卷积层内的运算速度,具体体现在:卷积行缓存单元缓存到与卷积核的行数一致的数据时,即可由卷积滑窗单元进行滑窗处理;并且卷积滑窗单元从卷积行缓存单元缓存的数据提取需要进行卷积运算的特征数据;接着卷积计算单元将提取出的特征数据与不同组的卷积核进行卷积运算,并将卷积计算结果传输至数据累加单元;数据累加单元对同组的卷积计算单元进行累加,得到本次计算的卷积输出数据;卷积输出单元存储本次的卷积输出数据和之前的卷积输出数据,在存储的卷积输出数据对应于待卷积输入数据时,将所存储的卷积输出数据发送至池化加速模块;池化加速模块,用于对对应于所述待卷积输入数据的所述预设组数的卷积输出数据进行池化处理。
附图说明
32.图1为一个实施例中卷积神经网络加速器的系统结构图;
33.图2为一个实施例中并行化循环分块示意图;
34.图3为一个实施例中并行化循环展开示意图;
35.图4为一个实施例中卷积层输入行缓存结构图;
36.图5为一个实施例中卷积层fifo输出缓存结构图;
37.图6为一个实施例中池化层输入行缓存结构图;
38.图7为一个实施例中定点化数据划分结构图;
39.图8为一个实施例中定点化数据溢出处理示意图;
40.图9为一个实施例中网络层间流水化示意图;
41.图10为一个实施例中卷积层层内流水化示意图;
42.图11为一个实施例中池化层层内流水化示意图;
43.图12为一个实施例中arm与fpga并行数据读取示意图。
具体实施方式
44.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
45.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本技术所描述的实施例可以与其它实施例相结合。
46.本技术提供的卷积神经网络加速器可以用于变电站图像识别中,该卷积神经网络加速器使用arm进行系统级的信息交互,使用fpga进行卷积神经网络的计算加速,以此完成变电站中智能图像处理阵列的设计与部署。
47.本技术提供的卷积神经网络加速器中,体现出本技术提出一种卷积神经网络中卷积层与池化层的并行化设计方法,从输入通道与输出通道两个层面对卷积层与池化层进行并行化设计,并结合层间流水化设计思想,将卷积层的输出通道与池化层的输入通道并行度设置为相等(也即卷积神经网络加速器的卷积加速模块的并行输出通道数与池化加速模块的并行输入通道数相等),以此实现卷积神经网络的层间流水化设计。并且,也体现出本技术提出一种卷积神经网络中卷积层的5层流水化结构以及池化层的4层流水化结构,并分别设计了卷积层的权重偏置存储结构、输入行缓存结构、fifo(first input first output,先进先出)输出缓存结构,以及池化层的片上行缓存结构。另外,还体现出本技术提出一种卷积神经网络的定点化设计方法,并给出了卷积神经网络定点化后的数据溢出处理策略。
48.简单来说,本技术的卷积神经网络加速器的设计主要包括以下几个方面:
49.(1)通过对卷积神经网络计算特性的分析,得到了输入通道与输出通道两个尺度的并行计算特征,引入了输入通道与输出通道的并行化因子,输入通道并行化因子输入分记为a,输出通道并行化因子记为b。使用循环分块、循环展开、循环次序调整以及数组分割的方法设计了卷积层与池化层的fpga(field programmable gate array,现场可编程门阵列)硬件计算单元。对于卷积层,设计了卷积层的权重偏置存储结构、输入行缓存结构以及fifo输出缓存结构;对于池化层设计了池化层的片上行缓存结构。
50.(2)对卷积神经网络中的权重、偏置进行静态数据分布统计,并使用变电站中的图像样本数据对卷积神经网络前向推理过程中各层的动态数据分布进行统计,从而确定网络模型的整体数据分布区间。利用公式
①
(在下面介绍中详细说明)对卷积神经网络中的数据进行数据定点化设计,然后使用公式
②
(在下面介绍中详细说明)对定点化后的数据进行误差统计,进而确定定点数据的位宽和量化因子。对于定点化后可能产生的数据溢出,通过对卷积神经网络中不同作用的数据进行划分,分别使用最大值代替法、高位舍弃法以及高位宽表示法对网络中的数据进行溢出处理。
51.(3)从卷积神经网络层间与层内两个方面进行流水化设计。对于层间流水化的设计,设计了卷积层与池化层之间的2级流水化计算架构,根据卷积神经网络计算过程中的数据流方向,将卷积层输出通道的并行化因子与池化层输入通道的并行化因子设置为相等,以此实现卷积层与池化层之间的流水化计算;对于层内流水化的设计,通过对卷积层与池
化层计算特性的分析,使用任务划分的方法,分别设计了卷积层的5级流水化计算架构以及池化层的4级流水化计算架构。
52.(4)通过对axi数据总线协议的分析,设计了一种arm与fpga之间的并行数据读写方法,以此完成卷积神经网络计算中arm与fpga之间的数据交互。根据卷积神经网络输入通道的并行化因子确定并行数据读取的通道数,根据定点化后的定点数据位宽确定并行数据读取的数据位宽。
53.以上设计方法,使用xilinx vivado开发套件在xilinx xc7z020clg400
‑
1平台上,以yolov3
‑
tiny网络模型为例对加速器性能进行测试,分别设计了卷积层、池化层硬件加速ip,并在vivado ide上完成了基于zynq7020的片上系统(system on chip,soc)搭建。
54.以下详细描述本技术的卷积神经网络加速器:
55.图1是卷积神经网络加速器的系统设计的整体框图,可以使用xilinx公司推出异构片上可编程芯片
‑
zynq进行加速器设计的描述,该芯片由处理系统(processing system,ps)和可编程逻辑(programmable logic,pl)两部分组成,具有低功耗、高性能、可扩展的特点。arm端进行程序的配置以及相关逻辑控制,fpga端进行卷积神经网络计算的加速,arm与fpga间的数据交互使用axi数据总线。数据从外部的ddr3内存通过axi总线传输至fpga内部进行运算,当卷积层与池化层完成运算后再通过axi数据总线将数据传输至arm端的ddr3。
56.由于卷积神经网络的数据较大,而fpga的硬件计算资源相对较少,因此需要分批次的将待计算的数据送入fpga内部进行计算加速。使用循环分块进行计算设计优化,循环分块的设计如图2所示,我们以输出通道为m,输入通道为n的卷积计算为例,对于输出通道来说,可将m个卷积核分割为m/p份,通过m/p次循环完成整个卷积核的并行计算,则此时卷积核的并行度为p,即一次进行p组卷积核的计算;可以理解的是,每组卷积核包括的卷积核数量与输入通道的数量一致,即为n。
57.循环展开的设计如图3所示,循环展开是一种最直接的并行化加速方法,采用循环展开的方法能够大幅地提高并行运算的速度,当硬件加速平台的资源充足时,可将计算过程没有相互依赖关系的循环进行展开。以图3中3*3的卷积核为例,如果将卷积核与特征图滑窗展开,则可同时进行9次乘法运算,然后在进行1次加法运算,即可完成整个卷积核的计算过程。
58.卷积层的输入行缓存结构如图4和图6所示,我们以4*4的输入特征图和3*3的卷积核为例进行行缓存内部结构的介绍(
★
表示缓存器当前位置),图4中的行缓存尺寸为3*4,因此一次缓存的最大尺寸为特征图的3行数据,假设axi总线每个时钟周期传输一位输入特征图数据,行缓存每个时钟周期就能获取一个数;每个时钟周期下缓存器将当前列的数据向上移动,然后将新的数据读入缓存器的当前位置;下一个时钟周期到来时缓存器将当前位置向右移动一个位置,然后将当前列的数据向上移动,再将新的数据读入缓存器的当前位置,以此类推不断重复这个过程,直到缓存器当前位置移动到最后一列,在下个时钟周期时再从第一列重复之前的过程。
59.卷积层的设计可以使用fifo输出缓存结构,如图5所示,我们将fifo的深度设置为2,每进行一次输入数据的读取则进行两次输出数据的写入,完成卷积计算时需要进行fifo状态的判断,当fifo非满状态下进行fifo的数据写入,将当前的计算结果缓存至fifo中;同样当进行数据读取时需要判断fifo是否为空,当fifo状态非空时进行数据的读取,将卷积
计算结果输出至片外存储器。fifo的结构设计能够提高加速器的计算速率,同时提高数据吞吐率,并在一定程度上缓解了输入输出数据传输不均衡的问题。
60.可见,所述卷积行缓存单元主要用于在所述fifo单元处于非空状态时,对所述待卷积输入数据进行读取;以及,所述卷积行缓存单元每进行一次待卷积输入数据的读取,则对所述fifo单元进行与所述fifo单元的深度对应次数的写入;以及,数据累加单元主要用于在所述fifo单元处于非满状态时,对所述fifo单元进行数据写入。
61.一个定点数据由符号位、整数位和小数位组成,其总位宽为w,整数部分位宽为i,量化因子为w
‑
i
‑
1,我们使用s_float32)、int(w)、i
‑
float(32)分别表示原始浮点型数据、定点量化后的数据以及定点数反量化的数据,三者之间的关系可用如下公式表示:
62.int(w)=s_float(32)*2
w
‑
i
‑163.i_float(32)=int(w)/2
w
‑
i
‑1ꢀꢀꢀ①
64.当总位宽与整数部分位宽固定时,即可使用上式进行数据的量化与反量化,我们将w
‑
i
‑
1称为量化因子,不同的量化因子具有不同的精度,量化因子越大相应的数据精度就越高。为了衡量定点化后数据损失的精度,通常将定点化之后的样本数据进行反量化,并与原始样本数据进行对比,总体的量化精度损失可使用以下公式进行描述:
[0065][0066]
其中,n=0、1、2、......、n时,表示第0、1、2、......、n个数据;当精度损失在可接受的范围内时,即可完成量化工作,可使用定点化后的数据进行运算。定点化过程中数据整数部分位宽以及量化因子的选择十分重要,前者决定了定点数所能表示的数据范围,后者决定了定点数据的精度。
[0067]
可见,定点数据的位宽和量化因子是对所述卷积神经网络中的数据进行定点化处理并对定点化处理后的数据进行误差统计确定的。
[0068]
卷积神经网络中的数据划分及定点化后的数据溢出处理方法如图7和图8所示。对于神经网络来说,数据溢出主要存在于卷积的计算过程以及计算结果的输出,各层的权重、偏置、输入数据只参与计算过程,无需进行数据的更新(此处指本层输入数据)。因此,权重、偏置、输入数据的溢出处理直接使用舍去高位保留低位的方法,也即,卷积神经网络的各网络层的权重、偏置和输入数据被进行舍弃高位保留低位的溢出处理。
[0069]
进一步地,为了保证舍弃高位保留低位处理方法的数据精度,在对权重、偏置和输入(第一层)数据进行定点化之前,首先根据定点数据的表示范围对其进行预处理,其中权重与偏置一般为浮点型数据,定点化前的预处理主要是将极少数大于定点数范围的数据使用最大值代替,避免传输fpga内部的数据超出定点数据的范围,从而减少数据精度的损失,与硬件资源的消耗。而输入数据(第一层)通常是三通道的rgb图像,其数据类型为整型,大小在0~255之间,在对其进行定点化前,首先对其进行归一化处理,然后再将数据映射到0~(2
i+1
‑2‑
w
‑
i
‑1)之间。
[0070]
也即,所述各网络层的权重和偏置被进行舍弃高位保留低位的溢出处理之前,还
被进行第一预处理;所述第一预处理为:用定点数据的最大值替代大于定点数据范围的权重或偏置;所述各网络层的输入数据被进行舍弃高位保留低位的溢出处理之前,还被进行第二预处理;所述第二预处理为:对所述输入数据进行归一化处理并将归一化处理后的输入数据映射至特定数据区间(0~(2i+1
‑2‑
w
‑
i
‑
1));所述特定数据区间是根据定点数据的整数部分位宽和量化因子确定的。
[0071]
对于卷积计算过程中的数据累加我们使用更大范围的定点数据类型进行计算结果的暂存,确保在累加过程中不会出现数据的溢出,数据范围通常设为
‑
(2
2i
+1
‑2‑
2(w
‑
i
‑
1)
)~(2
2i
+1
‑2‑
2(w
‑
i
‑
1)
),即对整数部分位宽与小数部分位宽(量化因子)加倍,也即,所述各网络层的中间处理数据(即中间计算结果)被进行位宽扩大的溢出处理。
[0072]
而对卷积计算的最终输出结果,我们使用与输入数据相同的定点型数据进行表示,数据范围为
‑
(2
i
+1
‑2‑
w
‑
i
‑1)~(2
i
+1
‑2‑
w
‑
i
‑1),此时使用定点数据的最大值代替该值,避免造成更大的精度损失,也即所述各网络层的输出数据被进行定点数据的最大值替代的溢出处理。
[0073]
我们将网络模型的流水化抽象为两个层级,宏观上的流水化可在网络的各层级之间进行设计,网络中相邻的层之间虽然有数据依赖关系,但并非要等一层的计算完全结束之后才能进行下一层的计算;微观上的流水化可在具体的层内展开设计,以卷积层为例,卷积的计算主要由多层for循环组成,可将其抽象为几个子任务,然后对其进行流水化设计。
[0074]
网络层间流水化的设计如图9所示,层间流水化与层间数据的传递关系密不可分,对于arm+fpga架构的神经网络加速器来说,在fpga内部使用硬件控制器将不同的加速单元连接起来,可通过控制器选择完成计算后的数据流向,对于卷积和池化来说,当完成部分卷积计算后,可对计算完成后的数据直接进行池化运算,然后再将数据传输至片外存储,以此降低数据的传输次数,提高加速器的整体性能。
[0075]
相对于层间来说,层内的流水化设计具有更大的设计空间,卷积层的流水化设计如图10所示。我们将卷积层的计算分为5个子任务,因此卷积加速模块可以包括以下单元:卷积行缓存单元、卷积滑窗单元、卷积计算单元、数据累加单元以及卷积输出单元,因此整个流水线为5级流水设计。流水线的工作流程如下:首先使用卷积行缓存单元对输入数据进行读取,然后卷积滑窗单元从卷积行缓存单元提取需要进行卷积运算的特征数据,接着卷积计算单元将提取出的特征数据与不同卷积核的进行卷积运算,再将计算结果传输至数据累加单元,进行不同卷积核计算结果的累加,从而得到本次计算的输出结果,最后将输出结果送入卷积输出单元的fifo单元进行临时存储,同时将上一次计算的结果输出至片外存储单元。
[0076]
更具体来说,卷积行缓存单元主要是用于对具有第一行数、第一列数和多输入通道的待卷积输入数据进行读取,得到具有第二行数、所述第一列数和所述多输入通道的待卷积缓存数据,对所述待卷积缓存数据进行行缓存;其中,所述第二行数与卷积核的行数一致。卷积滑窗单元主要是用于从所述待卷积缓存数据中,提取具有所述第二行数、第二列数和所述多输入通道的待卷积特征数据;所述第二列数与所述卷积核的列数一致。卷积计算单元主要是用于将所述待卷积特征数据与预设组数的卷积核进行通道对应的卷积计算,得到所述预设组数的卷积计算结果,将所述预设组数的卷积计算结果传输至数据累加单元;其中,每组卷积核所包括的卷积核的数量与所述输入通道的数量一致,所述预设组数与所
述卷积加速模块的并行输出通道数一致。数据累加单元主要是用于对同组的卷积计算结果进行累加,得到对应于所述待卷积特征数据的所述预设组数的卷积输出数据,并将对应于所述待卷积特征数据的所述预设组数的卷积输出数据写入所述卷积输出单元。
[0077]
需要说明的是,数据累加单元当前次的卷积输出数据主要是对应于待卷积特征数据而言的,例如,若卷积核大小为3*3,卷积行缓存单元和卷积滑窗单元对4*4的三通道输入特征图进行处理后,得到3*3的三通道输入特征图块(该3*3的三通道输入特征图块是由待卷积的特征数据形成的),因此,卷积计算单元对3*3的三通道输入特征图块进行卷积计算后,数据累加单元进行累加计算得到的卷积输出数据是对应于3*3的三通道输入特征图块的,也即对应待卷积的特征数据。
[0078]
若卷积核大小为3*3,那么4*4的三通道输入特征图可以被分为3个3*3的三通道输入特征图块,此时,卷积输出单元基于对应于3个3*3的三通道输入特征图块的卷积输出数据形成对应于4*4的三通道输入特征图的卷积输出数据后,将对应于4*4的三通道输入特征图的卷积输出数据传输至池化加速模块。
[0079]
池化加速模块主要是用于对对应于所述待卷积输入数据的所述预设组数的卷积输出数据进行池化处理。池化层的流水化设计如图11所示,我们将池化层的计算分为4个子任务,因此,池化加速模块可以包括以下单元:池化行缓存单元、池化滑窗单元、池化计算单元、以及池化输出单元,因此整个流水线为4级流水设计。流水线的工作流程如下:首先使用池化行缓存单元对输入数据进行读取,然后池化滑窗单元从池化行缓存单元提取需要进行最大池化运算的特征数据,接着池化计算单元将提取出最大的特征数据,然后通过池化输出单元进行输出。
[0080]
更具体来说,池化行缓存单元主要是用于对所述卷积输出单元输出的对应于所述待卷积输入数据的所述预设组数的卷积输出数据进行读取,得到具有第三行数和第三列数的待池化缓存数据,对所述待池化缓存数据进行行缓存;其中,所述第三行数与池化核的行数一致。池化滑窗单元主要是用于从所述待池化缓存数据汇中提取具有所述第三行数和第四列数的待池化特征数据;其中,所述第四列数与所述池化核的列数一致;所述池化计算单元,用于利用池化核对所述待池化特征数据进行池化计算,得到池化计算结果;所述池化输出单元,用于将所述池化计算结果作为池化输出数据进行输出。
[0081]
在一个实施例中,卷积加速模块和所述池化加速模块部署在卷积神经网络加速器的可编程逻辑部分,所述卷积神经网络加速器还包括处理系统部分;所述处理系统部分,用于向所述卷积行缓存单元传输所述待卷积输入数据。所述处理系统与所述卷积行缓存单元之间的并行数据传输通道数小于所述卷积加速模块的并行输入通道数,且所述并行数据传输通道数与所述并行输入通道数具有整数倍关系。
[0082]
更具体来说,arm与fpga间的并行数据传输如图12所示。图12所示的是一种混合行缓存结构,交替地将输入特征图的每个数据传输至fpga的片上行缓存中,这种数据缓存结构可以实现特征图间的并行性以及卷积核间的并行性。当进行卷积计算时,a个不同的卷积核共享对应的b个输入特征图行缓存,将b个输入特征图的卷积计算结果叠加即可得到一个卷积核的计算输出。混合行缓存结构相对复杂,但计算效率较高,能够在有限的片上资源实现较大的并行性,此外引入多通道输入特征图的缓存能够有效地降低临时数据存储。我们将axi数据传输的位宽设置为64,定点数的数据位宽设置为16;根据卷积神经网络并行输入
通道数确定arm与fpga间的并行数据读取的通道数,且所述并行数据传输通道数与所述并行输入通道数具有整数倍关系,示例性地,卷积神经网络并行输入通道数为32,那么并行数据读取通道数可以设为4,此时,arm与fpga间一次能够进行4通道数据的并行读写。
[0083]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0084]
以上的实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。