陈 逸,刘博生,徐永祺,武继刚
(广东工业大学 计算机学院,广州 510006)
卷积神经网络(Convolutional Neural Network,CNN)应用广泛,在语音识别、计算机视觉和生物信息处理[1-3]等领域都有着出色的表现。针对卷积神经网络的硬件加速器设计是一个重要的研究方向,现场可编程门阵列(Field Programmable Gate Array,FPGA)因其在性能、实时性、价格等方面的优势[4],成为硬件加速器设计中的一个较好选择。
然而,目前应用广泛的CNN 模型(如VGG、ResNet)普遍存在模型大、计算复杂度高的特点,为硬件部署带来困难。文献[5-7]提出应用低精度卷积神经网络(如8 bit CNN)有效降低模型大小,进而降低硬件上的内存占用和带宽需求。然而,低精度卷积神经网络存在数据表征能力弱的问题,会造成CNN 模型准确率下降。针对这一问题,文献[8-10]提出了混合精度卷积神经网络,在模型准确率和模型大小之间做出了有效权衡。
低精度和混合精度卷积神经网络可以显著降低模型大小,但仍无法有效减少模型的计算量。对此,文献[11-13]提出应用快速傅里叶变换(Fast Fourier Transform,FFT)快速算法,该算法可以将传统的空间域卷积神经网络变换为频域卷积神经网络,进而利用简单的EWMM(Element-Wise Multiplication)操作替代传统的滑动窗口卷积,有效降低计算复杂度。其中:文献[11]采用16 bit fixed 数据类型并基于overlap-saved 频域卷积方法实现了FPGA 加速器,取得了不错的性能,但其模型仍存在内存占用较大的问题;文献[13]提出了一种频域卷积神经网络的量化方案,包括8 bit 定点数据类型量化,并基于FPGA设计加速器进行了性能评估,但其量化后的精度类型位宽较少并且较为单一,对精度带来较大影响。
本文基于FPGA 设计8 bit 和16 bit 的混合精度频域卷积神经网络加速器(称为FHA),在兼顾模型准确率的同时,有效降低模型大小和计算复杂度。该加速器支持8 bit 和16 bit 频域卷积运算的动态配置。此外,该加速器可在8 bit 频域卷积运算中对一对频域复数乘法进行打包以充分利用DSP,提升计算性能。本文首先设计一个基于DSP 的频域计算单元,其支持8 bit 和16 bit 两种频域卷积运算,同时可打包一对8 bit 频域乘法至DSP 以提升运算速度;然后,提出一个映射数据流,该数据流包含8 bit 和16 bit 两种形式,可通过数据重用方式最大化减少冗余的数据处理和数据搬运操作。
图1 展示了基于overlap-saved 频域卷积的主要过程。其中,i、o和w分别代表空间域的输入激活值、输出激活值和权重;ifft、offt和wfft分别代表频域的输入激活值、输出激活值和权重。如图1 所示,空间域中的输入激活值和权重经FFT 操作变换至频域。在进行FFT 变换前,需要先在空间域的输入特征图上进行切片,即将该输入特征图分割为多个相互重叠的小块,这些小块将分别进行FFT 操作,并与频域中的权重进行EWMM 操作,最终得到频域输出激活值offt。最后经过快速傅里叶反变换(Inverse Fast Fourier Transform,IFFT)操作,可将频域输出offt恢复为空间域输出o。在频域卷积中,EWMM 操作所执行的是复数乘法,如式(1)所示:
图1 频域卷积过程Fig.1 Frequency-domain convolution process
其中:wfft=wr+wi∙j,wr和wi分别代表实部和虚部;同理,ifft=ir+ii∙j;x、y和z是中间参数,代表该复数乘法所包含的3 个实数乘法。
图2 展示了Xilinx FPGA Ultrascale 系列中DSP内部的简化架构。具体来说,该DSP 主要包含一个预加法器(图中以“+/-”表示,可执行加法或减法操作)、一个乘法器(图中以“×”表示)以及一个后加法器(图中以“+”表示)。DSP 可通过控制信号来选择执行模式,如inmode 信号可控制预加法器执行加法或减法操作;opmode 信号可控制后加法器的输入,即选择0 或输入寄存器C[47:0]。
图2 DSP 内部架构Fig.2 Internal architecture of DSP
本文设计的加速器同时支持8 bit 和16 bit 频域卷积运算。在计算8 bit 频域乘法时,输入数据(8 bit)与DSP 固有的输入带宽(27 bit)相差较大,若不考虑优化,DSP 一次执行一个8 bit 频域乘法运算,无疑会造成DSP 输入带宽的严重浪费(尚有70%的输入带宽未使用)。为充分利用DSP 的输入带宽,本文借鉴空间域中已有的数据打包策略[14-16],使一个DSP 可同时计算一对8 bit 频域乘法。然而,空间域的打包策略仅适用空间域卷积计算模式,无法用于频域卷积。因此,如何针对频域卷积模式设计一种DSP 数据打包策略成为本文面临的第1 个挑战。其次,在设计过程中观察到频域卷积运算存在大量的可重用数据,如何利用该特点减少冗余的数据处理和数据搬运操作为本文面临的第2 个挑战。
为解决第1 个挑战,本文设计了基于DSP 的频域计算单元,当加速器计算8 bit 频域卷积时,该单元可打包一对频域乘法至DSP 以提升吞吐率。需要注意的是,位于打包结果较低比特位的有符号数在DSP 运算过程中会被识别为无符号数,导致输出结果不正确。本文通过在DSP 的输入寄存器C[47:0]中放置偏移值,以此修正最后的运算结果,并提供了生成寄存器C 中偏移值的算法。当计算16 bit 频域卷积时,频域计算单元不执行打包操作,可直接执行频域乘法运算。
为解决第2 个挑战,本文充分利用频域卷积中的数据重用特性。基于图1 和式(1),本文发现3 种频域输入数据可重用形式:1)图1 中不同输出通道的权重wfft可重用同一个切片上的输入激活值ifft;2)图1 中不同切片(如T1和T2)的输入激活值ifft可重用同一输出通道的权重wfft;3)式(1)中存在可重用数据,如y和z的计算中,ir和ii是重复出现的。基于以上3 种形式,本文设计一个能够充分利用数据重用特性的映射数据流,以此减少冗余的数据处理和数据搬运操作。
本节阐述所提出的8 bit 和16 bit 混合精度频域卷积神经网络加速器FHA,同时介绍加速器内部相关模块的设计以及所提出的映射数据流。
图3 为所提出的FHA 加速器架构。FHA 主要包含4 个模块:片上缓存模块,快速傅里叶(反)变换(FFT/IFFT)模块,控制(Ctroller,Ctrl)模块,频域处理单 元(Frequency-domain Processing Element,FPE)模块。
图3 FHA 加速器架构Fig.3 FHA accelerator architecture
在图3 中,片上缓存模块包括全局激活值缓存(Global Activiation Buffer,GAB)、全局权重缓存(Global Weight Buffer,GWB)和局部缓存(Local Buffer,LB)。GAB 存储来自外部存储器(Memmory,Mem)的输入激活值和经IFFT 模块变换后的输出激活值。GWB 存储来自外部存储器的复数权重。LB暂存经FFT 模块变换后的复数输入激活值。FFT/IFFT 模块将激活值在空间域和频域之间进行转换。FPE 模块是一个频域计算单元,可完成8 bit和16 bit的频域乘法运算。FPE模块由4个部分组成,分别为数据处理(Data Process,DP)模块、DSP、累加(Accumulator,Acc)模块和数据恢复(Recover,Rec)模块。DP 模块可以根据频域卷积模式(8 bit 或16 bit),将数据填充至DSP 的输入寄存器。特别地,对于8 bit 频域卷积,DP 模块可将一对频域乘法打包至一个DSP 中进行运算。DSP 用于执行频域复数乘法。Rec模块用于恢复复数输出激活值的实部和虚部。缓存映射网络(Buffer Mapping Net,BMN)模块主要用于输入数据到局部缓存LB 的有序映射。Ctrl模块为中央控制器,用于控制所有模块正确有序工作。
为进一步说明每个模块的作用,图4 展示了加速器FHA 的运转过程。第①步,从片外存储器Mem分别将权重和输入激活值搬运至GWB 和GAB 模块。需要注意的是,权重已在片外完成离线FFT 变换,因此存储于GWB 模块的是频域权重;而GAB 模块存储的是未经变换的空间域激活值。第②步,GAB 模块中的空间域激活值进入FFT/IFFT 模块执行FFT 变换,得到频域激活值。第③步,GWB 模块中存储的频域权重和经FFT 变换后的频域激活值一同进入FPE 中的BMN、LB 和DP 模块,分别完成数据路由、数据暂存和数据打包操作,打包结果将被送至FPE 进行计算。第④步,FPE 中的DSP 和Acc 模块执行频域乘法和通道累加操作。第⑤步,Acc 模块输出的数据进入Rec 模块,恢复频域输出激活值。第⑥步,频域输出激活值进入FFT/IFFT 模块并执行IFFT 变换。第⑦步,FFT/IFFT 模块输出空间域激活值至GAB 模块。第⑧步,GAB 模块将空间域输出激活值存至片外存储器Mem 中。以上每一步骤均接受来自Ctrl 模块的控制和调度。至此,加速器FHA完成基于打包输入的复数乘加计算流程。
图4 FHA 加速器运转过程Fig.4 FHA accelerator operation process
图5 描述BMN 模块和FPE 中的DP 模块。在图5 中,BMN 模块可将输入数据路由至局部缓存LB的有序位置,从而使DP 模块在8 bit 和16 bit 模式下对LB 的访存方式统一。如图5(a)所示:对于8 bit 频域卷积,输入数据ir1、ii1、ir2、ii2经过BMN 模块后,将在局部缓存中以图示1~4 的位置按序存放。如图5(b)所示:对于16 bit 频域卷积,输入数据ir1的高有效字节ir1[15:8]存放在位置1,低有效字节ir1[7:0]存放在位置3;输入数据ii1的高有效字节ii1[15:8]存放在位置2,低有效字节ii1[7:0]存放在位置4。之后在DP模块中,无论8 bit 或16 bit 频域卷积模式,寄存器A均从位置1 和3 处取值,寄存器D 均从位置2 和4 处取值,从而实现访存方式统一。DP 模块用于将输入数据填充至DSP 的输入寄存器A 和D 中,在8 bit 和16 bit 两种模式下有不同的填充方式,如图5(a)和图5(b)所示。
图5 BMN 模块与DP 模块Fig.5 BMN module and DP module
如图6 所示,基于式(1)所示的复数乘法,以wi1∙(ir1+ii1)和wi1∙(ir2+ii2)为例,描述了FPE 的数据路径。由于FPE 可计算8 bit 和16 bit 两种模式的频域乘法,因此图6 所展示的数据路径有两个。对于每种计算模式,FPE 均需完成6 个阶段(j~j+5)的操作。阶段j为DSP 输入数据的准备阶段,对于8 bit 频域卷积,两个8 bit 数据将打包在寄存器A 或D 中,ir1和ir2打包于寄存器A,ii1和ii2打包于寄存器D;对于16 bit 计算模式,单个16 bit 数据直接放置于寄存器A 或D 中,如ir1置于寄存器A,ii1置于寄存器D。在阶段j+1 和j+2 中,依次执行加/减法操作和乘法操作。对于8 bit频域卷积,DSP 中可同时计算一对频域乘法。由于在8 bit 频域乘法运算中,位于寄存器A 和D 较低字节的有符号数ir2和ii2会被DSP 识别为无符号数,因此可能造成后续结果不正确。为解决这一问题,本文在阶段j+3 中通过加上偏移值以修正乘法结果,该偏移值存储在DSP 的输入寄存器C 中。寄存器C 中偏移值的计算将在2.3 节具体阐述。对于16 bit 频域卷积,寄存器C 不必使用,在阶段j+3 中始终加零。在阶段j+4 和j+5,FPE 能够在输入通道方向累加乘法结果,最后在Rec 模块中恢复出最终的复数输出激活值。Rec 模块的具体细节如图6 最右侧所示,x、y、z为式(1)中的中间参数,复数输出的实部可由x+y得出,虚部可由x+z得出。
图6 FPE 数据路径Fig.6 Data path of FPE
算法1 描述了如何生成寄存器C 中的偏移值以修正乘法结果的低位项,本节结合理论分析,具体阐述该算法。
算法1DSP 中寄存器C 的数值生成
输入Al,Dl,B,inmode//Al和Dl分别为DSP 中寄存器A和D 打包后的较低字节,B为DSP 中寄存器B 的值,inmode 为DSP 预加法器的控制信号
设Al和Dl分别为DSP 中寄存 器A 和D 打包后的较低字节,B为DSP 中寄存器B 的值。C为寄存器C中存储的偏移值。inmode 为DSP 中预加法器的控制信号,可控制寄存器A 和D 执行加法或减法运算。由于Al和Dl为8 bit有符号整数,因此其值可表示为:
其中:a7和d7分别为Al和Dl的 符号位分别为Al和Dl数值位部分的值。则(Al±Dl)∙B可表示为:
由于Al和Dl分别位于寄存器A 和D 的较低字节,在进行(Al±Dl)∙B运算时被解读为无符号数,不妨设Al和Dl所对应的无符号数分别为的值可表示为:
由式(2)和式(4)可知,实际结果与正确结果间存在偏移值C,即:
当inmode为“+”时(表示Al和Dl之间执行加法操作),C=-(a7+d7)∙B∙28存在3种取值情况:1)当Al和Dl均为负时(a7=1,d7=1),C=-B∙29;2)当Al和Dl一个为负而另一个非负时(a7=1,d7=0 或a7=0,d7=1),C=-B∙28;3)当Al和Dl均非负时(a7=0,d7=0),乘法结果无需修正,C=0。如算法1 第1~7 行所示。
当inmode为“-”时(表示Al和Dl之间执行减法操作),C=-(a7-d7)∙B∙28也存在3 种取值情况:1)当Al为负而Dl非负时(a7=1,d7=0),C=-B∙28;2)当Al非负而Dl为负时(a7=0,d7=1),C=B∙28;3)当Al和Dl同号时(a7=0,d7=0 或a7=1,d7=1),乘法结果无需修正,C=0。如算法1 第8~14 行所示。
图7 基于FPE 描述本文所提加速器FHA 的映射数据流。
图7 映射数据流Fig.7 Mapping dataflow
图7(a)和图7(b)给出了频域卷积的一个实例。在该实例中,输出通道M=2,输入通道c=2,ifft和offt分别为频域中的输入激活值和输出激活值,ifft的尺寸为3(H=W=3),wfft的尺寸为2(H'=W'=2)。A1、A2、W1和W2均为复数,在本例中,
图7(c)描述了8 bit 频域卷积模式的映射数据流。在图7(b)所示的一组频域乘法中,
图7(d)描述了16 bit 频域卷积模式的映射数据流。由于DSP 寄存器的位宽限制,16 bit 的输入数据没有采用打包策略,DSP 在每一个周期中仅计算一个频域乘法。值得一提的是,数据重用特征在16 bit 映射数据流中仍存在。例如,cycle 1~3 中的计算可重用cycle 0 的输入数据ir1和ii1。FPE 中加减法器产生的中间结果同样可以被重用,如在cycle 1 和cycle 3,加减法器均可重用上一周期的执行结果,从而跳过该执行周期。
从上文对于映射数据流的描述可知,数据重用源于两个方面:
1)来自不同切片(如T1和T2)的输入激活值ifft可被不同输出通道的复数权重所重用。例如,对于8 bit 频域卷积,在cycle 0 中打包好的复数输入激活值{ir1,ir2}和{ii1,ii2}可以在cycle 1 中被另一权重W2的虚部wi2所重用;此外,通过配置DSP 加减法器的控制信号inmode,该打包数据同样可以在cycle 2 为权重W1的实部wr1所重用。对于16 bit 频域卷积也存在相同的情况,如图7(d)所示,cycle 0 中复数输入激活值A1的实部ir1和虚部ii1可以在cycle 1~3 中分别被wi2、wr1、wr2所重用。
2)来自不同输出通道的复数权重wfft可以被不同切片的复数输入激活值所重用。例如,对于8 bit频域卷积,在cycle 4 中打包好的复数权重{wr1,wr2}和{wi1,wi2}可以在cycle 5 中被另一输入激活值A2的虚部ii2所重用。除上述情形外,FPE 第二个阶段(stagej+1)生成的中间结果也可以被重用,从而减少能耗开销。
图8 展示了映射数据流数据重用的效果,分别从访存量和能耗两个方面进行评估。在图8 中,折线展示了归一化的访存量。可以发现,对于ResNet-18和VGG16 模型,数据重用相比无数据重用分别减少了33%和36%的访存量。柱状图展示了在数据重用和无数据重用情形下加速器的能耗。可以发现,数据重用相比无数据重用具备更低的能耗,如在ResNet-18 中利用数据重用相比无数据重用情形可以降低10%的能耗。因此,考虑了数据重用的映射数据流能够降低访存量和加速器能耗。
图8 映射数据流数据重用效果Fig.8 Data reuse effects of mapping dataflow
本文基于Xilinx Ultra96-V2 FPGA[17]进 行评估。Ultra96-V2 的数字信号处理块为DSP48E2,由一个27 位预加法器、27×18 位乘法器、48 位算术逻辑单元(ALU)和48 位累加器所组成。本文基于ImageNet 数据集[18-19]和两个具有代表性的CNN 模型(ResNet-18[20]和VGG16[21])对所提FPGA 加速器进行评估。其中,ImageNet 数据集为当前最经典和分类齐全的数据库之一,广泛应用于CNN 加速器设计领域(包括本文所对比的相关加速器)。ResNet-18 和VGG16 均为当前流行的CNN 模型,本文将它们作为所设计加速器的测试基准。文献[22-23]表明CNN 模型的第一层和最后一层卷积层对模型的影响最大,因此本文对这两个卷积层设置为16 bit fixed,其他卷积层则设置为8 bit fixed,如表1 中的方案5 所示。为进一步探索卷积层数据精度变化对CNN 模型算法性能的影响,本文给出了其他4 种方案的精度配置,如表1 中的方案1~4 所示。其中,方案1 为各卷积层均设置为8 bit fixed,方案2 为各卷积层均设置为16 bit fixed,方案3 和4 为第一层或最后一层卷积层为16 bit fixed 且其他卷积层为8 bit fixed。本文在下文对表1 中5 种方案的模型准确率进行了比较,深入分析卷积层数据精度变化对CNN 模型准确率的影响,并进一步验证方案5 的合理性。本文的设计平台为Xilinx Vivado v2018.3 套件,首先基于Vivado HLS 对ResNet-18 和VGG16 进行模型实现和硬件优化,并基于Vivado 完成所设计加速器的硬件综合实现。表2 为本文加速器的硬件配置。
表1 各卷积层的数据精度配置Table 1 Data precision configuration for each convolutional layer
表2 FHA 的硬件配置Table 2 Hardware configuration of FHA
本文从3 个角度出发评估所提出的加速器:
1)本文与当前最先进的基于FPGA 的8 bit 空间域卷积神经网络加速器[14]进行了比较。文献[14]将空间域中两个8 bit 的乘累加操作打包在一个DSP 块中以提高吞吐量。
2)由于目前还未出现基于FPGA 的混合精度频域卷积神经网络加速器,本文通过与当前最具代表性的基于FPGA 的频域卷积神经网络加速器[11,24-25]进行比较,以此来评估本文所提出的加速器架构FHA。其中:文献[11]基于overlap-saved 方法实现频域FPGA 加速器并取得了不错的性能;文献[24]利用高度的数据并行和任务并行来提升频域卷积计算的吞吐率;文献[25]在3 种硬件平台上实现了基于overlap-add 方法的频域加速器。
3)为了进行更全面的评估,本文对所提加速器以3 种形态进行实现,并比较不同形态间的性能差异:(1)本文所提加速器中的FPE 模块以LUT 资源进行实现,此时对于8 bit 频域卷积而言没有数据打包操作,用FHA-lut 表示;(2)FPE 模块以DSP 资源进行实现,但是在8 bit 频域卷积中不对输入数据进行打包,用FHA-dsp-basis 表示;(3)FPE 模块以DSP 资源进行实现,且在8 bit 频域卷积中将一对频域乘法进行打包以提高吞吐能力,用FHA 表示。
表3 将FHA 与具有代表性的基于FPGA 的空间域和频域卷积神经网络加速器进行了比较,其中,性能指标为GOP,能效比为GOP 与能耗的比值,资源效率为GOP 与乘法数的比值。
表3 加速性能比较Table 3 Comparison of acceleration performance
与文献[14]的空间域加速器方案对比,本文加速器的性能仅为其10%,但所用到的乘法数相比其却有大幅减少,这表明本文的加速器能够达到更高的资源效率(1.9 倍)。FHA 较高的资源效率来自于频域计算复杂度的降低。
与文献[11,24-25]的频域加速器方法相比,FHA 的能效比是它们的1.2~6.0 倍。能效比的提升来自于3 个方面:1)FHA 中的FPE 模块能够打包8 bit 频域乘法以提高吞吐量,同时能够节省内存访问和计算开销;2)FHA 可以重用DSP 输入寄存器中的数据以节省能耗开销;3)FHA 可以重用中间计算结果,从而减少DSP 加减法器部件的能耗。
表4 展示了本文所提加速器3 种不同形态的性能比较。可以发现:
表4 3 种不同形态加速器的比较Table 4 Comparison of three different forms of accelerators
1)8 bit 频域卷积中的DSP 打包操作可提高能效比,能效比的提高来自于更高的吞吐量和更低的功耗。例如,与FHA-lut 相比,FHA 在ResNet-18 和VGG16 模型的推断上分别达到了原来能效比的1.8和2.2倍。
2)与FHA-dsp-basis 相比,FHA 的LUT 资源使用率有所增加,在ResNet-18 和VGG16 上分别增加了10.45 和12.52 个百分点,这主要来源于FHA 中的数据处理操作,如对8 bit 频域乘法的打包。然而多余的资源开销带来的效果是显著的,如与FHA-dspbasis 相比,FHA 在ResNet-18 和VGG16 模型的推断上可分别达到1.6 和1.9 倍的性能提升。同时多余的LUT 资源开销可平衡FPGA 的资源使用。
3)面对相同的计算规模,DSP 资源比LUT 资源具有更低的功耗。例如,与FHA-lut相比,FHA-dsp-basis具有更低的功耗,在ResNet-18 和VGG16 上分别降低0.479 和0.552 W。
图9 展示了3 种不同形态加速器的功耗分解。可以发现对片外存储器的访问占据总功耗的较大部分,在FHA-lut、FHA-dsp-basis 和FHA 中分别占据了45.4%、54.4%和53.5%。因此,利用8 bit 和16 bit 混合精度频域卷积来减少内存占用,进而降低加速器的能耗开销是很有必要的。
图9 3 种不同形态加速器的功耗分解Fig.9 Power breakdown of three different forms of accelerators
由于在8 bit 和16 bit 混合精度频域卷积中,低精度卷积运算部分会导致CNN 模型的准确率下降,因此本文进一步评估了模型的准确率性能,如图10 所示,其中展示了ResNet-18 和VGG16 模型准确率随训练迭代数变化的曲线。可以发现,与全精度的空间域CNN 模型和频域CNN 模型相比,混合精度频域CNN 模型可以在训练中实现相似的准确率变化趋势。与传统空间域的CNN 模型相比,混合精度频域CNN 模型能够达到可观的准确率。例如:在ResNet-18 的训练中,混合精度频域CNN 模型能够达到与全精度空间域CNN 模型相同的准确率;在VGG16 的训练中,混合精度频域CNN 模型相比全精度空间域CNN 模型仅有1.7%的精度损失。微小的准确率下降主要来自低精度数据表征能力的减弱,但低精度数据位宽的减少也降低了硬件的内存需求和计算资源开销。
图10 模型准确率随训练迭代的变化趋势Fig.10 Change trend of model accuracy with training iterations
在表5 中,列出了ResNet-18 和VGG16 模型在表1 中5 种不同数据精度配置方案下的准确率。对于ResNet-18 模型,方案5 的准确率与方案2 相同,这得益于ResNet-18 的残差网络结构和较少的网络层数;且方案5 的准确率相比方案1 有1.3 倍的提升,相比方案3、4 分别有1.03 和0.83 倍的提升。对于VGG16 模型,方案5 的准确率相比方案2 有1.2%的下降,相比方案1 有1.3 倍的提升,相比方案3 和4 分别有1.03 和0.83 倍的提升。虽然VGG16 模型在方案5 的准确率相比方案2 有微小下降,但由于方案5 只有第一层和最后一层卷积层的精度为16 bit fixed,因此能够有效降低模型大小,同时8 bit频域卷积可在DSP 中进行数据打包,进一步加快了模型推理速度。对于ResNet-18和VGG16 模型,方案5 相比于方案1、3、4 有更高的准确率,进一步验证了本文依据文献[22-23]将第一层和最后一层卷积层设置为16 bit fixed 的合理性。
表5 不同数据精度配置方案下的模型准确率Table 5 Models accuracy under different data precision configuration schemes %
本文设计了基于FPGA 的8 bit 和16 bit 混合精度频域卷积神经网络硬件加速器,该加速器能够动态配置8 bit 和16 bit 的频域卷积模式,同时能够打包8 bit 频域乘法至DSP 以提高吞吐量。本文利用频域数据重用的特点最大限度减少冗余操作,进而减少数据移动和计算开销。下一步将探索本文设计对更多混合精度组合的支持,进一步优化内存占用和资源开销,提升加速器性能。