一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的YOLOV4目标检测网络实现方法与流程

2022-09-15 02:46:19 来源:中国专利 TAG:
一种基于fpga的yolov4目标检测网络实现方法
技术领域
:1.本发明属于目标检测
技术领域
:,具体涉及一种基于fpga的yolov4目标检测网络实现方法。
背景技术
::2.目前基于yolo架构的目标检测网络多数基于嵌入式平台实现,并以yolov3架构在海思3559、瑞芯微1808和瑞芯微3399等嵌入式平台的应用为主。yolov3架构在上述嵌入式平台的实现存在如下缺陷:yolov3的网络结构层与yolov4相比层数更多也更复杂,对目标的识别准确率较低;嵌入式平台的算力不足,难以在实现满帧率的应用的同时达到理想的目标识别准确度。3.yolov4网络结构包括输入层、骨干层、颈部层和预测层,其中骨干层、颈部层和预测层是需要设计实现的架构。其中骨干层包括cspn计算单元,cspn计算单元为跨阶段部分连接计算单元,n代表残差单元的个数,cspn计算单元包括cbm计算单元和n个残差单元,其中cbm计算单元表示由conv计算单元、bn批归一化计算单元和mish函数计算单元(mish激活函数)组成的计算单元,conv计算单元表示进行卷积运算的单元,bn批归一化计算单元表示进行bn(batchnormalization)批归一化运算的单元。颈部层包括多个cbl计算单元,cbl计算单元表示由conv计算单元、bn批归一化计算单元和leakyrelu函数计算单元(leakyrelu激活函数)组成的计算单元。预测层包括多个cbl计算单元和多个conv计算单元。4.fpga平台具备丰富的dsp运算资源,可提供很好的运算力。此外,fpga平台还具备丰富的ddr存储资源,可实现图像数据的快速存储和读取,由此可见,yolov4目标检测网络在fpga上的实现具备可行性,所以基于fpga的yolov4目标检测网络实现研究很有必要。技术实现要素:5.本发明的目的在于克服现有技术的一项或多项不足,提供一种基于fpga的yolov4目标检测网络实现方法。6.本发明的目的是通过以下技术方案来实现的:一种基于fpga的yolov4目标检测网络实现方法,所述fpga包括ddr存储模块、lut模块和dsp模块,所述实现方法包括如下步骤:s1、在服务器上基于训练样本对yolov4目标检测网络进行训练;s2、yolov4目标检测网络训练完成后,在fpga上搭建用于识别预测样本中预设目标的yolov4目标检测模型,包括如下子步骤:s21、分解出yolov4网络结构层中的计算单元:分解yolov4网络结构层,得到多个计算单元,所述计算单元包括mish函数计算单元、leakyrelu函数计算单元、bn批归一化计算单元和conv计算单元;s22、在fpga上构建mish函数计算单元:在所述lut模块内预先存储mish函数的输出值,将mish函数的输入值作为地址在lut模块中查找该输入值对应的输出值;s23、在fpga上构建leakyrelu函数计算单元:在fpga上构建leakyrelu逻辑模块,所述leakyrelu逻辑模块用于接收leakyrelu函数的第一输入值,根据所述第一输入值生成该第一输入值对应的leakyrelu函数的第一输出值,第一输入值大于零,与该第一输入值对应的第一输出值和该第一输入值相等;在所述lut模块内预先存储leakyrelu函数的第二输出值,将leakyrelu函数的第二输入值作为地址在lut模块中查找该第二输入值对应的第二输出值,所述第二输入值小于等于零;s24、在fpga上构建bn批归一化计算单元:在fpga上构建bn批归一化逻辑模块,并在所述bn批归一化逻辑模块内预先存储用于批归一化处理的方差和均值,批归一化处理的方差为所有训练样本方差的平均值,批归一化处理的均值为所有训练样本均值的平均值;s25、在fpga上构建conv计算单元:根据各个conv计算单元进行卷积运算的先后时刻,在dsp模块上构建第一时刻的conv计算单元,在第一时刻的conv计算单元计算完成后,在dsp模块上重新构建下一时刻的conv计算单元;s26、在fpga上构建存储区域:在所述ddr存储模块上构建存储区域,所述存储区域用于对输入第一时刻的conv计算单元的图像矩阵进行存储,所述图像矩阵根据预测样本生成;在所述图像矩阵进行存储前,对图像矩阵的所有行进行分组,得到多个阵元组,然后对各个阵元组分别进行90度矩阵转置,然后将转置后的所述阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同,卷积运算时,读取存储行内阵元组的阵元,并将读取到的阵元输入第一时刻的conv计算单元;s3、将预测样本输入搭建好的yolov4目标检测模型进行预设目标的识别。7.优选地,所述分解yolov4网络结构层,得到多个计算单元,具体包括:对yolov4网络结构层的骨干层进行分解,得到cspn计算单元;对yolov4网络结构层的颈部层进行分解,得到cbl计算单元;对yolov4网络结构层的预测层进行分解,得到cbl计算单元和conv计算单元;对cspn计算单元进行分解,得到conv计算单元、bn批归一化计算单元和mish函数计算单元;对cbl计算单元进行分解,得到conv计算单元、bn批归一化计算单元和leakyrelu函数计算单元。8.优选地,所述mish函数的输入值为区间[-6,6]内的多个离散数值,各个离散数值按大小顺序排列,两个相邻离散数值之间差值的绝对值为0.1。[0009]优选地,所述leakyrelu函数的第二输入值为区间[-10,0]内的多个离散数值,各个离散数值按大小顺序排列,两个相邻离散数值之间差值的绝对值为0.1。[0010]优选地,所述dsp模块内包括n个dsp运算子模块;所述在dsp模块上构建第一时刻的conv计算单元,具体包括:根据第一时刻的conv计算单元的卷积核尺寸n1*n1,在第一个dsp运算子模块至第n1*n1个dsp运算子模块上构建第一个子conv计算单元,所述子conv计算单元用于进行n1*n1卷积核的单周期卷积运算,然后在第n1*n1 1个dsp运算子模块至第2*n1*n1个dsp运算子模块上构建第二个子conv计算单元,以此类推,完成m1个子conv计算单元在所述dsp模块上的构建;若第一计算参数a1为正整数,则m1取值为第一计算参数,若第一计算参数a1不为正整数,则m1取值为小于第一计算参数a1的正整数中的最大值,其中。[0011]优选地,所述对图像矩阵的所有行进行分组,得到多个阵元组,然后对各个阵元组分别进行90度矩阵转置,然后将转置后的所述阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同,卷积运算时,读取存储行内阵元组的阵元,并将读取到的阵元输入第一时刻的conv计算单元,具体包括:对图像矩阵的所有行进行分组,得到p个阵元组;计算第二计算参数,其中l表示图像矩阵的总行数,bit1表示存储区域的总线位宽,bit0表示图像矩阵的像素位宽,若第二计算参数为正整数,则阵元组的数量p为第二计算参数,各个阵元组的行数,否则阵元组的数量p为大于第二计算参数且与第二计算参数之间的差值最小的正整数,第一个阵元组至第p-1个阵元组的行数均为l1,第p个阵元组的行数;对各个阵元组分别进行90度矩阵转置;将转置后的阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同;进行第一轮次的单周期卷积运算时,同时从存储区域读取m1个阵元并输出至第一时刻的conv计算单元,每个子conv计算单元接收m1个阵元中的一个阵元;进行下一轮次的单周期卷积运算时,若存储区域中的剩余阵元数量小于m1,则同时从存储区域读取所有剩余阵元并输出至第一时刻的conv计算单元,否则同时从存储区域读取m1个阵元并输出至第一时刻的conv计算单元,直至从存储区域将p个存储行的阵元全部输出至第一时刻的conv计算单元。[0012]本发明的有益效果是:(1)、通过对yolov4网络结构层的拆解,分解出四种类型的基础计算单元,分别为mish函数计算单元、leakyrelu函数计算单元、bn批归一化计算单元和conv计算单元,这四种类型的基础计算单元完成yolov4目标检测网络的全部计算;通过查找表的方式构建mish函数计算单元,以及通过查找表的方式构建leakyrelu函数计算单元中输入值小于等于0的部分,充分利用了lut模块资源,提高了mish函数计算单元和leakyrelu函数计算单元的计算效率;通过构建bn批归一化逻辑模块,并且该bn批归一化逻辑模块通过方差和均值的固定预设,逻辑实现只是固定系数除法运算,提高了bn批归一化计算单元的计算效率;通过分时复用方式,在同一dsp模块上分时构建各个先后时刻的conv计算单元,使得fpga的dsp运算资源满足yolov4网络的算力要求;此外通过对图像矩阵分组,然后针对各个阵元组分别进行存储前的矩阵转置,之后对矩阵转置后的阵元组进行按行顺序存储,存储到存储区域的不同存储行,由此在ddr存储模块上构建出了用于对图像矩阵进行存储的存储区域,若未进行转置,一个轮次的单周期卷积运算只能使用一个dsp运算子模块进行一个卷积运算,上述针对帧内图像阵元的重排序,与存储行连接的port口可同时读取多个阵元并载入到相应的conv计算单元中,提高了dsp运算资源的利用率。[0013]上述构建过程充分利用了fpga的硬件资源和fpga逻辑实现的便捷性,实现了基于fpga的yolov4目标检测模型的构建,yolov4目标检测模型的算力得到了保证,并基于算力的保证实现了目标识别准确度的提高,基于dsp运算资源的高效流水复用实现了目标识别效率的提高。[0014](2)、在dsp模块上构建各个时刻的conv计算单元时,根据卷积核尺寸以及使dsp模块内的多个dsp运算子模块尽可能的被同时利用且不闲置的原则,确定出可同时进行的单周期卷积运算的个数,并构建出相应个数的用于单周期卷积运算的子conv计算单元,据此实现了对fpga中dsp运算资源的充分利用,在分时复用的基础上进一步实现效率最大化。[0015](3)、结合ddr高效读取流水特性,单周期卷积运算时,从存储区域读取与子conv计算单元数量一致的阵元,并传输至各个子conv计算单元,每个conv计算单元接收一个阵元,对各个conv计算单元同时进行单周期卷积运算提供数据支撑,保证了yolov4目标检测网络模型目标识别效率的最大化。附图说明[0016]图1为对yolov4网络结构层进行分解的一种示意图;图2为图像矩阵的一种示意图;图3为图像矩阵转置后在存储区域存储的一种示意图。具体实施方式[0017]下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。[0018]参阅图1-图3,本实施例提供了一种基于fpga的yolov4目标检测网络实现方法,其中fpga包括ddr存储模块、lut模块和dsp模块。lut模块表示look-up-table查找表模块。本方法具体包括如下步骤:s1、在服务器上基于训练样本对yolov4目标检测网络进行训练。[0019]s2、yolov4目标检测网络训练完成后,在fpga上搭建用于识别预测样本中预设目标的yolov4目标检测模型,包括如下子步骤:s21、分解出yolov4网络结构层中的计算单元:分解yolov4网络结构层,得到多个计算单元,计算单元包括mish函数计算单元(mish激活函数)、leakyrelu函数计算单元(leakyrelu激活函数)、bn批归一化计算单元和conv计算单元。[0020]可选的,分解yolov4网络结构层,得到多个计算单元,具体包括如下子步骤:对yolov4网络结构层的骨干层进行分解,得到cspn计算单元;对yolov4网络结构层的颈部层进行分解,得到cbl计算单元;对yolov4网络结构层的预测层进行分解,得到cbl计算单元和conv计算单元;对cspn计算单元进行分解,得到conv计算单元、bn批归一化计算单元和mish函数计算单元;对cbl计算单元进行分解,得到conv计算单元、bn批归一化计算单元和leakyrelu函数计算单元。[0021]s22、在fpga上构建mish函数计算单元:在lut模块内预先存储mish函数的输出值,将mish函数的输入值作为地址在lut模块中查找该输入值对应的输出值。mish函数的表达式为:。[0022]可选的,mish函数的输入值取值区间为[-6,6],且为离散数值,各个离散数值按大小顺序排列,mish函数的相邻两个输入值之间差值的绝对值为0.1。下述表一中示出了mish函数计算单元的部分输入值和部分输出值之间的映射关系。由此可见,mish函数计算单元需实现的逻辑运算通过fpga模块中的lut模块实现,相较于在fpga上构建其他逻辑模块来实现mish函数计算单元而言,lut查找表方式实现mish函数计算单元非常方便,且计算效率也得以提高。[0023]表一s23、在fpga上构建leakyrelu函数计算单元:在fpga上构建leakyrelu逻辑模块,leakyrelu逻辑模块用于接收leakyrelu函数的第一输入值,根据第一输入值生成该第一输入值对应的leakyrelu函数的第一输出值,第一输入值大于零,且与该第一输入值对应的第一输出值和该第一输入值相等。基于fpga上逻辑实现的便捷性,leakyrelu逻辑模块的输入值和输出值相同,因此易于在fpga上实现。在lut模块内预先存储leakyrelu函数的第二输出值,将leakyrelu函数的第二输入值作为地址在lut模块中查找该第二输入值对应的第二输出值,第二输入值小于等于零。leakyrelu函数的表达式为:。[0024]可选的,leakyrelu函数的第二输入值取值区间为[-10,0],且为离散数值,各个离散数值按大小顺序排列,leakyrelu函数的相邻两个第二输入值之间差值的绝对值为0.1。下述表二中示出了leakyrelu函数计算单元的部分输入值和部分输出值之间的映射关系。由此可见,leakyrelu函数输入值小于等于0部分的计算基于fpga模块中的lut模块实现,相较于在fpga上构建其他逻辑模块而言更加方便,且计算效率也得以提高。[0025]表二s24、在fpga上构建bn批归一化计算单元:在fpga上构建bn批归一化逻辑模块,并在bn批归一化逻辑模块内预先存储用于批归一化处理的方差和均值,批归一化处理的方差为所有训练样本方差的平均值,批归一化处理的均值为所有训练样本均值的平均值。yolov4目标检测模型构建好后,在进行目标识别时,样本进行批归一化处理的计算公式为:,其中表示样本,表示批归一化处理后的样本,表示批归一化处理的均值,表示批归一化处理的方差,为常数。由此可见,bn批归一化逻辑模块对样本进行批归一化处理时只是固定系数的除法运算,批归一化处理的效率得以提升,且基于fpga上逻辑实现的便捷性,bn批归一化逻辑模块易于在fpga上实现。[0026]s25、在fpga上构建conv计算单元:根据各个conv计算单元进行卷积运算的先后时刻,在dsp模块上构建第一时刻的conv计算单元,在第一时刻的conv计算单元计算完成后,在dsp模块上重新构建下一时刻的conv计算单元。基于s21中对yolov4网络结构层的分解,整个yolov4网络结构层中包含多个conv计算单元,各个conv计算单元按先后顺序分布在yolov4网络结构层中。通过分时复用的方式,先在fpga上的dsp模块上构建第一时刻的conv计算单元,第一时刻的conv计算单元计算完成后,dsp模块释放,此处释放是指将载入第一时刻的conv计算单元的卷积核的数值进行清除等操作,再在dsp模块上构建下一个时刻的conv计算单元,相应地,将该时刻的conv计算单元的卷积核数值载入该时刻的conv计算单元中,以此类推,直至倒数第二个时刻的conv计算单元计算完成,dsp模块释放,再在dsp模块上构建最后一个时刻的conv计算单元。因为整个yolov4网络结构层中,conv计算单元的运算量最大,通过对dsp模块进行分时复用,保证了yolov4网络结构层所需的高运算力。[0027]可选的,dsp模块内包括n个dsp运算子模块,在dsp模块上构建第一时刻的conv计算单元具体包括如下子步骤:根据第一时刻的conv计算单元的卷积核尺寸n1*n1,在第一个dsp运算子模块至第n1*n1个dsp运算子模块上构建第一个子conv计算单元,子conv计算单元用于进行n1*n1卷积核的单周期卷积运算,然后在第n1*n1 1个dsp运算子模块至第2*n1*n1个dsp运算子模块上构建第二个子conv计算单元,以此类推,完成m1个子conv计算单元在dsp模块上的构建;若第一计算参数a1为正整数,则m1取值为第一计算参数,若第一计算参数a1不为正整数,则m1取值为小于第一计算参数a1的正整数中的最大值,其中。[0028]可知的,在dsp模块上重新构建下一时刻的conv计算单元具体包括如下子步骤:根据下一时刻的conv计算单元的卷积核尺寸n2*n2,在第一个dsp运算子模块至第n2*n2个dsp运算子模块上构建第一个子conv计算单元,子conv计算单元用于进行n2*n2卷积核的单周期卷积运算,然后在第n2*n2 1个dsp运算子模块至第2*n2*n2个dsp运算子模块上构建第二个子conv计算单元,以此类推,完成m2个子conv计算单元在dsp模块上的构建;若第三计算参数a3为正整数,则m2取值为第三计算参数,若第三计算参数a3不为正整数,则m2取值为小于第三计算参数a3的正整数中的最大值,其中。[0029]上述单周期卷积运算是指卷积核与一个像素进行卷积运算,比如卷积核尺寸n1*n1,则单周期卷积运算包括n1*n1次乘法运算和n1*n1-1次加法运算。[0030]s26、在fpga上构建存储区域:在ddr存储模块上构建存储区域,存储区域用于对输入第一时刻的conv计算单元的图像矩阵进行存储,图像矩阵根据预测样本生成;在图像矩阵进行存储前,对图像矩阵的所有行进行分组,得到多个阵元组,然后对各个阵元组分别进行90度矩阵转置,然后将转置后的阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同,卷积运算时,读取存储行内阵元组的阵元,并将读取到的阵元输入第一时刻的conv计算单元。[0031]可选的,对图像矩阵的所有行进行分组,得到多个阵元组,然后对各个阵元组分别进行90度矩阵转置,然后将转置后的阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同,卷积运算时,读取存储行内阵元组的阵元,并将读取到的阵元输入第一时刻的conv计算单元,具体包括如下子步骤:对图像矩阵的所有行进行分组,得到p个阵元组,阵元组的数量p通过以下步骤确定:计算第二计算参数,其中l表示图像矩阵的总行数,bit1表示存储区域的总线位宽,bit0表示图像矩阵的像素位宽,若第二计算参数为正整数,则阵元组的数量p为第二计算参数,各个阵元组的行数;否则阵元组的数量p为大于第二计算参数且与第二计算参数之间的差值最小的正整数,第一个阵元组至第p-1个阵元组的行数均为l1,第p个阵元组的行数;对各个阵元组分别进行90度矩阵转置;将转置后的阵元组按行顺序写入存储区域的一个存储行,各个阵元组写入的存储行不相同;进行第一轮次的单周期卷积运算时,同时从存储区域读取m1个阵元并输出至第一时刻的conv计算单元,每个子conv计算单元接收m1个阵元中的一个阵元,且每个子conv计算单元接收不同的阵元;进行下一轮次的单周期卷积运算时,若存储区域中的剩余阵元数量小于m1,则同时从存储区域读取所有剩余阵元并输出至第一时刻的conv计算单元,否则同时从存储区域读取m1个阵元并输出至第一时刻的conv计算单元,直至从存储区域将p个存储行的阵元全部输出至第一时刻的conv计算单元。[0032]s3、将预测样本输入搭建好的yolov4目标检测模型进行预设目标的识别。[0033]本实施例中图像矩阵为608*608,fpga采用的型号为v5,fpga内共计3600个dsp运算子模块,第一时刻的conv计算单元的卷积核尺寸为3*3,存储区域的总线位宽为512bit,图像矩阵的像素位宽为8bit,3*3卷积核的单周期卷积运算需使用9个dsp运算子模块,m1的数量为400个。阵元组的数量为10个,第一个阵元组至第九个阵元组内的阵元行数均为64行,第十个阵元组内的阵元行数为32行,存储行的数量为10个,从存储区域中指定10个用于对存储行内的阵元进行输出的port口,第一个存储行对应port0,第二个存储行对应port1,第三个存储行对应port2,第四个存储行对应port3,第五个存储行对应port4,第六个存储行对应port5,第七个存储行对应port6,第八个存储行对应port7,第九个存储行对应port8,第十个存储行对应port9。[0034]进行单周期卷积运算时,从存储区域的port0至port6输出共计400个阵元至第一时刻的conv计算单元,每个子conv计算单元接收一个阵元,实现400个阵元同时进行单周期卷积运算。port0至port5一一对应输出对应存储行中的64个阵元,port6输出对应存储行中的16个阵元。经过多轮的单周期卷积运算后,转置前图像矩阵的400行阵元的单周期卷积运算完成,然后进行转置前图像矩阵的剩余208行阵元的单周期卷积运算,最终完成图像矩阵为608*608的一帧预测样本的单周期卷积运算。[0035]本实施例具有如下显著优势:通过对yolov4网络结构层进行计算单元的拆解,通过分时复用实现fpga计算资源的充分利用,以满足yolov4网络所需的高运算力要求,同时结合图像矩阵写入ddr存储时排列结构的优化以及从ddr存储中读出数据的优化组合,构建出基于fpga平台的yolov4目标检测模型,相较于
背景技术
:中提到的基于嵌入式平台的yolov3应用而言,该yolov4目标检测模型可实现对预设目标更高准确度和更高实时性的识别。[0036]以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献