掌桥专利:专业的专利平台
掌桥专利
首页

卷积神经网络运算方法及装置

文献发布时间:2023-06-19 09:29:07


卷积神经网络运算方法及装置

技术领域

本申请涉数据处理技术领域,具体涉及一种卷积神经网络运算方法及装置。

背景技术

深度学习(Deep learning)是开展AI(Artificial intelligence,人工智能)的重要应用技术之一,其广泛应用于计算机视觉、语音识别等领域。其中CNN(ConvolutionalNeural Network,卷积神经网络)则是近年来引起重视的一种深度学习高效识别技术,它通过直接输入原始图像或语音数据,与多个特征滤波器(filter)数据进行若干层的卷积运算及矢量运算,从而在图像和语音识别方面产生高准确性结果。

然而,随着卷积神经网络的发展和广泛应用,其面临的挑战也越来越多,例如,CNN模型的参数规模越来越大,并且网络结构复杂多变,一个CNN模型中往往包含多个卷积层,并且每一卷积层的深度以及卷积核的尺寸等数据都不相同。其中,在CNN网络中较浅的层中,待处理输入数据的平面尺寸可能会较大、通道方向上的尺寸会较小,而随着网络层数的深入,一些卷积核在通道方向上的深度会较大,或者卷积层中卷积核的数量会较多。那么,对于电子设备中由多个MAC(Multiply Accumulation Cell,乘累加运算单元)组成的乘累加运算阵列来说,就会面对庞大需计算的数据量。而电子设备提供的算力往往是有限的,也就是说,乘累加运算阵列的一轮运算中,能够输入的最大数据量是固定的。例如,电子设备的乘累加运算阵列包含多个乘累加运算单元的算力为256,则该乘累加运算阵列具有256个乘法器,即同时最多能够进行256个权重值分别与对应的256个输入数据值进行乘法运算。而一般输入数据是远大于256的,因此,需要分别将卷积核和输入数据拆分为多个数据块,进行逐一运算。然而,先前技术中针对不同的卷积层是以相同的方式来拆分卷积核和输入数据,这样的作法无法有效利用电子设备中的硬件资源,基于此,如何提高硬件加速器在计算过程中的资源利用率成为亟待解决的问题。

发明内容

本申请提供一种卷积神经网络运算方法及装置,旨在提高硬件加速器的资源利用率。

本申请提供一种卷积神经网络运算方法,其应用于包含乘累加运算阵列的卷积神经网络运算装置,乘累加运算阵列包含多个乘累加运算单元。本申请的卷积神经网络运算方法包括:确定一目标卷积层中的目标卷积核的数量,及所述目标卷积核的一第一尺寸信息;根据所述目标卷积核的数量和所述第一尺寸信息确定一目标调度模式,其中,所述目标调度模式对应一卷积计算块的大小;根据所述目标调度模式,对所述目标卷积核中的权重数据进行重组,并将重组后所述权重数据输出至所述乘累加运算阵列;根据所述目标调度模式,对所述目标卷积层中的输入数据进行重组,并将重组后所述输入数据输出至所述乘累加运算阵列;以及,以所述乘累加运算阵列基于重组后所述权重数据和重组后所述输入数据进行乘累加运算,其中,所述乘累加运算阵列每轮运算中所使用的所述乘累加运算单元的数目对应所述卷积计算块的大小。

本申请另提供一种卷积神经网络运算装置,其包含一调度模式单元、一第一数据处理单元、一第二数据处理单元、及一乘累加运算阵列。调度模式单元根据所述目标卷积核的数量及一第一尺寸信息确定一目标调度模式,其中,所述目标调度模式对应一卷积计算块的大小。第一数据处理单元根据所述目标调度模式,对所述目标卷积核中的权重数据进行重组。第二数据处理单元根据所述目标调度模式,对所述目标卷积层中的输入数据进行重组。乘累加运算阵列包含多个乘累加运算单元,其基于重组后所述权重数据和重组后所述输入数据进行乘累加运算,其中,所述乘累加运算阵列每轮运算中所使用的所述乘累加运算单元的数目对应所述卷积计算块的大小。

本申请实施例提供的卷积神经网络的运算方案,对于卷积神经网络中具有不同网络结构的各个卷积层来说,可以动态地调整目标调度模式,使得每一个卷积层可以采用与其乘累加运算阵列结构匹配的调度模式,来对待处理输入数据和目标卷积核进行数据块的拆分,使得拆分后的权重数据块中包含的权重值和输入数据块中包含的输入数据的数量能够实现对乘累加运算阵列的运算资源的最大化利用,从整体上提高了硬件加速器的资源利用率,进而提高卷积神经网络的运算速度。

附图说明

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

图1是本申请实施例提供的卷积神经网络的运算方法的流程示意图。

图2为一卷积层的输入数据及卷积核的数据结构示意图。

图3为一实施例中对卷积层的输入数据及卷积核的数据拆分示意图。

图4是本申请实施例提供的卷积神经网络运算装置应用于电子设备的方块示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。其中相同的组件符号代表相同的组件,本发明的原理是以实施在一适当的应用环境中来举例说明。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

本申请实施例提供一种卷积神经网络的运算方法,该卷积神经网络的运算方法的执行主体可以是本申请实施例提供的卷积神经网络运算装置,或者集成了该卷积神经网络的运算装置的电子设备,实施上,卷积神经网络的运算装置可以采用硬件、软件或硬件结合软件的方式实现。

本申请实施例提供的卷积神经网络的运算方案,可以应用于任何结构的卷积神经网络(以下简称CNN),例如,可以应用于只有一个卷积层的CNN,还可以应用于一些复杂CNN,比如包括多达上百或者更多的卷积层的CNN。此外,本申请实施例中的CNN还可以有池化层、全连接层等。也就是说,本申请实施例的方案并不局限于某种特定的卷积神经网络,只要是包含有卷积层的神经网络,都可以认为是本申请中的“卷积神经网络”,其卷积层部分都可以按照本申请实施例进行运算。

需要说明的是,本申请实施例的卷积神经网络可以应用于多种场景,例如,诸如人脸识别、车牌识别等图像识别的领域,诸如图像特征提取、语音特征提取的特征领域,语音识别领域,自然语言处理领域等,将图像或者由其他形式的数据转换得到的特征数据输入到预先训练好的卷积神经网络,即可利用该卷积神经网络进行运算,以达到或分类或识别或特征提取的目的。

请参阅图1,图1是本申请实施例提供的卷积神经网络运算方法的流程示意图。图4是本申请实施例提供的卷积神经网络运算装置应用于电子设备的方块示意图。卷积神经网络运算装置40可用以实现图1中的卷积神经网络运算方法。卷积神经网络运算方法的具体步骤及卷积神经网络运算装置40的操作方式说明如下。

步骤101中、确定一目标卷积层中的目标卷积核的数量,以及所述目标卷积核的一第一尺寸信息。

对于集成有卷积神经网络运算装置的电子设备来说,卷积层对输入数据和卷积核数据进行卷积运算,得到输出数据。输入数据可以是原始的图像、语音数据或者上一卷积层或池化层输出的数据,而卷积神经网络运算装置中输入数据一般为特征数据,因此,卷积神经网络运算装置40的输入数据可为目标卷积层的特征数据。

输入数据可以有多个通道(channel),每一个通道上的输入数据可以理解为一个二维数据,当输入数据的通道数大于1时,可以将输入数据理解为多个通道的二维数据叠在一起的立体数据,其深度等于通道数。目标卷积层(即当下待进行卷积运算的卷积层)可以包含有一个或者多个卷积核,卷积核又称为过滤器(filter),每一卷积核的通道数等于该层输入数据的通道数,卷积核数据的个数等于该目标卷积层的输出数据的通道数。也就是说,输入数据与一个卷积核数据进行卷积运算后,得到一个二维的数据,当目标卷积层有多个卷积核时,每一个卷积核输出的二位数据叠加得到一个三维的输出数据。

在基于卷积神经网络进行运算时,模式调度单元401从当前用于运算的卷积神经网络中确定出目标卷积层,实施上,模式调度单元401可自配置寄存器405取得目标卷积层的相关讯息,例如自配置寄存器405得知何者为目标卷积层及其具有的卷积核数量及卷积核的平面尺寸及通道方向上的深度等讯息。

请参阅图2,图2为一卷积层的输入数据及卷积核的数据结构示意图。图2的卷积层中包含M个卷积核,分别为K1、K2、K3……KM。这M个卷积核的尺寸相同,均为D×R×S,如图所示,D为代表卷积核在通道方向上的深度,R×S为代表卷积核在平面方向上的尺寸。输入数据的尺寸为C×W×H,其中,C为代表输入数据在通道方向上的深度。实施上,C=D。而W×H为代表输入数据在平面方向上的尺寸。

由于每个卷积层中卷积核的尺寸和数量可能都不相同,本申请实施例中,在开始对目标卷积层进行运算时,先确定该目标卷积层中的目标卷积核的数量,以及目标卷积核的尺寸及/或深度信息。

步骤102中、根据所述目标卷积核的数量和所述第一尺寸信息确定一目标调度模式,其中,所述目标调度模式对应一卷积计算块的大小。

在乘累加运算阵列中乘累加运算单元的数量是有限的情况下,而卷积层中的参数量(例如卷积核的数据量)巨大,对于一个卷积层来说,可能需要乘累加运算阵列的多轮运算才能完成全部运算,因此,需要分别将卷积核和输入数据拆分为多个数据块,每一次将一定数量的权重数据块和对应数量的输入数据块输入到乘累加运算阵列中,然后进行乘累加运算。为有效利用乘累加运算阵列404的运算资源,模式调度单元401可根据目标卷积核的数量及其相关的尺寸讯息确定一目标调度模式,实施上,模式调度单元401可根据目标卷积核的数量及其相关的尺寸讯息自多个预设的调度模式中选出目标调度模式,而每一调度模式对应一特定的卷积计算块的大小,卷积计算块为进行卷积运算的最小单位,模式调度单元401所选出的目标调度模式可最有效的利用乘累加运算阵列404,例如,当卷积神经网络运算装置40操作在目标调度模式下,乘累加运算阵列可以最少运算轮数完成对输入数据及目标卷积核的乘累加运算。

在一实施例中,调度模式所对应的卷积计算块的大小可为乘累加运算阵列的一轮运算中从m个目标卷积核中获取m个大小为d×w×h的权重数据块的数据块的大小,其中,d为代表权重数据块在通道方向上的深度,w×h为代表权重数据块在平面方向上的尺寸,其中,m、d,w,h皆为正整数。在设置预设调度模式时,可视为在设置m、d、w、h的具体数值,需要综合考虑各种因素。

首先,需要考虑电子设备的乘累加运算阵列404的算力,即需要考虑乘累加运算阵列404中乘累加单元的数量,比如,乘累加运算阵列404中一共有256个乘累加单元,则一轮运算中最多可以同时进行256个乘累加单元运算。因此,在乘累加运算阵列的一轮运算中分别从m个目标卷积核中获取m个大小为d×w×h的权重数据块时,m、d、w、h的大小需要满足:m×d×w×h≤256。

其次,还要考虑实际网络的需要,比如,卷积层中卷积核的尺寸和数量,比如,有的卷积核的大小为1×1×64,有的卷积核大小为11×11×3,有的卷积层可能有8个卷积核,有的卷积层可能2048个卷积核。在综合考虑上述参数后,设置了不同大小的卷积计算块,以适应不同的网络层。

比如,在乘累加运算单元的算力固定的前提下,即在m×d×w×h≤256的条件下,当卷积层的卷积核数量较多、深度较小时,可以将m的值设置的大一些,d的值设置的小一些,比如,m=64,d=4,w=1,h=1,或者m=16,d=16,w=1,h=1。反之,当卷积层的卷积核数量较少、深度较大时,可以将m的值设置的较小一些,d的值设置的较大一些,比如,m=4,d=64,w=1,h=1。或者,对于一些特别尺寸的卷积核,还可以做一些特别的设置,比如,对于3×3的卷积核,可以设置m=1,d=32,w=3,h=3,这种情况下,虽然不能百分之百的利用乘累加运算单元的计算资源,但是也达到了较高的利用率。请再参阅图2,图2的卷积层中包含M个卷积核,此例中m较佳为的M的正因子,也就是说,M为m的整数倍。

实施上,可针对各种卷积层的卷积核数量及尺寸预先评估最适合的卷积计算块的大小,再据以预先设置多种预设调度模式,并于一存储器中建立一查找表,此查找表包含卷积核的参数与预设调度模式之间的映像关系。模式调度单元401可根据目标卷积核的数量及其相关的尺寸讯息自查找表查得目标调度模式。在一实施例中,模式调度单元401可由一处理器执行程序代码来实现,而目标卷积层的输入数据的数据量讯息及卷积核的数量及尺寸等讯息是储存于配置寄存器405中,模式调度单元401自配置寄存器405中获得目标卷积核的数量及其相关的尺寸讯息。

如图4所示,卷积神经网络运算装置40在进行卷积运算的过程中,是经由缓存409自存储器407中取得每一轮运算所需要的权重值和输入数据,而乘累加运算阵列404运算过程中产生的中间结果是暂存于缓存406中。对于电子设备来说,分配给卷积运算所使用的存储空间是有限的,基于上述原因,在预先设置调度模式时,除了考虑网络结构之外,还需要考虑使用这种调度模式运算时,对存储空间的占用情况,以设置合适的调度模式。因此,在一实施例中,模式调度单元401亦会根据缓存409及/或缓存406的大小来确定目标调度模式。

步骤103中、根据目标调度模式,对目标卷积核中的权重数据进行重组,并将重组后的权重数据输出至乘累加运算阵列。

目标调度模式确定之后,权重数据处理单元402根据目标调度模式对目标卷积核中的权重数据进行拆分及适当的数据重组,使重组后的权重数据得以适当的顺序输入到乘累加运算阵列404,而乘累加运算阵列404可完成所需的卷积运算。

实施上,目标卷积核中的权重数据可储存于存储器407中,权重数据处理单元402可经由缓存409在直接存储器访问(Direct Memory Access,DMA)控制器的控制下,自存储器407读取权重数据。

一实施例中,针对每一调度模式,权重数据处理单元402配置有一对应的权重数据读取及重组的操作设定,当目标调度模式确定后,权重数据处理单元402根据目标调度模式以对应的操作设定读取及重组目标卷积核中的权重数据。实施上,权重数据处理单元402可藉由将目标卷积核中的权重数据以原始顺序写入一缓存中,再以所需的顺序自缓存中将权重数据读出,实现对权重数据重组及重排序的目的。

请参阅图3,图3为一实施例中对卷积层的输入数据及卷积核的数据拆分示意图。在确定出目标调度模式后,假设该目标调度模式对应的卷积计算块的尺寸为m×d×w×h,也就是说,在乘累加运算阵列的一轮运算中,权重数据处理单元402从目标卷积核读取m个尺寸为d×w×h的权重数据块,将经重组后权重数据的输入至乘累加运算阵列404。详细来说,权重数据处理单元402分别从K1、K2、……、Km这m个卷积核中获取m个权重数据块,其中,每一个权重数据块在通道方向上的深度为d,在平面上的尺寸为w×h。

步骤104、根据目标调度模式,对目标卷积层中的输入数据进行重组,并将重组后的输入数据输出至乘累加运算阵列。

目标调度模式确定之后,特征数据处理单元403根据目标调度模式对目标卷积层中的输入数据进行拆分及适当的数据重组,使重组后的输入数据得以匹配对应的权重数据块的顺序输入到乘累加运算阵列404,以完成所需的卷积运算。

实施上,目标卷积层中的输入数据可储存于存储器407中,特征数据处理单元403可经由缓存409在直接存储器访问控制器的控制下,自存储器407读取输入数据。

类似地,针对每一调度模式,特征数据处理单元403配置有一对应的输入数据读取及重组的操作设定,当目标调度模式确定后,特征数据处理单元403根据目标调度模式以对应的操作设定读取及重组目标卷积层中的输入数据。实施上,特征数据处理单元403亦可藉由将目标卷积层中的输入数据以原始顺序写入一缓存中,再以所需的顺序自缓存中将输入数据读出,例如以匹配对应的权重数据块的数据顺序自缓存中将输入数据读出,实现对输入数据重组及重排序的目的。

请再参阅图3,在图3的实施例中特征数据处理单元403将目标卷积层中的输入数据拆分为多个尺寸为d×w×h的输入数据块,并对每一输入数据块进行数据重组,使重组后输入数据块的数据顺序能匹配对应的权重数据块,使乘累加运算阵列404得以据以完成正确的乘累加运算。

步骤105、基于重组后权重数据和重组后输入数据进行乘累加运算。

乘累加运算阵列404基于重组后权重数据和重组后的输入数据进行乘累加运算,其中,乘累加运算阵列404每轮运算中所使用的乘累加运算单元的数目对应卷积计算块的大小。

乘累加运算阵列404进行一轮运算后,将计算得到的结果作为中间数据存储到缓存406中。乘累加运算阵列404在乘累加运算时,会将同一个卷积核中通道方向上的乘积相加后作为中间数据存储。然后,权重数据处理单元402根据卷积核在输入数据上进行卷积运算的顺序,继续从缓存409中读取权重数据块,而特征数据处理单元403从缓存409中读取并重组输入数据,以输出与该权重数据块匹配的输入数据块,乘累加运算阵列404据以进行另一轮的运算,如此循环往复,直至完成输入数据中的每一个数据块与权重数据块的运算。

接下来以一个具体应用场景为例对本发明进行说明,请继续参阅图3,假设C=32,W=6,H=6;D=32,R=3,S=3,M=16;d=16,m=16,w=1,h=1。则如图所示,输入数据可以被拆分72个输入数据块,一个卷积核可以被拆分为18个权重数据块。假设该卷积层对应的步长为1,并在长、宽方向均进行了长度为2的零填充,则输入数据上的0-35这36个输入数据块都需要与每一个卷积核中的00对应的权重数据块进行内积运算。

比如,输入数据上的大小为16×1×1(图3中的输入数据的灰色方块)的特征数据块0,该数据块需要与每一个卷积核中的大小为16×1×1的权重数据块00(图3中的卷积核的灰色方块)进行内积运算。因此,权重数据处理单元402根据目标调度模式对应的卷积计算块的大小(d=16,m=16,w=1,h=1),从缓存中的16个卷积核中,分别读取第一个权重数据块,得到16个大小为16×1×1的权重数据块00。特征数据处理单元403从输入数据中读取一个大小为16×1×1的输入数据块0,并将输入数据块0分别匹配给16个权重数据块00(也就是说,输入数据块0在乘累加运算阵列404的一轮运算中重复使用了16次,相当于256个数据)。输入数据块0及16个权重数据块00输入到乘累加运算阵列404进行运算,得到16个数值(通道方向上的乘积进行了相加处理),存储为中间结果,这个过程为乘累加运算阵列404的一轮运算。然后,再进行第二次读数据,以进行乘累加运算阵列404的第二轮运算。如前文所述,输入数据上的0-35这36个输入数据块都需要与每一个卷积核中的权重数据块00进行内积运算,因此,第二次读数据时无需重复读权重数据块00,只需从输入数据中读取大小为16×1×1的输入数据块1,将输入数据块1分别匹配给16个权重数据00,并利用乘累加运算阵列404进行运算,得到16个数值,也存储为中间结果。然后按照与第二轮运算相同的读数据方式,读取一个大小为16×1×1的输入数据块2,进行乘乘累加运算阵列404的第三轮运算,……,然后按照与第二轮运算相同的读数据方式,读取一个大小为16×1×1的输入数据块35,进行乘累加运算阵列404的第36轮运算。至此,完成了输入数据与权重数据块00的卷积运算,同时,存储了36组中间结果,每一组中间结果有16个数值。

接下来,在第37轮运算时,从缓存中读取16个大小为16×1×1的权重数据块01,从输入数据中读取一个大小为16×1×1的输入数据块0,将输入数据块0分别匹配给16个权重数据块01,并利用乘累加运算阵列404进行运算,得到16个数值,由于这16个数值与第一轮运算中得到的16数值均对应于输出数据上的输入数据块0,因此需要将这16个数值和分别与第一轮运算中得到的16个数值相加,得到新的16个数值,并存储为新的中间结果,覆盖掉第一轮运算存储的16个中间结果。按照与前36次同样的取数据方式,乘累加运算阵列404进行第37轮至第72轮运算,完成输入数据与权重数据块01的卷积运算。

重复执行上述运算过程,直至完成目标卷积核对输入数据的全部卷积运算,得到16个二维的输出数据,这16个二维的输出数据叠加,得到该目标卷积层的三维的输出数据。其中,如果下一层也是卷积层,则该输出数据可以被读取到缓存中,作为下一层运算的输入数据,继续进行卷积运算。

需要说明的是,上文所举的是一个为了便于读者理解本申请方案的一个具体实施例。在该实施例中,由于一次读取的权重值数量多于输入数据数量,因此,当相邻两轮运算中使用的权重值重复时,为了提高数据处理效率,没有重复读取权重数据块。但是这并不是对本申请方案的限制,在其他实施例中,也可以按照其他顺序读取数据,在按照其他顺序读取数据时,可以重复或者不重复的读取数据块。

具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。

由上所述,本申请实施例提出的卷积神经网络的运算方法,对于卷积神经网络中具有不同网络结构的各个卷积层来说,可以动态地调整目标调度模式,使得每一个卷积层可以采用与其结构匹配的调度模式,来对输入数据和目标卷积核进行数据块的拆分及重组,使得拆分后的权重数据块中包含的权重值和特征数据块中包含的特征值的数量能够实现对乘累加运算阵列的运算资源的最大化利用,从整体上提高了硬件加速器的资源利用率,进而提高卷积神经网络的运算速度。

以上对本申请实施例所提供的一种卷积神经网络运算方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

相关技术
  • 卷积神经网络的运算方法、装置及DPU
  • 稀疏化卷积神经网络的排序方法、运算方法、装置及设备
技术分类

06120112185033