目前,卷积运算方法在FPGA部署的方法主要有以下3种。①传统滑窗卷积算法在FPGA的应用。由于实现比较简单,应用比较广泛。例如,Zhang[1]和Guan[2]等使用传统滑窗卷积算法实现了基于FPGA的深度学习加速器设计。②FFT算法在FPGA的应用。2017年,George等[3]使用FFT和卷积定理减少了卷积层的算术复杂性,Ordó?ez等[4]完善了这部分的算法,Suita等[5]于2015年在NVIDIA cuDNN库中实现了FFT算法,Zhang和Prasanna[6]于2017年也在CPU-FPGA异构平台上实现了这个算法。2014年,Cong和Xiao[7]使用Strassen算法进行了快速矩阵乘法,以减少卷积层中卷积的数量,从而降低其总算术复杂度。③基于通用矩阵乘法(GEMM)的方法应用于FPGA卷积算法的加速。Suda[8]和Zhang[9]等基于GEMM和重排图像块为矩阵列(Image to Column, im2col)的思想进一步完善了快速卷积算法。Lavin和Gray[10]提出的Winograd算法, 由于其良好的硬件适用性,被广泛应用于嵌入式智能硬件设备的AI任务中,对Winograd算法的优化研究工作非常重要。
本文基于Zynq设备(硬件环境),Vivado HLS 2018.2及Vivado 2018.2(软件环境),应用改进后的Winograd算法对CNN在FPGA的运行效率、资源性能进行测试和对比,并在实验中将CNN在GPU平台上的吞吐率和功耗等方面性能与CNN在FPGA平台上运行的性能进行测试和对比。
1 相关工作 1.1 CNN及常用卷积计算方法 CNN是一类包含卷积计算且具有深度结构的前馈神经网络,在近年来的视频监控、图像识别等计算机视觉任务中广泛应用并取得了出色的成果,是深度学习的代表算法之一。通常,CNN由一系列图层组成,每个图层又由输入特征图、滤波器和输出特征图组成。在这些图层中,卷积层占主要的计算量。由于CNN是离线训练的,FPGA主要用于加速推理阶段。2015年,Zhang等[11]设计了一款基于FPGA平台开发的深层CNN加速器,解决了计算吞吐量无法很好地匹配FPGA平台提供的内存带宽问题。2016年,Qiu等[12]使用动态精度数据量化方法,提出一个对CNN中所有层有效的通用卷积器,提高了各个网络层的算力。2018年,Yu等[13]通过内存访问优化等方法在实时低功耗系统FPGA上更加高效地部署了检测算法。2019年,Ahmad和Pasha[14]设计了流水线和并行卷积计算引擎,提高了卷积计算的吞吐量,同时降低了整个系统的计算复杂性和功耗。
目前,滑窗卷积是典型的卷积运算使用的算法[15]。使用常规的滑窗卷积算法,可以通过使用滤波器乘以滑动窗口区域的输入特征数据,并对不同通道的特征结果进行累加来分别计算输出特征图中的每个元素,但实际应用中效率不高。FFT算法可以把待卷积的2个数组进行快速傅里叶变换,再在频域做乘法,最终进行一次傅里叶反变换即可得到卷积结果,但由于计算复杂度过高,不适合在嵌入式设备上部署。Strassen算法也可以用来优化矩阵乘法的过程并降低复杂度,但Strassen算法只有在对维数比较大的矩阵(维数>300)相乘时性能才有提高,因此在小维度矩阵相乘时的应用不佳。
1.2 Winograd及其优化方法 由于CNN正在朝着带有小型过滤器的更深拓扑结构的趋势发展,而传统滑窗卷积算法虽然是通用的,但是效率较低,在卷积层数逐渐加深的CNN中表现不佳,作为传统滑窗卷积算法在FPGA应用的替代方案,可以使用Winograd快速卷积算法来更有效地实现卷积。
Winograd能够通过减少乘法次数来降低算法的复杂度,对于一维卷积过程F(m,r)(其中,m为输出矩阵尺寸,r为滤波器尺寸),每次调用Winograd算法时,都会同时生成大小为m×1的图块,此时计算输出矩阵Y的公式为
(1) |
式中:G为卷积核变换矩阵;A和B为输入变换矩阵;g为卷积核;d为输入向量;Y为输出变换矩阵。
对于二维卷积过程F(m×m,r×r)来说,每次调用Winograd算法时,都会同时生成大小为m×m的图块,此时计算输出矩阵Y的公式为
(2) |
在二维卷积过程中,为了计算输出特征图中的m×m切片,Winograd算法需要n2乘法,而传统滑窗卷积算法需要m2×r2乘法。因此,Winograd算法需要更少的乘法运算,可以降低计算复杂度,这对片上资源有限的FPGA等嵌入式设备非常友好。
2017年,Lu等[16]在FPGA平台上面应用了Winograd算法,可以大幅降低算法复杂度,改善FPGA上的CNN性能。2018年,Lu和Liang[17]提出了Winograd算法的稀疏化训练方法,通过将ReLU激活函数移至Winograd域,以及对Winograd变换之后的权重进行剪枝,来减少乘法操作数。2019年,Zhao等[18]提出了一种基于Strassen和Winograd融合的算法,能够有效降低卷积过程的功耗,进一步优化了Winograd算法在FPGA部署的能力。
但其实在实际应用到三维卷积中时,如果直接采用传统的Winograd算法,可能会增加多余的乘法运算,因此需要对这方面进行改进。本文提出的一维展开方法将减少Winograd算法所需的乘法运算次数,降低算法复杂度,提高算法并行度。
2 改进方法 本文提出了一种基于一维展开方法和tile扩展的3D-Winograd算法,能够对传统Winograd算法进行改进,同时结合硬件资源特性,采用低比特量化、使用移位代替部分除法等方法提高CNN在FPGA的卷积运算速度,相对传统的二维Winograd算法能有效提高CNN效率。
2.1 3D-Winograd
2.1.1 一维展开方法 如图 1所示,使用传统的2D-Winograd算法进行三维卷积时,会使CNN的运行速度大大提高,但这主要得益于循环层数的减少,滑窗卷积算法需要使用6层循环,而二维的Winograd算法可以降低到4层循环,大大减少了算法运算次数,从而提高了算法的并行度。
图 1 传统滑窗卷积算法与2D-Winograd算法 Fig. 1 Conventional sliding window convolution algorithm and 2D-WINOGRAD algorithm |
图选项 |
从计算复杂度上来看,滑窗卷积算法的乘法运算次数为H×W×M×N×r×r,而2D-Winograd算法的乘法次数为(H/2)×(W/2)×M×N×(2×n×n×n+r×r×n+r×n×n+n×n+2×m×n×n),给计算复杂度带来了一定程度上的增加,而计算复杂度的增加又会带来占用更多片上计算资源的问题,同时还会带来计算时延增加的问题,因此需要通过一些方法减少乘法次数,从而降低计算复杂度。
本文提出了一种将二维平面的Winograd卷积过程扩展到三维上来的一维展开方法,通过一维展开过程能够有效减少二维卷积过程中多余的乘法次数。
当输入特征矩阵为4×1向量[d0,d1,d2,d3]T、卷积核尺寸为3×1向量[g0,g1,g2]、输出矩阵为2×1向量[a,b]T时,Winograd一维卷积时计算原理如图 2所示。
图 2 基于Winograd原理的一维卷积过程 Fig. 2 One-dimensional convolution process based on Winograd principle |
图选项 |
此时,矩阵尺寸大小为2×1向量的输出矩阵[a,b]可以利用式(3)和式(4)进行计算:
(3) |
(4) |
可见,通过Winograd算法计算这次卷积只需要4次乘法,而通过传统滑窗卷积算法则需要6次乘法。因此,Winograd算法需要更少的乘法运算,而在嵌入式环境中,乘法运算的计算复杂度要高于加法运算,Winograd算法更加适合CNN的部署。考虑到所有三维和二维的卷积过程都可以拆分成上述一维卷积过程,当输入特征为4×4×c(c为通道数)、卷积核尺寸为3×3×n(n为卷积核数量)、输出特征为2×2×n时,将上述一维卷积过程应用到Winograd三维卷积时的计算方法如图 3所示。
图 3 基于一维扩展的Winograd三维卷积过程 Fig. 3 Three-dimensional convolution process of Winograd based on one-dimensional expansion |
图选项 |
以图 3的输出图块为例,输出图块的每个元素都可以根据一维展开的公式原理,表示为输入图块前n(n为卷积核数量)行某相邻m列的元素和权重之间的代数和,通过这种方法能够将复杂的矩阵乘法计算转换为简单的代数计算,更好地降低计算复杂度。
这个过程可以用一个伪代码来表示,当输入特征为H×H×M(H为输入特征图尺寸、M为通道数)、卷积核尺寸为r×r×N(r为卷积核尺寸、N为卷积核数量)、输出特征为(H+1-r)×(H+1-r)×N(H+1-r)时,基于1D-Winograd、2D-Winograd和3D-Winogrod卷积过程的伪代码如图 4所示。
图 4 3种Winograd卷积过程伪代码 Fig. 4 Three kinds pseudo code of Winograd convolution process |
图选项 |
通过伪代码可以发现,基于3D-Winograd算法的乘法运算次数为(H/2)×(W/2)×M×N×(m×m×r×(r-1)),而2D-Winograd算法的乘法次数为(H/2)×(W/2)×M×N×(2×n×n×n+r×r×n+r×n×n+n×n+2×m×n×n),可见3D-Winograd算法能够更好地降低卷积时的乘法次数,从而降低计算复杂度。
2.1.2 tile扩展 Winograd算法在实际应用中比传统滑窗卷积算法效率高,主要是通过增加窗口滑动步长的方式来减少卷积运算时所需的循环层数,从而提高算法效率。在计算单个卷积层时,Winograd算法相较滑窗卷积算法,循环层数有所降低,同时时间复杂度也由H×W×M×N×R×R降低到H×W×M×N/S/S(H为输入特征图尺寸、M为通道数、r为卷积核尺寸、N为卷积核数量、S为步长)。
从上述卷积算法时间复杂度的计算方法可以看出,若要进一步降低时间复杂度和循环次数,可以通过进一步增大步长stride的方式来改进。如果需要增大步长S,则一定要增加输入tile的尺寸H,这个过程中会增加单个时钟周期内计算的复杂度,因此需要更多的硬件上计算资源。在实际应用中,考虑到硬件资源的情况,对于CNN内输入tile尺寸较大的卷积层应该采用尺寸较小的分tile方案,对于CNN内输入tile尺寸较小的卷积层应该采用尺寸较大的分tile方案。
2.2 量化和移位
2.2.1 量化 通过3D-Winograd来加速CNN在FPGA的运算过程,会增加存储资源的利用率。为进一步提高存储资源利用率,常见方法为:对权重数据、输入数据进行低比特量化,不但能提高CNN在FPGA运算效率,同时能够抵消tile扩展时带来计算资源占用率过高的问题。因此,在本实验中采用int8代替fp32的量化方法,可以在精度损失较小的情况下,大幅减少计算时延。
2.2.2 移位 通过3D-Winograd来加速CNN在FPGA的运算过程时,考虑到卷积计算时有许多增加计算复杂度的乘法和除法操作,为降低计算复杂度,在设计运算时,将与2的n次幂有关的乘法和除法操作都转换为计算复杂度更低的移位操作,通过这种方法来进一步加速卷积运算过程。
3 实验结果评估 本文先在单个卷积层上验证3D-Winograd算法的实验结果,并与滑窗卷积算法和2D-Winograd算法的实验结果进行比较,来验证方案的可行性。再以yolov2为主干网络测试3D-Winograd的优化效果。实验的硬件环境为:Zynq UltraScale+XCZU9EG-2FFVB1156 MPSoC,软件环境为:Vivado HLS 2018.2及Vivado 2018.2。
在与GPU的性能对比实验中,CNN在GPU平台上实验的硬件环境为NVIDIA Jetson TX2,操作系统环境为Ubuntu 16.04。
3.1 在单个卷积层上性能测试 在输入tile尺寸为26×26×5、卷积核尺寸为3×3×5×10、且输出tile尺寸为24×24×10的卷积层上分别对3D-Winograd算法和分tile尺寸扩展的方法进行性能测试。
3D-Winograd算法性能测试结果如表 1所示,可以看到,通过对2D-Winograd进行一维展开,使得计算时延降低7%左右,同时在计算资源占用上,DSP资源减少17%左右,触发器(Flip Flop,FF)、查找表(Look-Up-Table,LUT)等计算资源占用率降低了2倍左右。
表 1 3D-Winograd和2D-Winograd性能对比 Table 1 Performance comparison of 3D-Winograd and 2D-Winograd
性能指标 | 2D-Winograd[16] | 3D-Winograd | 结果 | |
时钟周期 | Latency | 561 635 | 518 435 | 提高7% |
资源占用 | DSP/个 | 36 | 30 | 计算复杂度降低;计算资源减少 |
FF/个 | 10 264 | 5 670 | ||
LUT/个 | 11 399 | 6 275 | ||
乘法器/个 | 947 | 1 060 | 基本不变 | |
注:2D-Winograd和3D-Winograd的tile尺寸为4×4,Fp32。 |
表选项
对分tile尺寸进行扩展的性能测试结果如表 2所示。可以发现,通过对一维展开的Winograd的输入tile尺寸大小进行适当的扩展得到的3D-Winograd,计算时延能够进一步降低2倍左右,但DSP、LUT计算资源会有3~4倍左右的增加。因此为了保证足够的硬件资源,一方面通过采用低比特量化的方法来降低计算资源占用率,另一方面对输入特征图尺寸较大的卷积层采用较小尺寸tile的划分方案、而对输入特征图尺寸较大的卷积层采用较大尺寸tile的划分方案效果会更好。
表 2 tile扩展前后性能对比 Table 2 Performance comparison before and after tile expansion
性能指标 | 3D-Winograd | 3D-Winograd | 结果 | |
时钟周期 | Latency | 518 435 | 235 871 | 提高2.198倍 |
资源占用 | DSP/个 | 30 | 77 | 计算资源增加 |
FF/个 | 5 670 | 21 492 | ||
LUT/个 | 6 275 | 20 965 | ||
乘法器/个 | 1 060 | 1 633 | 增加54% | |
注:3D-Winograd的tile尺寸分别为4×4,Fp32;6×6,Fp32。 |
表选项
通过低比特量化和运算过程优化的方法来优化3D-Winograd的效果,量化前后性能对比的实验结果如表 3所示。可以看到,通过将输入特征图数据和权重数据进行int8量化,使得计算时延降低7倍左右,同时DSP等计算资源占用率也降低了2倍左右,能够抵消tile扩展时带来计算资源占用率过高的问题,同时进行将与2的n次幂有关的乘除法操作都转换为移位操作的优化后,时钟周期数有一定程度的下降,乘法器资源也有2倍左右的减少。
表 3 量化前后性能对比 Table 3 Performance comparison before and after quantization
性能指标 | 3D-Winograd | 3D-Winograd | 结果 | |
时钟周期 | Latency | 235 871 | 32 747, 30 633 | 提高7.20, 7.70倍 |
资源占用 | DSP/个 | 77 | 59, 47 | DSP资源降低1.31, 1.64倍 |
FF/个 | 21 492 | 4 087, 2 785 | ||
LUT/个 | 20 965 | 27 007, 10 412 | ||
乘法器/个 | 1 633 | 728, 657 | 减少2.24, 2.49倍 | |
注:3D-Winograd的tile尺寸为6×6,Fp32;6×6, 8位定点/移位。 |
表选项
3.2 在CNN上进行性能测试 将3D-Winograd算法应用到以yolov2为主干网络的CNN上进行测试,对于yolov2内输入卷积核尺寸大于100的卷积层采用划分为小tile的方案,输入卷积核尺寸大于100的卷积层采用划分为大tile的方案,实验结果如表 4所示。通过实验可以看到,采用3D-Winograd方案后每个conv层的计算时延相较传统卷积算法降低7倍左右,相较2D-Winograd算法计算时延也有20%的提高,使得在嵌入式设备上加速CNN的卷积计算过程成为可能。实验中通过计算卷积运算需要多少次BFLOPS(Billion Float Operations)来衡量3D-Winograd算法的性能。
表 4 传统滑窗卷积、2D-Winograd和3D-Winograd算法性能对比 Table 4 Performance comparison of traditional sliding window learning, 2D-Winograd and 3D-Winograd algorithms
图层 | 输出特征图尺寸 | 卷核尺寸积 | 分块尺寸 | 吞吐率/BFLOPS | ||
传统滑窗卷积算法[19] | 2D-Winograd[16] | 3D-Winograd | ||||
Conv0 | 416×416×32 | 32/2 | 4×4 | 0.299 | 0.901 | 1.080 |
Conv1 | 208×208×64 | 64/2 | 4×4 | 1.595 | 5.168 | 6.201 |
Conv2 | 104×104×128 | 128/2 | 4×4 | 1.595 | 5.168 | 6.201 |
Conv3 | 104×104×64 | 64/2 | 4×4 | 0.177 | 0.521 | 0.637 |
Conv4 | 104×104×128 | 128/2 | 4×4 | 1.595 | 5.168 | 6.201 |
Conv5 | 52×52×256 | 256/4 | 6×6 | 1.595 | 11.361 | 13.623 |
Conv6 | 52×52×128 | 512/4 | 6×6 | 1.595 | 11.361 | 13.623 |
Conv7 | 52×52×256 | 256/4 | 6×6 | 0.177 | 1.167 | 1.399 |
Conv8 | 26×26×512 | 512/4 | 6×6 | 1.595 | 11.361 | 13.623 |
Conv9 | 26×26×256 | 256/4 | 6×6 | 0.177 | 1.167 | 1.399 |
Conv10 | 26×26×512 | 512/4 | 6×6 | 1.595 | 11.361 | 13.623 |
Conv11 | 26×26×256 | 256/4 | 6×6 | 0.177 | 1.167 | 1.399 |
Conv12 | 26×26×512 | 512/4 | 6×6 | 1.595 | 11.361 | 13.623 |
Conv13 | 26×26×1 024 | 1 024/4 | 6×6 | 3.190 | 21.022 | 25.230 |
Conv14 | 26×26×1 024 | 1 024/4 | 6×6 | 3.190 | 21.022 | 25.230 |
Conv15 | 26×26×1 024 | 1024/4 | 6×6 | 3.987 | 26.286 | 31.534 |
总时间/ms | 1 052 | 160.963 | 123.799 |
表选项
3.3 CNN在FPGA和GPU的性能功耗比测试 将3.2节中yolov2为主干网络的CNN在GPU平台进行测试,在功耗计算方面,FPGA平台可以通过Xilinx Vivado的综合报告,得到FPGA平台的功耗为5.263 J,从而得到平均每个Conv层的功耗为0.328 94 J,而在GPU平台,一直在TX2平台的GPU+4CPU工作模式下,工作电流0.54 A、工作电压19 V,以及测得卷积时延0.049 3 s,从而得到GPU平台平均每个Conv层的功耗为8.1 J。
实验结果如表 5所示。通过实验可以看到,采用将CNN部署在FPGA平台相较于部署在GPU平台,有较低的功耗和更高的性能功耗比,非常适合在功耗要求较低的智能处理任务中应用。
表 5 CNN在FPGA和GPU的性能功耗比对比 Table 5 Comparison of CNN's performance/power ratio on FPGA and GPU
平台 | 平均每个Conv层吞吐率/BFLOPS | 平均每个Conv层功耗/J | 性能功耗比 |
FPGA | 10.913 75 | 0.328 94 | 33.178 |
GPU | 21.590 37 | 8.1 | 2.665 |
表选项
4 结束语 本文证明了一种基于一维展开的3D-Winograd算法FPGA解决方案,能够有效加速CNN在FPGA的运行效率。相较传统滑窗卷积算法和传统的Winograd算法,基于3D-Winograd算法的FPGA解决方案有更少的计算时延、更少的计算资源,以及更高的存储资源利用率。同时如果根据CNN每层的特性和硬件平台的特性选择不同的分tile方案和低比特量化方法,能够进一步有效改善在FPGA运行CNN的性能。与在GPU运行CNN的性能对比实验中,证明FPGA方案拥有较低的功耗,非常适合在功耗要求较低的智能处理任务中应用。但本文方法主要致力于算法本身的改善,对算法在硬件平台实际部署时, 如何改善硬件架构设计等问题的研究还不足,后续会继续朝着这个方向进行研究和优化。
参考文献
[1] | ZHANG X F, WANG J S, ZHU C, et al. AccDNN: An IP-based DNN generator for FPGAs[C]//2018 IEEE 26th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM). Piscataway: IEEE Press, 2018: 210. |
[2] | GUAN Y J, LIANG H, XU N Y, et al. FP-DNN: An automated framework for mapping deep neural networks onto FPGAs with RTL-HLS hybrid templates[C]//2017 IEEE 25th Annual International Symposium on Field-Programmable Custom Computing Machines(FCCM). Piscataway: IEEE Press, 2017: 152-159. |
[3] | GEORGE J K, NEJADRIAHI H, SORGER V J. Towards on-chip optical FFTs for convolutional neural networks[C]//2017 IEEE International Conference on Rebooting Computing(ICRC). Piscataway: IEEE Press, 2017: 1-4. |
[4] | ORDó?EZ á, ARGVELLO F, HERAS D B. GPU accelerated FFT-based registration of hyperspectral scenes[J]. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 2017, 10(11): 4869-4878. DOI:10.1109/JSTARS.2017.2734052 |
[5] | SUITA S, NISHIMURA T, TOKURA H, et al. Efficient cuDNN-compatible convolution-pooling on the GPU[C]//International Conference on Parallel Processing and Applied Mathematics. Berlin: Springer, 2019: 46-58. |
[6] | ZHANG C, PRASANNA V. Frequency domain acceleration of convolutional neural networks on CPU-FPGA shared memory system[C]//FPGA'17: Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, 2017: 35-44. |
[7] | CONG J, XIAO B J. Minimizing computation in convolutional neural networks[M]. Berlin: Springer, 2014: 281-290. |
[8] | SUDA N, CHANDRA V, DASIKA G, et al. Throughput-optimized OpenCL-based FPGA accelerator for large-scale convolutional neural networks[C]//FPGA'16: Proceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, 2016: 16-25. |
[9] | ZHANG C, SUN G Y, FANG Z M, et al. Caffeine: Toward uniformed representation and acceleration for deep convolutional neural networks[J]. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2019, 38(11): 2072-2085. DOI:10.1109/TCAD.2017.2785257 |
[10] | LAVIN A, GRAY S. Fast algorithms for convolutional neural networks[C]//2016 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). Piscataway: IEEE Press, 2016: 4013-4021. |
[11] | ZHANG C, LI P, SUN G Y, et al. Optimizing FPGA-based accelerator design for deep convolutional neural networks[C]//FPGA'15: Proceedings of the 2015 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, 2015: 161-170. |
[12] | QIU J T, WANG J, YAO S, et al. Going deeper with embedded FPGA platform for convolutional neural network[C]//FPGA'16: Proceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, 2016: 26-35. |
[13] | YU J C, GE G J, HU Y M, et al. Instruction driven cross-layer CNN accelerator for fast detection on FPGA[J]. ACM Transactions on Reconfigurable Technology and Systems, 2018, 11(3): 1-23. |
[14] | AHMAD A, PASHA M A. Towards design space exploration and optimization of fast algorithms for convolutional neural networks (CNNs) on FPGAs[C]//2019 Design, Automation & Test in Europe Conference & Exhibition (DATE). Piscataway: IEEE Press, 2019: 1106-1111. |
[15] | LECUN Y, BOTTOU L, BENGIO Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324. DOI:10.1109/5.726791 |
[16] | LIANG Y, LU L Q, XIAO Q C, et al. Evaluating fast algorithms for convolutional neural networks on FPGAs[J]. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2020, 39(4): 857-870. DOI:10.1109/TCAD.2019.2897701 |
[17] | LU L Q, LIANG Y. SpWA: An efficient sparse Winograd convolutional neural networks accelerator on FPGAs[C]//2018 55th ACM/ESDA/IEEE Design Automation Conference (DAC). Piscataway: IEEE Press, 2018: 1-6. |
[18] | ZHAO Y L, WANG D H, WANG L O. Convolution accelerator designs using fast algorithms[J]. Algorithms, 2019, 12(5): 112. DOI:10.3390/a12050112 |
[19] | REDMON J, FARHADI A. YOLO9000: Better, faster, stronger[C]//2017 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). Piscataway: IEEE Press, 2017: 6517-6525. |