发明内容
有鉴于此,本发明的目的在于提供一种神经网络模型处理方法、装置及终端,以缓解上述限制量化神经网络的计算速率,以及大网络的布署受到限制的技术问题。
第一方面,本发明实施例提供了一种神经网络模型处理方法,该方法包括:对于神经网络模型的每个卷积层,从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数;根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果;对计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的参数编码字符之一。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,上述从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数的步骤包括:按照当前卷积层的层类型确定输入数据;其中,层类型包括第一卷积层、中间卷积层和最后卷积层;如果确定的输入数据包含权重参数,从存储器读取当前卷积层的权重编码字符,对权重编码字符进行解码得到当前卷积层的权重参数;如果确定的输入数据包含激活参数,从存储器读取当前卷积层的激活编码字符,对激活编码字符进行解码得到当前卷积层的激活参数。
结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第二种可能的实施方式,其中,上述按照当前卷积层的层类型确定输入数据的步骤,包括:如果当前卷积层的层类型为第一层卷积层,确定当前卷积层的输入数据包括权重参数;如果当前卷积层的层类型为中间卷积层和最后卷积层,确定当前卷积层的输入数据包括权重参数和激活参数。
结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,上述对计算结果进行编码,将计算结果的编码存储至存储器的步骤包括:如果当前卷积层的层类型属于最后卷积层,将计算结果存储至存储器;如果当前卷积层的层类型不属于最后卷积层,对计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的激活编码字符。
结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,上述按照当前卷积层的层类型确定输入数据的步骤之前,还包括:统计神经网络模型包含的卷积核类型的个数;根据卷积核类型的个数设置编码算法和编码算法对应的解码算法;采用编码算法对神经网络模型中各个卷积层的权重参数进行编码,得到各个卷积层的权重编码字符;将各个卷积层的权重编码字符存储至存储器。
结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,上述对权重编码字符进行解码和对激活编码字符进行解码均采用设置的解码算法进行;对计算结果进行编码采用设置的编码算法进行。
结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,上述对计算结果进行编码的步骤,包括:将计算结果拆分成多个数据块;对多个数据块进行编码,生成各个数据块对应的编码序列;将各个数据块以编码序列的形式写入存储器。
结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,上述方法应用于可编程逻辑器件,存储器为双倍速率同步动态随机存储器DDR。
第二方面,本发明实施例还提供一种神经网络模型处理装置,该装置设置于终端,包括:解码模块,用于对于神经网络模型的每个卷积层,从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数;计算模块,用于根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果;编码模块,用于对计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的参数编码字符之一。
第三方面,本发明实施例还提供一种终端,该终端包括存储器以及处理器,存储器用于存储支持处理器执行上述第一方面所述方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。
第四方面,本发明实施例还提供一种计算机存储介质,用于存储计算机程序指令,当计算机执行所述计算机程序指令时,执行如上述第一方面所述的方法。
本发明实施例带来了以下有益效果:
本发明实施例所述的神经网络模型处理方法、装置及终端,对于神经网络模型的每个卷积层,能够从存储器读取当前卷积层的参数编码字符,并进行解码得到当前卷积层的参数,进而根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果,并进一步对计算结果进行编码,作为当前卷积层的下一卷积层的参数编码字符之一,上述将计算结果进行编码的方式,有效减少了神经网络模型的存储量,为终端布署大型的神经网络模型提供了可能性,同时,也节约了存储器读取的次数,减少了计算过程中与存储器之间的交互时间,进一步加速了神经网络模型的推理过程,在降低功耗的同时,也有助于提高神经网络模型的计算速率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,虽然量化神经网络模型中的权重值和激活函数的参数量和计算量相比浮点神经网络有很大的提升,但在FPGA实现的过程仍发现,每次送入卷积计算模块的参数量过多,导致在计算之前从DDR读取权重值和激活值,以及计算结束后将新的计算结果写入DDR的时间成为限制量化神经网络的快速推理的关键因素,同时也是引起FPGA功耗增大的主要来源。
研究表明,量化神经网络模型中的卷积核和特征图的局部模式多数是有重复的,完全记录下网络中所有卷积核的参数以及特征图的结果是没有必要的,容易造成信息冗余引起存储空间的浪费。若采用进一步降低表示权重值和激活值的位数(下限值或者最小极限值为1bit),则会引起性能的较大下降,同时仍存储重复的卷积核和特征图,同样是有信息冗余的现象。
基于此,本发明实施例提供的一种神经网络模型处理方法、装置及终端,可以缓解上述技术问题。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种神经网络处理方法进行详细介绍。
本发明实施例提供了一种神经网络模型处理方法,该神经网络模型可以是预先训练好,并布署在终端上的神经网络模型,例如,在PC端上,利用图形处理器(GraphicsProcessing Unit,GPU)训练一个用于图片处理的量化神经网络,该量化神经网络可以存储在终端的DDR中,以便于终端的FPGA读取该编码量化神经网络。
图1示出了一种神经网络模型处理方法的使用环境示意图,通常,该使用环境可以是基于终端上的硬件环境实现的,具体地,终端上可以包括处理器,以及与处理器连接的存储器,该处理器可以是FPGA,用于读取存储器中存储的神经网络模式,实现神经网络模型在终端上的布署。
进一步,上述处理器可以包括多个功能模块,如,控制模块,以及与控制模块连接的解码模块、编码模块和计算模块等等,以实现本发明实施例所述的神经网络模型处理方法。
具体地,如图2所示的一种神经网络模型处理方法的流程图,该方法可以应用于终端,由终端上的处理器(如,FPGA)执行,该方法包括以下步骤:
步骤S202,对于神经网络模型的每个卷积层,从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数;
具体实现时,为了避免神经网络模型占用较大的存储空间,当神经网络模型布署在终端时,通常以编码的形式进行存储。以量化神经网络为例,当在终端上布署神经网络模型时,可以预先统计该量化神经网络中所有不同的卷积核对应的个数,并按照卷积核的分布情况选择一个合适的编码方案,遍历量化神经网络的卷积核,将卷积核转换成对应的编码形式,再将卷积核编码的量化神经网络和编码方案加载到存储器中。
因此,当终端的处理器读取该神经网络模型时,可以仅读取参数编码字符,并由处理器中的解码模块对读取的参数编码字符进行解码,已得到当前卷积层的参数,有效缩短了处理器的读取时间,提高神经网络模型的计算速率。
步骤S204,根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果;
具体地,该卷积计算的过程,可以通过图1所示的计算模块实现。
步骤S206,对上述计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的参数编码字符之一。
其中,该编码过程可以通过图1所示的编码模块实现,通过编码的方式,重新将计算结果存储至存储器中,可以有效节约神经网络模型在存储器上的存储空间,为布署大型的神经网络模型提供可能性。
本发明实施例所述的神经网络模型处理方法,对于神经网络模型的每个卷积层,能够从存储器读取当前卷积层的参数编码字符,并进行解码得到当前卷积层的参数,进而根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果,并进一步对计算结果进行编码,作为当前卷积层的下一卷积层的参数编码字符之一,上述将计算结果进行编码的方式,有效减少了神经网络模型的存储量,为终端布署大型的神经网络模型提供了可能性,同时也节约了存储器读取的次数,在降低功耗的同时,也有助于提高神经网络模型的计算速率。
在实际使用时,由于神经网络模型通常包括多个卷积层,每个卷积层进行卷积计算时所需的参数也有所不同,因此,在从存储器读取当前卷积层的参数编码字符时,可以根据当前卷积层的层类型确定输入数据,以便针对不同的卷积层进行卷积计算,基于此,上述步骤S202中从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数的步骤还可以包括以下过程:
(1)按照当前卷积层的层类型确定输入数据;
其中,该层类型包括第一卷积层、中间卷积层和最后卷积层;
具体地,如果当前卷积层的层类型为第一层卷积层,在确定输入数据时,所确定的当前卷积层的输入数据可以包括权重参数;如果当前卷积层的层类型为中间卷积层和最后卷积层,在上述确定的当前卷积层的输入数据可以包括权重参数和激活参数。
(2)如果确定的输入数据包含权重参数,从存储器读取当前卷积层的权重编码字符,对权重编码字符进行解码得到当前卷积层的权重参数;
(3)如果确定的输入数据包含激活参数,从存储器读取当前卷积层的激活编码字符,对激活编码字符进行解码得到当前卷积层的激活参数。
具体实现时,上述权重参数和激活参数也可以称为卷积核的权重值和激活值,由于上述权重值和激活值所占存储量较大,会导致每个卷积层在进行卷积计算时,从存储器读取数据和写入数据的时间较长,因此,对卷积核进行编码时,通常会将对应的权重值和激活值进行编码,形成上述参数编码字符。
在实际使用时,上述对卷积核进行编码的过程通常在确定输入数据的步骤之前进行,具体地,对卷积核进行编码可以采用诸如霍夫曼编码算法实现,因此,对于训练好的神经网络模型,需要记录下所有不同卷积核的个数,以便于根据所有卷积核的个数进行编码,进而将神经网络模型的卷积核转换成对应的编码结果。当神经网络模块布署在终端时,在终端的FPGA内部,可以实现对应的解码过程,使得FPGA从存储器,如DDR,只读入编码字符即可,然后在FPGA中将其转换成对应的卷积核,再进行卷积计算,具体地,对卷积核的编码可以包括以下过程:
(1)统计神经网络模型包含的卷积核类型的个数;
(2)根据卷积核类型的个数设置编码算法和编码算法对应的解码算法;
(3)采用上述编码算法对神经网络模型中各个卷积层的权重参数进行编码,得到各个卷积层的权重编码字符;
(4)将各个卷积层的权重编码字符存储至存储器。
当各个卷积层的权重编码字符存储至存储器之后,对于神经网络模型的每个卷积层,如果当前卷积层的层类型为第一层卷积层,确定的输入数据就会包括权重参数,进而读取当前第一层卷积层的权重编码字符进行解码,并送入第一层的卷积函数进行卷积计算。
通常,对权重编码字符进行解码和对激活编码字符进行解码均采用设置的解码算法进行;对计算结果进行编码也可以采用设置的编码算法进行。具体地,上述编码算法可以参考霍夫曼编码算法实现,对应的解码算法,也可以结合霍夫曼编码算法实现,例如,对于训练好的神经网络模型,可以按照卷积核的数量的递增顺序或者递减顺序对卷积核的种类进行排序,根据卷积核出现的概率进行编码等,再将编码方案加载到存储器中,其具体的编码算法还可以根据实际使用情况进行设置,本发明实施例对此不进行限制。
在实际使用时,除上述确定输入数据的过程需要参考当前卷积层的层类型以外,在对每个卷积层的计算结果进行编码时,也需要考虑当前卷积层的层类型。因此,上述步骤S206中,对上述计算结果进行编码,并将计算结果的编码存储至存储器的步骤还包括以下过程:
(1)如果当前卷积层的层类型属于最后卷积层,将计算结果存储至存储器;即,最后卷积层的计算结果将不再进行编码,直接传回存储器进行存储;
(2)如果当前卷积层的层类型不属于最后卷积层,则可以对计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的激活编码字符,如此往复神经网络模型的所有卷积层,直至最后卷积层后,按照上面(1)的过程,直接传回存储器进行存储。
具体实现时,考虑到计算结果占用较多空间,因此,对计算结果进行编码的步骤,还可以包括以下过程:
(1)将计算结果拆分成多个数据块;
(2)对多个数据块进行编码,生成各个数据块对应的编码序列;
(3)将各个数据块以编码序列的形式写入存储器中。
具体地,当神经网络模型布署在终端后,可以在计算过程中,将得到的当前卷积层的计算结果,如特征图,拆分成多个局部块(eg.2x2,4x1...),在FPGA内部完成编码处理,然后以编码序列的形式写入存储器,下一层卷积层计算时,从存储器读入上一层计算结果时,可以经过对应的解码模块可以得到原来的局部块,经过拼接,回到原有的特征图。
其中,上述多个局部块通常是统一大小的局部块,上述拆分的依据,是因为对于一个数值的量化结果通常只有有限种,所以当局部块比较小的时候,如2x2,则所有可能出现的情况是可以列举出来的,又因为一般特征图的结果由于做归一化的处理会呈现正态分布的趋势,所以,对于多个局部块的编码,可以提前根据正态分布情况进行,例如,进行霍夫曼编码等等,然后生成局部块的编码序列。
具体实现时,当上述神经网络模型布署在终端时,在终端上可以形成如图1所示的使用环境,上述实施例提供的神经网络模型处理方法,可以应用于可编程逻辑器件,如FPGA,存储器通常为双倍速率同步动态随机存储器DDR。
为了便于理解,以终端布署的神经网络模型为量化神经网络为例,结合图1所示的使用环境,对上述神经网络模型处理方法进行说明,其中,图1所示的处理器为可编程逻辑器件,如FPGA,存储器为DDR,该量化神经网络可以是多层卷积神经网络,对图片进行卷积计算,实现图片的处理过程,例如,图片分类,或者,图片的特征提取等等。
具体地,包括以下步骤:
(1)FPGA读取DDR中的编码方案,对解码模块进行初始化,具体地,该解码模块可以包括权重参数解码子模块和激活参数解码子模块;对解码模块初始化的过程,可以给相应的解码子模块设置解码算法,以便于对参数编码字符进行解码,得到当前卷积层的参数。
(2)当该终端送入一张图片时,由于多层卷积神经网络的第一层卷积层比较特殊,其输入可以是0-255的uint8类型数据,因此,需要专门送入到计算第一层卷积层输入的卷积函数,所以第一层卷积层的计算过程中只将权重值进行解码,而不把输入的图片经过解码模块。
(3)第一层卷积层计算结果首次进入编码模块,编码模块对计算结果进行编码,并将计算结果的编码存储至存储器作为下一卷积层的激活编码字符。
(4)第二层卷积层的计算过程,FPGA需要加载上一层卷积层的计算结果,进行卷积计算,具体地,需要从DDR中读入第一层卷积层对应的激活编码字符和权重编码字符,这两个编码字符都有各自的解码单元,即上述权重参数解码子模块和激活参数解码子模块,进行解码后,可以得到当前卷积层的权重参数和激活参数(也称为权重值和激活值),然后再送入计算模块进行卷积计算,得到该第二层卷积层的计算结果;
(5)将第二层卷积层的计算结果再送入编码模块进行编码后,再送回DDR存储,如此往复量化神经网络中所有的卷积层,直到最后卷积层,通常,最后卷积层的卷积计算结果将不再经过编码模块,而是直接传回DDR进行存储。
上述计算过程,通过对前一层卷积层的计算结果进行编码,将编码的计算结果再返回到DDR中,使得FPGA从DDR中再次读取相关的权重参数和激活参数时,可以仅读取参数编码字符,并进行解码以得到当前卷积层所需的权重参数和激活参数,与现有技术中对相关参数直接读取的方式相比,其读取的内容较短,因此,减少了读取的次数,进而有效缩短了FPGA与DDR的交互时间,加快了神经网络模型的推理过程,在降低功耗的同时,也有助于提高量化神经网络的计算速率。
为了便于理解,在上述实施例的基础上,本发明实施例还提供了一种神经网络模型处理装置,如图3所示的一种神经网络模型处理装置的结构示意图,该装置包括以下结构:
解码模块30,用于对于神经网络模型的每个卷积层,从存储器读取当前卷积层的参数编码字符,对参数编码字符进行解码得到当前卷积层的参数;
计算模块32,用于根据当前卷积层的参数对当前卷积层进行卷积计算,得到计算结果;
编码模块34,用于对计算结果进行编码,将计算结果的编码存储至存储器作为当前卷积层的下一卷积层的参数编码字符之一。
本发明实施例提供的神经网络模型处理装置,与上述实施例提供的神经网络模型处理方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
进一步,本发明实施例还提供了一种终端,如包括存储器以及处理器,所述存储器用于存储支持所述处理器执行上述神经网络模型处理方法的程序,处理器被配置为用于执行所述存储器中存储的程序。
本发明实施例还提供了一种计算机存储介质,用于存储计算机程序指令,当计算机执行所述计算机程序指令时,执行上述神经网络模型处理方法。
参见图4,本发明实施例还提供了一种终端的结构示意图,包括:处理器400,存储器401,总线402和通信接口403,处理器400、通信接口403和存储器401通过总线402连接;处理器400用于执行存储器401中存储的可执行模块,例如计算机程序。其中,存储器401可能包含高速随机存取存储器(RAM,RandomAccess Memory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口403(可以是有线或者无线)实现该***网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线402可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。其中,存储器401用于存储程序,处理器400在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的神经网络模型处理装置所执行的方法可以应用于处理器400中,或者由处理器400实现。处理器400可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器400中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器400可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器401,处理器400读取存储器401中的信息,结合其硬件完成上述方法的步骤。
本发明实施例所提供的神经网络模型处理方法、装置及终端的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。