YOLOv4-tiny 模型在边缘计算平台的加速设计
2024-01-23靳永强王艺钢
赵 洋,靳永强,王艺钢
(沈阳化工大学,辽宁 沈阳 110142)
0 引 言
随着各种深度学习算法在边缘计算中的广泛使用,多种深度神经网络硬件部署平台应运而生[1-4]。当前使用较为普遍的部署平台包括:图形处理单元(Graphics Processing Unit, GPU)、专用集成电路(Application Specific Integrated Circuit, ASIC)和现场可编程门阵列(Field Programmable Gate Array, FPGA)[5-8]。GPU 因具有优秀的计算性能,在深度学习中有着较为广泛的应用[9-11]。优秀的计算性能是建立在不考虑功耗、算力成本、部件散热等因素的前提条件下的,因此GPU 在深度学习的训练过程以及云端部署中被广泛使用。当将GPU 作为边缘计算平台部署深度学习模型时,功耗、成本、散热等因素的影响使其难以应用到嵌入式端。ASIC因具备高性能和低功耗的优势,在嵌入式系统中有广泛的使用[12-15]。但其灵活性低、开发周期长和成本较高等方面的缺点并不适于快速迭代的卷积神经网络。与ASIC 相比,FPGA同样具有高性能、低功耗的优势,而FPGA 成本较低,并且具有较强的可重构性,能够很好地适应卷积神经网络的快速发展,因此更适合在嵌入式领域作为深度学习网络部署的平台[16-18]。
FPGA 具有可重构、高性能、低功耗以及高性能产品的快速发展和更加灵活的架构设计等特点。近年来,越来越多的研究人员将注意力集中在基于FPGA 的深度学习硬件加速实现上。Yu 等[19]提出使用Winograd 快速算法,可在FPGA上实现加速卷积计算。虽然可以有效地降低片上资源的消耗,但该算法只适用于卷积核较小的卷积网络,对卷积核较大的卷积网络的加速效果并不明显。梅志伟等[20]提出了一种融合乘加树与脉动阵列的乘加阵列来加速卷积层的计算。该算法节省了硬件资源,并提高了计算性能,但对于数字信号处理单元DSP 的资源利用率并不高,并没有充分使用硬件资源。上述研究所提出的各种方法,虽然实现了FPGA 的深度学习硬件加速的功能,但存在着不适用于卷积核较大的卷积网络以及对片上资源利用率不高的现象。因此,针对以往在FPGA 硬件加速的过程中出现的这两种现象,本文设计了一种基于输入输出通道并行组合的硬件加速器的方案。该方案中包括的标准卷积、点卷积、池化等硬件加速内核模块(Intellectual Property, IP)均采用流水线架构,对模型参数进行参数量化处理,有效地节省片上资源,提高资源的利用率,并以YOLOv4-tiny 模型为例在FPGA 上部署实现。
1 相关理论
目标检测在边缘计算过程中应用十分广泛。目前,基于深度学习应用在目标检测领域的主流算法有:SSD、RCNN、Fast RCNN、YOLO 等模型。这些网络的模型计算规模大、参数多、计算复杂,不适合在资源较小的硬件加速平台部署。YOLO 模型的精简版本YOLOv4-tiny 使用了13×13、26×26两种尺度预测网络对目标进行分类和回归预测。YOLOv4-tiny 的网络层数仅有38 层,其模型规模较小、参数量较少且检测精度尚可,对硬件要求低,适合在硬件平台资源较小的情况下进行部署,提高了将目标检测方法部署在嵌入式系统或移动设备上的可行性。
1.1 YOLOv4-tiny 网络模型
YOLOv4-tiny 的网络结构由主干特征提取网络CSPDarknet53-tiny 和特征金字塔网络(Feature Pyramid Networks, FPN)两部分组成。YOLOv4-tiny 的模型结构如图1 所示。
图1 YOLOv4-tiny 的模型结构
CSPDarknet53-tiny 作为主干特征提取网络,由DarknetConv2D_BN_Leaky模块和Resblock_Body模块堆叠形成。其中,DarknetConv2D_BN_Leaky 模块由二维卷积层DarknetConv2D、归一化层BN 和激活函数LeakyReLU 三部分组成。Resblock_Body 模块分为两部分:一部分是模块主干部分对残差块进行堆叠得到输出Feat1;另一部分是引入较大的残差边,经过少量的处理后连接到Concat 模块,对两部分的输出进行通道维度上的堆叠,再经过池化处理得到模块的输出Feat2。Resblock_Body 模块结构如图2 所示。
图2 Resblock_Body 模块结构
FPN 作为特征增强网络,主要解决的是目标检测中的多尺度问题,一般分两个步骤来构建特征金字塔:(1)Feat2经过1×1point-wish 卷积处理之后得到FPN 模块的第一个输出P1;(2)P1 再经过1×1point-wish 卷积和上采样处理与Feat1 在通道维度上进行堆叠,得到FPN 模块的第二个输出P2。最后,将得到的两个模块P1 和P2 进行卷积处理便可得到两个用于边界框预测的特征层YOLO Head1 和YOLO Head2。
1.2 ZYNQ 平台和高层次综合
ZYNQ 平台是赛灵思公司推出的新一代的全可编程片上系统(All-Programmable SOC, APSOC)。相较于传统的FPGA 平台,ZYNQ 平台除了传统的可编程逻辑(Programmable Logic, PL)部件外,还包括了以ARM CorteX-A9 为核心的处理系统(Processing System, PS)。ZYNQ 平台将ARM 处理器的软件可编程性与FPGA 的硬件可编程性进行完美整合,使其既能够在ARM 上部署操作系统和运行软件程序,也能够利用FPGA 的并行性特点对软件中需要并行加速的部分进行加速,提高整个系统的性能;此外,也保留了嵌入式平台的体积小、能耗低、灵活性强的特点。
高层次综合(High-Level Synthesis, HLS)是赛灵思公司推出的FPGA 设计工具,它可以将高层次语言描述的逻辑结构转换成寄存器传输级(Register-Transfer Level, RTL)的电路模型。开发者可以使用C、C++或SystemC 等高级语言对FPGA 进行系统建模,极大地提升了其工作效率,缓解了设计复杂度。当前FPGA 里有着大量成熟的、有固定功能和位置的IP 单元可以被HLS 工具充分利用,十分适合深度学习算法的快速验证。
2 硬件系统设计
2.1 硬件架构设计
本文设计的FPGA 端的硬件架构,主要由卷积模块、池化模块、重排序模块、输入输出缓冲区、权重缓冲区、控制器模块以及AXI4 接口组成。其结构如图3 所示。其中Feature Data Router 是缓冲区的数据路由逻辑。
图3 硬件架构
完成一次完整的加速过程,首先需要从外界通过AXI4接口总线向输入缓存区读写输入特征图数据,向权重缓冲区读写权重数据;控制器在接收到AXI4 接口总线开始的信号后,加速器中的运算模块被激活。加速器将根据网络模型架构层次来顺序激活各层的控制逻辑;在一层的计算被激活后,控制器通过控制信号控制读取相应的数据,提供给运算逻辑进行对应的运算,再将运算结果通过数据路由逻辑写入到输出缓冲区;一层计算结束时,下一层计算被激活,依次进行;最后将计算结果和运算模块结束信号通过AXI4 接口总线传送到外界。
2.2 双缓存结构
由于深度神经网络的参数量较大,FPGA 的片内缓存空间难以将全部数据载入,因此本文通过双缓存乒乓结构的设计,将参数分配到片外存储器上;对图像进行识别时,再从片外存储器上读取所需的数据,即构建两块存储缓存区,利用流水线的方式,交替进行读取操作,如图4 所示。其中,t1为加速器读取输入数据的时间;t2为加速器获取输出数据的时间;t3为加速器输出数据写入缓存区的时间。
图4 双缓存流水结构
2.3 模块优化与实现
目标检测中使用的卷积神经网络主要使用的基础单元包括卷积单元和池化单元。将目标检测模型YOLOv4-tiny 部署在FPGA 上的过程中,主要就是针对这两个部分进行优化设计。
2.3.1 卷积单元设计
对模型中的卷积部分采用输入、输出特征图间组合并行的策略。输入特征图数为Mi,输出特征图数为Nj,卷积核的大小为K,对输入特征图和输出特征图进行二维展开并行,单个周期内相同位置的卷积窗口需要Mi×Nj个乘积累加运算单元以及Nj个加法器,并行度为Mi×Nj。每个计算周期内,卷积模块从存储输入特征图的缓冲区读取Mi个输入特征值,同时读入Mi×Nj个卷积核中特征图相同位置的权重,进行Mi×Nj次并行乘法运算;复用Mi个输入特征图进行乘法运算,经过Nj个加法树累加后得到的卷积结果,存入相对应的输出缓存区。
卷积单元设计中大部分使用的是乘法器和加法器资源。在进行卷积运算时,运算逻辑资源的消耗与网络选择的数据精度密不可分。不同精度下,运算逻辑资源的消耗见表1所列。
表1 资源消耗对比
2.3.2 池化单元设计
池化单元的算法原理与卷积单元类似,但池化运算单元往往负责完成单一的特征图计算,并且使用的是比较器,而非乘法器和加法器。其原理如图5 所示。
图5 池化操作原理
在图5 所示的结构中,每个时钟周期池化单元读取一个输入特征图数据并与比较器中的寄存器值进行比较,再将比较的最大值存入寄存器中。在YOLOv4-tiny 算法中池化层的大小和步长都为2,即K=S=2,经过K2个周期后得到池化结果,将结果写入输出缓存区中。考虑到池化单元消耗的资源较少,在此不再过多叙述。
3 实验验证与评估
3.1 实验环境
本实验使用的是Xilinx PYNQ-Z2 开发板(ARM 双核Cortex-A9+FPGA),主芯片为ZYNQ XC7Z020-1CLG400C,其中FPGA 上DSP、LUT、BRAM_18K 和FF 的可用资源数分别为220、53 200、280 和106 400。此外,板上还包括一个ARM 双核处理器和一个大小为512 MB 的DDR3 内存。采用的神经网络模型是YOLOv4-tiny,数据集为VOC 数据集。使用Vivado HLS 2019.2 进行卷积运算单元和池化运算单元的设计,并生成对应的IP 核,使用Vivado 2019.2 进行综合布局布线。
3.2 系统实现
本文采用软硬件协同的方式对YOLOv4-tiny 网络模型进行加速设计,整个加速系统如图6 所示,分为PS(Processor System)和PL(Programming Logic)两部分。PS 端的ARM处理器主要负责对整个执行流程的控制,包括数据预处理、配置模型参数和初始化加速系统。PL 端的FPGA 逻辑资源主要用于卷积、池化等的运算。DDR 为片外存储器、Block_RAM 为片上存储器,PS 和PL 通过AXI 总线接口进行交互。
图6 系统架构示意图
输入数据流经过PS 端的预处理,将待输入特征图和权重参数存入片外存储器DDR 上,PL 端通过AXI 总线从片外存储器DDR 读取数据至片上存储器Block_RAM 后,将数据输入到硬件加速模块,进行卷积、池化运算,计算完成后将结果返回给Block_RAM,继续返回给DDR 作为下一层网络的输入或结果输出。
3.3 资源评估与性能评估
使用Vivado2019.2 进行综合布局布线后,其给出的资源消耗情况见表2 所列。其中,DSP 主要用于卷积、池化运算模块中乘法器和加法器的设计,使用率为99.09%;其他运算逻辑和控制逻辑均使用LUT,使用率为76.26%;BRAM_18k 主要用于输入输出缓冲区和权重值较大的权重缓冲区,使用率为68.57%;对于权重值较小的权重缓冲区不适合使用BRAM,而是使用LUTRAM 资源来存储,使用率为40.78%;寄存器FF 的使用率为47.22%。
表2 FPGA 资源消耗情况
将本文设计与其他平台实现的加速效果进行比较,见表3所列。文献[21]设计的YOLOv2-tiny 加速器,将卷积和池化操作相结合,减少加速器的片外访存时间,功率为11.8 W,是本文加速器功率的3.96 倍。文献[22]中是针对YOLOv3-tiny 设计的一种可配置的硬件加速器,使用的是Ultrascale+XCKU040 平台,其可用资源数是本文使用平台的8 倍,但其消耗的片上资源是本设计的3.89 倍。
表3 与其他FPGA 平台加速器设计的比较
4 结 语
本文从网络模型参数和结构方面进行分析,对YOLOv4-tiny 模型进行硬件加速设计,对参数进行了16 位定点量化处理,使用了卷积输入输出并行组合策略进行加速。此外,使用乒乓双缓存机制,提高带宽利用率,减少传输时延;并在PYNQ-Z2 平台上进行板级验证,经过对资源、性能等方面的综合评估,该加速器的功耗为2.98 W,有效算力达到10.96 GOPs。与已有文献中提及的在FPGA 部署深度学习算法的实验结果进行比较发现,本文设计的深度学习模型在边缘计算平台上的加速设计方案检测精度最高、反应时间最短、检测效率最优。