APP下载

面向神经网络池化层的灵活高效硬件设计

2023-11-27朱国权岳克强

计算机工程与应用 2023年22期
关键词:池化层池化卷积

何 增,朱国权,岳克强

1.杭州电子科技大学 电子信息学院,杭州310018

2.之江实验室 智能计算硬件研究中心,杭州311100

近年来,在语音识别[1]、自然语言处理[2]和目标检测等领域[3]中,卷积神经网络(convolutional neural network,CNN)的贡献是十分巨大的。不同卷积神经网络中,大多数网络都需要池化层来降低卷积层输出的特征向量。

对于池化层,研究者们提出了许多硬件方案:陈浩敏等人[4]基于YOLOv3-tiny的硬件加速设计中池化层输入图像最大可支持416,但仅支持核大小为2×2 的池化。许杰等人[5]设计的cifar10_quick 优化网络,采取两两比较的层间流水实现核2×2的池化,该方法无任何数据复用,因此在重叠池化中性能较低。Cho 等人[6]的卷积神经网络加速器使用HLS(high-level synthesis)设计,HLS 综合后采取状态机控制运行流程,资源使用量较低,但无法完全发挥硬件设计加速器的性能优势。王肖等人[7]在可重构卷积神经网络加速器中设计的核为3×3,步长为2 的池化使用临时缓存保存上一层卷积数据并逐一比较,该临时缓存根据池化核滑行需重复读取池化核最后一列数据,其数据的读取复用卷积资源,但池化窗口滑行中的数据依然没有复用。

上述方案,从不同程度上反映出以下问题:众多池化的参数差异使得各自的池化设计僵化,兼容性低;在重叠池化中,数据复用[8]程度低,影响了性能。

本文旨在克服上述不足,提出了面向神经网络池化层的灵活高效硬件设计。本设计结合行缓存与二维拆分提高了兼容性,并且凭借数据全复用提高性能。为了验证该设计的功能与性能,本文将在LeNet-5[9]、AlexNet[9]、ZFNet[10]、GoogleNet[11]、MobileNet[12]、DenseNet[13]、YOLOv4[14]、YOLOv5[15]和YOLOv6[16]等网络中,与CPU 和文献[17]的方案进行实验。

通过FPGA(field programmable gate array)实现网络加速器以Verilog HDL 与HLS 为主,而使用HLS设计在工程细节上的优化不如Verilog HDL。Verilog HDL自顶向下的设计方法帮助设计者了解整体结构与各模块间的联结,利于进一步地调试与优化,故本文采用Verilog HDL来设计灵活高效的池化层。

1 池化层介绍

池化层本质上是一种下采样,是卷积神经网络的一个重要组成部分。池化是对信息进行抽象的过程,卷积神经网络的信息量巨大,池化作用于卷积神经网络,扩大了感受野,降低了参数量,控制了过拟合,提高了网络鲁棒性。池化示意图如图1所示。

图1 池化示意图Fig.1 Diagram of pooling

池化按池化方法可以分为平均池化、最大池化和最小池化;根据池化核与步长关系可分为非重叠池化与重叠池化。LeNet-5 的池化层,输入图像28,池化核为2,步长为2,为无重叠池化,其设计无需考虑数据复用;YOLOv3-tiny 的池化层,其输入特征图需要支持416 的数据输入;YOLOv5 对池化层需要支持池化核13,且步长小于池化核,属于重叠池化,需要same处理模式。

一般情况下,池化层的设计均针对特定网络独立设计,这样的设计会导致兼容性差,故对于池化层提高兼容性设计是十分必要的。传统的池化方案均为取出池化核所需数据进行逐一比较得出结果,不存在或仅做到少许的数据复用,导致池化层的性能低下。本文实现数据的全复用,兼顾性能的同时也具备灵活通用性。

2 池化层设计

2.1 池化层设计流程

本文提出的灵活高效池化层设计主要包含控制模块、参数配置、通道使能、端口选择、数据缓存和数据处理。本文提出的池化层架构如图2所示。

图2 池化层架构Fig.2 Pooling layer architecture

结合以上池化层架构,运行流程如图3所示。

图3 池化层运行流程Fig.3 Pooling layer running process

参数配置模块用于初始化配置参数的接收与预处理,所有参数输入后均进行打拍处理以减少后续组合逻辑长度,预处理后的参数传递给通道使能、端口选择与数据缓存。

控制模块接收start 信号与每轮池化结束后的通道信号,使用三段式状态机对当前运行状态进行识别并输出本次实际运行的通道数chl。

通道使能接收控制模块提供通道数chl生成使能信号,后续处理模块均基于通道使能的使能信号进一步运行。

端口选择作为池化模块对外接口可以自由选择相连的内存组作为输入还是输出,满足不同需求,实现乒乓处理机制。

数据处理从数据缓存接收tap 数据,进一步判定是否形成窗口并进行进一步处理,其中包括最大池化、平均池化和最小池化可供选择。数据可支持有符号数据处理,数据处理中的比较均采取三级流水线的多数据递进比较形式,平均则采取累加-缓存-除法三级流水线形式,均在保障性能的同时也确保时序准确。

数据缓存提供读写时序控制,同时作为中间数据的缓冲输出tap 给数据处理,配合池化机制实现数据高效复用,提升整体性能。最终数据处理将结果输出于目标内存,完成一轮池化。一轮池化结束后,传递当前状态于控制模块,进一步判断是否需要进行下一轮池化。

2.2 主要设计方案

2.2.1 左移行缓存器

借鉴并结合行缓存器与移位寄存器的特点,并区别于FIFO,对缓存器数据行首进行输出;使用该方案可实现池化核移动进程中数据全复用,从而提高处理速度。左移行缓存器运行示意图如图4所示。

图4 左移行缓存器示意图Fig.4 Left transition cache schematic

左移行缓存器具备传统行缓存器的数据缓存功能,基于此输出行首十分贴合池化核滑行规则,为后续多数据递进比较奠定基础。

2.2.2 多数据递进比较

池化核滑行中,先对二维的池化核数据进行横向与纵向拆分,将其拆分为一维向量,基于左移行缓存器输出的行首数据作为池化核列向量,经过一次多数据递进比较,比较后数据称为一级比较数据。对一级比较数据进行缓存,循环一定次数后,当一级比较数据形成池化核的行向量时,再进行一次多数据递进比较即可得到最终结果。整体拆分运行过程如图5所示。

图5 二维拆分运算Fig.5 Two dimensional split operation

本文结合上述二维拆分并采用多数据递进比较方法(如图6 所示),比较模块呈二叉树展开,对比较方案归一化,无需针对不同大小的池化核而采取不同的比较方式,且较传统比较方法,可减少比较次数,提高性能。

图6 多数据递进比较Fig.6 Multi-data progressive comparison

2.2.3 乒乓处理机制

乒乓处理机制应用于数据流控制,不同时刻可以选择不同内存组作为输入。

乒乓处理机制主要由端口选择模块实现,基于地址首位判断输入内存组。乒乓处理机制根据不同时间节点可以分为层间乒乓或层内乒乓,均在两个不同时刻交换作为输入。层间乒乓指上层输出可作为下层输入,两组内存组相互交换输入与输出;层内乒乓当特征图过大或其他原因分布在两个内存组内时,可随时切换内存组作为输入。乒乓处理示意图如图7所示。

图7 乒乓处理机制Fig.7 Ping-pong processing mechanism

乒乓处理依据池化层所处网络位置与现场内存组使用情况,指定内存组作为池化模块的输入或输出,提高现场自适应能力。

2.2.4 same模式支持

池化层窗口滑行分为valid 与same 模式,两者的滑行主要区别在于:窗口滑行至行尾,当行尾剩余数据宽度小于核大小时,valid模式将舍弃该数据进入下一行,same模式将利用padding补充数据并进一步计算。故而同参数下两者输出图像大小可能不同,公式如下所示。

valid模式:

same模式:

在一些特定应用环境中,例如GoogleNet和YOLOv5等网络中,会对池化层有same处理模式的需求,本设计同样支持same模式。

same模式需要padding支持。传统padding采用填0实现,会影响比较与平均计算的结果,并造成资源的浪费。本设计中的padding 采取伪填充,不针对输入图像进行填充,而是自适应改变滑行中的池化核尺寸,从而实现填充后的效果。same模式如图8所示,实线框为实际自适应后的池化核,填充可选择左上或右下进行,或者整圈进行。伪填充的same 模式,可省去填充所需的预留硬件资源,较大程度地减少了资源使用量;自适应变化滑行中的池化核较传统same减少了特征图四周的处理数据,提高了same模式的性能。

图8 same模式Fig.8 Same mode

2.2.5 池化核延伸

本设计同时具备池化核延伸功能。利用拆分机制并契合池化核滑行原理,使同等资源实现更大的池化核配置成为可能。

池化核的拆分机理与滑行过程如图9 所示,将8×8的大池化核等分为4个4×4的小池化核,再结合本文的池化核滑行原理,以小池化核为实际滑行的池化核进行运算,并对第一行池化核运算结果进行缓存,当池化核滑行至下半部分并得出结果时,与上半部分进行比对,最终得出拆分后形成的2×2池化核的结果。

图9 池化核延伸Fig.9 Pooling nuclei extend

池化核延伸功能在运行大池化核池化时可节约大量资源,但也有局限性:(1)池化核滑行中大小不发生改变,故大池化核的拆分仅支持4等分;(2)由于未添加多余的行或列缓存,不支持池化核的重叠,池化核的滑行步长需大于等于小池化核尺寸。

3 实验结果与分析

3.1 硬件实现

本设计使用Verilog 硬件描述语言实现,最终代码通 过Synopsys 的spyglass 与Design Compiler 工具进行检查。创建UVM 验证环境对该设计进行功能验证,其中用于实验的DUT 如图10 所示,采用64 通道并行,时钟为200 MHz。

图10 池化层设计Fig.10 Pooling layer design

3.2 实验结果

实验平台配置为64核CPU(AMD TR Pro 3995WX),基于不同CNN 网络的池化层作为数据集进行对比实验。对比设计为基于CPU的Python实现,基于文献[17]、文献[18]思路设计的仿制实现。记录不同网络所需不同池化参数配置进行对比,记录文献[17]、文献[18]与本文DUT运行时间和加速比,如表1所示。

表1 不同参数下的性能对比Table 1 Performance comparison under different parameters

文献[17]提出了一种专用的卷积神经网络加速器,针对LeNet-5网络结合RISC-V联结各算子层进行加速,其加速器中的池化层采取数据不复用方案,即根据池化核所在位置取出特征图对应数据进行处理;文献[18]提出了可实现时分复用的CNN 卷积层和池化层IP 核设计,针对LeNet-5网络结合HLS设计通过5层嵌套for循环实现。与本文的工作相比,在资源方面,文献[17]的池化设计方案略占优势,文献[18]池化核小于3 的最大池化略有优势;但本文采取数据全复用的方案设计,不仅支持所有池化类型,且在重叠池化中,较文献[17]和文献[18]有更明显的加速效果。文献[17]和文献[18]中池化层设计思路仅适用LeNet-5 且无单独实验数据,此处按其设计思路进行扩展制定相应的对比方案进行比对。其中文献[18]嵌套for 实现核为13 的YOLOv4 与YOLOv5网络,以YOLOv4为例,for循环需要实现64通道、输出图像为13×13、核为13×13池化核、步长为1的数据赋值与比较。单loop的运行时间过长,导致无法进行进一步的联合仿真,虽可降低单次池化的通道数实现,但导致对照组参数不同,无比较意义,故做缺省处理。

实验数据表明,使用本文的设计方案与CPU(AMD TR Pro 3995WX)相比,运行最大池化最高可实现536倍的加速效果;运行平均池化最高可实现11 248倍的加速效果。

当使用本文方案与文献[17]的方案相比时,从LeNet-5和MobileNet 的实验数据可以得出,不论最大池化还是平均池化,当步长等于池化核大小时,两个方案的性能比接近1。这是由于非重叠池化本身就不存在数据复用,故本文方案在该方面没有明显的加速效果;从AlexNet、ZFNet、GoogleNet 和DenseNet 实验数据可以得出,当步长小于但接近池化核时,因池化核滑行中存在数据重叠,本文方案的数据全复用的高性能处理有相对较好的表现,相比于文献[17]可以做到2倍的加速;从YOLOv4、YOLOv5 和YOLOv6 的实验数据可以看出,当步长远小于池化核时,池化核滑行重叠区域大,本文方案相较文献[17]的性能比有较大的提升,且随着池化核滑行中的重叠数据范围增大而增大,其中YOLOv5可以达到27 倍的性能加速比。综合来看,本文方案相对文献[17]的平均加速效果为3.5倍。

当使用本文方案与文献[18]方案相比时,从LeNet-5、Alexnet和ZFNet可以看出,针对valid模式的最大池化,本文方案取得加速效果的几何平均值为4.7;从MobileNet和GoogleNet的实验数据可以得出,含平均池化的网络,两个方案的性能差距十分巨大,加速效果分别为213.7倍与554.8 倍,这是由于数字设计除法器得到的加速效果;从DenseNet 和YOLOv6 网络实验数据可以得出,same模式下,相较valid模式,本文方案的加速效果较文献[18]将进一步提升,且根据DenseNet和YOLOv6网络相互对比可以得出,当池化核越大且步长越小时,加速效果更明显。综合来看,本文方案相对文献[18]的平均加速效果为148.4倍。

3.3 资源对比

本设计采取数据流高效复用的方式,在大型网络中对缓存区域有较大的需求。但本设计可通过Verilog参数传递并取舍相应网络所不需要的模块以减少资源开销。具体体现在:顶层结合左移行缓存器设计理念,池化核与输入图像的阈值对于硬件资源使用量影响较大,故仅需根据网络需求传递相应参数阈值;根据网络是否使用same 模式,池化方法仅使用单一最大池化还是多种方法混合,对设计中相应模块功能进行取舍。故对于不同网络,设置不同阈值,合理规划资源,本文dut 与文献[17]和文献[18]方案资源对比如表2所示,表中资源比使用LUT数据作为代表进行比较分析。

表2 不同参数下的资源对比Table 2 Comparison of resources under different parameters

从表2 实验数据中可以得出,本文方案与文献[17]的方案相比,资源的使用相对较多,本文方案在资源的对比上仅DSP 的使用量存在优势。其中DSP 资源主要作用于数据读取时序的控制与数据处理的控制中所需的过程参数计算。过程参数是基于步长、核大小、图像大小和模式选择等,依据本文池化设计方案计算时序约束所需的参数。与文献[17]的资源比的几何平均值为2.3。再结合表1对比分析,从LeNet-5、AlexNet、ZFNet、GoogleNet、DenseNet 和MobileNet 的实验数据可以得出,本文方案相较于文献[17],资源使用量更大。这是由于本文方案存在数据缓存,而以上网络无需数据复用或数据复用要求低;从YOLOv4、YOLOv5 和YOLOv6的实验数据可以看出,网络对数据复用要求高时,本文方案的优势将凸显。其中以YOLOv5 网络参数为例,3.5倍的资源使用量可获得27倍的加速效果。综上实验数据分析总结可得,本文方案与文献[17]方案相比,综合的性能比/资源比的几何平均值为1.5。

本文方案与文献[18]相比,在池化核不超过3 的最大池化网络中资源使用略高于文献[18]的方案,但对于平均池化或池化核大于5的网络,本文方案的资源使用量低于文献[18]。其中LeNet-5 的资源使用量两者接近;从AlexNet、ZFNet和DenseNet这类最大池化且池化核不超过3 的网络比较可以得出,文献[18]比本文方案资源使用量更低,但比文献[17]高,池化中计算输出图像大小需要用到除法,文献[17]使用数字设计除法器,资源占优;但从GoogleNet、MobileNet、YOLOv6 这类平均池化或池化核较大的网络比较可以得出,本文方案的资源使用量低,其根本原因也是HLS的除法资源使用量与大尺寸池化核需要额外嵌套for循环。其中以GoogleNet网络参数为例,该网络既需要核为7 的平均池化,又需要same模式重叠最大池化,两者均需要大量资源,本文方案相较文献[18]可以0.9 倍的资源使用量获得555 倍的加速效果。综上实验数据分析可得,本文方案与文献[18]方案相比,综合的性能比/资源比的几何平均值为212.6。

从表3可以得出,本文方案的数据全复用方法极度依赖数据缓存,行缓存器资源与输入特征图大小与池化核大小成一定比例关系,图像与核越大且运行模式相同时,相较其余模块资源,行缓存器资源占用量也越大。

表3 不同网络中行缓存资源占比Table 3 Proportion of row cache resources in different networks

从实验结果可以看出,本文方案适用于所有类型的池化,在重叠池化中的优势更加明显。在不考虑硬件资源的情况下,本文方案具备较高的性能;在考虑硬件资源的情况下,本文方案在类似YOLOv5 和GoogleNet 等网络中的综合表现突出。

4 结束语

本文通过Verilog 进行面向神经网络池化层的灵活高效硬件设计,并结合UVM 验证环境对池化层功能进行多方位验证,实验证明其满足LeNet-5、AlexNet、ZFNet、GoogleNet、DenseNet、MobileNet、YOLOv4、YOLOv5 和YOLOv6 等各类网络应用需求,可移植性强,且在性能上表现十分优异。以YOLOv5 为例,根据现有实验数据,与通用的数据不复用的方案相比,可实现以3.5倍资源取得27倍的加速;以GoogleNet为例,与HLS 设计方案相比,可实现仅用0.9 倍资源获得555 倍的加速比。这对指导基于Verilog HDL 的CNN 硬件实现也具有重要意义。

猜你喜欢

池化层池化卷积
基于Sobel算子的池化算法设计
卷积神经网络中的自适应加权池化
设施蔬菜病害识别中的CNN池化选择
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络模型研究分析*
基于卷积神经网络的纸币分类与点钞
基于深度学习卷积神经网络的人体行为识别研究
从滤波器理解卷积
基于卷积神经网络和池化算法的表情识别研究
基于全卷积神经网络的SAR图像目标分类*