问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于FPGA的YOLOv5s网络高效卷积加速器设计

创作时间:
作者:
@小白创作中心

基于FPGA的YOLOv5s网络高效卷积加速器设计

引用
CSDN
1.
https://m.blog.csdn.net/qq_43416206/article/details/138091711

本文提出了一种基于FPGA的YOLOv5s网络高效卷积加速器设计。通过共享3×3卷积和1×1卷积的计算单元,以及采用卷积层BN层融合、模型量化、循环分块和双缓冲等策略,实现了资源利用率和能效的提升。实验结果表明,该加速器在200MHz的工作频率下,卷积计算峰值性能可达97.7GOPS,YOLOv5s网络的平均计算性能可达78.34GOPS,相比其他FPGA加速器方案在DSP效率、能耗比以及整体性能等方面具有显著优势。

摘要

为提升在资源受限情况下的嵌入式平台上卷积神经网络(Convolutional Neural Network, CNN)目标识别的资源利用率和能效,提出了一种适用于YOLOv5s目标识别网络的现场可编程门阵列(Field Programmable Gate Array, FPGA)共享计算单元的并行卷积加速结构。该结构通过共享3×3卷积和1×1卷积的计算单元提高了加速器硬件资源利用率。此外,还利用卷积层BN(Batch Normalization)层融合、模型量化、循环分块以及双缓冲等策略,提高系统计算效率并减少硬件资源开销。实验结果表明,加速器在200MHz的工作频率下,实现的卷积计算峰值性能可达97.7GOPS(Giga Operations per Second),其YOLOv5s网络的平均计算性可达78.34GOPS,与其他FPGA加速器方案相比在DSP效率、能耗比以及整体性能等方面具有一定的提升。

关键词

卷积神经网络(CNN);目标识别;YOLOv5s;并行卷积加速结构

引言

近年来,卷积神经网络目标识别算法在人脸识别、自动驾驶以及物体识别等民用领域获得了巨大的成功。目前国内航天技术也逐渐向智能化转变,在航天设备上应用智能化的目标检测系统受到越来越多的关注。然而星载硬件计算资源十分匮乏,如何将基于卷积神经网络的目标检测算法部署到资源有限的宇航级芯片上是亟需解决的一项技术难题。现场可编程门阵列(Field Programmable Gate Array, FPGA)作为航天常用主控器件,具有功耗低、可重构以及并行计算能力强等优点,利用其高度的并行计算能力能够以较低的功耗实现高效的卷积计算,在卷积加速方面能够表现出独特的优势。因此,本文提出采用FPGA作为硬件加速单元实现基于卷积神经网络的目标检测加速系统。

目前基于FPGA的卷积加速器研究主要集中在3×3标准卷积加速的优化上,对于目标检测常用的YOLO网络的网络加速优化研究还较少。由于目标检测网络较卷积计算有着更加复杂的结构,因此研究如何实现高效的网络加速更具有意义。在YOLO目标检测网络中卷积一般为两种,分别是1×1卷积和3×3卷积。对于YOLO目标检测网络的加速,文献[3-4]中提出的加速结构分别对1×1卷积和3×3卷积进行了硬件设计,两种卷积计算单元相互独立,计算资源互不共享。由于卷积神经网络目标检测算法每次只对一种卷积进行计算,因此此类结构中总有一部分计算单元会空闲,从而使硬件利用率较低。而文献[5]中提出卷积复用的方法,将1×1卷积权重放置在3×3卷积核权重第5位,剩余8位权重置零。该方法用3×3卷积直接代替1×1卷积,虽然大幅提高了硬件利用率,但是1×1卷积计算时每计算1次会产生8次无效计算和无效数据传输,因此造成了1×1卷积计算效率低下。文献[6]中提出了一种策略,将3×3卷积转换成1×1卷积进行计算,并对YOLOv5s网络实现了加速计算,但是该方法却牺牲了部分并行性,计算性能较差。文献[7]采用了基于Winograd算法的硬件加速结构完成了对3×3、5×5以及11×11尺寸的卷积加速,并取得了较好的加速效果,但该方法并不支持1×1卷积的计算。由于YOLOv5目标检测网络中具有大量的1×1卷积计算,因此该方法并不适合用于加速YOLOv5目标检测网络。

为解决以上文献中所提结构的缺点,本文提出了一种将1×1卷积和3×3卷积计算单元复用共享的结构。在大幅提高硬件利用率的同时,既可以计算1×1卷积也可以计算3×3卷积,同时1×1卷积计算时也不会产生无效计算和无效数据传输,解决了文献[3-7]中加速器结构硬件利用率低、计算效率低以及不支持1×1卷积计算等问题。此外,该硬件加速器还利用了层融合、多维度并行卷积加速、模型量化降低资源消耗等方法以较低的FPGA资源消耗获得了较高的计算能力,实现了卷积神经网络目标检测的高效计算。最后本文以通用目标检测算法YOLOv5s算法为基础,并以天体表面陨石坑的识别为主,验证了所提出的加速器结构的有效性。

YOLOv5s目标检测算法

YOLOv5目标检测算法由Ultralytics LLC公司于2020年5月提出,是目前优秀的目标检测算法之一。通过YOLOv5算法能够实现多目标高精度的目标检测,可以解决传统目标检测算法要求检测背景简单以及需要被检测目标特征明显类型单一等问题。YOLOv5目标检测网络结构共有5个主流版本,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x。本文综合速度、精度等因素采用了YOLOv5s,并对YOLOv5s算法结构进行了微调:一是将原算法模型的激活层由SiLU替换为Leaky ReLU。由于SiLU激活函数中包括指数、乘法、除法和加法计算,其计算复杂度高,而Leaky ReLU激活函数中仅包含一个乘法计算计算复杂度低,因此采用Leaky ReLU激活函数能够在一定程度上降低计算量。二是保留了YOLOv5s-5.0中的FOCUS结构和YOLOv5s-6.0中的SPPF结构,SPPF结构中只采用了一种尺寸5×5的Maxpool,相较于SPP结构中3种不同尺寸(5×5、9×9、13×13)的Maxpool在FPGA上仅需要设计一种尺寸Maxpool,能够简化FPGA对Maxpool的设计。以上算法修改均能够有效减少FPGA资源使用,且对算法本身影响不大。调整后的YOLOv5s网络结构如图1所示。

网络模型层融合与量化

网络模型层融合

YOLOv5s算法中CBS计算过程包括卷积、BN(Batch Normalization)和Leaky ReLU三部分。在模型训练过程中BN层能够解决梯度消失和梯度爆炸的问题,并可以加快网络的收敛提高训练效率,同时也可以提高网络稳定性。而在前向推理过程中BN层却降低了模型的性能,所以在推理过程中可以通过层融合的方式将BN层融合到卷积层中,从而达到降低计算量、提高模型性能的效果。卷积层BN层融合过程如下:在BN层中μ表示输入的均值如式(1)所示,式中x表示输入特征图中的元素,m表示输入特征图中元素的个数。δ2为输入的方差,如式(2)所示。

BN计算公式如式(3)所示,式中γ为尺度因子,β为偏移因子。尺度因子优化了特征数据分布的宽窄,偏移因子则优化了数据的偏移量,在模型训练过程中这两个参数自动学习,训练结束后数值固定。ε为一个大于0且极小的数值,用于防止方差δ2为0的异常情况出现。式(4)为卷积计算公式,其中W表示卷积核,X表示输入特征图,B表示偏置,Y表示输出特征图。将式(4)代入到BN计算中得到卷积和BN计算的总公式(5),式中Y′表示卷积和BN计算后的输出特征图。

将式(5)展开可得出新的卷积核W′如式(6)所示,新的偏置B′如式(7)所示。

层融合的方法通过提前计算获得新的卷积核W′和偏置B′,从而将BN层融合到卷积层中,有效降低了模型推理阶段FPGA上的计算量,减少FPGA片上DSP48E、LUT等资源的消耗。同时由于计算步骤减少,所以也能够在一定程度上减小推理延时,提高系统整体性能。

网络模型量化

在深度学习领域量化是一种常用的能够有效降低存储空间和计算成本的方法,可以有效压缩模型大小。在FPGA上采用量化方法用低位宽的定点乘法器、加法器代替高位宽的浮点乘法器、加法器可以大幅降低FPGA逻辑资源的使用,提高资源紧缺情况下FPGA上的计算能力。本文对模型进行了量化,将32位单精度浮点转换为16位定点数,在FPGA中设计16位定点乘法器、加法器来完成卷积层的计算。

FPGA硬件加速器设计

加速器体系架构

根据图1中YOLOv5s网络结构框图可以看出其内部由基础模块构成,包括卷积Conv模块、ADD模块、Maxpool模块、Silce模块、上采样模块和Concat模块。其中卷积分为两类,分别为1×1卷积和3×3标准卷积,在YOLOv5s算法中一共了包含43层1×1卷积和19层3×3标准卷积,该部分是YOLOv5s算法中计算最复杂的部分,需要在FPGA设计并行计算单元以达到计算加速效果。本文对YOLOv5s算法中计算量较大的模块在FPGA上进行了硬件加速设计,包括Conv1×1卷积、Conv3×3卷积、ADD、Maxpool和上采样模块。

加速器整体架构如图2所示,该架构中包括CPU和FPGA两个部分。其中CPU部分为双核ARM Cortex-A9 MPCore,该部分外挂DDR3内存,用于缓存特征图和权重数据以及运算过程中产生的中间数据,外挂NAND FLASH用于存储输入的图像文件和权重文件以及存储计算后的输出文件。UART接口用于监控加速器各个阶段的计算耗时,输出所识别到的陨石坑在图像中的坐标信息。CPU部分主要用于图像和权重等文件的读取、将图像和权重文件转存到DDR3、配置FPGA端加速器以及处理YOLOv5s中简单的计算如Silce和Concat。

FPGA端设计有主计算单元和辅计算单元两个部分。其中主计算单元包括3×3卷积缓存模块、1×1卷积缓存模块、通用并行计算模块和ADD计算模块。在主计算单元中由于涉及的数据量较大且数据传输延时较长,所以在主计算单元中采用双缓存乒乓机制用于掩盖数据传输所消耗的时间。辅计算单元包括Maxpool计算模块和上采样计算模块。

CPU和FPGA之间通过AXI(Advanced eXtensible Interface)总线交互数据,采用了1个AXI-GP接口和4个AXI-HP接口。其中AXI-GP接口用于FPGA和CPU之间的控制信号传输,实现加速器的偏移地址配置以及其他参数配置。而AXI-HP接口负责计算过程中DDR3内存与FPGA的高速数据交换,AXI-HP接口和DDR之间具有专有控制器可以直接实现FPGA与内存的高速数据交换,由于不需要经过CPU从而大大提高了数据传输效率,适合大数据吞吐量的应用场景。

存储设计

循环分块策略

由于FPGA的片上存储BRAM(Block Random Access Memory)资源十分有限,而卷积计算过程中的权重、偏置以及特征图会占用大量的存储资源,所以无法直接将整个特征图存储到FPGA的片上存储中。因此本文采用对特征图进行循环分块的设计策略,将片外DDR3中存储的完整特征图分为数个小块,分批次存储到FPGA片上存储BRAM中进行后续的卷积计算,解决了FPGA片上存储资源不足的问题。循环分块过程如图3所示,分块后的小特征图存储在双缓存结构中。

双缓存与缓存分割

为进一步提高整个系统的吞吐量,掩盖AXI总线和内存之间的传输延时,本文设计了一种双缓存机制,使加速器可以在AXI总线传输特征图的过程中同时进行卷积计算。双缓存结构如图4所示,当计算单元读取缓存1中的数据进行卷积计算的过程中,缓存2可以同时用于接收AXI总线中的数据,而缓存2用于计算时,缓存1则可以用于接收数据,以此往复。该结构可以使计算单元一直处于工作状态,从而在一定程度上提高整个系统的工作效率。

此外,由于FPGA中的BRAM仅能配置为双端口进行读写,读写速率受端口数量的限制。为解决此类问题,本文采用数组分割的方式,将分割后的数组存储在不同的BRAM中,用数个小容量缓存代替一个大容量缓存,从而可以实现多个端口同时读写数据提高数据吞吐量,为后续并行计算结构提供充足的

卷积计算结构设计

本文中1×1卷积和3×3卷积采用了复用的计算单元,需要计算单元尽可能兼容两种卷积计算,因此本文设计了输入-输出通道并行的加速结构,该结构中计算单元的硬件结构与卷积核尺寸无关。其计算单元中包含64个数据处理单元(Processing Element, PE),PE由8个输入并行数据选择器、4个乘法器、1个加法树以及1个累加结构构成。每个PE单元具有8个输入通道其中1×1卷积和3×3卷积各4个通道,通过数据选择器选择其中4个通道至后续的运算结构,因此实现了1×1卷积和3×3卷积的计算资源共享。PE计算单元结构如图5所示。

在YOLOv5s算法中的通道数最大达到了1024,受限于FPGA资源无法将1024个通道全部在FPGA上实现并行,所以实际输入的特征图通道数远大于PE单元的设计输入通道,因此,输入的特征图只能分批进入PE单元中进行计算。此外,对于3×3卷积每一个通道的每一个输出数据也都会进行9次卷积核内计算,且输出通道的计算结果是分批进入PE单元的输出数据以及3×3卷积核内计算数据进行累加,实现完整的多通道卷积计算。为提高PE结构的运行频率和吞吐量,本文在PE单元的硬件结构中插入了中间寄存器进行了6级流水设计,使加速器可以在高时钟频率下稳定工作。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号