技术领域
本发明属于FPGA仿真验证领域,涉及一种基于FPGA的DSCNN加速器分层验证方法。
背景技术
在FPGA设计过程中,功能仿真验证是一个必不可少的环节。为确保FPGA深度可分离卷积神经网络加速器功能正常,需要对其设计逻辑进行功能仿真验证。而为了提高加速效率,深度可分离卷积网络的运算顺序往往会被重新规划,使得后续的功能仿真验证环节变得比较复杂。
发明内容
本发明针对FPGA深度可分离卷积神经网络(Depthwise Separable ConvolutionNeural Network,DSCNN)现有的功能仿真验证方法较为复杂这一问题,提出了一种基于FPGA的DSCNN加速器分层验证方法。该方法采用分层存储的方式使得设计者能够进行自定义仿真验证,即可规定仿真的起始层与结束层,并且在卷积计算出现错误的情况下快速定位错误所在位置,极大节省了仿真验证的时间成本,提高设计效率,本发明的技术方案为一种基于FPGA的DSCNN加速器分层验证方法,包括以下步骤:
S1,原始图像经过加速器所设计网络的软件模型运算,记录并存储所有中间特征数据;
S2,对特征数据进行重新排序,作为标准结果;
S3,根据深度可分离网络特性,对仿真所需的特征数据等参数进行排序,并初始化至一个DRAM模型中;
S4,读取仿真起终值,仿真时根据寄存器值抓取有效卷积结果;
S5,以网络层为单位,对比标准结果与仿真结果,得到验证结果;
所述S1,原始图像经过加速器所设计网络的软件模型运算,记录并存储所有中间特征数据,包括以下步骤:
S11,根据待验证卷积神经网络设计的输入尺寸裁剪普通图片,根据待验证卷积神经网络设计的量化精度转换图片格式,得到原始图像;
S12,原始图像经过加速器所设计网络的软件模型运算,抓取所有中间特征数据;
S13,将计算所得特征数据以行、列、深的顺序逐像素分层存储至文本文件;
所述S2,对特征数据进行重新排序,作为标准结果,包括以下步骤:
S21,以像素点为最小单位划分特征图,按行列深的顺序得到一维序列FeatBase;
S22,以待验证网络单位时钟数据有效输出的数量N1为最小单位划分特征图,按待验证网络的计算顺序得到二维序列FeatStd;
S23,根据两者在空间上具有一致性的特征,得到FeatStd与FeatBase的映射关系
FeatStd
其中,m,n表示为m地址存储的第n个数据,S
所述S3中深度可分离网络特性,即深度可分离网络的卷积计算分为depthwiseconvolution和pointwise convolution两部分;所述S3中对仿真所需的特征数据等参数进行排序,并初始化至一个DRAM模型中,包括以下步骤:
S31,针对depthwise卷积部分,以DRAM模型单位地址存储数据量N2为最小单位划分特征图,按待验证网络的数据读取顺序,即行、列、深顺序,给每一个单元设定一个二维序列FeatDw,根据计算特征图与DRAM存储特征在空间上的一致性,可得FeatDw与FeatBase的映射关系
FeatDw
其中m,n表示为m地址存储的第n个数据,根据上述关系进行排序,并将排序后的数据以AddrBase(i)为起始地址存储至所述DRAM模型;
S32,针对pointwise卷积部分,以DRAM模型单位地址存储数据量N2为最小单位划分特征图,按待验证网络的数据读取顺序,即深、行、列顺序,给每一个单元设定一个二维序列FeatPw,根据计算特征图与DRAM存储特征在空间上的一致性,可得FeatPw与FeatBase的映射关系
其中,m,n表示为m地址存储的第n个数据,D
所述AddrBase(i)表示第i层在DRAM中存储的开始地址,计算式如下:
其中,S
所述S4,读取仿真起终值,仿真时根据寄存器值抓取有效卷积结果,包括以下步骤:
S41,仿真开始时,读取仿真参数1和仿真参数2的数据,分别加载至逻辑设计和仿真顶层设计中的仿真初始值和结束值寄存器,用于指定仿真进行的网络层范围;
S42,仿真进行时,通过监测寄存器的状态或值来抓取有效卷积计算结果,并作为仿真结果写入对应的文本文件中;
所述S5,以网络层为单位,对比标准结果与仿真结果,得到验证结果,包括以下步骤:
S51,以网络层为单位,利用脚本统计以下参数:计算不一致结果的数量、占比、加权平均误差以及相邻层之间的加权平均误差增益;
S52,通过判定某层网络中计算结果不一致的数量以及占比是否小于某个设定阈值,加权平均误差是否小于某个设定阈值,以及相邻层的加权平均误差增益是否为负来获得验证结果,并在终端打印被判定为错误的数据所在位置。
优选地,所述S3中DRAM模型的功能包括:在仿真开始之前读取仿真参数1确定仿真开始层数i,判断卷积类别并加载相应的FeatDwi或FeatPwi至模型中;在仿真开始之前加载可分离卷积网络的所有权重与偏置参数,以行、列、深的顺序,以N2为一个单元,AddrBase(L+1)为起始地址存储在模型中。
优选地,所述S41中仿真开始时,读取仿真参数,并加载至逻辑设计和仿真顶层设计的对应寄存器中,包括以下步骤:
S411,仿真开始时,读取仿真参数1的数据,并加载至逻辑设计中的仿真初始值寄存器,其中,仿真参数1用于指定仿真开始的层数;
S412,仿真开始时,读取仿真参数2的数据,并加载至仿真顶层设计中的仿真结束值寄存器,其中,仿真参数2用于指定仿真结束的层数;
S413,仿真开始时系统复位,从所设置的仿真初始层开始仿真。
优选地,所述S42中通过监测寄存器的状态或值来抓取有效卷积计算结果,包括以下步骤:
S421,检测逻辑设计中R1寄存器数据;其中,R1寄存器存储的数据用于表征当前计算结果输出是否有效;
S422,当所述R1寄存器的数据为1时,检测逻辑设计中R2寄存器数据;其中,R2寄存器存储的数据用于表征当前网络的验证使能是否有效;
S423,当所述R2寄存器的数据为1时,读取R3与R4两个寄存器内数据,并根据R3寄存器内数据将R4寄存器内数据写入相应结果文件中;其中,所述R3寄存器存储的数据为当前仿真的网络层号,R4寄存器存储的数据为网络计算结果。
优选地,所述S5中以网络层为单位,利用脚本统计某些参数来获得验证结果,判断依据包括以下规则:
若某层网络中计算结果不一致的数量以及占比小于可调阈值,加权平均误差小于可调阈值,且相邻层的加权平均误差增益为负,则表明计算结果不一致是由仿真精度误差所造成,否则是由于逻辑错误所造成;
针对被判定为错误的数据,脚本则以[M,N]格式向终端输出该错误数据的具体位置,其中,M表示该层网络的第M次运算所得出的数据,N表示一次有效输出数据个数n中的第N个数据,从而定位到错误数据的具体位置。
本发明的有益效果如下:
只需在逻辑设计中添加少量寄存器,并且额外消耗少量FPGA逻辑资源,就能降低传统的深度可分离网络仿真验证复杂度,除此之外,本发明方法还能对局部网络层进行单独仿真验证,并且在逻辑设计存在错误的情况下快速定位到错误产生的位置,极大节省了仿真验证的时间成本,提高了设计效率。
附图说明
图1为本发明实施例的基于FPGA的DSCNN加速器分层验证方法的步骤流程图;
图2为本发明实施例的基于FPGA的DSCNN加速器分层验证方法的DRAM模型结构图;
图3为本发明实施例的基于FPGA的DSCNN加速器分层验证方法中S4的步骤流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
相反,本发明涵盖任何由权利要求定义的在本发明的精髓和范围上做的替代、修改、等效方法以及方案。进一步,为了使公众对本发明有更好的了解,在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。
首先,需要了解的是本发明所述一种基于FPGA的DSCNN加速器分层验证方法,在本实施例中是用于解决深度可分离卷积网络仿真验证较为复杂,并且无法进行自定义仿真的问题。采用本方法可对任意局部连续层网络进行仿真验证,并能够在出现错误时快速定位到错误发生的具体位置,大大节省仿真验证的时间成本,提高设计效率。
参见图1,为本发明的实施例,技术方案为基于FPGA的DSCNN加速器分层验证方法的步骤流程图,结合图2的DRAM模型示意图以及图3流程图,包括以下步骤:
S1,原始图像经过加速器所设计网络的软件模型运算,记录并存储所有中间特征数据;
S2,对特征数据进行重新排序,作为标准结果;
S3,根据深度可分离网络特性,对仿真所需的特征数据等参数进行排序,并初始化至一个DRAM模型中;
S4,读取仿真起终值,仿真时根据寄存器值抓取有效卷积结果;
S5,以网络层为单位,对比标准结果与仿真结果,得到验证结果。
具体实施例中
S1,原始图像经过加速器所设计网络的软件模型运算,记录并存储所有中间特征数据,包括以下步骤:
S11,根据待验证卷积神经网络设计的输入尺寸裁剪普通图片,根据待验证卷积神经网络设计的量化精度转换图片格式,得到原始图像;
S12,原始图像经过加速器所设计网络的软件模型运算,抓取所有中间特征数据;
S13,将计算所得特征数据以行、列、深的顺序逐像素分层存储至文本文件。
S2,对特征数据进行重新排序,作为标准结果,包括以下步骤:
S21,以像素点为最小单位划分特征图,按行列深的顺序得到一维序列FeatBase;
S22,以待验证网络单位时钟数据有效输出的数量N1为最小单位划分特征图,按待验证网络的计算顺序得到二维序列FeatStd;
S23,根据两者在空间上具有一致性的特征,得到FeatStd与FeatBase的映射关系
FeatStd
其中S
S3,对仿真所需的特征数据等参数进行排序,并初始化至一个DRAM模型中(模型结构图参见图2),包括以下步骤:
S31,针对depthwise卷积部分,以DRAM模型单位地址存储数据量N2为最小单位划分特征图,按待验证网络的数据读取顺序,即行、列、深顺序,给每一个单元设定一个二维序列FeatDw,根据计算特征图与DRAM存储特征在空间上的一致性,可得FeatDw与FeatBase的映射关系
FeatDw
其中m,n表示为m地址存储的第n个数据,根据上述关系进行排序,并将排序后的数据以AddrBase(i)为起始地址存储至所述DRAM模型;
S32,针对pointwise卷积部分,以DRAM模型单位地址存储数据量N2为最小单位划分特征图,按待验证网络的数据读取顺序,即深、行、列顺序,给每一个单元设定一个二维序列FeatPw,根据计算特征图与DRAM存储特征在空间上的一致性,可得FeatPw与FeatBase的映射关系
其中m,n表示为m地址存储的第n个数据,D
其中,AddrBase(i)表示第i层在DRAM中存储的起始地址,计算式如下:
S4,读取仿真起终值,仿真时根据寄存器值抓取有效卷积结果,包括以下步骤:
S41,仿真开始时,读取仿真参数1和仿真参数2的数据,分别加载至逻辑设计和仿真顶层设计中的仿真初始值和结束值寄存器,用于指定仿真进行的网络层范围;
其中,S41中读取仿真参数并加载至相关寄存器,具体又可分为以下步骤:
S411,仿真开始时,读取仿真参数1的数据,并加载至逻辑设计中的仿真初始值寄存器,其中,仿真参数1用于指定仿真开始的层数;
S412,仿真开始时,读取仿真参数2的数据,并加载至仿真顶层设计中的仿真结束值寄存器,其中,仿真参数2用于指定仿真结束的层数;
S413,仿真开始时系统复位,从所设置的仿真初始层开始仿真。
S42,仿真进行时,通过监测寄存器的状态或值来抓取有效卷积计算结果,并作为仿真结果写入对应的文本文件中。
其中,监测寄存器的状态或值可具体分为以下步骤,流程图参见图3:
S421,检测逻辑设计中R1寄存器数据;其中,R1寄存器存储的数据用于表征当前计算结果输出是否有效;
S422,当所述R1寄存器的数据为1时,检测逻辑设计中R2寄存器数据;其中,R2寄存器存储的数据用于表征当前网络的验证使能是否有效;
S423,当所述R2寄存器的数据为1时,读取R3与R4两个寄存器内数据,并根据R3寄存器内数据将R4寄存器内数据写入相应结果文件中;其中,所述R3寄存器存储的数据为当前仿真的网络层号,R4寄存器存储的数据为网络计算结果。
S5,以网络层为单位,对比标准结果与仿真结果,得到验证结果,包括以下步骤:
S51,以网络层为单位,利用脚本统计包括但不限于以下参数:计算不一致结果的数量、占比、加权平均误差以及相邻层之间的加权平均误差增益;
S52,通过判定某层网络中计算结果不一致的数量以及占比是否小于某个设定阈值,加权平均误差是否小于某个设定阈值,以及相邻层的加权平均误差增益是否为负来获得验证结果,并在终端打印被判定为错误的数据所在位置。
其中,S52中判断依据可以为:
若某层网络中计算结果不一致的数量以及占比小于可调阈值,加权平均误差小于可调阈值,且相邻层的加权平均误差增益为负,则表明计算结果不一致是由仿真精度误差所造成,否则是由于逻辑错误所造成。
针对被判定为错误的数据,脚本则以[M,N]格式向终端输出该错误数据的具体位置,其中,M表示该层网络的第M次运算所得出的数据,N表示一次有效输出数据个数n中的第N个数据,从而定位到错误数据的具体位置。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
机译: DUT FPGA一种测试架构,具有基于FPGA的硬件加速器模块,可独立测试多个器件
机译: 生成时钟信号,以实现基于周期的,可重复的基于FPGA的FPGA硬件加速器
机译: 生成时钟信号,以实现基于周期的,可重复的基于FPGA的FPGA硬件加速器