公开/公告号CN107862378A
专利类型发明专利
公开/公告日2018-03-30
原文格式PDF
申请/专利权人 芯原微电子(上海)有限公司;图芯芯片技术(上海)有限公司;
申请/专利号CN201711273248.5
发明设计人 张慧明;
申请日2017-12-06
分类号G06N3/04(20060101);G06N3/063(20060101);
代理机构上海光华专利事务所(普通合伙);
代理人徐秋平
地址 201203 上海市浦东新区张江高科技园区松涛路560号张江大厦20A
入库时间 2023-06-19 04:56:43
法律状态公告日
法律状态信息
法律状态
2020-04-24
授权
授权
2019-05-21
著录事项变更 IPC(主分类):G06N3/04 变更前: 变更后: 申请日:20171206
著录事项变更
2018-04-24
实质审查的生效 IPC(主分类):G06N3/04 申请日:20171206
实质审查的生效
2018-03-30
公开
公开
技术领域
本发明涉及数据处理的技术领域,特别是涉及一种基于多核的卷积神经网络加速方法及系统、存储介质及终端。
背景技术
目前,深度学习和机器学习在视觉处理、语音识别和图像分析领域得到了广泛的应用。卷积神经网络是深度学习和机器学习的重要组成部分。提高卷积神经网络的处理速度,可以等比例提高深度学习和机器学习的处理速度。
现有技术中,视觉处理、语音识别和图像分析的应用都是基于多层卷积神经网络。每层卷积神经网络都要经过大量的数据处理和卷积运算,对硬件处理速度和资源的消耗要求很高。随着可穿戴设备、物联网应用和自动驾驶技术的不断发展,如何将卷积神经网络在嵌入式产品的中实现并到达可以流畅处理的速度,成为当前硬件架构设计面临的巨大挑战。以典型的卷积神经网络ResNet和VGG16为例,ResNet在16位浮点精度下,如果要运行到60帧每秒的速度,需要15G字节带宽;VGG16在16位浮点精度下,如果要运行到60帧每秒的速度,需要6.0G字节带宽。
目前,为了实现卷积神经网络的加速,通过并行排列多个卷积单元来实现。在理想情况下,卷积单元越多,处理速度越快。但是在实际应用中,数据带宽会大大限制卷积单元的处理速度,硬件的带宽资源非常珍贵,提高硬件的数据带宽代价巨大。因此,在有限的数据带宽和硬件开销下,提高卷积神经网络的处理速度,成为当前硬件架构设计急需解决的问题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于多核的卷积神经网络加速方法及系统、存储介质及终端,通过多个并行的卷积核节省卷积神经网络的数据带宽;在相同硬件数据带宽的条件下,通过在卷积核中并行的向量点积运算提高卷积神经网络的处理速度。
为实现上述目的及其他相关目的,本发明提供一种基于多核的卷积神经网络加速方法,包括以下步骤:将一层卷积神经网络拆分成至少两个子任务,每个子任务与一个卷积核相对应;所述卷积核之间串行连接以供输入数据在所述卷积核之间串行传输;基于每个卷积核,并行执行第一预设数量个向量点积运算,每个向量点积运算包括第二预设数量个乘法运算;所述第一预设数量和所述第二预设数量之积为卷积核中的乘加器个数;将每个卷积核的向量点积运算结果根据输出优先级顺序输出。
于本发明一实施例中,所述第二预设数量为3个以支持3D向量点积。
于本发明一实施例中,所述输出优先级根据所述输入数据输入卷积核的先后顺序确定,先输入所述输入数据的卷积核比后输入所述输入数据的卷积核具有更高的输出优先级。
于本发明一实施例中,基于每个卷积核,并行执行第一预设数量个向量点积运算包括以下步骤:
获取(N+M-1)个输入数据;其中N为所述第一预设数量,M为所述第二预设数量;
将前1到N个输入数据分别输入至第1到N个乘加器与第一系数相乘;
将前2到N+1个输入数据分别输入至第N+1到2N个乘加器与第二系数相乘;
以此类推,将前M到N+M-1个输入数据分别输入至第(N*M-N+1)到N*M个乘加器与第M系数相乘;
将M次乘法中N个位置上对应位置处的乘积累加,得到N个向量点积运算结果。
对应地,本发明提供一种基于多核的卷积神经网络加速系统,包括卷积核设置模块、向量点积模块和输出模块;
所述卷积核设置模块用于将一层卷积神经网络拆分成至少两个子任务,每个子任务与一个卷积核相对应;所述卷积核之间串行连接以供输入数据在所述卷积核之间串行传输;
所述向量点积模块用于基于每个卷积核,并行执行第一预设数量个向量点积运算,每个向量点积运算包括第二预设数量个乘法运算;所述第一预设数量和所述第二预设数量之积为卷积核中的乘加器个数;
所述输出模块用于将每个卷积核的向量点积运算结果根据输出优先级顺序输出。
于本发明一实施例中,所述第二预设数量为3个以支持3D向量点积。
于本发明一实施例中,所述输出优先级根据所述输入数据输入卷积核的先后顺序确定,先输入所述输入数据的卷积核比后输入所述输入数据的卷积核具有更高的输出优先级。
于本发明一实施例中,所述向量点积模块基于每个卷积核,并行执行第一预设数量个向量点积运算时执行以下步骤:
获取(N+M-1)个输入数据;其中N为所述第一预设数量,M为所述第二预设数量;
将前1到N个输入数据分别输入至第1到N个乘加器与第一系数相乘;
将前2到N+1个输入数据分别输入至第N+1到2N个乘加器与第二系数相乘;
以此类推,将前M到N+M-1个输入数据分别输入至第(N*M-N+1)到N*M个乘加器与第M系数相乘;
将M次乘法中N个位置上对应位置处的乘积累加,得到N个向量点积运算结果。
本发明提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的基于多核的卷积神经网络加速方法。
最后,本发明提供一种终端,包括处理器及存储器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行上述的基于多核的卷积神经网络加速方法。
如上所述,本发明的基于多核的卷积神经网络加速方法及系统、存储介质及终端,具有以下有益效果:
(1)节省了卷积神经网络运算动态存储器的带宽消耗;以4卷积核模式为例,在相同的数据处理速度下,能够在卷积神经网络运行时节省75%的输入图像数据带宽;
(2)提高了卷积神经网络的处理速度,在相同硬件数据带宽的条件下,以3D向量点积为例,能够提高卷积神经网络的处理速度到300%;
(3)减少了卷积神经网络的动态功耗,以4个卷积核、3D向量点积为例,减少运算时间到原来的33%,减少卷积神经网络的输入图像带宽到原来的25%,减少动态功耗85%;
(4)优化了卷积神经网络在嵌入式产品中的处理速度,具有架构清晰、分工明确、易实现、流程简单等优点,能够广泛应用于物联网、可穿戴设备和车载设备中。
附图说明
图1显示为本发明的基于多核的卷积神经网络加速方法于一实施例中的流程图;
图2显示为输入图像、系数和输出图像的坐标示意图;
图3显示为本发明的基于多核的卷积神经网络加速方法于一实施例中的架构示意图;
图4显示为本发明的基于多核的卷积神经网络加速方法中并行3D向量点积于一实施例中的第一状态图;
图5显示为本发明的基于多核的卷积神经网络加速方法中并行3D向量点积于一实施例中的第二状态图;
图6显示为本发明的基于多核的卷积神经网络加速方法中并行3D向量点积于一实施例中的第三状态图;
图7显示为本发明的基于多核的卷积神经网络加速方法中并行3D向量点积求和于一实施例中的状态图;
图8显示为本发明的基于多核的卷积神经网络加速系统于一实施例中的结构示意图;
图9显示为本发明的终端于一实施例中的结构示意图。
元件标号说明
21 卷积核设置模块
22 向量点积模块
23 输出模块
31 处理器
32 存储器
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的基于多核的卷积神经网络加速方法及系统、存储介质及终端在数据带宽有限的情况下通过多个并行的卷积核节省卷积神经网络的数据带宽;在相同硬件数据带宽的条件下,通过在卷积核中并行的向量点积运算提高卷积神经网络的处理速度;优化了卷积神经网络在嵌入式产品中的处理速度,具有架构清晰、分工明确、易实现、流程简单等优点,能够广泛应用于物联网、可穿戴设备和车载设备中。
如图1所示,于一实施例中,本发明的基于多核的卷积神经网络加速方法包括以下步骤:
步骤S1、将一层卷积神经网络拆分成至少两个子任务,每个子任务与一个卷积核相对应;所述卷积核之间串行连接以供输入数据在所述卷积核之间串行传输。
以图像处理为例,如图2所示,输入图像和输出图像都是三维图像,输入图像包括横坐标inx、纵坐标iny和系数深度坐标kz。输出图像包括横坐标outx、纵坐标outy和深度坐标z。系数是四维数据,包括横坐标kx、纵坐标ky、系数深度坐标kz和输出深度坐标z。
当将一层卷积神经网络拆分为四个子任务时,将系数序列按照z方向拆分成四组,如图2所示,每组系数分配给不同的卷积神经网络的卷积核。其中,不同的卷积核之间数据串行联通,从而通过数据共享来节省带宽。
根据卷积神经网络的处理特性,每组系数都要和所有的输入图像进行卷积运算,得到一个z平面的输出图像。因此,输入图像有很大的重用性。如图3所示,不同的卷积核之间通过串联通道进行串行连接以使输入图像数据在卷积核之间串行通行。具体地,输入图像数据从内存读入到卷积核0以后,卷积核0将输入图像数据和第一组系数进行卷积运算,同时卷积核0将输入图像数据通过数据串联通道传输给卷积核1。卷积核心1节省了读取输入图像数据的带宽消耗。卷积核2和卷积核3会进行同样的数据操来避免输入图像数据的带宽消耗。在4卷积核模式下,通过串联数据通道,减少了三次输入图像数据的读取,节省了75%的输入图像数据带宽消耗,同时也减少了内存的功耗;很好地解决了物理实现层绕线数量与实现频率的平衡问题。
步骤S2、基于每个卷积核,并行执行第一预设数量个向量点积运算,每个向量点积运算包括第二预设数量个乘法运算;所述第一预设数量和所述第二预设数量之积为卷积核中的乘加器个数。
于本发明一实施例中,基于每个卷积核,并行执行第一预设数量个向量点积运算包括以下步骤:
21)获取(N+M-1)个输入数据;其中N为所述第一预设数量,M为所述第二预设数量;
22)将前1到N个输入数据分别输入至第1到N个乘加器与第一系数相乘;
23)将前2到N+1个输入数据分别输入至第N+1到2N个乘加器与第二系数相乘;
24)以此类推,将前M到N+M-1个输入数据分别输入至第(N*M-N+1)到N*M个乘加器与第M系数相乘;
25)将M次乘法中N个位置上对应位置处的乘积累加,得到N个向量点积运算结果。
下面以包含三次乘法(M=3)的向量点积来进一步阐述。在该实施例中,在每个卷积核内包含24个乘加器。为了在有限带宽的情况下最大化乘加器的利用率,通过包含三次乘法的3D向量点积运算来同时计算8个3D向量点积结果(N=8)。具体地,3D向量点积运算公式如下:
out0=in0*k0+in1*k1+in2*k2
out1=in1*k0+in2*k1+in3*k2
out2=in2*k0+in3*k1+in4*k2
......
out7=in7*k0+in8*k1+in9*k2
首先,如图4所示,从内存中读取10个输入图像数据,即in0,in1,int2...in9。将第0到第7个数据(in0,in1,in2,in3,in4,in5,in6,in7)和系数0(k0)进行乘法运算,运算结果写入累加器的输入端,即out00,out01,out02...out07。
其次,如图5所示,重用前一步骤的10个输入图像数据,即in0,in1,int2...in9。将第1到第8个数据(in1,in2,in3,in4,in5,in6,in7,in8)和系数1(k1)进行乘法运算,运算结果写入累加器的输入端,即out10,out11,out12...out17。
再次,如图6所示,重用前一步骤的10个输入图像数据,即in0,in1,int2...in9。将第2到第9个数据(in2,in3,in4,in5,in6,in7,in8,in9)和系数2(k2)进行乘法运算,运算结果写入累加器的输入端,即out20,out21,out22...out27。
最后,如图7所示,将三次乘法的对应位置上的结果依次累加,得到8个3D向量点积结果。其中,将每次乘法的第一位置处的结果out00、out10和out20相加,得到第一个3D向量点积结果;将每次乘法的第二位置处的结果out01、out11和out21相加,得到第二个3D向量点积结果;以此类推,将每次乘法的第八位置处的结果out07、out17和out27相加,得到第八个3D向量点积结果。
步骤S3、将每个卷积核的向量点积运算结果根据输出优先级顺序输出。
具体地,所述输出优先级根据所述输入数据输入卷积核的先后顺序确定。获取输入数据越早,对应的卷积核的输出优先级越高。因此,先输入所述输入数据的卷积核比后输入所述输入数据的卷积核具有更高的输出优先级。
如图8所示,于一实施例中,本发明的基于多核的卷积神经网络加速系统包括卷积核设置模块21、向量点积模块22和输出模块23。
卷积核设置模块21用于将一层卷积神经网络拆分成至少两个子任务,每个子任务与一个卷积核相对应;所述卷积核之间串行连接以供输入数据在所述卷积核之间串行传输。
以图像处理为例,如图2所示,输入图像和输出图像都是三维图像,输入图像包括横坐标inx、纵坐标iny和系数深度坐标kz。输出图像包括横坐标outx、纵坐标outy和深度坐标z。系数是四维数据,包括横坐标kx、纵坐标ky、系数深度坐标kz和输出深度坐标z。
当将一层卷积神经网络拆分为四个子任务时,将系数序列按照z方向拆分成四组,如图2所示,每组系数分配给不同的卷积神经网络的卷积核。其中,不同的卷积核之间数据串行联通,从而通过数据共享来节省带宽。
根据卷积神经网络的处理特性,每组系数都要和所有的输入图像进行卷积运算,得到一个z平面的输出图像。因此,输入图像有很大的重用性。如图3所示,不同的卷积核之间通过串联通道进行串行连接以使输入图像数据在卷积核之间串行通行。具体地,输入图像数据从内存读入到卷积核0以后,卷积核0将输入图像数据和第一组系数进行卷积运算,同时卷积核0将输入图像数据通过数据串联通道传输给卷积核1。卷积核心1节省了读取输入图像数据的带宽消耗。卷积核2和卷积核3会进行同样的数据操来避免输入图像数据的带宽消耗。在4卷积核模式下,通过串联数据通道,减少了三次输入图像数据的读取,节省了75%的输入图像数据带宽消耗,同时也减少了内存的功耗;很好地解决了物理实现层绕线数量与实现频率的平衡问题。
向量点积模块22与卷积核设置模块21相连,用于基于每个卷积核,并行执行第一预设数量个向量点积运算,每个向量点积运算包括第二预设数量个乘法运算;所述第一预设数量和所述第二预设数量之积为卷积核中的乘加器个数。
于本发明一实施例中,向量点积模块22基于每个卷积核,并行执行第一预设数量个向量点积运算执行以下步骤:
21)获取(N+M-1)个输入数据;其中N为所述第一预设数量,M为所述第二预设数量;
22)将前1到N个输入数据分别输入至第1到N个乘加器与第一系数相乘;
23)将前2到N+1个输入数据分别输入至第N+1到2N个乘加器与第二系数相乘;
24)以此类推,将前M到N+M-1个输入数据分别输入至第(N*M-N+1)到N*M个乘加器与第M系数相乘;
25)将M次乘法中N个位置上对应位置处的乘积累加,得到N个向量点积运算结果。
下面以包含三次乘法(M=3)的3D向量点积来进一步阐述。在该实施例中,在每个卷积核内包含24个乘加器。为了在有限带宽的情况下最大化乘加器的利用率,通过包含三次乘法的3D向量点积运算来同时计算8个3D向量点积结果(N=8)。具体地,3D向量点积运算公式如下:
out0=in0*k0+in1*k1+in2*k2
out1=in1*k0+in2*k1+in3*k2
out2=in2*k0+in3*k1+in4*k2
......
out7=in7*k0+in8*k1+in9*k2
首先,如图4所示,从内存中读取10个输入图像数据,即in0,in1,int2...in9。将第0到第7个数据(in0,in1,in2,in3,in4,in5,in6,in7)和系数0(k0)进行乘法运算,运算结果写入累加器的输入端,即out00,out01,out02...out07。
其次,如图5所示,重用前一步骤的10个输入图像数据,即in0,in1,int2...in9。将第1到第8个数据(in1,in2,in3,in4,in5,in6,in7,in8)和系数1(k1)进行乘法运算,运算结果写入累加器的输入端,即out10,out11,out12...out17。
再次,如图6所示,重用前一步骤的10个输入图像数据,即in0,in1,int2...in9。将第2到第9个数据(in2,in3,in4,in5,in6,in7,in8,in9)和系数2(k2)进行乘法运算,运算结果写入累加器的输入端,即out20,out21,out22...out27。
最后,如图7所示,将三次乘法的对应位置上的结果依次累加,得到8个3D向量点积结果。其中,将每次乘法的第一位置处的结果out00、out10和out20相加,得到第一个3D向量点积结果;将每次乘法的第二位置处的结果out01、out11和out21相加,得到第二个3D向量点积结果;以此类推,将每次乘法的第八位置处的结果out07、out17和out27相加,得到第八个3D向量点积结果。
输出模块23与向量点积模块22相连,用于将每个卷积核的向量点积运算结果根据输出优先级顺序输出。
具体地,所述输出优先级根据所述输入数据输入卷积核的先后顺序确定。获取输入数据越早,对应的卷积核的输出优先级越高。因此,先输入所述输入数据的卷积核比后输入所述输入数据的卷积核具有更高的输出优先级。
需要说明的是,应理解以上系统的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,x模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上x模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(ApplicationSpecificIntegratedCircuit,简称ASIC),或,一个或多个微处理器(digitalsingnalprocessor,简称DSP),或,一个或者多个现场可编程门阵列(FieldProgrammableGateArray,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessingUnit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
本发明的存储介质上存储有计算机程序,该程序被处理器执行时实现上述的基于多核的卷积神经网络加速方法。优选地,所述存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
如图9所示,于一实施例中,本发明的终端包括处理器31及存储器32。
所述存储器32用于存储计算机程序。
优选地,所述存储器32包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
所述处理器31与所述存储器32相连,用于执行所述存储器32存储的计算机程序,以使所述终端执行上述的基于多核的卷积神经网络加速方法。
优选地,处理器31可以是通用处理器,包括中央处理器(CentralProcessingUnit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(DigitalSignalProcessing,简称DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-ProgrammableGateArray,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
综上所述,本发明的基于多核的卷积神经网络加速方法及系统、存储介质及终端节省了卷积神经网络运算动态存储器的带宽消耗;以4卷积核模式为例,在相同的数据处理速度下,能够在卷积神经网络运行时节省75%的输入图像数据带宽;提高了卷积神经网络的处理速度,在相同硬件数据带宽的条件下,以3D向量点积为例,能够提高卷积神经网络的处理速度到300%;减少了卷积神经网络的动态功耗,以4个卷积核、3D向量点积为例,减少运算时间到原来的33%,减少卷积神经网络的输入图像带宽到原来的25%,减少动态功耗85%;优化了卷积神经网络在嵌入式产品中的处理速度,具有架构清晰、分工明确、易实现、流程简单等优点,能够广泛应用于物联网、可穿戴设备和车载设备中。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
机译: 基于卷积神经网络的加速系统和方法,以及存储介质
机译: 基于多核处理器,终端设备和存储介质的解码方法
机译: 基于卷积神经网络的图像识别系统,方法和非暂时性计算机可读存储介质