一种深度卷积神经网络加速方法、模块、系统及存储介质
技术领域
本发明涉及深度学习
技术领域
,具体涉及一种深度卷积神经网络加速方法、模块、系统及存储介质。背景技术
深度卷积神经网络(DCNN)已经在计算机视觉、语音识别等方面得到极其广泛的应用。同时随着深度卷积神经网络算法的流行,用硬件去实现神经网络的工作也被越来越多的人所关注。
常规的卷积以及池化计算中,数据通过最大池化(2×2池化尺寸为例)后会舍弃75%已经通过卷积的数据,显然,这部分数据的处理占用了大部分计算时间,且消耗大量功耗。
因此,如何加快深度卷积神经网络的计算速度,降低计算功耗,成为了深度卷积神经网络技术的一项难点。
发明内容
本发明提供的一种深度卷积神经网络加速方法、模块、系统及存储介质,旨在解决现有深度卷积神经网络计算速度低、计算功耗大的问题。
根据第一方面,一种实施例中提供一种深度卷积神经网络加速方法,包括:
获取输入特征;
获取输入特征的高位特征以及低位特征;
对高位特征进行卷积以及最大值池化,得到高位池化结果;
根据高位池化结果,得到对应的最大池化区域;
对低位对应特征进行卷积,得到低位卷积结果,其中,低位对应特征为低位特征中最大池化区域对应的数据;
根据高位池化结果以及低位卷积结果,获得输入特征的最大池化结果。
根据第二方面,一种实施例中提供一种用于深度卷积神经网络的加速模块,包括控制模块以及计算模块;
控制模块用于获取输入特征;
计算模块用于获取输入特征的高位特征以及低位特征;对高位特征进行卷积以及最大值池化,得到高位池化结果;
控制模块还用于根据高位池化结果,得到对应的最大池化区域;
计算模块还用于对低位对应特征进行卷积,得到低位卷积结果,其中,低位对应特征为低位特征中最大池化区域对应的数据;根据高位池化结果以及低位卷积结果,获得输入特征的最大池化结果。
根据第三方面,一种实施例中提供一种用于深度卷积神经网络的加速系统,包括处理器、片外存储模块以及上述技术方案所述的加速模块;加速模块还包括片上存储模块;
处理器用于控制片外存储模块与片上存储模块的数据交换,和/或,处理器为Rocket通用RISC-V处理器。
根据第四方面,一种实施例中提供一种计算机可读存储介质,介质上存储有程序,程序能够被处理器执行以实现如上述技术方案所述的深度卷积神经网络加速方法。
依据上述实施例提供的一种深度卷积神经网络加速方法、模块、系统及存储介质,通过获取输入特征;获取输入特征的高位特征以及低位特征;对高位特征进行卷积以及最大值池化,得到高位池化结果;根据高位池化结果,得到对应的最大池化区域;对低位对应特征进行卷积,得到低位卷积结果,其中,低位对应特征为低位特征中最大池化区域对应的数据;根据高位池化结果以及低位卷积结果,获得输入特征的最大池化结果。可见,采用输入特征的高位特征进行近似卷积,找到最大池化区域,再对低位特征对应的部分进行卷积,直接可以得到低位特征的低位池化结果,最终得到输入特征的最大池化结果因此可以减少输入特征进行最大池化时,减少低位特征75%的冗余卷积乘加操作,最终实现提高卷积池化计算的计算速度,降低计算能耗。
附图说明
图1为现有技术的一种卷积-最大池化计算过程的示意图;
图2为一种实施例提供的一种用于深度卷积神经网络的加速模块以及系统的结构示意图;
图3为一种实施例提供的一种深度卷积神经网络加速方法的示意性流程图;
图4至图6、图8为一种实施例提供的一种深度卷积神经网络加速方法中卷积-最大池化计算过程的示意图;
图7为现有技术的一种卷积-最大池化计算过程的示意图;
图9为一种实施例提供的一种深度卷积神经网络加速方法中非零值与稀疏映射矩阵生成的过程示意图;
图10为一种实施例提供的一种深度卷积神经网络加速方法中全跳零计算过程示意图;
图11为一种实施例提供的一种深度卷积神经网络加速方法中建立PE阵列的逻辑映射的示意图;
图12为一种实施例提供的一种用于深度卷积神经网络的加速模块中的计算单元的结构示意图;
图13为一种实施例提供的一种用于深度卷积神经网络的加速模块中的子计算单元的结构示意图;
图14为另一种实施例提供的一种用于深度卷积神经网络的加速模块以及系统的结构示意图;
图15为一种实施例提供的一种用于深度卷积神经网络的加速模块中稀疏映射模块的结构示意图。
附图标记:10-处理器;20-片外存储模块;30-加速模块;31-控制模块;32-片上存储模块;33-计算模块;331-PE阵列;3301-控制器;3302-乘法器;3303-寄存器;3304-多路复用器;332-激活函数模块;34-稀疏映射模块;341-写入地址生成模块;342-写入缓存模块;343-异步FIFO数据模块;344-读入地址生成模块。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。
实施例一
如图1所示,现有的卷积神经网络(CNN)或深度卷积神经网络(DCNN),都会涉及卷积以及池化计算。输入特征(一般为像素矩阵)进行卷积后产生相应的卷积结果,一般以输入特征的每一个像素点(或数据)作为卷积中心进行卷积,一般对边缘数据卷积时还涉及填充。随后对卷积结果进行最大池化,产生最大池化结果。可见,输入特征需要进行16次卷积才能获得卷积结果,而最大池化只提取了卷积结果中的4个数据。也就说,在采用常规的卷积-最大池化的计算方法,卷积结果中有12个数据为冗余计算结果,并不参与最大池化计算,也就说,冗余计算达到12/16=75%。同时,每一个卷积结果的计算,需要卷积核对输入特征的卷积区域进行乘加,当卷积核的大小为3×3时,卷积核的9个权重与输入特征的卷积区域的9个数据相乘后再相加,可见现有的卷积-最大池化计算冗余的计算过程很多。尤其在现有的输入特征尺寸越来越大,导致现有的深度卷积神经网络存在计算速度低、计算功耗大的问题。进一步说明,本实施例提及的池化在无特殊说明的情况下,均为最大池化。
有鉴于此,本发明提供的一种深度卷积神经网络加速方法、模块、系统及存储介质,旨在解决现有深度卷积神经网络计算速度低、计算功耗大的问题。
如图2所示,本发明提供的一种用于深度卷积神经网络的加速模块30,包括控制模块31、片上存储模块32以及计算模块33,本发明提供的一种用于深度卷积神经网络的加速系统包括上述加速模块30、处理器10以及片外存储模块20。
如图3所示,本发明提供的一种深度卷积神经网络加速方法,其采用二级级联的卷积方式,包括以下步骤:
步骤1:控制模块31获取输入特征,例如图片的像素矩阵,其中,输入特征来源于片外存储模块20,控制模块31通过处理器10向片外存储模块20发送读取指令,可以将片外存储模块20中的输入特征传输至片上存储模块32。
步骤2:计算模块33获取输入特征的高位特征以及低位特征。可以是通过激活函数模块332,如激活函数模块332采用ReLU函数,对输入特征进行处理,从而获取输入特征的高位特征以及低位特征。
需要说明的是,上述高位特征以及低位特征,可以将输入特征的前半部分作为高位特征,后半部分作为低位特征。例如,当输入特征的每个像素点的像素值(例如是灰度值)为八位数据,高位特征对应的数据为前四位数据(定义为高位数据),低位特征对应的数据为后四位数据(定义为低位数据)。具体的,以二进制为例,当一个像素点的像素值为200,按二进制进行位数表示为200D=11001000B,则这个像素点的高位数据为1100B=12D,第二数据为1000B=8D。输入特征中的每个像素点的高位数据形成上述高位特征,每个像素点的低位数据形成上述低位特征。应理解,上述仅为举例,并不是限制输入特征的位数,不管是8位、16位或32位数据等偶数位数据均可适用本发明提供的加速方法。
进一步说明,如图4所示,输入特征为图像的像素矩阵,每个像素点的像素值可以为非零值(如图示的a、b、c…s)或零值(如图示的0)。输入特征中的像素点a对应于高位特征中的高位数据a1以及低位特征中的低位数据a2,简单可以理解a=a1+a2。可见,高位特征以及低位特征中的数据的矩阵位置是一一对应的。也就是说,输入特征的每个数据或像素点(零值或非零值),均具有自己的位置坐标。
步骤3:计算模块33对高位特征进行卷积以及最大值池化,得到高位池化结果。
例如,如图5所示,以高位特征中的每个高位数据作为卷积中心,对高位数据进行卷积计算,可以得到高位卷积结果,卷积边缘的数据前,可以采用填充扩展高位特征;对高位卷积结果进行最大值池化计算,可以得到高位池化结果。其中,高位池化结果可以是寄存在计算模块33中的寄存器,也可以说存储加速模块30上的在片上存储模块,或加速系统的片外存储模块。
步骤4:控制模块31根据高位池化结果,得到对应的最大池化区域。
例如,如图5所示,高位池化结果中的数据,可以反推出高位特征中对应卷积中心的高位数据。如图示的高位池化结果中的数据A1,其对应为高位卷积结果的数据A1,而高位卷积结果的数据A1为高位特征的数据a1作为卷积中心的卷积计算结果。因此,根据高位池化结果,可以获得高位卷积结果以及高位特征(即图示中阴影部分的数据)中对应最大池化结果产生的区域(为了便于表述,将此区域定义最大池化区域)。也就是说,可以获得高位特征中产生最大池化结果的高位数据(作为卷积中心时的数据)的位置。通过上文分析可知,高位特征的高位数据与输入特征以及低位特征的低位数据是一一对应。因此,最大池化区域可以应用下一步低位特征的卷积计算中。
步骤5:计算模块33对低位对应特征进行卷积,得到低位卷积结果,其中,低位对应特征为低位特征中最大池化区域对应的数据。
例如,如图6所示,控制模块31根据上述最大池化区域,获得低位特征中最大池化区域对应的低位数据(如图示阴影部分数据),并将这些低位数据发送至计算模块33。为了便于描述,将低位特征中最大池化区域对应的低位数据的集合定义为低位对应特征,计算模块33仅对低位对应特征的低位数据作为卷积中心时对应的卷积区域进行卷积,得到低位卷积结果,等同于得到了低位特征对应的低位池化结果。
进一步说明,如图7所示,现有技术的卷积-最大池化计算方式,低位特征中每个数据作为卷积中心进行一次卷积,最终得到图示的低位池化结果。可见,低位卷积结果中除阴影部分的数据,均是冗余的卷积结果,占比为75%(对应池化窗口大小为2×2)。显然,完成输入特征的最大池化,并不需要这部分数据进行参与。
因此,通过本步骤3,可以直接获得图6所示的低位卷积结果,等同于图7所示的低位池化结果。
步骤6:计算模块33根据高位池化结果以及低位卷积结果,获得输入特征的最大池化结果。
如图8所示,本加速方法,通过将采用输入特征的高位特征进行近似卷积,根据高位池化结果找到最大池化区域,根据高位特征与低位特征的对应关系,再对低位特征对应的部分进行卷积,直接可以得到低位特征的低位卷积结果(相当于对低位特征进行卷积-最大池化计算的结果),最终根据高位池化结果以及低位卷积结果得到输入特征的最大池化结果。上述高位特征与低位特征的对应关系以及卷积对应关系,即为上述二级级联的卷积方式。因此可以减少输入特征进行最大池化时,减少低位特征75%的冗余卷积乘加计算,最终实现提高卷积池化计算的计算速度,降低计算能耗。
本实施例提供的加速方法可以用于边缘计算,例如,可以是应用于云卸载、视频分析、智能家居,还可以是应用于安防摄像头的人脸识别、门禁的人脸识别或者是野外探测的加速计算等。
例如是在人脸识别应用中,本加速方法通过计算机程序的方式实现时,该程序可以存储于人脸识别终端的存储介质中,通过人脸识别终端的处理器执行本加速方法。人脸识别终端的摄像头获取人脸图像,并通过本加速方法进行识别计算,在人脸识别终端生产人脸识别结果,并上传服务器等系统,并通过人脸识别结果进行开门、播放语音等操作。
实施例二
在深度卷积神经网络的应用中,输入特征中具有较多的像素点的数据为零,非零值存在较少。现有技术对在卷积计算时,常规的加速方法为:对零值一般采用判断为零后跳过计算的方式来减少冗余计算,此时还需要一个时钟周期来进行一个零值判断,随后再跳过计算。
为了进一步提过深度卷积神经网络计算的速度,本发明提供的深度卷积神经网络加速方法,还可以做出以下进一步的改进:采用全跳零的计算方式来实现卷积加速。
上述步骤2:计算模块33获取输入特征的高位特征以及低位特征,可以包括:
步骤201:计算模块33根据输入特征,获取输入特征的非零值以及输入特征的稀疏映射矩阵。
步骤202:计算模块33获取非零值的高位特征以及低位特征。
如图9所示,稀疏映射矩阵中的“1”数据位代表非零值,“0”数据位为零值,也就是说,“1”为非零值的稀疏映射标志,“0”为零值的稀疏映射标志。“1”与“0”根据像素点的位置关系形成相应的矩阵,该矩阵定义稀疏映射矩阵。通过非零值与稀疏映射矩阵,可以还原出输入特征的像素矩阵。例如,非零值按从左到右、从上到下的顺序排列填充至稀疏映射矩阵的“1”数据位中,即可获得输入特征。
对非零值对应的数据的进行处理,可以获得非零数据集合的高位特征与低位特征。在后续的卷积结果中,参与卷积的数据均为非零值,也不需对零值进行判断,实现对卷积计算的加速。在实际数据存储中,只有非零值存储在片上存储模块32或片外存储模块20,对不管是在计算还是在数据读取方面,均起到减少时间的作用。
同理,上述稀疏映射矩阵应用于高位卷积结果以及低位卷积结果的对应的特征图像,也就是说,当高位卷积结果以及低位卷积结果作为一个新的输入特征,并进行二次卷积时,可以采用上述的加速方法,进行对高位卷积结果以及低位卷积结果的二次卷积的加速。或应用于其它计算,如池化,也就是说,只有卷积结果中的非零值参与池化。
在上述步骤3:计算模块33对高位特征进行卷积以及最大值池化之前,本加速方法还可以包括:
步骤203:控制模块31根据稀疏映射矩阵,确定卷积核中对应非零值的位置的权重。
对高位数据进行卷积的时候,依旧需要对高位特征中的所有像素点作为卷积中心进行一次卷积,此时卷积核逐点移动,对应高位特征的卷积区域的卷积中心,可以零值与非零值,但是卷积区域的数据必然包括非零值以及零值至少一种。为了提高计算速度,本实施例提出一种全跳零计算的加速方法。
如图10所示,通过稀疏映射矩阵,即可获得下一个卷积区域中,非零值与零值的位置。例如,高位特征中的“0”(图示中的阴影数据,第二行第三列)作为卷积中心时,根据卷积核的大小(图示为3×3),确定卷积区域及其数据。根据稀疏映射矩阵可以确定“0”数据作为卷积中心时对应的卷积区域的非零值(图示的b1、e1以及h1)及其位置。同时,根据稀疏映射矩阵还可以确定对这个卷积区域卷积时,卷积核对应非零值(图示的b1、e1以及h1)的权重(如图示的W、A以及X)。那么该“0”数据作为卷积中心时的卷积结果P(0)为P(0)=W×b1+A×e1+X×h1。计算P(0)只需要三个时钟周期即可完成。
而现有的卷积过程,计算该“0”数据作为卷积中心时的卷积结果为:
P(0)=Q×0+W×b1+E×0+A×e1+S×0+D×0+Z×0+X×h1+C×0,需要9个时钟周期,采用上述方法,可以减少卷积过程中,零值产生的冗余计算以及占用的时钟周期,也就是说跳过高位特征中(对应输入特征)零值的计算,简称为跳零。
因此,采用上述的技术方案,确定各个卷积区域进行卷积时,卷积核中对应非零值的位置的权重,可以对高位特征实现全跳零计算,大大提高计算速度。基于高位特征与低位特征的对应关系,在低位特征进行卷积计算时,也可以实现全跳零计算,最终实现对输入特征的全跳零计算。
基于此,在上述技术方案的步骤2中,对高位特征进行卷积可以包括:通过卷积核中对应非零值的位置的权重对非零值的高位特征进行卷积;
在上述技术方案的在步骤5中,对低位对应特征进行卷积可以包括:通过卷积核中对应非零值的位置的权重对低位对应特征进行卷积。
实施例三
现有的卷积核,其大小一般为3×3、5×5,但是也有采用更大的尺寸。计算模块33常采用计算单元阵列(PE阵列)进行卷积运算,当PE阵列的矩阵大小小于卷积核的大小时,需要对卷积区域进行分割多多次进行运算,其逻辑复杂,计算速度慢。例如,3×3PE阵列计算5×5卷积核的卷积计算时,由于3×3PE阵列最多依次计算9个数据,至少需要分三次才能计算完成。
为了进一步提过深度卷积神经网络计算的速度,本发明提供的深度卷积神经网络加速方法,还可以做出以下进一步的改进:建立卷积数据(卷积核的权重以及非零值)与PE阵列的逻辑映射,简化计算的逻辑。
上述步骤3:对高位特征进行卷积以及最大值池化,得到高位池化结果,可以包括:
步骤301:控制模块31根据卷积核的大小,匹配相同矩阵的计算单元。其中,匹配相同矩阵的计算单元为匹配与卷积核的权重数相同数目的计算单元,且每个计算单元针对一个位置的权重进行计算。例如,对于3×3的卷积核,则匹配9个计算单元形成PE阵列,用于进行卷积运算。卷积核对应有1至9个权重,按从左到右以及从上到下进行编号,PE阵列中的计算单元对应编号。例如,如图11中的卷积核中的“Q”权重,可以编号为1,即PE阵列左上角的编号为1。也就是说,计算单元的数目不能小于卷积核的权重数。
步骤302:控制模块31根据稀疏映射矩阵,将高位特征中的各个卷积区域的数据按照位置关系发送至对应的计算单元;以及将卷积核中对应非零值位置的权重发送至对应的计算单元。
例如,如图10与图11所示,在对“0”数据作为卷积中心进行卷积时,通过稀疏映射矩阵,按照矩阵位置关系,将卷积核对应位置关系的权重发送至对应的计算单元,即权重“W”发送至编号2的计算单元(如图示PE-2)、权重“A”发送至编号4的计算单元(如图示PE-4)以及权重“X”发送至编号8的计算单元(如图示PE-8)。
步骤303:计算模块33对高位特征进行卷积以及最大值池化,得到高位池化结果;计算单元用于对高位特征进行卷积。
如图5、图10以及图11所示,采用上述根据对应位置关系进行数据的发送与计算的逻辑映射,可以使得PE阵列快速完成卷积计算,并保证PE阵列的大小始终满足卷积核的大小。
同理,上述步骤5:对低位对应特征进行卷积,得到低位卷积结果,可以包括:
步骤501:根据卷积核的大小,匹配相同矩阵的计算单元。
步骤502:根据稀疏映射矩阵,将低位对应特征中的各个卷积区域的数据按照位置关系发送至对应的计算单元;以及将卷积核中对应非零值位置的权重发送至对应的计算单元。
步骤503:对低位对应特征进行卷积,计算单元用于对低位特征进行卷积。
可见,上述对高位特征以及低位对应特征的卷积过程,以全跳零的过程图示进行说明,但实际上也同样适用于常规不跳零的卷积计算。该卷积核或卷积区域与PE阵列的逻辑映射,简单的映射逻辑省去了数据流动与卷积核截取等浪费的时间,提高了计算的速度。
结合以上三个实施例所述,本发明提供的深度卷积神经网络加速方法,分别从两级级联(高位特征与低位特征的分步卷积),全跳零计算以及计算单元的逻辑映射关系三个方面分别进行了技术方案的阐述,以上三个实施例提供的技术方案,均能提高卷积计算的速度,降低计算的能耗,各个实施例之间可以进行自由组合,彼此之间可以独立实现又可以结合实现。
实施例四
上述实施例提供的加速方法,可以实现该方法的硬件结构具有多种,本实施例提供了一种用于深度卷积神经网络的加速模块30,可以包括控制模块31、计算模块33以及片上存储模块32。该加速模块30用于使用上述加速方法完成卷积计算,提高卷积计算的速度。
上述控制模块31用于获取输入特征,并将输入特征发送至计算模块33。
上述计算模块33用于获取输入特征的高位特征以及低位特征;对高位特征进行卷积以及最大值池化,得到高位池化结果。
上述控制模块31还用于根据高位池化结果,得到对应的最大池化区域,并根据最大池化区域,将低位对应特征发送中计算模块33,其中,低位对应特征为低位特征中最大池化区域对应的数据。
上述计算模块33还用于对低位对应特征进行卷积,得到低位卷积结果;根据高位池化结果以及低位卷积结果,获得输入特征的最大池化结果。
上述片上存储模块32用于存储输入特征、高位特征、低位特征、高位池化结果、最大池化区域、低位卷积结果以及最大池化结果中至少一种数据。
如图1与图11所示,计算模块33可以包括由M×M个计算单元(PE)构成的计算单元阵列(PE阵列),计算单元阵列用于对高位特征以及低位对应特征进行卷积,其中,计算模块33采用的卷积核的大小为N×N,M≥N,M与N为正整数。通过保证足够数量的计算单元,可以实现更加简单的映射逻辑,即处于卷积核不同位置的权重直接到相同编号的PE内进行卷积计算。例如,采用大小为5×5PE阵列331,在使用3×3卷积核进行卷积计算时,控制模块31控制9个计算单元参与卷积计算,其余16个计算单元休眠。
如图12所示,每个计算单元有多个子计算单元组成,例如是每个计算单元包括36个子计算单元(又可称为Sub-Bundle)。如图13所示,每个子计算单元可以包括控制器3301、乘法器3302、寄存器3303以及两个多路复用器3304,以完成输入数据的卷积运算。控制器3301需要输出SEL和Out_SEL信号对输入信号来源以及输出信号去处进行选择。输入来源包括来自存储部分和存储器的数据、来自PE寄存器的数据以及来自外部寄存器的数据。同时输出去处包括进入激活函数模块332、进入负责存储部分和的部分和存储器、PE寄存器以及外部寄存器。当然,子计算单元也可以采用现有最小乘加运算单元的任意一种可以实现上述效果的结构。
其中,数个子计算单元可以形成一组子计算单元,一个子计算单元或一组子计算单元用于计算一个通道的卷积核的一个相应位置的权重。因为卷积核除了有大小,还有深度参数,一个深度对应一个通道。当卷积核具有多个通道,每一个子计算单元或者每一组子计算单元,针对一个通道进行计算。根据实际的卷积核的大小,通道数,匹配相应的计算单元以及子计算单元。
在进行卷积之前,控制模块31还可以根据卷积核的通道数(深度),启用对应数目的子计算单元。由此,针对高位特征或低位特征中的一个卷积区域进行卷积时,采用具有多个子计算单元的计算单元组成的PE阵列331,可在最短时间内配合多个通道的卷积核完成卷积计算。
计算模块33用于获取输入特征的非零值以及输入特征的稀疏映射矩阵,输入特征为像素矩阵;获取非零值的高位特征以及低位特征。
在一种实际应用中,如图1所示,计算模块33还可以包括激活函数模块332。激活函数模块332用于获取输入特征的非零值、非零值的稀疏映射标志以及输入特征的稀疏映射矩阵,输入特征为像素矩阵;获取非零值的高位特征以及低位特征。其中,该激活函数模块332可以采用ReLU函数。
如图13所示,本发明提供的加速模块30还包括稀疏映射标志以及数据存储模块(简称为稀疏映射模块34),用于根据稀疏映射矩阵生成地址,并将非零值以及非零值的稀疏映射标志写入片外存储模块20。稀疏映射模块34还用于从片外存储模块20读取非零值以及非零值的稀疏映射标志。
例如,如图14所示,稀疏映射模块34可以包括写入地址生成模块341、写入缓存模块342、异步FIFO数据模块343以及读入地址生成模块344。输入特征的非零值通过激活函数模块332后生成输出特征(即高位特征与低位特征)、稀疏映射标志以及与该输出特征(高位特征与低位特征)关联的坐标信息数据。输出特征与稀疏映射标志数据被送进写入缓存模块342并被算术扩展为相应位数据,而与该数据关联的坐标信息数据被送进写入地址生成模块341根据特定的公式转化为写入地址。由于片上存储模块32的时钟频率与片外存储模块20的时钟频率不同,故采用异步FIFO数据模块343进行数据的交互。而读入地址生成模块344则根据控制模块31发送的坐标信息得到读入地址并将非零值以及稀疏映射标志数据从片外存储模块20中读到片上存储模块32,同时向控制模块31发送数据载入成功信号。
更为具体的,通过稀疏映射矩阵可以获得输入特征(像素矩阵)中的一个像素点的坐标可以表示为(x,y,ch),其中x表示横坐标,y表示纵坐标,ch表示通道。稀疏映射标志的写入地址ad1=x×y×ch/16+y×ch/16+ch/16;输出特征(高位特征与低位特征)的写入地址ad2=x×y×ch/2+y×ch/2+ch/2。
上述片上存储模块32,可以针对数据的不同种类进行划分,其中一部分存储输入特征、高位特征以及低位特征,另一部分对卷积核数据进行存储,还有一部分对稀疏映射矩阵数据进行存储,最后一部分对PE阵列331卷积产生的部分和(Partial sum)进行存储。
实施例五
如图1所示,本发明提供的一种用于深度卷积神经网络的加速系统,包括处理器10、片外存储模块20以及上述技术方案所述的加速模块30;
处理器10用于控制片外存储模块20与片上存储模块32的数据交换,和/或,处理器10为Rocket通用RISC-V处理器。
上述Rocket处理器包含开源处理器、数据通路、数据缓存(DCache)以及指令缓存(ICache),主要作用是控制加速模块30的工作状态。相对与其他神经网络加速系统采用专用编译器,Rocket处理器是基于RISC-V的处理器,属于开源项目,对于开发与应用都会带来十分的便利,减少了额外学习的成本,Rocket处理器具有更好的通用性与移植性。不同类型的处理器,一般都针对相应的计算机语言开发,部分处理器与计算机语言是严格绑定且不开源,其移植性较低。
实施例六
在本实施例中,将对本发明提供的用于深度卷积神经网络的加速系统实现本加速方法进行进一步举例说明,以实现一种二级级联、全跳零的加速方法。
步骤10:片外存储模块20载入输入特征,处理器10对输入特征进行预处理,使得输入特征中的像素点的位数与加速模块30运算的位数匹配,如转换成16位数据。
步骤20:处理器10将输入特征发送在片上存储模块20,控制模块31将输入特征发送至计算模块33。
步骤30:计算模块33利用激活函数模块对输入特征进行处理,生成非零值的高位特征、低位特征、稀疏映射矩阵以及坐标信息,控制模块31将高位特征、低位特征、稀疏映射矩阵以及坐标信息发送至稀疏映射模块34。
步骤40:稀疏映射模块34根据高位特征、低位特征的坐标信息生成高位数据、低位数据相应的写入地址以及读入地址,并将高位特征、低位特征寄存至片外存储模块20或片上存储模块32。
步骤50:控制模块31将高位特征发送至计算模块33,计算模块33对高位特征进行卷积以及最大池化,得到高位池化结果。在进行卷积时,高位特征中的参与的数据以及卷积核对应的权重,按照位置关系发送至相应的计算单元中进行计算。
步骤60:控制模块31根据高位池化结果得到最大池化区域,并根据最大池化区域,确定低位特征中最大池化区域对应的数据,即确定低位对应特征。
步骤70:控制模块31将低位对应特征发送至计算模块33,计算模块33对低位对应特征进行卷积,得到低位卷积结果。在进行卷积时,低位对应特征中的参与的数据以及卷积核对应的权重,按照位置关系发送至相应的计算单元中进行计算。
步骤80:计算模块33将高位池化结果以及低位卷积结果进行叠加,获得输入特征的最大池化结果。
步骤90:处理器根据最大池化结果,生成识别结果,并将结果发送至显示器中进行显示,反映出对输入特征的识别结果。
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。