CN110555516A - 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法 - Google Patents

基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法 Download PDF

Info

Publication number
CN110555516A
CN110555516A CN201910796486.7A CN201910796486A CN110555516A CN 110555516 A CN110555516 A CN 110555516A CN 201910796486 A CN201910796486 A CN 201910796486A CN 110555516 A CN110555516 A CN 110555516A
Authority
CN
China
Prior art keywords
layer
input
bit
calculation
tiny
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910796486.7A
Other languages
English (en)
Other versions
CN110555516B (zh
Inventor
郭谦
张津铭
李�杰
李岑
蒋剑飞
绳伟光
景乃锋
王琴
贺光辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
He Guanghui
Xu Ningyi
Original Assignee
Shanghai Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201910796486.7A priority Critical patent/CN110555516B/zh
Publication of CN110555516A publication Critical patent/CN110555516A/zh
Application granted granted Critical
Publication of CN110555516B publication Critical patent/CN110555516B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

一种基于FPGA的YOLOv2‑tiny神经网络低延时硬件加速器实现方法,包括步骤:网络量化;进行基于YOLOv2‑tiny的目标检测系统整体硬件架构设计;进行卷积层处理单元设计;双乘法器设计和设计空间探索。本发明可以显著降低整体系统的延时,提高DSP的使用效率。

Description

基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现 方法
技术领域
本发明属于深度学习和卷积神经网络硬件加速器技术领域,具体涉及一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法。
背景技术
近年来,卷积神经网络(Convolutional Neural Network,CNN)领域取得了重大突破,极大地提高了基于CNN的目标检测算法的性能。来自PASCAL VOC数据集的分类挑战结果证明,自2007年以来,目标检测算法的平均精度(Mean Average Precision,mAP)从20%提高到了85%。目标检测算法的优异性能使它们广泛应用于自动化系统,如机器人、自动驾驶和无人机等。
然而,目标检测算法的高准确度伴随着高计算复杂度的问题,如果单纯使用CPU来计算,需要很长时间才能完成,无法满足实时性高的应用场景。因此,需要使用GPU、ASIC(Application Specific Integrated Circuit,专用集成电路)或FPGA(Field-Programmable Gate Array,现场可编程门阵列)等硬件进行加速计算,从而实现目标检测网络的实时推理。GPU虽然具有强大的并行计算能力,然而GPU的功耗通常达到约100W,严重限制了应用场景。ASIC虽然具有高能效的特点,但是开发周期相对较长,成本较高。而FPGA在硬件性能和开发周期之间取得了较好的平衡,广泛应用于神经网络加速器领域。
为了在FPGA上实现CNN,近年来已经提出了许多相关方法,如模型量化和硬件优化。对于模型量化,由于CNN具有一定的鲁棒性,可以将CNN的位宽量化为低比特数,而最终结果没有明显的准确度损失。然而,对于像YOLO这样的目标检测算法,过小的量化位宽将导致准确度的显着下降;对于硬件优化,在现有的针对YOLO网络的硬件加速器设计方法中,大多数将第一层和最后一层部署在软件上运行,这会导致较长的延迟。同时,为了提高硬件资源的利用率,常见的方法是建立分析模型,以对硬件资源的分配进行设计空间探索,实现负载平衡。
然而,现有的硬件加速器多采用单引擎的架构,按照时分复用的方式逐个处理中间的隐藏层,这将延长从输入图片到最终输出的延迟。尽管现有技术通过降低算法的复杂度或提高硬件利用率而成功地提高了吞吐量和能效,但是他们并没有太多关注整体延迟的优化。然而,对于实时应用,整个目标检测系统不仅需要实现高吞吐量和高能效,低延迟同样也是必不可少的。
发明内容
为解决现有技术中针对YOLO网络的硬件加速器延时较高的问题,本发明提出了一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,可以显著降低整体系统的延时,提高DSP的使用效率。
本发明的技术解决方案如下:
一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,主要包括以下步骤:
步骤1:进行网络量化。对原始网络的权重与中间结果进行8位定点数量化,使量化后的网络与原始网络相比检测精度损失最小;
步骤2:进行基于YOLOv2-tiny的目标检测系统整体硬件架构设计;
步骤3:进行卷积层处理单元设计。使用一种采用填充跳过技术的细粒度流水线架构,以减少流水线的启动时间。同时,设计一种可以参数化的卷积处理单元,从而支持细粒度流水线架构;
步骤4:进行双乘法器设计。在一个DSP中同时进行相同输入与两个不同权重的乘法计算,减少卷积层的计算时间;
步骤5:进行设计空间探索。分配各层卷积计算所需的硬件资源,平衡各级流水线,实现负载平衡,同时提高DSP使用效率。
具体的,所述步骤1中的网络量化步骤如下:
步骤1-1:确定YOLOv2-tiny中每一层权重的取值范围;
步骤1-2:随机取n批输入图像使用YOLOv2-tiny进行推理,统计各个卷积层的输入与输出结果,得到在n批输入图像推理时的最大取值范围;
步骤1-3:根据步骤1-1中得到的权重范围与步骤1-2中得到的卷积层输入输出范围,得出每一层的权重与各个卷积层输入输出结果的小数点位置;
步骤1-4:使用步骤1-3中得到的小数点位置对YOLOv2-tiny进行重训练,得到量化后的网络权重。
具体的,所述步骤2中的整体硬件架构设计步骤如下:
步骤2-1:设计主机端与FPGA的权重数据通路,利用PCIe(Peripheral ComponentInterconnect Express,外设部件高速互连标准)总线将YOLOv2-tiny的权重从主机端预加载到DRAM(Dynamic Random Access Memory,动态随机存取存储器)中;
步骤2-2:设计主机端与FPGA的输入数据通路,输入图像通过PCIe总线按列加载到输入缓存中;
步骤2-3:设计计算模块,输入缓存中的数据以细粒度流水线的方式在卷积层处理单元进行逐层处理,每一层的卷积层处理单元从该层的列缓存中获取输入数据,从权重缓冲中获取权重数据,计算完成后,将输出结果存放在下一层的列缓存中;
步骤2-4:设计主机端与FPGA的输出数据通路,利用PCIe总线将最后一层的检测结果发送到主机端进行后处理,输出最终的检测结果。
具体的,所述步骤3中的卷积层处理单元计算顺序如下:
步骤3-1:对于Hi×Wi×Ci大小的输入特征图(其中Hi为输入特征图高度,Wi为输入特征图宽度,Ci为输入特征图通道数),与Kw×Kh×Ci×Co大小的卷积核做卷积计算(其中Kw为卷积核宽度,Kh为卷积核高度,Co为输出通道数),在每一个周期中,卷积层处理单元从列缓存中取出C个输入,从权重缓冲中取出K个权重,计算得到K个中间结果;
步骤3-2:将步骤3-1循环执行Hi×Wi×Ci/C次,得到输出特征图上K个最终的计算结果。循环执行顺序为先是通道方向,再是高度方向,最后是宽度方向;
步骤3-3:在输入特征图上沿高度方向向下滑动卷积窗口,执行步骤3-2,经过Hi×Wi×Ci/C个周期后,计算得到新的K个输出结果,此时乒乓缓冲中的权重若无法继续使用,则需要进行权重更新,使用新的K组卷积核中权重进行计算,否则,继续复用乒乓缓存中当前的权重;
步骤3-4:当所有的卷积核计算完毕,在输入特征图上沿宽度方向向右滑动卷积窗口,执行步骤3-3,经过Hi×Wi×Ci/C×Ho×Co/K个周期后,计算得到输出特征图中一列新的结果,整个Ho×Wo×Co大小的输出特征图中结果全部计算完成(其中Ho为输出特征图高度,Wo为输出特征图宽度),总共经过
Hi×Wi×Ci/C×Ho×Wo×Co/K个周期;
具体的,所述步骤4中的双乘法器设计步骤如下:
步骤4-1:将n位输入数据A、B组合成一个3n+1位的数据作为整体输入到双乘法器中,其中高位的n位数据为A,低位的n位数据为B,中间填充n+1位的0;
步骤4-2:利用数据选择器,根据输入数据A、B和权重数据C中B、C是否具有符号位,生成对应的中间结果以及
其中cn-1为C的第n-1位,bn-1为B的第n-1位,为B的n-1位无符号表示,为C的n-1位无符号表示。之后再利用加法器计算出之和;
步骤4-3:将步骤4-2中的计算结果,利用补码器通过移位操作生成补码,得到输出中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,即
步骤4-4:对于双乘法器高位的2n位结果,将n位有符号数输入A、C,在DSP(DigitalSignal Processor,数字信号处理器)中视为有符号数A和无符号数相乘;对于双乘法器低位的2n位结果,将n位有符号数输入B、C,在DSP中视为无符号数和无符号数相乘。按此方法,将步骤4-1中得到的整体输入数据与权重数据C利用DSP进行相乘,得到相应的输出结果;
步骤4-5:利用步骤4-3中得到的输出结果中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,修正步骤4-4中得到的输出结果,得到最终的计算结果,即
具体的,所述步骤5中的设计空间探索设计步骤如下:
步骤5-1:根据每一层的计算量分配DSP资源;
步骤5-2:根据步骤5-1得到的每一层DSP数量,以及各个层卷积核大小和数据位宽,计算每一层的并行度因子Ki与Ci
步骤5-3:计算每一层所需的BRAM(Block Random-Access Memory,块状随机存储器)数量以及带宽;
步骤5-4:若执行步骤5-3后,所有可使用的BRAM均分配完,但仍无法满足带宽约束,则返回步骤5-1减少可使用的DSP总量。
与现有技术相比,本发明的有益效果为:
1.提出了一种采用填充跳过技术的细粒度流水线架构,减少了流水线的启动时间。同时,设计了一种参数化的卷积层处理单元来支持该架构。
2.提出了一种双乘法器设计方法,在一个DSP中支持同一批输入的两次有符号乘法,从而减少了卷积层的计算时间。
3.引入了设计空间探索算法来平衡流水线并提高了DSP使用效率。
附图说明
图1为神经网络硬件加速器整体架构图
图2为细粒度流水线示意图
图3为卷积层处理单元计算示意图
图4为双乘法器结构图
具体实施方式
为了使本发明实现的措施、创作特征、达成目的与功效易于明白了解,下面结合附图和实施例,进一步阐述本发明。
本发明是一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,使用的硬件平台为Xilinx ZC706开发板,训练与测试选用的数据集为Kitti,输入图片大小为1280×384,具体网络结构如表1所示。
表1 YOLOv2-tiny网络结构
名称 主要参数 输入大小 输出大小
Conv1 卷积层,卷积核(3,3,16) (1280,384,3) (1280,384,16)
BN1 批量归一化层 (1280,384,16) (1280,384,16)
Maxpool1 池化层,池化核(2,2) (1280,384,16) (640,192,16)
Conv2 卷积层,卷积核(3,3,32) (640,192,16) (640,192,32)
BN2 批量归一化层 (640,192,32) (640,192,32)
Maxpool2 池化层,池化核(2,2) (640,192,32) (320,96,32)
Conv3 卷积层,卷积核(3,3,64) (320,96,32) (320,96,64)
BN3 批量归一化层 (320,96,64) (320,96,64)
Maxpool3 池化层,池化核(2,2) (320,96,64) (160,48,64)
Conv4 卷积层,卷积核(3,3,128) (160,48,64) (160,48,128)
BN4 批量归一化层 (160,48,128) (160,48,128)
Maxpool4 池化层,池化核(2,2) (160,48,128) (80,24,128)
Conv5 卷积层,卷积核(3,3,256) (80,24,128) (80,24,256)
BN5 批量归一化层 (80,24,256) (80,24,256)
Maxpool5 池化层,池化核(2,2) (80,24,256) (40,12,256)
Conv6 卷积层,卷积核(3,3,512) (40,12,256) (40,12,512)
BN6 批量归一化层 (40,12,512) (40,12,512)
Conv7 卷积层,卷积核(3,3,512) (40,12,512) (40,12,512)
BN7 批量归一化层 (40,12,512) (40,12,512)
Conv8 卷积层,卷积核(3,3,512) (40,12,512) (40,12,512)
BN8 批量归一化层 (40,12,512) (40,12,512)
Conv9 卷积层,卷积核(1,1,40) (40,12,512) (40,12,40)
Region 检测层 (40,12,40) 若干检测结果
本发明主要包括以下步骤:
步骤1:进行网络量化。对原始网络的权重与中间结果进行8位定点数量化,使量化后的网络与原始网络相比检测精度损失最小;
步骤1-1:确定YOLOv2-tiny中每一层权重的取值范围;
步骤1-2:随机取n批输入图像使用YOLOv2-tiny进行推理,统计各个卷积层的输入与输出结果,得到在n批输入图像推理时的最大取值范围;
步骤1-3:根据步骤1-1中得到的权重范围与步骤1-2中得到的卷积层输入输出范围,得出每一层的权重与各个卷积层输入输出结果的小数点位置;
步骤1-4:使用步骤1-3中得到的小数点位置对YOLOv2-tiny进行重训练,得到量化后的网络权重。量化前后YOLOv2-tiny的准确度如表2所示。
表2 YOLOv2-tiny量化准确度对比
网络名称 全精度准确度 8位量化后准确度
YOLOv2-tiny 77.63% 77.04%
步骤2:进行基于YOLOv2-tiny的目标检测系统整体硬件架构设计;
步骤2-1:设计主机端与FPGA的权重数据通路,利用PCIe总线将YOLOv2-tiny的权重从主机端预加载到DRAM中;
步骤2-2:设计主机端与FPGA的输入数据通路,输入图像通过PCIe总线按列加载到输入缓存中;
步骤2-3:设计计算模块,输入缓存中的数据以细粒度流水线的方式在卷积层处理单元中进行逐层处理。图2是细粒度流水线的示意图,相比于图2-(a)的传统流水线,通过图2-(b)的方式将下一层的特征图提前计算出,而不必等待上一层的特征图全部计算完成,整个网络的细粒度流水线如图2-(c)所示。每一层的卷积层处理单元从该层的列缓存中获取输入数据,从权重缓存中获取权重数据,计算完成后,将输出结果存放在下一层的列缓存中;
步骤2-4:设计主机端与FPGA的输出数据通路,利用PCIe总线将最后一层的检测结果发送到主机端进行后处理,输出最终的检测结果。
步骤3:进行卷积层处理单元设计。使用一种采用填充跳过技术的细粒度流水线架构,以减少流水线的启动时间。同时,设计一种可以参数化的卷积处理单元,从而支持细粒度流水线架构;图3是所述步骤3中的卷积层处理单元的计算示意图,计算顺序如下:
步骤3-1:对于Hi×Wi×Ci大小的输入特征图(其中Hi为输入特征图高度,Wi为输入特征图宽度,Ci为输入特征图通道数),与Kw×Kh×Ci×Co大小的卷积核做卷积计算(其中Kw为卷积核宽度,Kh为卷积核高度,Co为输出通道数),在每一个周期中,卷积层处理单元从列缓存中取出C个输入,从权重缓存中取出K个权重,计算得到K个中间结果。如图3-(a)所示,以3×3×4的输入特征图,2×2×4的卷积核做卷积计算得到2×2×4的输出特征图为例,若C=2,K=2,则每个周期从列缓存中取出2个输入,从权重缓存中取出2个权重。来自不同卷积核中相同位置的2个权重拼接在一起作为一个输入传送给封装好的双乘法器,和1个输入相乘,同时计算得出2个结果,故一个周期内一共所需C×K/2=2个DSP。使用加法树累加2个DSP输出中相同位置上的结果,得到输出特征图上的2个中间结果;
步骤3-2:将步骤3-1循环执行Hi×Wi×Ci/C=8次,得到输出特征图上K=2个最终的计算结果。循环执行顺序为先是通道方向,再是高度方向,最后是宽度方向,具体计算顺序如图3-(b)所示;
步骤3-3:在输入特征图上沿高度方向向下滑动卷积窗口,执行步骤3-2,经过Hi×Wi×Ci/C=8个周期后,计算得到新的K=2个输出结果。此时乒乓缓存中的权重无法继续使用,需要进行权重更新,使用新的K=2组卷积核中权重进行计算;
步骤3-4:当所有的卷积核均计算完毕,在输入特征图上沿宽度方向向右滑动卷积窗口,执行步骤3-3,经过Hi×Wi×Ci/C×Ho×Co/K=32个周期,计算得到输出特征图中一列新的结果。整个Ho×Wo×Co大小的输出特征图中结果全部计算完成(其中Ho为输出特征图高度,Wo为输出特征图宽度),总共经过Hi×Wi×Ci/C×Ho×Wo×Co/K=64个周期。图3-(c)是输出结果生成的具体顺序。
步骤4:进行双乘法器设计。在一个DSP中同时进行相同输入与两个不同权重的乘法计算,减少卷积层的计算时间;图4是所述步骤4中双乘法器的结构图,所使用的DSP型号Xilinx DSP48E1,可以进行25×18位的乘法计算。设计步骤如下:
步骤4-1:将n位输入数据A、B组合成一个3n+1位的数据作为整体输入到双乘法器中,其中高位的n位数据为A,低位的n位数据为B,中间填充n+1位的0;
步骤4-2:利用数据选择器,根据输入数据A、B和权重数据C中B、C是否具有符号位,生成对应的中间结果以及
其中cn-1为C的第n-1位,bn-1为B的第n-1位,为B的n-1位无符号表示,为C的n-1位无符号表示。之后再利用加法器计算出之和;
步骤4-3:将步骤4-2中的计算结果,利用补码器通过移位操作生成补码,得到输出中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,即
步骤4-4:对于双乘法器高位的2n位结果,将n位有符号数输入A、C,在DSP中视为有符号数A和无符号数相乘;对于双乘法器低位的2n位结果,将n位有符号数输入B、C,在DSP中视为无符号数和无符号数相乘。按此方法,将步骤4-1中得到的整体输入数据与权重数据C利用DSP进行相乘,得到相应的输出结果;
步骤4-5:利用步骤4-3中得到的输出结果中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,修正步骤4-4中得到的输出结果,得到最终的计算结果,即
步骤5:进行设计空间探索。分配各层卷积计算所需的硬件资源,平衡各级流水线,实现负载平衡,同时提高DSP使用效率。
步骤5-1:根据每一层的计算量分配DSP资源,具体方法为:
步骤5-1-1:输入每一层的计算量CCi,同时设置可使用的DSP总量DSPtotal
步骤5-1-2:计算第i层所需的DSP数DSPi,即
使得每层计算所需的周期数尽可能相等;
步骤5-1-3:将第i层的DSP数调整为2的指数倍,即
步骤5-1-4:若整个网络所需的DSP数量小于DSP总量,可以选择最大的层,若将其DSP数翻倍后整个网络所需的DSP数量仍小于DSP总量,则将其翻倍。若有多个最大的层,需满足所有层均翻倍后所需的DSP数仍小于DSP总数才可翻倍;
步骤5-1-5:循环执行步骤5-1-4,直到整个网络所需的DSP数量无法继续增加。
步骤5-2:根据步骤5-1得到的每一层DSP数量,以及各个层卷积核大小Kerneli和数据位宽DW,计算每一层的并行度因子Ki与Ci,具体方法为:
步骤5-2-1:计算每一层权重缓存所需的最小BRAM个数
步骤5-2-2:计算步骤5-2-1中的一半容量可容纳的卷积核个数Kernel_counti,即
步骤5-2-3:将步骤5-2-1中得到的Kernel_counti与该层卷积核总数进行比较,若则不需要乒乓缓存,更新Kernel_counti相等;反正,则需要乒乓缓存,Kernel_counti保持不变;
步骤5-2-4:计算每一层的核并行度因子Ki和通道并行度因子Ci,即
步骤5-3:计算每一层所需的BRAM数量以及带宽,具体方法为:
步骤5-3-1:设置整个网络可以使用的最大带宽BRAM数量时钟频率f以及量化位宽DW;
步骤5-3-2:初始化列缓存的列数Coli,列缓存的读宽度读深度以及写宽度
步骤5-3-3:计算单个DSP所需带宽BWR,即
BWR=2×f×DW
步骤5-3-4:初始化每一层所需带宽BWi,即
步骤5-3-5:若整个网络所需的带宽大于可以使用的最大带宽,可以选择BWi最大的层j增加第j层和第j+1层列缓存的读深度,即
若增加列缓存的读深度后整个网络所需的BRAM数小于可以使用的BRAM总数,则将第j层列缓存的列数加1,同时更新第j层所需带宽,即
Colj=Colj+1
若增加列缓存的读深度后整个网络所需的BRAM数大于可以使用的BRAM总数,则保持列缓存列数与所需带宽不变;
步骤5-3-6:循环执行步骤5-3-5,若整个网络所需的带宽小于可以使用的最大带宽,或整个网络所需的BRAM数大于可以使用的BRAM总数时,退出循环操作。
步骤5-4:若执行步骤5-3后,所有可使用的BRAM均已分配,但仍无法满足带宽约束,则需减少可使用的DSP总量DSPtotal,重新执行步骤5-1、5-2和5-3。YOLOv2-tiny在ZC709上的设计空间探索结果如表3所示。
表3 YOLOv2-tiny设计空间探索结果
名称 输入 卷积核 DSP C×K Col 带宽 延时
Conv1 (1280,384,3) (3,3,16) 32 (4,16) 2 266Mb/s 16.58ms
Conv2 (640,192,16) (3,3,32) 64 (4,32) 2 1066Mb/s 22.12ms
Conv3 (320,96,32) (3,3,64) 64 (2,64) 2 2133Mb/s 22.12ms
Conv4 (160,48,64) (3,3,128) 64 (4,32) 2 4266Mb/s 22.12ms
Conv5 (80,24,128) (3,3,256) 64 (8,16) 2 8533Mb/s 22.12ms
Conv6 (40,12,256) (3,3,512) 64 (16,8) 2 17066Mb/s 22.12ms
Conv7 (40,12,512) (3,3,512) 128 (32,8) 3 17066Mb/s 22.12ms
Conv8 (40,12,512) (3,3,512) 128 (32,8) 2 34133Mb/s 22.12ms
Conv9 (40,12,512) (1,1,40) 2 (2,2) 2 457Mb/s 15.05ms
总计 610 84986Mb/s 22.12ms
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (6)

1.一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特在于,包括以下步骤:
步骤1:网络量化:对原始网络的权重与中间结果进行定点数量化;
步骤2:基于YOLOv2-tiny的目标检测系统的整体硬件架构设计;
步骤3:卷积层处理单元设计:采用填充跳过技术设计可以参数化的卷积处理单元,从而支持细粒度流水线架构;
步骤4:双乘法器设计:在一个DSP中同时计算相同输入与两个不同权重的乘法计算;
步骤5:空间探索设计:分配各层卷积计算所需的硬件资源,平衡各级流水线。
2.根据权利要求1所述的一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特征在于,所述步骤1中网络量化,具体步骤如下:
步骤1-1:确定YOLOv2-tiny中每一层权重的取值范围;
步骤1-2:随机取n批输入图像使用YOLOv2-tiny进行推理,统计各个卷积层的输入与输出结果,得到在n批输入图像推理时的最大取值范围;
步骤1-3:通过步骤1-1中得到的权重范围与步骤1-2中得到的卷积层输入输出范围,得出每一层的权重与各个卷积层输入输出结果的小数点位置;
步骤1-4:使用步骤1-3中得到的小数点位置对YOLOv2-tiny进行重训练,得到量化后的网络权重。
3.根据权利要求1所述的一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特征在于,所述步骤2中整体硬件架构设计步骤为:
步骤2-1:设计主机端与FPGA的权重数据通路,利用PCIe总线将YOLOv2-tiny的权重从主机端预加载到DRAM中;
步骤2-2:设计主机端与FPGA的输入数据通路,输入图像通过PCIe总线按列加载到输入缓存中;
步骤2-3:设计计算模块,输入缓存中的数据以细粒度流水线的方式由卷积层处理单元进行逐层处理,每一层的卷积层处理单元从该层的列缓存中获取输入数据,从权重缓存中获取权重数据,计算完成后,将输出结果存放在下一层的列缓存中;
步骤2-4:设计主机端与FPGA的输出数据通路,利用PCIe总线将最后一层的检
测结果发送到主机端进行后处理,输出最终的检测结果。
4.根据权利要求3中所述的一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特征在于,所述步骤3中卷积层处理单元计算顺序为:
步骤3-1:将输入特征图Hi×Wi×Ci与卷积核Kw×Kh×Ci×Co做卷积计算,其中,Hi为输入特征图高度,Wi为输入特征图宽度,Ci为输入特征图通道数,在每一个周期中,卷积层处理单元从列缓存中取出C个输入,从权重缓存中取出K个权重,计算得到K个中间结果;
步骤3-2:将步骤3-1循环执行Hi×Wi×Ci/C次,得到输出特征图上K个最终的计算结果;
步骤3-3:在输入特征图上沿高度方向向下滑动卷积窗口,执行步骤3-2,经过Hi×Wi×Ci/C个周期后,计算得到新的K个输出结果,此时乒乓缓存中的权重若无法继续使用,则需要进行权重更新,使用新的K组卷积核中权重进行计算,否则,继续复用乒乓缓存中当前的权重;
步骤3-4:当所有的卷积核计算完毕,在输入特征图上沿宽度方向向右滑动卷积窗口,执行步骤3-3,经过Hi×Wi×Ci/C×Ho×Co/K个周期后,计算得到输出特征图中一列新的结果,整个Ho×Wo×Co大小的输出特征图中结果全部计算完成,总共经过Hi×Wi×Ci/C×Ho×Wo×Co/K个周期。
5.根据权利要求4中所述的一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特征在于,所述步骤4中双乘法器设计步骤为:
步骤4-1:将n位输入数据A、B组合成一个3n+1位的数据作为整体输入到双乘法器中,其中,高位的n位数据为A,低位的n位数据为B,中间填充n+1位的0;
步骤4-2:利用数据选择器,根据输入数据A、B和权重数据C中B、C是否具有符号位,生成对应的中间结果以及
其中cn-1为C的第n-1位,bn-1为B的第n-1位,为B的n-1位无符号表示,为C的n-1位无符号表示;再利用加法器计算出之和;
步骤4-3:将步骤4-2中的计算结果,利用补码器通过移位操作生成补码,得到输出中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,即
步骤4-4:对于双乘法器高位的2n位结果,将n位有符号数输入A、C,在DSP中视为有符号数A和无符号数相乘;对于双乘法器低位的2n位结果,将n位有符号数输入B、C,在DSP中视为无符号数和无符号数相乘;按此方法,将步骤4-1中得到的整体输入数据与权重数据C利用DSP进行相乘,得到相应的输出结果;
步骤4-5:利用步骤4-3中得到的输出结果中高位的2n位结果的计算误差ΔH,以及低位的2n位结果的计算误差ΔL,修正步骤4-4中得到的输出结果,得到最终的计算结果,即
6.根据权利要求5中所述的一种基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法,其特征在于,所述步骤5中设计空间探索设计步骤为:
步骤5-1:根据每一层的计算量分配DSP资源;
步骤5-2:根据步骤5-1得到的每一层DSP数量,以及各个层卷积核大小和数据位宽,计算每一层的并行度因子Ki与Ci
步骤5-3:计算每一层所需的BRAM数量以及带宽;
步骤5-4:若执行步骤5-3后,所有可使用的BRAM均分配完,但仍无法满足带宽约束,则返回步骤5-1减少可使用的DSP总量。
CN201910796486.7A 2019-08-27 2019-08-27 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法 Active CN110555516B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910796486.7A CN110555516B (zh) 2019-08-27 2019-08-27 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910796486.7A CN110555516B (zh) 2019-08-27 2019-08-27 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法

Publications (2)

Publication Number Publication Date
CN110555516A true CN110555516A (zh) 2019-12-10
CN110555516B CN110555516B (zh) 2023-10-27

Family

ID=68736833

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910796486.7A Active CN110555516B (zh) 2019-08-27 2019-08-27 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法

Country Status (1)

Country Link
CN (1) CN110555516B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111459877A (zh) * 2020-04-02 2020-07-28 北京工商大学 基于FPGA加速的Winograd YOLOv2目标检测模型方法
CN111738423A (zh) * 2020-06-28 2020-10-02 湖南国科微电子股份有限公司 神经网络模型的编译方法、装置、存储介质及电子设备
CN111931921A (zh) * 2020-10-13 2020-11-13 南京风兴科技有限公司 一种用于稀疏神经网络的乒乓存储方法及装置
CN112801285A (zh) * 2021-02-04 2021-05-14 南京微毫科技有限公司 一种基于fpga的高资源利用率cnn加速器及其加速方法
WO2021121274A1 (zh) * 2019-12-17 2021-06-24 深圳鲲云信息科技有限公司 一种神经网络加速电路和方法
WO2021184143A1 (zh) * 2020-03-16 2021-09-23 华为技术有限公司 一种数据处理装置以及数据处理方法
CN113568597A (zh) * 2021-07-15 2021-10-29 上海交通大学 面向卷积神经网络的dsp紧缩字乘法方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108806243A (zh) * 2018-04-24 2018-11-13 东南大学 一种基于Zynq-7000的交通流量信息采集终端
CN109214504A (zh) * 2018-08-24 2019-01-15 北京邮电大学深圳研究院 一种基于fpga的yolo网络前向推理加速器设计方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108806243A (zh) * 2018-04-24 2018-11-13 东南大学 一种基于Zynq-7000的交通流量信息采集终端
CN109214504A (zh) * 2018-08-24 2019-01-15 北京邮电大学深圳研究院 一种基于fpga的yolo网络前向推理加速器设计方法

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
DUY THANH NGUYEN: "A High-Throughput and Power-Efficient FPGA Implementation of YOLO CNN for Object Detection", 《IEEE TRANSACTIONS ON VERY LARGE SCALE INTEGRATION (VLSI) SYSTEMS》 *
SUGIL LEE等: "Double MAC on a DSP: Boosting the Performanceof Convolutional Neural Networks on FPGAs", 《IEEE TRANSACTIONS ON COMPUTER-AIDED DESIGN OF INTEGRATED CIRCUITS AND SYSTEMS》 *
卢冶等: "面向边缘计算的嵌入式FPGA卷积神经网络构建方法", 《计算机研究与发展》 *
王开宇等: "卷积神经网络的FPGA实现及优化", 《实验室科学》 *
肖皓等: "面向卷积神经网络的FPGA硬件加速器设计", 《工业控制计算机》 *
陆维娜等: "面向卷积神经网络加速器吞吐量优化的FPGA自动化设计方法", 《计算机辅助设计与图形学学报》 *
陈辰: "基于Zynq7000 FPGA异构平台的YOLOv2加速器设计与实现", 《计算机科学与探索》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021121274A1 (zh) * 2019-12-17 2021-06-24 深圳鲲云信息科技有限公司 一种神经网络加速电路和方法
WO2021184143A1 (zh) * 2020-03-16 2021-09-23 华为技术有限公司 一种数据处理装置以及数据处理方法
CN111459877A (zh) * 2020-04-02 2020-07-28 北京工商大学 基于FPGA加速的Winograd YOLOv2目标检测模型方法
CN111459877B (zh) * 2020-04-02 2023-03-24 北京工商大学 基于FPGA加速的Winograd YOLOv2目标检测模型方法
CN111738423A (zh) * 2020-06-28 2020-10-02 湖南国科微电子股份有限公司 神经网络模型的编译方法、装置、存储介质及电子设备
WO2022001014A1 (zh) * 2020-06-28 2022-01-06 湖南国科微电子股份有限公司 神经网络模型的编译方法、装置、存储介质及电子设备
CN111931921A (zh) * 2020-10-13 2020-11-13 南京风兴科技有限公司 一种用于稀疏神经网络的乒乓存储方法及装置
CN111931921B (zh) * 2020-10-13 2021-01-26 南京风兴科技有限公司 一种用于稀疏神经网络的乒乓存储方法及装置
CN112801285A (zh) * 2021-02-04 2021-05-14 南京微毫科技有限公司 一种基于fpga的高资源利用率cnn加速器及其加速方法
CN112801285B (zh) * 2021-02-04 2024-01-26 南京微毫科技有限公司 一种基于fpga的高资源利用率cnn加速器及其加速方法
CN113568597A (zh) * 2021-07-15 2021-10-29 上海交通大学 面向卷积神经网络的dsp紧缩字乘法方法及系统

Also Published As

Publication number Publication date
CN110555516B (zh) 2023-10-27

Similar Documents

Publication Publication Date Title
CN110555516B (zh) 基于FPGA的YOLOv2-tiny神经网络低延时硬件加速器实现方法
US10726336B2 (en) Apparatus and method for compression coding for artificial neural network
EP3499428A1 (en) Method and electronic device for convolution calculation in neutral network
CN109543830B (zh) 一种用于卷积神经网络加速器的拆分累加器
CN107451659B (zh) 用于位宽分区的神经网络加速器及其实现方法
US10698657B2 (en) Hardware accelerator for compressed RNN on FPGA
TWI684141B (zh) 人工神經元中以非零封包加速乘法運算的裝置及方法
EP3499427A1 (en) Method and electronic device for convolution calculation in neutral network
CN107340993B (zh) 运算装置和方法
CN108229671B (zh) 一种降低加速器外部数据存储带宽需求的系统和方法
CN111062472B (zh) 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法
CN106846235B (zh) 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统
CN112668708B (zh) 一种提高数据利用率的卷积运算装置
CN110109646B (zh) 数据处理方法、装置和乘加器及存储介质
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
Jiang et al. A low-latency LSTM accelerator using balanced sparsity based on FPGA
Wong et al. Low bitwidth CNN accelerator on FPGA using Winograd and block floating point arithmetic
CN116090518A (zh) 基于脉动运算阵列的特征图处理方法、装置以及存储介质
US20230047364A1 (en) Partial sum management and reconfigurable systolic flow architectures for in-memory computation
CN115222028A (zh) 基于fpga的一维cnn-lstm加速平台及实现方法
CN111008697B (zh) 一种卷积神经网络加速器实现架构
CN111582444A (zh) 一种矩阵数据的处理、装置、电子设备及存储介质
US20240095493A1 (en) Desparsified convolution for sparse tensors
Sudrajat et al. GEMM-Based Quantized Neural Network FPGA Accelerator Design
CN115391727B (zh) 一种神经网络模型的计算方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20220929

Address after: Room 00036, 1st Floor, Building F5, Phase II, Innovation Industrial Park, No. 2800, Innovation Avenue, High tech Zone, Hefei, Anhui, 230088

Applicant after: Hefei Huixi Intelligent Technology Co.,Ltd.

Address before: No. 803, Unit 2, Building 3, Nanlihan Lanting, Jingshu District, Beijing 100083

Applicant before: Xu Ningyi

Applicant before: He Guanghui

Effective date of registration: 20220929

Address after: No. 803, Unit 2, Building 3, Nanlihan Lanting, Jingshu District, Beijing 100083

Applicant after: Xu Ningyi

Applicant after: He Guanghui

Address before: 200240 No. 800, Dongchuan Road, Shanghai, Minhang District

Applicant before: SHANGHAI JIAO TONG University

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231127

Address after: Room 202, No. 6, Lane 388, Urban Road, Minhang District, Shanghai, 201109

Patentee after: He Guanghui

Patentee after: Xu Ningyi

Address before: Room 00036, 1st Floor, Building F5, Phase II, Innovation Industrial Park, No. 2800, Innovation Avenue, High tech Zone, Hefei, Anhui, 230088

Patentee before: Hefei Huixi Intelligent Technology Co.,Ltd.