CN110175670A - 一种基于FPGA实现YOLOv2检测网络的方法及*** - Google Patents
一种基于FPGA实现YOLOv2检测网络的方法及*** Download PDFInfo
- Publication number
- CN110175670A CN110175670A CN201910280748.4A CN201910280748A CN110175670A CN 110175670 A CN110175670 A CN 110175670A CN 201910280748 A CN201910280748 A CN 201910280748A CN 110175670 A CN110175670 A CN 110175670A
- Authority
- CN
- China
- Prior art keywords
- module
- block
- result
- buffer
- network
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
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)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
- Image Input (AREA)
Abstract
本发明公开了一种基于FPGA实现YOLOv2检测网络的方法及***,属于智能硬件领域。本发明对检测网络每一层的输入特征图和权重参数进行分块处理,根据FPGA的计算资源和片上存储的大小来选择分块大小。通过分批读取参数并进行计算,将中间结果缓存在片上存储上,等该层的最终结果计算完之后,将其写回到DRAM中,解决片上资源和内存带宽限制不能对整层进行计算的缺陷。针对FPGA片上内存不足以存储模型参数,本发明使用了双缓冲机制并且在不同的层之间引入了流水线操作,减少每次从DRAM读取模型参数带来的时延,在大大节省所需的缓存空间的同时也可以提高算法的前向推断速度,实现输入数据流的无缝缓冲以及处理,最大程度上利用内存空间的同时充分利用率逻辑资源。
Description
技术领域
本发明属于智能硬件领域,更具体地,涉及一种基于FPGA实现YOLOv2检测网络的方法及***。
背景技术
目标检测算法是计算机视觉中的基石问题之一,可广泛地应用于场景理解、自动驾驶、可穿戴设备等场景中。所谓目标检测,是指对图像中每个目标进行定位以及分类。随着深度学习时代的到来,基于卷积神经网络的目标检测算法得到长足的发展,然而算法的产品化落地问题还亟待解决。YOLOv2检测网络作为一个性能优良且能达到实时性要求的目标检测算法,具有结构简单,网络层数相对较少的优点,是将目标检测算法进行产业化落地的一个很好的选择。
目前,基于深度学***台方案。
目前基于深度学***台上的时候,国内外的研究人员主要着眼于如何在FPGA上高速运行卷积神经网络。YOLOv2检测网络每一层都有大量的参数,涉及大量的运算,FPGA的片上存储空间不足以缓存整层的所有参数,同时,有限的逻辑资源也不足以支撑整层的所有运算。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有技术将YOLOv2移植到FPGA上面临FPGA的片上存储空间不足以缓存整层的所有参数,同时有限的逻辑资源也不足以支撑整层的所有运算技术问题。
为实现上述目的,第一方面,本发明实施例提供了一种基于FPGA实现YOLOv2检测网络的方法,所述方法包括以下步骤:
S1.按照CBL网络块、CBLM网络块、CL网络块和M网络块四种网络和两种操作,将YOLOv2检测网络分为23层和2个操作,其中,CBL网络块由二维卷积层、BN层和激活函数Leaky ReLU串联组成;CBLM网络块由1个CBL网络块和1个最大值池化层串联组成;CL网络块由二维卷积层和线性激活函数串联组成;M网络模块为单独1个最大值池化层;第一操作为Reorg,第二操作为Concat;并按照以下方式构建处理单元:1个BN模块、Leaky ReLU模块和最大值池化模块进行串联,串联结构与1个Reorg模块并联,并联结构前面串联N_CI个卷积核大小为K*K二维卷积模块;
S2.将原始输入图像分为多个大小为Tci*Tr*Tc的第一层输入图像块,将除M网络块以外的每一层的权重参数分为多个大小为Tc0*Tci*K*K的权重块,将所有图像块和权重块存放在外部存储器;
S3.从外部存储器中依次加载当前层输入图像块和相应的权重块到输入缓冲模块,将图像块和权重块从输入缓冲模块加载到m个相互独立的处理单元;
S4.所有处理单元同时进行运算,在每个二维卷积模块中,得到的卷积结果和存放在输出缓冲模块中的中间结果进行相加得到累加结果,如果累加结果仍为中间结果,控制BN模块、Leaky ReLU模块和最大值池化模块使能无效,并将此次累加结果存放到输出缓冲模块中;如果累加结果为最终结果,再判断是否需要进行Reorg操作,若是,控制BN模块、Leaky ReLU模块、最大值池化模块和Reorg模块使能有效,将两路运算结果分别存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中,使得经过Reorg模块的输出结果在外部存储器的写回位置紧接着21层的输出结果在外部存储器的写回位置;否则,控制BN模块、Leaky ReLU模块和最大值池化模块使能有效,将运算结果存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中;
S5.将写回到外部存储器的最终结果作为下一层的输入图像块;
S6.重复步骤S3~S5,直至23层全部计算完。
具体地,二维卷积模块由滑动窗与矩阵的点乘来实现;最大值池化模块由滑动窗以及比较器实现;Leaky ReLU模块由定点数乘法器实现;根据输入数据与输出数据的相关位置,利用单口RAM实现Reorg操作。
具体地,根据FPGA的计算资源和片上存储的大小来选择分块大小。
具体地,所述输入缓冲模块以及输出缓冲模块都使用了双缓冲机制,当一个缓冲块从DRAM中读取参数的时候,另一个缓冲块将数据传入到计算单元进行处理。
具体地,在输入缓冲模块中,当其中一块缓冲器将数据输送到计算模块进行计算的时候,另一块缓冲器经DMA从外部存储器中搬运数据,如此交替使用;在输出缓冲模块中,当其中一块缓冲器存储中间的运算结果,另一块存储最终的运算结果的缓冲器经DMA将运算结果写回到外部存储器中,如此交替使用;每一个缓冲模块含有两片缓冲块,其中一片输入缓冲块的大小Tci*Tco*K*K+4*Tco+Tci*Tr*Tc,一片输出缓冲块的大小为Tco*Tr*Tc。
具体地,所述方法还包括:在步骤S6之后,将最终的输出结果进行非极大值抑制,得到每个目标的最佳预测框。
第二方面,本发明实施例提供了一种基于FPGA实现YOLOv2检测网络的***,所述***采用如上述第一方面所述的基于FPGA实现YOLOv2检测网络的方法。
第三方面,本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面所述的基于FPGA实现YOLOv2检测网络的方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
1.本发明对YOLOv2检测网络每一层的输入特征图和权重参数进行分块处理,根据FPGA的计算资源和片上存储的大小来选择分块大小。通过分批读取参数并进行计算,将中间结果缓存在片上存储上,等该层的最终结果计算完之后,将其写回到DRAM中,从而解决片上资源和内存带宽限制,并不能对整层进行计算的缺陷。
2.针对FPGA片上内存不足以存储算法模型参数,本发明使用了双缓冲机制并且在不同的层之间引入了流水线操作,当一个缓冲块从DRAM中读取参数的时候,另一个缓冲块将数据传入到计算单元进行处理,减少每次从DRAM读取模型参数带来的时延,在大大节省所需的缓存空间的同时也可以提高算法的前向推断速度,实现输入数据流的无缝缓冲以及处理,最大程度上利用内存空间的同时充分利用率逻辑资源。
附图说明
图1为本发明实施例提供的一种基于FPGA实现YOLOv2检测网络的方法流程图;
图2为本发明实施例提供的YOLO v2网络层分层结构示意图;
图3为本发明实施例提供的处理单元结构示意图;
图4为本发明实施例提供的二维卷积模块实现过程示意图;
图5为本发明实施例提供的一种基于FPGA实现YOLOv2检测网络的***结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明提出一种基于FPGA实现YOLOv2检测网络的方法,所述方法包括以下步骤:
S1.按照CBL网络块、CBLM网络块、CL网络块和M网络块四种网络和两种操作,将YOLOv2检测网络分为23层和2个操作,其中,CBL网络块由二维卷积层、BN层和激活函数Leaky ReLU串联组成;CBLM网络块由1个CBL网络块和1个最大值池化层串联组成;CL网络块由二维卷积层和线性激活函数串联组成;M网络模块为单独1个最大值池化层;第一操作为Reorg,第二操作为Concat;并按照以下方式构建处理单元:1个BN模块、Leaky ReLU模块和最大值池化模块进行串联,串联结构与1个Reorg模块并联,并联结构前面串联N_CI个卷积核大小为K*K二维卷积模块;
S2.将原始输入图像分为多个大小为Tci*Tr*Tc的第一层输入图像块,将除M网络块以外的每一层的权重参数分为多个大小为Tc0*Tci*K*K的权重块,将所有图像块和权重块存放在外部存储器;
S3.从外部存储器中依次加载当前层输入图像块和相应的权重块到输入缓冲模块,将图像块和权重块从输入缓冲模块加载到m个相互独立的处理单元;
S4.所有处理单元同时进行运算,在每个二维卷积模块中,得到的卷积结果和存放在输出缓冲模块中的中间结果进行相加得到累加结果,如果累加结果仍为中间结果,控制BN模块、Leaky ReLU模块和最大值池化模块使能无效,并将此次累加结果存放到输出缓冲模块中;如果累加结果为最终结果,再判断是否需要进行Reorg操作,若是,控制BN模块、Leaky ReLU模块、最大值池化模块和Reorg模块使能有效,将两路运算结果分别存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中,使得经过Reorg模块的输出结果在外部存储器的写回位置紧接着21层的输出结果在外部存储器的写回位置;否则,控制BN模块、Leaky ReLU模块和最大值池化模块使能有效,将运算结果存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中;
S5.将写回到外部存储器的最终结果作为下一层的输入图像块;
S6.重复步骤S3~S5,直至23层全部计算完。
步骤S1.按照CBL网络块、CBLM网络块、CL网络块和M网络块四种网络和两种操作,将YOLOv2检测网络分为23层和2个操作,其中,CBL网络块由二维卷积层、BN层和激活函数Leaky ReLU串联组成;CBLM网络块由1个CBL网络块和1个最大值池化层串联组成;CL网络块由二维卷积层和线性激活函数串联组成;M网络模块为单独1个最大值池化层;第一操作为Reorg,第二操作为Concat;并按照以下方式构建处理单元:1个BN模块、Leaky ReLU模块和最大值池化模块进行串联,串联结构与1个Reorg模块并联,并联结构前面串联N_CI个卷积核大小为K*K二维卷积模块。
卷积神经网络主要由卷积层、BN层、池化层和激活函数组成,卷积层具有计算密集、权重共享等特点,计算密集是指卷积神经网络的计算量基本都在于卷积层中,权重共享即是输入的特征图(Feature Map)不同位置共享卷积核的权重。卷积层的输入数据维度是三维的,卷积参数维度是四维的,输出数据是三维的,它核心模块是二维卷积。
如图2所示,为了在卷积层、BN层、激活函数和池化层之间引入流水线,本发明将YOLO v2网络层类型划分成四种,第一种是卷积层、BN层和激活函数Leaky ReLU的组合(简称CBL),第二种是卷积层、BN层、激活函数Leaky ReLU和Max pooling(简称CBLM),第三种是卷积层和线性激活函数的组合(简称CL),这三种网络层的计算量都位于卷积层中。第四种是单独一个最大值池化层(简称M)。对YOLO v2按上述网络层类型进行划分之后,YOLO v2的网络层数为23。此外还要划分两种操作类型:特征图的重新排列(Reorg)和特征图的堆叠(Concat)。
YOLOv2检测网络的计算量都位于卷积层。卷积层的计算过程,存在四种独立性:同一个二维卷积核中每个权重是相互独立的、不同输入通道的二维卷积是相互独立的、同一个Feature Map中不同的卷积窗口是相互独立的和不同输出通道的二维卷积是相互独立的。由这四种独立性可以得到卷积过程中四种并行性。
池化层的并行性与卷积层的并行性非常类似,可以从输入通道、池化窗口内部和同一特征图不同池化窗口中引入并行度。在池化层的池化窗口内部并行度为4,在同一张特征图上不同池化窗口的并行度为M,在输入通道上引入的并行度为N,因此总的并行度为4×M×N。
为了在输入通道上引入并行度,每个处理单元由多个二维卷积器组成。为了增大设计的处理速度,在得到最终的卷积结果时会对激活函数模块和最大值池化模块进行流水线操作。如图3所示,处理单元包括N_CI个二维卷积模块、1个BN模块、Leaky ReLU模块、最大值池化模块和Reorg模块。1个BN模块、Leaky ReLU模块和最大值池化模块进行串联,串联结构与1个Reorg模块并联,并联结构前面串联N_CI个二维卷积模块,得到处理单元。N_CI优选为4。
卷积层conv直接利用FIFO(先进先出)和移位寄存器来产生滑动窗电路,并由滑动窗电路与矩阵点乘电路来实现,池化层max pooling直接利用FIFO(先进先出)和移位寄存器来产生滑动窗电路,并由滑动窗电路与比较器实现,激活函数只需要定点数乘法器即可实现,在Reorg层的实现中,根据输入特征图每个像素点与输出特征图每个像素点的相关位置关系,利用单口RAM即可实现。
假设二维卷积核大小为K×K,输入图像大小为W×H,可以利用K个深度大于W的FIFO以及移位寄存器来实现滑动窗。本发明中K包括两种取值,分别为3和1。为以卷积核大小为3×3,输入图像大小为5×5的二维卷积结构为例,如图4所示,此时,使用3个深度大于5的FIFO和3×3个移位寄存器来实现大小为3×3的滑动窗。
最大值池化主要分为池化窗口的生成与像素值的比较。池化层主要是由滑动窗以及比较器实现。池化窗口的生成可以参考上一小节卷积窗口的生成。而池化窗口中的最大值可以通过比较电路获得。池化核大小为2*2。
YOLO v2检测网络使用的激活函数为Leaky ReLU,它的数学表达式如下式所示:
系数为0.1,因此在结果的位宽进行截断时只需考虑非饱和情况。激活函数只需要定点数乘法器即可实现。
Reorg层用于根据输入与输出的位置之间的关系,对输入的特征图进行重新分布排列。Reorg层可以将一个输入通道扩张成四个输出通道,同时,输出的特征图的尺寸大小为输入1/4。在FPGA上实现Reorg层,可以先求取输出的特征图每个像素点与输入的特征图每个像素点位置的相关关系,两者的位置关系如下式所示:
col=(count-1)%W
inindex=col+W*(row+H*Ci)
其中,count为输入像素点的个数,Ci为当前通道,W和H分别为输入特征图的宽与高,(row,col)为像素点在输入特征图中的具***置,Fin为像素输入流,Fout为像素输出流。有了上述关系,利用一个单口RAM即可实现Reorg层。在具体实现的过程中,可以利用一个计数器对输入数据的个数进行计数,通过计数结果还原出输入数据位于哪个通道数Ci以及在输入特征图的具***置(row,col),因为输入特征图的宽W与高H均已知,因此根据上述公式就可以计算出当前输入数据在RAM中对应的地址。
步骤S2.将原始输入图像分为多个大小为Tci*Tr*Tc的第一层输入图像块,将除M网络块以外的每一层的权重参数分为多个大小为Tc0*Tci*K*K的权重块,将所有图像块和权重块存放在外部存储器。
由于片上计算资源以及存储空间都有限,因此在FPGA上部署YOLOv2检测网络需要对其每一层进行划分,将卷积层、BN层、Leaky ReLU和池化层当作一层,因此在得到卷积层的结果之后便可以执行BN、Leaky ReLU和最大值池化等操作,实现一个流水线操作。所以对每一层划分也即是对卷积层进行划分。再对每一层的输入特征图和权重参数进行分块。根据FPGA的计算资源和片上存储的大小来选择分块大小。步骤S1~S2是为了在FPGA上实现YOLOv2网络的输入数据的准备。
在FPGA上实现一个卷积层,本发明将原先输入维度为CH_IN×Rin×Cin、四维卷积核维度为CH_OUT×CH_IN×K×K、输出维度为CH_OUT×R×C的三维卷积划分成多个输入维度为Tci×TRin×TCin、四维卷积核维度为Tco×Tci×K×K、输出维度为Tco×Tr×Tc三维卷积,其中Rin×Cin为输入特征图的尺寸大小,R×C为输出特征图的尺寸大小,两者的关系可参考公式。划分得到的三维卷积包含Tco×Tci个二维卷积。
步骤S3.从外部存储器中依次加载当前层输入图像块和相应的权重块到输入缓冲模块,将图像块和权重块从输入缓冲模块加载到m个相互独立的处理单元。
在每一层中运算过程中,因为片上资源和内存带宽限制,并不能对整层进行计算,只能分批读取参数并进行计算。根据像素坐标由控制器从外部存储器加载像素值,并根据当前输入通道和输出通道由控制器从外部存储器加载对应的参数。本发明实施例优选m=16。为了在输出通道上引入并行度,本发明采用了多个处理单元同时计算不同输出通道的二维卷积。
步骤S4.所有处理单元同时进行运算,在每个二维卷积模块中,得到的卷积结果和存放在输出缓冲模块中的中间结果进行相加得到累加结果,如果累加结果仍为中间结果,控制BN模块、Leaky ReLU模块和最大值池化模块使能无效,并将此次累加结果存放到输出缓冲模块中;如果累加结果为最终结果,再判断是否需要进行Reorg操作,若是,控制BN模块、Leaky ReLU模块、最大值池化模块和Reorg模块使能有效,将两路运算结果分别存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中,使得经过Reorg模块的输出结果在外部存储器的写回位置紧接着21层的输出结果在外部存储器的写回位置;否则,控制BN模块、Leaky ReLU模块和最大值池化模块使能有效,将运算结果存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中。
将中间结果缓存在片上存储上,等该层的最终结果计算完之后,将其写回到DRAM中。为了减少每次从DRAM读取模型参数带来的时延,实现输入数据流的无缝缓冲以及处理,本发明使用了双缓存块机制,当一个缓冲块从DRAM中读取参数的时候,另一个缓冲块将数据传入到计算单元进行处理。
对是否需要进行Reorg操作的判断,是为了实现Concat操作。
输入缓冲模块以及输出缓冲模块都使用了双缓冲机制,也即是乒乓操作。在输入缓冲模块中,当其中一块缓冲器将数据输送到计算模块进行计算的时候,另一块缓冲器经DMA从外部存储器中搬运数据,如此交替使用;在输出缓冲模块中,当其中一块缓冲器存储中间的运算结果,另一块存储最终的运算结果的缓冲器经DMA将运算结果写回到外部存储器中,如此交替使用。使用双缓冲模块可以实现数据的无缝缓冲以及处理。每一个缓冲模块含有两片缓冲块,其中一片输入缓冲块的大小Tci*Tco*K*K+4*Tco+Tci*Tr*Tc,一片输出缓冲块的大小为Tco*Tr*Tc。
步骤S5.将写回到外部存储器的最终结果作为下一层的输入图像块。
当前层的输出图像块是下一层的输入图像块。
步骤S6.重复步骤S3~S5,直至23层全部计算完。
FPGA平台不能同时支撑YOLOv2检测网络全部运算,因此只能逐层计算。将最终的输出结果进行非极大值抑制,得到每个目标的最佳预测框。
如图5所示,一种基于FPGA实现YOLOv2检测网络的***,所述***包括:处理***PS以及可编程逻辑PL;
处理***PS包含中央处理单元和外部存储器,中央处理单元负责调度YOLOv2检测网络前向推断的过程以及配置DMA,并且对经过YOLOv2检测网络最后的运算结果进行非极大值抑制得到图像中每个目标的类别以及其对应的位置;外部存储器负责存放YOLOv2检测网络的模型参数以及图像数据;
可编程逻辑PL由DMA模块(Direct Memory Access,直接内存访问)、控制器、输入缓冲模块、输出缓冲模块、解码模块以及计算模块六部分组成。
DMA模块是在PS端和PL端的片上缓冲器之间进行数据以及指令的传输。
控制器从外部存储器中获取指令并调度输入缓冲模块、输出缓冲模块、解码模块以及计算模块。具体地,控制器从外部存储器中依次加载当前层输入图像块和相应的权重块到输入缓冲模块,将图像块和权重块从输入缓冲模块加载到m个相互独立的处理单元;所有处理单元同时进行运算,在每个二维卷积模块中,得到的卷积结果和存放在输出缓冲模块中的中间结果进行相加得到累加结果,如果累加结果仍为中间结果,控制BN模块、LeakyReLU模块和最大值池化模块使能无效,并将此次累加结果存放到输出缓冲模块中;如果累加结果为最终结果,再判断是否需要进行Reorg操作,若是,控制BN模块、Leaky ReLU模块、最大值池化模块和Reorg模块使能有效,将两路运算结果分别存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中,使得经过Reorg模块的输出结果在外部存储器的写回位置紧接着21层的输出结果在外部存储器的写回位置;否则,控制BN模块、LeakyReLU模块和最大值池化模块使能有效,将运算结果存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中;将写回到外部存储器的最终结果作为下一层的输入图像块。
计算模块负责YOLOv2检测网络前向推断的计算,包括卷积层、BN层、Leaky ReLU以及最大值池化的计算。
以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (8)
1.一种基于FPGA实现YOLOv2检测网络的方法,其特征在于,所述方法包括以下步骤:
S1.按照CBL网络块、CBLM网络块、CL网络块和M网络块四种网络和两种操作,将YOLOv2检测网络分为23层和2个操作,其中,CBL网络块由二维卷积层、BN层和激活函数Leaky ReLU串联组成;CBLM网络块由1个CBL网络块和1个最大值池化层串联组成;CL网络块由二维卷积层和线性激活函数串联组成;M网络模块为单独1个最大值池化层;第一操作为Reorg,第二操作为Concat;并按照以下方式构建处理单元:1个BN模块、Leaky ReLU模块和最大值池化模块进行串联,串联结构与1个Reorg模块并联,并联结构前面串联N_CI个卷积核大小为K*K二维卷积模块;
S2.将原始输入图像分为多个大小为Tci*Tr*Tc的第一层输入图像块,将除M网络块以外的每一层的权重参数分为多个大小为Tc0*Tci*K*K的权重块,将所有图像块和权重块存放在外部存储器;
S3.从外部存储器中依次加载当前层输入图像块和相应的权重块到输入缓冲模块,将图像块和权重块从输入缓冲模块加载到m个相互独立的处理单元;
S4.所有处理单元同时进行运算,在每个二维卷积模块中,得到的卷积结果和存放在输出缓冲模块中的中间结果进行相加得到累加结果,如果累加结果仍为中间结果,控制BN模块、Leaky ReLU模块和最大值池化模块使能无效,并将此次累加结果存放到输出缓冲模块中;如果累加结果为最终结果,再判断是否需要进行Reorg操作,若是,控制BN模块、LeakyReLU模块、最大值池化模块和Reorg模块使能有效,将两路运算结果分别存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中,使得经过Reorg模块的输出结果在外部存储器的写回位置紧接着21层的输出结果在外部存储器的写回位置;否则,控制BN模块、Leaky ReLU模块和最大值池化模块使能有效,将运算结果存放到输出缓冲模块中,最后将输出缓冲模块的数据写回到外部存储器中;
S5.将写回到外部存储器的最终结果作为下一层的输入图像块;
S6.重复步骤S3~S5,直至23层全部计算完。
2.如权利要求1所述的方法,其特征在于,二维卷积模块由滑动窗与矩阵的点乘来实现;最大值池化模块由滑动窗以及比较器实现;Leaky ReLU模块由定点数乘法器实现;根据输入数据与输出数据的相关位置,利用单口RAM实现Reorg操作。
3.如权利要求1所述的方法,其特征在于,根据FPGA的计算资源和片上存储的大小来选择分块大小。
4.如权利要求1所述的方法,其特征在于,所述输入缓冲模块以及输出缓冲模块都使用了双缓冲机制,当一个缓冲块从DRAM中读取参数的时候,另一个缓冲块将数据传入到计算单元进行处理。
5.如权利要求1所述的方法,其特征在于,在输入缓冲模块中,当其中一块缓冲器将数据输送到计算模块进行计算的时候,另一块缓冲器经DMA从外部存储器中搬运数据,如此交替使用;在输出缓冲模块中,当其中一块缓冲器存储中间的运算结果,另一块存储最终的运算结果的缓冲器经DMA将运算结果写回到外部存储器中,如此交替使用;每一个缓冲模块含有两片缓冲块,其中一片输入缓冲块的大小Tci*Tco*K*K+4*Tco+Tci*Tr*Tc,一片输出缓冲块的大小为Tco*Tr*Tc。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:在步骤S6之后,将最终的输出结果进行非极大值抑制,得到每个目标的最佳预测框。
7.一种基于FPGA实现YOLOv2检测网络的***,其特征在于,所述***采用如权利要求1至6任一项所述的基于FPGA实现YOLOv2检测网络的方法。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的基于FPGA实现YOLOv2检测网络的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910280748.4A CN110175670B (zh) | 2019-04-09 | 2019-04-09 | 一种基于FPGA实现YOLOv2检测网络的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910280748.4A CN110175670B (zh) | 2019-04-09 | 2019-04-09 | 一种基于FPGA实现YOLOv2检测网络的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110175670A true CN110175670A (zh) | 2019-08-27 |
CN110175670B CN110175670B (zh) | 2020-12-08 |
Family
ID=67689598
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910280748.4A Active CN110175670B (zh) | 2019-04-09 | 2019-04-09 | 一种基于FPGA实现YOLOv2检测网络的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110175670B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110717588A (zh) * | 2019-10-15 | 2020-01-21 | 百度在线网络技术(北京)有限公司 | 用于卷积运算的装置和方法 |
CN111459877A (zh) * | 2020-04-02 | 2020-07-28 | 北京工商大学 | 基于FPGA加速的Winograd YOLOv2目标检测模型方法 |
CN111860781A (zh) * | 2020-07-10 | 2020-10-30 | 逢亿科技(上海)有限公司 | 基于fpga实现的卷积神经网络特征解码*** |
CN111967572A (zh) * | 2020-07-10 | 2020-11-20 | 逢亿科技(上海)有限公司 | 一种基于FPGA的YOLO V3和YOLO V3 Tiny网络切换方法 |
CN113139519A (zh) * | 2021-05-14 | 2021-07-20 | 陕西科技大学 | 一种基于全可编程片上***的目标检测*** |
CN113495786A (zh) * | 2020-03-19 | 2021-10-12 | 杭州海康威视数字技术股份有限公司 | 一种图像卷积处理方法和电子设备 |
CN115049907A (zh) * | 2022-08-17 | 2022-09-13 | 四川迪晟新达类脑智能技术有限公司 | 一种基于fpga的yolov4目标检测网络实现方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108154229A (zh) * | 2018-01-10 | 2018-06-12 | 西安电子科技大学 | 基于fpga加速卷积神经网络框架的图片处理方法 |
EP3352113A1 (en) * | 2017-01-18 | 2018-07-25 | Hitachi, Ltd. | Calculation system and calculation method of neural network |
WO2018184192A1 (en) * | 2017-04-07 | 2018-10-11 | Intel Corporation | Methods and systems using camera devices for deep channel and convolutional neural network images and formats |
CN108805274A (zh) * | 2018-05-28 | 2018-11-13 | 重庆大学 | 基于FPGA的Tiny-yolo卷积神经网络硬件加速方法及*** |
CN109214504A (zh) * | 2018-08-24 | 2019-01-15 | 北京邮电大学深圳研究院 | 一种基于fpga的yolo网络前向推理加速器设计方法 |
CN109447893A (zh) * | 2019-01-28 | 2019-03-08 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种卷积神经网络fpga加速中图像前处理方法及装置 |
-
2019
- 2019-04-09 CN CN201910280748.4A patent/CN110175670B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3352113A1 (en) * | 2017-01-18 | 2018-07-25 | Hitachi, Ltd. | Calculation system and calculation method of neural network |
WO2018184192A1 (en) * | 2017-04-07 | 2018-10-11 | Intel Corporation | Methods and systems using camera devices for deep channel and convolutional neural network images and formats |
CN108154229A (zh) * | 2018-01-10 | 2018-06-12 | 西安电子科技大学 | 基于fpga加速卷积神经网络框架的图片处理方法 |
CN108805274A (zh) * | 2018-05-28 | 2018-11-13 | 重庆大学 | 基于FPGA的Tiny-yolo卷积神经网络硬件加速方法及*** |
CN109214504A (zh) * | 2018-08-24 | 2019-01-15 | 北京邮电大学深圳研究院 | 一种基于fpga的yolo网络前向推理加速器设计方法 |
CN109447893A (zh) * | 2019-01-28 | 2019-03-08 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种卷积神经网络fpga加速中图像前处理方法及装置 |
Non-Patent Citations (5)
Title |
---|
DING, CW 等: "REQ-YOLO: A Resource-Aware, Efficient Quantization Framework for Object Detection on FPGAs", 《PROCEEDINGS OF THE 2019 ACM/SIGDA INTERNATIONAL SYMPOSIUM ON FIELD-PROGRAMMABLE GATE ARRAYS》 * |
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》 * |
WAI, Y.J.等: "Fixed Point Implementation of Tiny-Yolo-v2 using OpenCL on FPGA", 《INTERNATIONAL JOURNAL OF ADVANCED COMPUTER SCIENCE AND APPLICATIONS》 * |
张霎轲 等: "基于小型Zynq SoC硬件加速的改进TINY YOLO实时车辆检测算法实现", 《计算机应用》 * |
段秉环 等: "面向嵌入式应用的深度神经网络压缩方法研究", 《航空计算技术》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11556614B2 (en) | 2019-10-15 | 2023-01-17 | Apollo Intelligent Driving Technology (Beijing) Co., Ltd. | Apparatus and method for convolution operation |
CN110717588B (zh) * | 2019-10-15 | 2022-05-03 | 阿波罗智能技术(北京)有限公司 | 用于卷积运算的装置和方法 |
CN110717588A (zh) * | 2019-10-15 | 2020-01-21 | 百度在线网络技术(北京)有限公司 | 用于卷积运算的装置和方法 |
CN113495786B (zh) * | 2020-03-19 | 2023-10-13 | 杭州海康威视数字技术股份有限公司 | 一种图像卷积处理方法和电子设备 |
CN113495786A (zh) * | 2020-03-19 | 2021-10-12 | 杭州海康威视数字技术股份有限公司 | 一种图像卷积处理方法和电子设备 |
CN111459877A (zh) * | 2020-04-02 | 2020-07-28 | 北京工商大学 | 基于FPGA加速的Winograd YOLOv2目标检测模型方法 |
CN111459877B (zh) * | 2020-04-02 | 2023-03-24 | 北京工商大学 | 基于FPGA加速的Winograd YOLOv2目标检测模型方法 |
CN111860781A (zh) * | 2020-07-10 | 2020-10-30 | 逢亿科技(上海)有限公司 | 基于fpga实现的卷积神经网络特征解码*** |
CN111967572A (zh) * | 2020-07-10 | 2020-11-20 | 逢亿科技(上海)有限公司 | 一种基于FPGA的YOLO V3和YOLO V3 Tiny网络切换方法 |
CN111860781B (zh) * | 2020-07-10 | 2024-06-28 | 逢亿科技(上海)有限公司 | 基于fpga实现的卷积神经网络特征解码*** |
CN113139519A (zh) * | 2021-05-14 | 2021-07-20 | 陕西科技大学 | 一种基于全可编程片上***的目标检测*** |
CN113139519B (zh) * | 2021-05-14 | 2023-12-22 | 陕西科技大学 | 一种基于全可编程片上***的目标检测*** |
CN115049907B (zh) * | 2022-08-17 | 2022-10-28 | 四川迪晟新达类脑智能技术有限公司 | 一种基于fpga的yolov4目标检测网络实现方法 |
CN115049907A (zh) * | 2022-08-17 | 2022-09-13 | 四川迪晟新达类脑智能技术有限公司 | 一种基于fpga的yolov4目标检测网络实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110175670B (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110175670A (zh) | 一种基于FPGA实现YOLOv2检测网络的方法及*** | |
CN109815886B (zh) | 一种基于改进YOLOv3的行人和车辆检测方法及*** | |
CN108108809B (zh) | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 | |
CN108985450B (zh) | 面向向量处理器的卷积神经网络运算向量化方法 | |
CN109214504B (zh) | 一种基于fpga的yolo网络前向推理加速器设计方法 | |
CN108171317A (zh) | 一种基于soc的数据复用卷积神经网络加速器 | |
US10572225B1 (en) | Circuit arrangements and methods for performing multiply-and-accumulate operations | |
KR102335955B1 (ko) | 컨볼루션 신경망 시스템 및 그것의 동작 방법 | |
CN106897143A (zh) | 对图形处理***中的处理引擎的区片分配 | |
CN112800838A (zh) | 一种基于深度学习的航道船舶检测与识别方法 | |
US20170353708A1 (en) | Method and device for stereo images processing | |
KR20180123846A (ko) | 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기 | |
CN109472734B (zh) | 一种基于fpga的目标检测网络及其实现方法 | |
CN113408423A (zh) | 适用于tx2嵌入式平台的水产品目标实时检测方法 | |
CN105825468A (zh) | 图形处理单元及其图形处理方法 | |
Li et al. | High throughput hardware architecture for accurate semi-global matching | |
CN113743505A (zh) | 基于自注意力和特征融合的改进ssd目标检测方法 | |
CN115982418B (zh) | 一种提升ai计算芯片超分运算性能的方法 | |
CN112101113A (zh) | 一种轻量化的无人机图像小目标检测方法 | |
CN112149518A (zh) | 基于began和yolov3模型的松果检测方法 | |
CN108197613B (zh) | 一种基于深度卷积级联网络的人脸检测优化方法 | |
US20240135677A1 (en) | Method, system and storage media for training a graphics processing neural network with a patch-based approach | |
CN104240181B (zh) | 一种垂直滤波器的图像垂直尺寸缩小方法 | |
CN113902904A (zh) | 一种轻量化网络架构*** | |
CN111832336B (zh) | 一种基于改进的c3d视频行为检测方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |