一种程序检测方法、装置、设备及可读存储介质与流程

文档序号:17288015发布日期:2019-04-03 03:43阅读:167来源:国知局
一种程序检测方法、装置、设备及可读存储介质与流程

本发明涉及计算机应用技术领域,特别是涉及一种程序检测方法、装置、设备及可读存储介质。



背景技术:

近年来,卷积神经网络(cnn)越来越广泛地应用于计算机视觉任务。cnn通常包含多个层,每一层的输出特征图是下一层的输入特征图。当前最优cnn的计算主要由卷积层主导。

fpga(field-programmablegatearray,现场可编程门阵列),因其具有高性能、低能耗和可重配置性的优点,并成为cnn的有效硬件加速器而备受关注。如若使用目标的卷积算法,输出特征图中的每个元素要经多步乘积累加运算进行单独计算,这需要耗费fpga中大量的dsp(乘法器)资源来进行乘法运算,然而fpga板卡中的dsp资源有限且十分珍贵,不能满足目标卷积算法需要的乘法数量。

winograd算法是一种卷积神经网络快速算法,它利用元素之间的结构相似性生成输出特征图中的一列元素。可减少乘法运算的数量,从而大幅度降低了算法复杂度,可改善了fpga上的cnn性能。

然而,winograd算法在fpga上的代码实现,程序复杂度增加,在代码开发过程中,极易出错。一旦winograd算法部分计算出错,将会影响整个cnn算法的准确度。为了使得程序校验结果更为准确,往往需要输入不同的测试数据对winograd程序进行检验。但是,又因,在开发阶段,由于winograd算法复杂,难以找出不同测试数据对应的卷积结果。即便是预先存储不同测试数据与测试结果的对应表,用于程序校验,也存在测试数据量少、具有偶然性和测试过程复杂,难以实现的问题。

综上所述,如何有效地检验winograd程序是否正确等问题,是目前本领域技术人员急需解决的技术问题。



技术实现要素:

本发明的目的是提供一种程序检测方法、装置、设备及可读存储介质,以对fpga上的winograd程序的进行检测,以保障整个cnn算法的准确度。

为解决上述技术问题,本发明提供如下技术方案:

一种程序检测方法,包括:

在接收到winograd程序检测指令时,获取测试数据;

利用所述卷积神经网络的目标算法程序,对所述测试数据进行卷积计算,获得卷积结果;所述目标算法程序为以滑窗方式实现所述卷积神经网络的算法程序;

将所述测试数据发送给fpga,以便所述fpga利用所述winograd程序对所述测试数据进行快速卷积计算;

接收所述fpga发送的快速卷积结果,并计算所述快速卷积结果与所述卷积结果的相似度;

当所述相似度大于阈值时,确定所述winograd程序正确。

优选地,利用所述卷积神经网络的目标算法程序,对所述测试数据进行卷积计算,获得卷积结果,包括:

利用所述目标算法程序,对所述测试数据进行卷积计算,将所述卷积神经网络的第一层结果作为所述卷积结果;

相应地,所述fpga利用所述winograd程序对所述测试数据进行快速卷积计算,包括:

所述fpga利用所述winograd程序对所述测试数据进行快速卷积计算,并将快速计算得到所述卷积神经网络的第一层结果作为所述快速卷积结果。

优选地,还包括:

获取所述卷积神经网络的滤波器参数;

将所述滤波器参数分别设置在所述目标卷积算法程序和winograd程序中。

优选地,将所述测试数据发送给所述fpga,包括:

创建所述pfga板卡运行环境,并初始化板卡参数;

将所述测试数据发送给所述fpga。

优选地,所述fpga利用所述winograd程序对所述测试数据进行快速卷积计算,包括:

所述fpga启动kernel,并利用所述winograd程序对所述测试数据进行快速卷积计算。

优选地,计算所述快速卷积结果与所述卷积结果的相似度,包括:

计算所述快速卷积结果与所述卷积结果的比值,利用所述比值确定所述相似度;

或,计算所述快速卷积结果与所述卷积结果的差值,利用所述差值确定所述相似度。

优选地,当所述相似度小于或等于所述阈值时,还包括:

确定所述winograd程序错误。

一种程序检测装置,包括:

测试数据获取模块,用于在接收到winograd程序检测指令时,获取测试数据;

卷积计算模块,用于利用所述卷积神经网络的目标算法程序,对所述测试数据进行卷积计算,获得卷积结果;所述目标算法程序为以滑窗方式实现所述卷积神经网络的算法程序;

测试数据发送模块,用于将所述测试数据发送给fpga,以便所述fpga利用所述winograd程序对所述测试数据进行快速卷积计算;

相似度计算模块,用于接收所述fpga发送的快速卷积结果,并计算所述快速卷积结果与所述卷积结果的相似度;

检测结果确定模块,用于当所述相似度大于阈值时,确定所述winograd程序正确。

一种程序检测设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述程序检测方法的步骤。

一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述程序检测方法的步骤。

应用本发明实施例所提供的方法,在接收到winograd程序检测指令时,获取测试数据;利用卷积神经网络的目标算法程序,对测试数据进行卷积计算,获得卷积结果;目标算法程序为以滑窗方式实现卷积神经网络的算法程序;将测试数据发送给fpga,以便fpga利用winograd程序对测试数据进行快速卷积计算;接收fpga发送的快速卷积结果,并计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。

由于深度神经卷积网络的目标算法程序,即实现滑窗算法的实现流程,只需要使用循环嵌套便可将卷积算法准确表达出,且具有代码简单,出错概率小的优点。又因winograd程序为实现卷积神经网络的快速算法程序,也就是说,正确表达的winograd程序与目标算法程序在计算同一个输入数据的卷积计算结果时,所得到的两个卷积结果应当一致或保持在一定差异范围内,即具有相似性。基于此,在将winograd程序写入fpga之后,当接收到winograd程序检测指令时,首先获取用于检验的测试数据。然后在cpu中利用卷积神经网络的目标算法程序对测试数据进行卷积计算,获得卷积结果。与此同时,可将测试数据发送给fpga。fpga得到测试数据之后,利用winograd程序对测试数据进行快速卷积计算,然后将快速卷积计算结果发送给cpu。cpu接收fpga发送的快速卷积结果之后,计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。如此,便可通过运行在cpu中的目标算法程序,对fpga中的winograd程序进行检测,保障了winograd算法部分的准确率,可提升fpga内的cnn算法的准确度,进一步提高在fpga上所进行计算机视觉任务的准确率。

相应地,本发明实施例还提供了与上述程序检测方法相对应的程序检测装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中一种程序检测方法的实施流程图;

图2为创建板卡运行环境函数示意图;

图3为初始化板卡参数函数示意图;

图4为本发明实施例中一种程序检测方法的具体流程图;

图5为本发明实施例中一种程序检测装置的结构示意图;

图6为本发明实施例中一种程序检测设备的结构示意图;

图7为本发明实施例中一种程序检测设备的具体结构示意图。

具体实施方式

本发明的核心是提供一种程序检测方法,该方法将winograd算法与目标算法的优势相结合,提出以目标算法程序的运行结果来检验winograd算法程序运行结果的方式,进一步确定winograd算法程序是否正确表达了winograd算法的方法。

其中,快速winograd算法简介:假设f(m,r)表示输入数据大小为m,滤波器大小为r的一维卷积,而f(mxm,rxr)表示输入数据大小为m*m,滤波器大小为r*r的二维卷积。一维卷积f(m,r)的winograd快速过滤算法可以写成矩阵形式:y=at[(gg)·(btd)];f(m,r)与其自身嵌套可获得最小二维卷积f(m*m,r*r)的winograd快速过滤算法,可表示为:y=at[(gggt)·(btdb)]a,其中g为滤波数据,d为输入数据,g,a,b为三个变换矩阵。以f(4,3)为例,g,b,a的值如下所示:

在fpga上代码实现winograd算法时,需要按以上公式进行计算,以一维f(4,3)为例,d=[d1,d2,d3,d4,d5],g=[g0,g1,g2],计算btd需要用代码表达出6个数学表达式:

floattrans_input0=4.0f*d1-5.0f*d3+d5;

floattrans_input1=-4.0f*d2-4.0f*d3+d4+d5;

floattrans_input2=4.0f*d2-4.0f*d3-d4+d5;

floattrans_input3=-2.0f*d2-d3+2.0f*d4+d5;

floattrans_input4=2.0f*d2-d3-2.0f*d4+d5;

floattrans_input5=4.0f*d2-5.0f*d4+d5;

计算gg需要用代码表达出6个数学表达式:

floattrans_tilter0=one_over_4*g0;

floattrans_filter1=minus_one_over_6*g0+minus_one_over_6*g1+minus_one_over_6*g2;

floattrans_filter2=minus_one_over_6*g0+one_over_6*g1+minus_one_over_6*g2;

floattrans_filter3=one_over_24*g0+one_over_12*g1+one_over_6*g2;

floattrans_filter4=one_over_24*g0-one_over_12*g1+one_over_6*g2;

floattrans_filter5=g2;

假设btd与gg点乘的结果为[mul0,mul1,mul2,mul3,mul4,mul5],最后计算得到最终结果y需要用代码表达4个数学表达式:

floatresult0=mul0+mul1+mul2+mul3+mul4;

floatresult1=mul1-mul2+2.0f*mul3-2.0f*mul4;

floatresult2=mul1+mul2+4.0f*mul3+4.0f*mul4;

floatresult3=mul1-mul2+8.0f*mul3-8.0f*mul4+mul5;

如上所示,一维f(4,3)的winograd代码中共需手动编写6+6+4=16个四则运算表达式。类似的,二维f(4x4,3x3)则至少包含(6x6+6x6)+(6x3+6x6)+(4x6+4x4)=166个数学表达式。代码中需要手动编写的表达式数据急剧增加,且每一个表达中包含加减乘除四则运算,不同的常数和不同的变量。如此一来,表达式的繁多复杂使得代码式出错几率大大增加。

传统的卷积算法简介:若按照传统的卷积算法计算f(4x4,3x3),如采用滑窗方式实现,则程序中只需要使用四个for循环嵌套计算,代码简单,出错概率小。传统算法程序如下:

经以上分析可知,fpgakernel端实现的winograd(矩阵乘法)算法代码书写复杂,出错概率高,而传统的卷积算法在host端实现时代码书写简单,出错率极低。本方法将结合这两种算法的优点,对winograd算法进行改进。具体做法如下:

fpgakernel端的winograd算法表达式不变,但将其计算的第一层cnn卷积结果传回host端,同时在host端实现传统的卷积计算,另起一个线程计算第一层cnn的卷积结果。待计算完后,比较host端传统卷积算法的计算结果与kernel端传回的winograd算法计算结果,如果计算结果差异很小,在预期许可范围内,说明winograd计算结果正确,kernel端cnn程序继续运行;如果计算结果存在的差异超出预期结果,则说明winograd算法表达式出错,需中断程序进行检查修改。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

请参考图1,图1为本发明实施例中一种程序检测方法的流程图,该方法可应用于cpu中,该方法包括以下步骤:

s101、在接收到winograd程序检测指令时,获取测试数据。

其中,winograd程序为实现卷积神经网络的快速算法程序。

当开发人员完成winograd程序的代码开发之后,并将winograd程序写入fpga之后,可通过在可视化界面或通过命令行的方式向cpu发送winograd程序检测指令。在cpu接收到winograd程序检测指令时,cpu可获取测试winograd程序的数据。具体的,该测试数据可具体为图像数据、矩阵。获取测试数据可通过接口接收外部传入的测试数据,也可直接从存储设备中读取参数数据。

s102、利用卷积神经网络的目标算法程序,对测试数据进行卷积计算,获得卷积结果。

其中,目标算法程序为以滑窗方式实现卷积神经网络的算法程序。

在本发明实施例中,可以预先编写卷积神经网络的目标算法程序。当获取到测试数据之后,便可利用目标算法程序,对测试数据进行卷积计算,得到卷积结果。其中,目标算法程序还可选用傅里叶或im2col方式实现卷积神经网络的算法程序。

其中,滑窗算法,这种方法是最直观最简单的方法。im2col算法:目前几乎所有的主流计算框架包括caffe,mxnet等都实现了该方法,该方法把整个卷积过程转化成了gemm过程,而gemm在各种blas库中都是被极致优化的。fft算法:傅里叶变换和快速傅里叶变化是在经典图像处理里面经常使用的计算方法。由于滑窗算法、傅里叶算法或im2col算法为常见算法,在此不再赘述具体的处理逻辑。

s103、将测试数据发送给fpga,以便fpga利用winograd程序对测试数据进行快速卷积计算。

得到测试数据之后,还需将测试数据发送给fpga。具体的,本发明实施例中的fpga可为具有可编辑逻辑门的芯片或设备。当fpga接收到测试数据之后,可利用winograd程序对测试数据进行快速卷积计算,得到快速卷积结果。fpga计算出快速卷积结果之后,便可将该快速卷积结果返回至cpu。

其中,将测试数据发送给fpga,具体包括:

步骤一、创建pfga板卡运行环境,并初始化板卡参数;

步骤二、将测试数据发送给fpga。

为便于描述,下面将上述步骤一和步骤二结合起来进行说明。

首先创建出fpga板卡运行环境,然后初始化板卡参数之后,可将测试数据发送给fpga。其中,创建板卡运行环境和初始化板卡参数都可通过调用intel封装好的函数对板卡进行操作,如可调用如图2所示的创建板卡运行环境的函数,调用如图3所示的初始化板卡参数的函数。

fpga接收到测试数据之后,可通过启动kernel,并利用winograd程序对测试数据进行快速卷积计算。其中,kernel为fpga内具有事件的调度和同步,进程间的通信(消息传递),存储器管理,进程管理的实时操作系统。如此,便可在得到快速卷积结果之后,将结果返回至cpu中。

s104、接收fpga发送的快速卷积结果,并计算快速卷积结果与卷积结果的相似度。

当cpu接收到fpga法定快速卷积结果之后,可计算快速卷积结果与卷积结果的相似度。

具体的,由于卷积神经网络的目标算法和winograd算法分别对应的程序对同一输入数据进行卷积计算之后,计算结果应当一致或具有较高的相似度。又因目标算法程序代码相对简单,不易出错,因此,可利用目标算法程序对测试数据的进行卷积计算得到的卷积结果作为参考值,当得到winograd算法程序的快速卷积计算结果之后,判断卷积结果和快速卷积结果的相似度便可确定winograd程序是否正确。

具体的,该相似度的计算方式包括但不限于以下两种方式,在实际应用中,可任选一种相对度计算方式:

方式1:计算快速卷积结果与卷积结果的比值,利用比值确定相似度。通过判断两个数值的比值与1的关系,便可确定出这两个数的相似度。具体的,比值约接近于1,则表明这两个数值的相似度越高。基于此,在得到快速卷积结果和卷积结果之后,可计算出快速卷积结果与卷积结果的比值,然后利用该比值确定相似度。具体的,在计算快速卷积结果与卷积结果的比值时,保障比值在(0,1]之间(即,取计算快速卷积结果比卷积结果,或卷积结果比计算快速卷积结果这两个结果中小于或等于0的结果作为快速卷积结果与卷积结果的比值),规定比值为1,相似度为100%,若比值在(0-1),则直接将比值百分化之后,将百分比确定为相似度。

方式2:计算快速卷积结果与卷积结果的差值,利用差值确定相似度。具体的,可规定差值为0时,相似度为100%,规定出不同的差值为不同的相似度,如规定差值为1时,相似度为99%,差值为2是,相似度为98%。按照一定的比例,遵循差值越大,相似度越小即可。

s105、当相似度大于阈值时,确定winograd程序正确。

在本发明实施例中,可设置一个阈值,该阈值用来与相似度进行比较,以确定winograd程序是否正确。具体的,可在相似度大于阈值时,确定winograd程序正确。当相似度小于或等于阈值时,确定winograd程序错误。该阈值的数值可确定为99%,或99.9%,或99.999%。

应用本发明实施例所提供的方法,在接收到winograd程序检测指令时,获取测试数据;利用卷积神经网络的目标算法程序,对测试数据进行卷积计算,获得卷积结果;目标算法程序为以滑窗方式实现卷积神经网络的算法程序;将测试数据发送给fpga,以便fpga利用winograd程序对测试数据进行快速卷积计算;接收fpga发送的快速卷积结果,并计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。

由于深度神经卷积网络的目标算法程序,即实现滑窗算法的实现流程,只需要使用循环嵌套便可将卷积算法准确表达出,且具有代码简单,出错概率小的优点。又因winograd程序为实现卷积神经网络的快速算法程序,也就是说,正确表达的winograd程序与目标算法程序在计算同一个输入数据的卷积计算结果时,所得到的两个卷积结果应当一致或保持在一定差异范围内,即具有相似性。基于此,在将winograd程序写入fpga之后,当接收到winograd程序检测指令时,首先获取用于检验的测试数据。然后在cpu中利用卷积神经网络的目标算法程序对测试数据进行卷积计算,获得卷积结果。与此同时,可将测试数据发送给fpga。fpga得到测试数据之后,利用winograd程序对测试数据进行快速卷积计算,然后将快速卷积计算结果发送给cpu。cpu接收fpga发送的快速卷积结果之后,计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。如此,便可通过运行在cpu中的目标算法程序,对fpga中的winograd程序进行检测,保障了winograd算法部分的准确率,可提升fpga内的cnn算法的准确度,进一步提高在fpga上所进行计算机视觉任务的准确率。

需要说明的是,基于上述实施例,本发明实施例还提供了相应的改进方案。在优选/改进实施例中涉及与上述实施例中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在本文的优选/改进实施例中不再一一赘述。

优选地,在确定winograd程序是否正确时,还可根据相似度计算原理,可直接将其中差值与比值与预先设置的判断阈值进行比值,以确定winograd程序是否正确。具体的,当计算出卷积结果和快速卷积结果的差值之后,若该差值小于10-3,则确定winograd程序正确,或卷积结果与快速卷积结果之间的比值大于0.999,则确定winograd程序正确。当然,其中的10-3和0.999的判断阈值可根据实际精度需求进行调整。

优选地,由于卷积神经网络中包括若干卷积层,且卷积算法可通过循环调用的方式减少代码数量,因此,在进行winograd程序测试时,可仅对第一层卷积计算结果进行比对即可。具体的,即步骤s102可具体为利用目标算法程序,对测试数据进行卷积计算,将卷积神经网络的第一层结果作为卷积结果;相应地,步骤s104中fpga利用winograd程序对测试数据进行快速卷积计算,具体为fpga利用winograd程序对测试数据进行快速卷积计算,并将快速计算得到卷积神经网络的第一层结果作为快速卷积结果。如此,便可缩短winograd程序的验证时间。

优选地,在进行winograd程序测试之前,还可设置卷积神经网络中的滤波器参数。具体的,即获取卷积神经网络的滤波器参数,将滤波器参数分别设置在目标卷积算法程序和winograd程序中。如此,便可保障目标卷积算法程序和winograd程序内的滤波器参数一致,同时也可分别测试出不同滤波器参数下,winograd程序的准确率。

实施例二:

为了便于本领域技术人员更好的理解本发明实施例所提供的程序检测方法,下面以具体的应用场景为例,对本发明实施例所提供的程序检测方法进行详细说明。

请参考图4,图4为本发明实施例中一种程序检测方法的具体流程图。

fpgakernel端winograd程序表达的winograd算法表达式不变,但将其计算的第一层cnn卷积结果传回host(主机端,同上文的cpu或处理器)端,同时在host端实现目标的卷积计算,另起一个线程计算第一层cnn的卷积结果。待计算完后,比较host端目标卷积算法的计算结果与kernel端传回的winograd算法计算结果,如果计算结果差异很小,在预期许可范围内,说明winograd计算结果正确,kernel端cnn程序继续运行;如果计算结果存在的差异超出预期结果,则说明winograd算法表达式出错,需中断程序进行检查修改。

具体的,首先将测试数据和filter数据(同上文的滤波器参数)输入至cpu缓存中。然后,在host端启动两个线程,其中,线程1用于按照目标卷积算法计算卷积;线程2用于启动kernel利用fpga板卡加速计算cnn。

线程2启动后首先创建fpga板卡运行环境、初始化板卡参数,然后将测试数据和filter数据写入fpga板卡缓存,接着启动fpgakernel程序进行运算。即,kernel程序按照winograd算法计算卷积,得到第一层cnn卷积后将卷积结果返回host端。

线程1启动后,首先获取input和filter数据,然后按照目标卷积算法计算第一层cnn卷积结果。接收到kernel端返回的winograd卷积结果数据。然后比较两种方法获取的卷积结果差异,如果差异小于10-3,则说明winograd算法程序表达无误。如果差异超出预期范围,则说明kernel的winograd算法程序的表达式书写存在问题,需中断程序进行检查修改。通过增加host端验证程序来确保winograd计算结果准确无误,便可判断出在fpga上运行的winograd算法程序是否正确,并在有误的情况下,进行改进。从而进一步保证整个cnn网络的计算结果无误。

实施例二:

相应于上面的方法实施例,本发明实施例还提供了一种程序检测装置,下文描述的程序检测装置与上文描述的程序检测方法可相互对应参照。

参见图5示,该装置包括以下模块:

测试数据获取模块101,用于在接收到winograd程序检测指令时,获取测试数据;其中,winograd程序为实现卷积神经网络的快速算法程序;

卷积计算模块102,用于利用卷积神经网络的目标算法程序,对测试数据进行卷积计算,获得卷积结果;目标算法程序为以滑窗方式实现卷积神经网络的算法程序

测试数据发送模块103,用于将测试数据发送给fpga,以便fpga利用winograd程序对测试数据进行快速卷积计算;

相似度计算模块104,用于接收fpga发送的快速卷积结果,并计算快速卷积结果与卷积结果的相似度;

检测结果确定模块105,用于当相似度大于阈值时,确定winograd程序正确。

应用本发明实施例所提供的装置,在接收到winograd程序检测指令时,获取测试数据;利用卷积神经网络的目标算法程序,对测试数据进行卷积计算,获得卷积结果;目标算法程序为以滑窗方式实现卷积神经网络的算法程序;将测试数据发送给fpga,以便fpga利用winograd程序对测试数据进行快速卷积计算;接收fpga发送的快速卷积结果,并计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。

由于深度神经卷积网络的目标算法程序,即实现滑窗算法的实现流程,只需要使用循环嵌套便可将卷积算法准确表达出,且具有代码简单,出错概率小的优点。又因winograd程序为实现卷积神经网络的快速算法程序,也就是说,正确表达的winograd程序与目标算法程序在计算同一个输入数据的卷积计算结果时,所得到的两个卷积结果应当一致或保持在一定差异范围内,即具有相似性。基于此,在将winograd程序写入fpga之后,当接收到winograd程序检测指令时,首先获取用于检验的测试数据。然后在cpu中利用卷积神经网络的目标算法程序对测试数据进行卷积计算,获得卷积结果。与此同时,可将测试数据发送给fpga。fpga得到测试数据之后,利用winograd程序对测试数据进行快速卷积计算,然后将快速卷积计算结果发送给cpu。cpu接收fpga发送的快速卷积结果之后,计算快速卷积结果与卷积结果的相似度;当相似度大于阈值时,确定winograd程序正确。如此,便可通过运行在cpu中的目标算法程序,对fpga中的winograd程序进行检测,保障了winograd算法部分的准确率,可提升fpga内的cnn算法的准确度,进一步提高在fpga上所进行计算机视觉任务的准确率。

在本发明的一种具体实施方式中,卷积计算模块102,具体用于在fpga利用winograd程序对测试数据进行快速卷积计算,并将快速计算得到卷积神经网络的第一层结果作为快速卷积结果时,利用目标算法程序,对测试数据进行卷积计算,将卷积神经网络的第一层结果作为卷积结果。

在本发明的一种具体实施方式中,还包括:

滤波器设置模块,用于获取卷积神经网络的滤波器参数;将滤波器参数分别设置在目标卷积算法程序和winograd程序中。

在本发明的一种具体实施方式中,测试数据发送模块103,具体用于创建pfga板卡运行环境,并初始化板卡参数;将测试数据发送给fpga,以便fpga启动kernel,并利用winograd程序对测试数据进行快速卷积计算。

在本发明的一种具体实施方式中,相似度计算模块104,具体用于计算快速卷积结果与卷积结果的比值,利用比值确定相似度;或,计算快速卷积结果与卷积结果的差值,利用差值确定相似度。

在本发明的一种具体实施方式中,检测结果确定模块105,具体用于当相似度小于或等于阈值时,确定winograd程序错误。

实施例四:

相应于上面的方法实施例,本发明实施例还提供了一种程序检测设备,下文描述的一种程序检测设备与上文描述的一种程序检测方法可相互对应参照。

参见图6所示,该程序检测设备包括:

存储器d1,用于存储计算机程序;

处理器d2,用于执行计算机程序时实现上述方法实施例的程序检测方法的步骤。

具体的,请参考图7,图7为本实施例提供的一种程序检测设备的具体结构示意图,该程序检测设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在程序检测设备301上执行存储介质330中的一系列指令操作。

程序检测设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等。

上文所描述的程序检测方法中的步骤可以由程序检测设备的结构实现。

实施例五:

相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种程序检测方法可相互对应参照。

一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的程序检测方法的步骤。

该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1