一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

卷积层的映射方法及映射装置、卷积运算方法及运算装置

2022-07-23 06:57:01 来源:中国专利 TAG:


1.本公开的实施例涉及一种卷积层的映射方法及映射装置、卷积运算方法及运算装置。


背景技术:

2.以忆阻器为代表的具有存算一体功能的新型存储器可在存储的数据上原位实现计算操作,从而消除数据搬移的巨大开销。根据基尔霍夫定律和欧姆定律,存算一体阵列可以并行地完成累乘加计算。由于存算一体阵列的每一列都是一个单独的累乘加计算单元,所以一个存算一体阵列的最大算力等于阵列行数*阵列列数*阵列计算频率。存算一体阵列在模拟域上一步实现矩阵向量乘法运算的特性使其在神经网络的应用中受到了越来越广泛的关注。
3.以卷积神经网络(convolutional neural network,cnn)为代表的深度神经网络已广泛应用于图像识别、图像处理等领域。随着神经网络的深度越来越深,所需的卷积层个数也越来越多。卷积层所占用的计算开销,例如在卷积运算过程中的模数转换开销已经成为了系统的主要开销。特别是在神经网络前几层(浅层网络)的卷积计算中,映射到存算一体阵列上的卷积层规模较小,导致存算一体阵列的空间利用率不足,系统整体的计算效率较低,计算开销较大。


技术实现要素:

4.本公开至少一实施例提供了一种卷积层的映射方法,该映射方法包括:获取所述卷积层的维度[k,h,d,n],其中,n为所述卷积层中的卷积核的个数,k为所述卷积核的宽度,h为所述卷积核的高度,d为所述卷积核的通道数;将所述卷积层展开为行高度k
×h×
d、列宽度n的第0矩阵,其中,在所述第0矩阵中的n列分别对应于将n个所述卷积核分别展开的长度为k
×h×
d的一维向量;基于所述第0矩阵,创建k-1个变换矩阵,其中,所述k-1个变换矩阵包括第1矩阵到第k-1矩阵,其中,第m矩阵相对于第m-1矩阵的变换包括第m矩阵中的行号=(第m-1矩阵中的行号 k)mod(k
×h×
d),m为1到k-1之间的整数;将所述第0矩阵到所述第k-1矩阵映射到存算一体阵列中,其中,所述存算一体阵列包括彼此独立的至少一个子阵列。
[0005]
例如,在本公开至少一实施例的卷积层的映射方法中,所述存算一体阵列包括单个子阵列,所述将所述第0矩阵到所述第k-1矩阵映射到所述存算一体阵列中,包括:将所述第0矩阵到所述第k-1矩阵映射到所述单个子阵列中。
[0006]
例如,在本公开至少一实施例的卷积层的映射方法中,所述将所述第0矩阵到所述第k-1矩阵映射到所述存算一体阵列中,包括:将所述第0矩阵到所述第k-1矩阵依序排列映射到所述存算一体阵列中依序排列的部分。
[0007]
例如,在本公开至少一实施例的卷积层的映射方法中,所述在所述第0矩阵中的n列分别对应于将n个所述卷积核分别展开的长度为k
×h×
d的一维向量,包括:将n个所述卷
积核中的每个按照指定展开方式展开为长度为k
×h×
d的一维向量,其中,所述指定展开方式包括:先展开所述卷积核的通道数d,然后展开所述卷积核的高h,最后展开所述卷积核的宽k。
[0008]
本公开至少一实施例提供了一种卷积运算方法,该卷积运算方法包括:将用于所述卷积运算的卷积层按照本公开任一实施例所述的映射方法映射到所述存算一体阵列中;以滑动方式从输入特征图获取多个批次的输入数据,其中,在每次滑动中,读取所述输入特征图中对应于所述卷积层的全部输入数据且进行一维展开作为当前批次的输入数据,所述输入特征图的通道数为d,所述卷积运算的卷积步长为1;将所述多个批次的输入数据分别输入到所述存算一体阵列计算,以进行所述卷积运算。
[0009]
例如,在本公开至少一实施例的卷积运算方法中,所述以滑动方式从所述输入特征图获取所述多个批次的输入数据,包括:在所述输入特征图的每一行上进行多次水平滑动以从所述输入特征图获取所述多个批次中对应于当前行的输入数据,其中,每次所述水平滑动的滑动步长为k。
[0010]
例如,在本公开至少一实施例的卷积运算方法中,所述以滑动方式从所述输入特征图获取所述多个批次的输入数据,包括:将读取的所述输入特征图的输入数据按照与所述卷积核相同的展开方式展开为长度为k
×h×
d的一维向量。
[0011]
例如,在本公开至少一实施例的卷积运算方法中,所述将所述多个批次的输入数据分别输入到所述存算一体阵列计算,包括:在输入所述多个批次的输入数据时,根据所述卷积核的宽度维度将所述当前批次的输入数据划分为k份,并通过多路复用电路将所述k份每个对应的部分一维向量分时输入到所述存算一体阵列中。
[0012]
例如,在本公开至少一实施例的卷积运算方法中,所述通过所述多路复用电路将所述k份每个对应的部分一维向量分时输入到所述存算一体阵列中,包括:在每个分时操作周期中,将所述k份每个对应的部分一维向量作为输入信号输入到所述存算一体阵列中与所述卷积层进行累乘加运算,以同时获得k*n个输出结果。
[0013]
例如,在本公开至少一实施例的卷积运算方法中,所述k*n个输出结果包括输出有效值或输出无效值,所述输出有效值被保留,所述输出无效值被舍弃而不计入最终的卷积计算结果中。
[0014]
例如,在本公开至少一实施例的卷积运算方法中,所述存算一体阵列包括阵列排布的多个存算一体器件。
[0015]
例如,在本公开至少一实施例的卷积运算方法中,所述存算一体器件包括忆阻器、sram单元、dram单元、pcm单元、或flash单元。
[0016]
本公开至少一实施例提供了一种卷积层的映射装置,包括:存算一体阵列,包括彼此独立的至少一个子阵列;维度获取模块,配置为获取所述卷积层的维度[k,h,d,n],其中,n为所述卷积层中的卷积核的个数,k为所述卷积核的宽度,h为所述卷积核的高度,d为所述卷积核的通道数;卷积展开模块,配置为将所述卷积层展开为行高度k
×h×
d、列宽度n的第0矩阵,其中,在所述第0矩阵中的n列分别对应于将n个所述卷积核分别展开的长度为k
×h×
d的一维向量;矩阵变换模块,配置为基于所述第0矩阵,创建k-1个变换矩阵,其中,所述k-1个变换矩阵包括第1矩阵到第k-1矩阵,其中,第m矩阵相对于第m-1矩阵的变换包括第m矩阵中的行号=(第m-1矩阵中的行号 k)mod(k
×h×
d),m为1到k-1之间的整数;权重映射
模块,配置为将所述第0矩阵到所述第k-1矩阵映射到所述存算一体阵列中。
[0017]
本公开至少一实施例提供了一种卷积运算装置,包括:本公开任一实施例所述的卷积层的映射装置;数据获取模块,配置为以滑动方式从输入特征图获取多个批次的输入数据,其中,在每次滑动中,读取所述输入特征图中对应于所述卷积层的全部输入数据且进行一维展开作为当前批次的输入数据,所述输入特征图的通道数为d,所述卷积运算的卷积步长为1;输入控制模块,配置为将所述多个批次的输入数据分别输入到所述存算一体阵列计算,以进行所述卷积运算。
附图说明
[0018]
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
[0019]
图1a为一种卷积神经网络的结构示意图;
[0020]
图1b为一个卷积层进行多通道卷积运算的示意图;
[0021]
图1c为一种卷积计算过程的示意图;
[0022]
图2a为一种基于存算一体阵列的卷积神经网络系统架构的示意图;
[0023]
图2b为一种控制选通模块的示意图;
[0024]
图2c为一种忆阻器阵列的结构示意图;
[0025]
图3为一种基于存算一体阵列实现卷积计算的示意图;
[0026]
图4a为一种卷积层映射方法的示意图;
[0027]
图4b为图4a中卷积层映射方法的卷积计算结果的示意图;
[0028]
图5a为另一种卷积层映射方法的示意图;
[0029]
图5b为图5a中卷积层映射方法的卷积计算结果的示意图;
[0030]
图6为本公开一实施例提供的卷积层的映射方法的示意图;
[0031]
图7为本公开一实施例提供的卷积运算方法的流程图;
[0032]
图8a和图8b为本公开一实施例提供的卷积运算过程的示意图;
[0033]
图9为本公开一实施例提供的卷积层的映射装置的示意图;以及
[0034]
图10为本公开一实施例提供的卷积运算装置的示意图。
具体实施方式
[0035]
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0036]
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理
的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
[0037]
为了保持本公开实施例的以下说明清楚且简明,可省略已知功能和已知部件的详细说明。
[0038]
神经网络是受大脑神经元结构及神经传导原理启发建立的数学计算模型,基于这类模型实现智能计算的方式称为脑启发计算。例如,神经网络包括多种形式的网络结构,例如,反向传播(back propagation,bp)神经网络、卷积神经网络(cnn)、循环神经网络(rnn)、长短期记忆网络(lstm)等;又例如,卷积神经网络还可以细分为全卷积网络、深度卷积网络、u型网络(u-net)等。
[0039]
例如,一种通常的卷积神经网络通常包括输入端、输出端以及多个处理层。例如,输入端用于接收待处理的数据,例如待处理图像等,输出端用于输出处理结果,例如处理后图像等,这些处理层可以包括,但不限于,卷积层、池化层、全连接层、批量标准化层(batch normalization,简称bn)、激活层等,根据卷积神经网络的结构不同,处理层可以包括不同的内容和组合方式。输入数据输入卷积神经网络后,经过若干个处理层得到对应的输出,例如,输入数据可以通过若干个处理层完成卷积、上采样、下采样、标准化、全连接、平坦化等操作。
[0040]
卷积层是卷积神经网络的核心层,对输入数据(输入图像或输入特征图)应用若干个卷积核(也称为过滤器),输入数据被用来进行多种类型的特征提取。每个卷积核可以提取一种类型的特征。对于输入数据应用一个卷积核之后得到的结果被称为特征图(feature map),特征图的数目与卷积核的数目相等。一个卷积层输出的特征图可以被输入到下一个层级的卷积层再次处理以得到新的特征图。池化层是夹在连续的卷积层之间的中间层,用于缩减输入数据的规模,也在一定程度上减小过拟合的现象。实现池化的方法有很多种,这些方法包括但不限于:最大值合并(max-pooling)、平均值合并(avg-pooling)、随机合并、欠采样(decimation,例如选择固定的像素)、解复用输出(demuxout,将输入图像拆分为多个更小的图像)等。通常最后一个子采样层或卷积层连接到一个或多个全连接层,全连接层用于连接提取的所有特征。例如,全连接层的输出作为最终输出,可得到一个一维矩阵,也就是向量。
[0041]
图1a抽象地示出了的卷积神经网络中一个神经元的输入与输出。如图1a所示,c1、c2到cn指代不同的信号通道,针对某一个局部感受域(该局部感受域包含多个通道),使用不同的过滤器对该局部感受域的c1到cn信号通道上的数据进行卷积,卷积结果被输入到刺激节点,该刺激节点根据相应的函数进行计算以得到特征信息。例如,卷积神经网络可以是具有两层或者更多层的深度卷积神经网络。
[0042]
上述内容仅是对卷积神经网络进行示例性介绍,本公开对卷积神经网络的结构不作限制。
[0043]
卷积计算的输入数据可以是图像也可以是其他的二维矩阵信息,由于输入图像和卷积层都可以用矩阵的形式表示,因此可以对二者进行卷积计算得到输出特征图像,例如,通过卷积层对输入数据进行卷积操作可以对输入图像进行特征提取,从而获得包含提取特征信息的输出特征图。
[0044]
图1b示出了一个卷积层进行多通道卷积运算的过程。如图1b所示,一个卷积层的维度可以用[h,k,d,n]表示。例如,一个卷积层的输出通道数可以用n表示,输出通道数的数目通常也被称作卷积核的个数,也即一个卷积层可以包括一个或多个卷积核,例如图1b所示的卷积层具有n个卷积核。卷积层中每个卷积核的维度可以用[h,k,d]表示,卷积核的高度为h,宽度为k,例如,卷积核的高度h和宽度k可以相同或不相同,通常情况下,卷积核的高度h和宽度k一般相同且可以取值为1或3或5等。由于输入图像可能包括多个通道,例如rgb类型的图像的通道数为3(分别对应于r、g、b三种不同的原色),因此每个卷积核可以对应地包括多个输入通道d。在图1b所示的卷积神经网络中,输入特征图(或输入图像)的维度可以用[h
in
,w
in
,d,m]表示,其中,m代表输入特征图的个数,h
in
和w
in
分别代表输入特征图的高度和宽度,输入特征图的高h
in
和宽w
in
可以相等或不相等。
[0045]
由于输入特征图的输入通道数和卷积核的输入通道数相等,因此,在本公开的实施例中,输入特征图的通道数也用d表示。
[0046]
如图1b所示,使用n组具有d个通道的h
×
k的卷积核,对m组具有d个通道的h
in
×win
的输入特征图进行卷积运算,分别得到m组具有n个通道的h
out
×wout
的输出特征图,因此,输出特征图的维度可以表示为[h
out
,w
out
,n,m],其中h
out
和w
out
分别为每个输出特征图的高度和宽度。
[0047]
在一次卷积计算操作中,例如,卷积核对输入特征图的第一个区域进行卷积运算,该卷积运算的结果对应为输出特征图像上的第一个点,因此,卷积核与输入特征图像进行多次卷积运算后的多个卷积运算结果组成了输出特征图像。卷积核与输入特征图像进行多次卷积运算是通过卷积核在输入特征图上以滑动的方式前向传播进行的,滑动窗口的大小为卷积核的长度乘以宽度,在每次滑动时对卷积核和输入特征图像的重合部分进行矩阵内积乘法计算,然后将全部元素的乘积结果进行累加得到一个值,这个值即为一次卷积计算的结果。卷积核在输入特征图像上进行滑动卷积计算的卷积步长通常为1,卷积步长表示卷积核每次在输入特征图上滑动的步长,例如可以取1或2或3等。
[0048]
下面将结合图1c具体介绍卷积层的卷积运算过程。
[0049]
图1c示出了一种单通道单卷积核的卷积计算过程,一个单通道的输入特征图ifm大小为5*7,并用a、b、c、

、u来表示该输入特征图每个元素的位置,选择一个大小为3*3的单通道卷积核,并用1、2、

、9表示该卷积核每个元素的位置。输出特征图ofm上第n个位置的计算结果用ofmn来表示,例如,输出特征图ofm第1个位置上的结果为卷积核对输入特征图的第一个3*3大小的区域中每个元素进行对应相乘并累加的卷积运算得到,即ofm1=1*a 2*b 3*c 4*d 5*e 6*f 7*g 8*h 9*i,随后卷积核在输入特征图的水平方向上以1的卷积步长进行滑动,对应到输入特征图的第二个3*3大小的区域,并采用相同的方法计算得到输出特征图ofm第2个位置上的结果,即ofm2=1*d 2*d 3*f 4*g 5*h 6*i 7*j 8*k 9*l。当卷积核在输入特征图的水平方向上滑动到第1行的最后一个区域并完成卷积计算后,该卷积核下移到输入特征图的第2行继续进行水平滑窗卷积运算,直到扫描完输入特征图的全部区域为止。例如,卷积核在输入特征图的第1行水平滑动到最后一个区域,对应得到输出特征图第1行第5列元素的输出结果,即ofm5=1*m 2*n 3*o 4*p 5*q 6*r 7*s 8*t 9*u,然后卷积核下移一行,对输入特征图的第6个区域进行卷积计算,对应得到输出特征图第2行第1列元素的输出结果,即ofm6。以此类推,最终获得输出特征图的全部卷积计算结果。
[0050]
卷积运算的累乘加操作可以简单地通过存算一体阵列实现。例如以忆阻器阵列等非易失性存储阵列为代表的存算一体阵列将计算单元和存储单元融合在一体,能够有效解决冯诺依曼架构的“存储墙”问题,相比传统处理器计算装置具有高计算效率、低功耗的优势,因而该存算一体计算装置可以为卷积神经网络的卷积运算提供良好的硬件支持。基于存算一体阵列的神经网络卷积运算可以大大降低由于数据在计算单元和存储单元之间的搬移而造成的系统开销,并有效提高神经网络的计算速度。在本公开的实施例中,存算一体阵列可以由非挥发性存储器件组成,非挥发性存储器件包括但不限于忆阻器(例如,忆阻器可以为阻变存储器单元(resistive random access memory,rram))、静态随机存取存储器(static random-access memory,sram)单元、动态随机存取存储器(dynamic random-access memory,dram)单元、相变存储器(phase change memory,pcm)单元、闪存(flash memory,flash)单元或其他适当的非挥发性存储器件等。
[0051]
基于存算一体阵列的卷积神经网络系统架构通常包括输入模块、输出模块、计算单元和控制模块等。例如,图2a示出了一种基于存算一体阵列的卷积神经网络系统架构的示意图,该系统架构包括输入缓存模块、数模转换模块、选通开关模块、存算一体阵列(例如忆阻器阵列)、模数转换模块、输出缓存模块和控制模块;例如,输入模块包括输入缓存模块、数模转换模块、选通开关模块,计算单元包括存算一体阵列,而输出模块包括模数转换模块、输出缓存模块。例如,这些模块可以通过电路实现,例如数字电路和/或模拟电路。
[0052]
例如,输入缓存模块用于接收和缓存输入特征图的输入数据,并将缓存在输入缓存模块中的输入特征图的输入数据输出到数模转换模块中。例如,输入缓存模块可以是基于sram的存储器、基于dram的存储器。
[0053]
例如,数模转换(dac)模块将输入缓存模块输出的输入数据从数字信号转换为模拟信号,并输出给忆阻器阵列。例如,数模转换模块可以根据输入数据的大小转换为模拟电压的大小。例如,数模转换模块也可以由脉冲数目编码器实现,根据输入数据的大小转换为多个固定电压值的脉冲数,例如,用输入脉冲数的个数表示输入数值的大小。
[0054]
例如,如图2b所示,控制选通模块可以是一个单输入多输出的模块。控制选通模块可以将来自输入通道的输入信号根据选通信号的控制连接到输出通道1~输出通道n中被选择的一个(或多个)。例如,通过控制选通模块可以依次为忆阻器阵列的不同区域提供输入信号。例如,控制选通模块根据电路中设置的数模转换模块的类型和数量将输入信号分配到忆阻器阵列的不同区域上。例如,控制选通模块可以由多路复用(mux)电路实现,例如可以多个cmos传输门实现。
[0055]
例如,存算一体阵列用于实现存储计算一体化。本公开的实施例以忆阻器阵列为例介绍存算一体阵列的结构,但该存算一体阵列的构成器件并不限制于忆阻器,还可以是由sram单元、dram单元、pcm单元、flash单元等其他存储器件构成。
[0056]
例如,忆阻器阵列可以包括阵列布置的多个忆阻器,每个忆阻器阵列可以采用图2c所示的结构,也可以采用其他能够执行矩阵乘法计算的结构。
[0057]
例如,图2c所示的忆阻器阵列由多个忆阻器单元构成,每个忆阻器单元包括开关元件和忆阻器器件,开关元件例如是晶体管等。该多个忆阻器单元构成一个m行n列的阵列,这里m和n均为正整数。在图2c中,wl1、wl2、

、wlm分别表示第一行、第二行、

、第m行的字线,每一行的忆阻器单元电路中的开关元件的控制极(例如晶体管的栅极)和该行对应的字
线连接;bl1、bl2、

、bln分别表示第一列、第二列、

、第n列的位线,每列的忆阻器单元电路中的忆阻器和该列对应的位线连接;sl1、sl2、

、slm分别表示第一行、第二行、

、第m行的源线,每一行的忆阻器单元电路中的晶体管的源极和该行对应的源线连接。例如,其中的字线wl控制忆阻器阵列上的行选通,位线bl提供输入信号,源线sl作为电流的累加线路,根据基尔霍夫定律完成电流的累加。
[0058]
图2c所示的忆阻器阵列中的忆阻器单元例如可以为1t1r结构或者2t2r结构,其中,1t1r结构的忆阻器单元包括一个开关晶体管和一个忆阻器(如图2c所示),2t2r结构的忆阻器单元包括两个开关晶体管和两个忆阻器。本公开对于忆阻器器件的类型、结构等没有限制。需要说明的是,本公开的实施例中采用的晶体管均可以为薄膜晶体管或场效应晶体管(例如mos场效应晶体管)或其他特性相同的开关器件。这里采用的晶体管的源极、漏极在结构上可以是对称的,所以其源极、漏极在结构上可以是没有区别的。本公开的实施例对采用的晶体管的类型不作限定。
[0059]
例如,在图2a中的模数转换(adc)模块可以将忆阻器阵列输出的模拟信号转换为数字信号。例如,模数转换模块可以由模拟电路和/或数字电路实现。例如,可以先通过运放电路将输出的电流信号转换为电压信号,再由adc实现模数转换。
[0060]
例如,在图2a中的输出缓存模块缓存模数转换模块的转换结果,并将计算结果输出给后续待运算的模块。例如,该输出缓存模块的组成与输入缓存模块相同。
[0061]
例如,在图2a中的控制模块负责控制、协调各个模块的工作。例如,控制输入缓存模块和输出缓存模块的输入和输出,例如,为控制选通模块提供控制信号等。例如,如图2a所示,在控制模块的控制下,输入缓存模块将接收到的数字输入数据经过缓存并传输到数模转换模块中,经数模转换后得到的模拟输入信号再传输到选通开关模块中,选通开关模块将模拟输入信号传送到指定的输入通道中,经位线端输入到忆阻器阵列中,忆阻器阵列完成卷积运算的乘累加操作,并将模拟计算结果经模数转换模块处理后得到数字输出结果并输出到输出缓存模块中。
[0062]
图3为一种卷积神经网络基于存算一体阵列实现卷积计算的示意图。例如,如图3所示,在卷积神经网络的第《n》层网络层上,输入特征图的维度为[h
in
,w
in
,d],卷积层的维度为[k,h,d,n],即该卷积层包括n个通道数为d的k*h大小的卷积核,将n个卷积核的每个展开成长度为k*h*d的一维向量并映射到存算一体阵列的一列上,例如,将卷积核中每个元素的权重大小映射为忆阻器阵列上各个忆阻器的电阻值大小。例如,将n个卷积核映射到忆阻器阵列上n个并行的列上,由于这n个卷积核的输入相同,所以可以在忆阻器阵列上实现并行计算。例如,输入特征图中在每次滑动过程中用于卷积计算的部分(维度也为[k,h,d])可以按照与卷积层相同的展开方式展开成长度为k*h*d的一维向量,由输入特征图依次展开成的(1)、(2)、

、(x)个一维向量依次作为忆阻器阵列的输入信号(例如电压信号)与忆阻器阵列进行累乘加计算,分别得到的输出结果(例如电流信号)(1)、(2)、

、(y)最终组合对应为输出特征图的值,例如,输出特征图的大小为[h
out
,w
out
,n]。
[0063]
在现有的存算一体阵列设计中,外围电路包括数模转换模块(dac)和模数转换模块(adc)占据了非常大的面积开销和功耗开销。本公开的发明人注意到在神经网络的前几层(浅层网络)卷积运算中,卷积层中卷积核的个数一般较少,将较少数量的卷积核一一映射到忆阻器阵列的每一列上使得忆阻器阵列的空间利用率较低。例如,将一个维度为[3,3,
64,32]的卷积层映射到一个576行128列的忆阻器阵列上时,由于卷积层有32个卷积核,每个卷积核展开成长度为3*3*64的一维向量,即一维向量包括576个元素,这576个元素分别映射到忆阻器阵列中一列中的576行上。在这种映射方式中,忆阻器阵列中只有32列、576行的忆阻器被充分使用,而剩下96列的忆阻器没有被利用,而为了使这部分没有被利用的忆阻器所产生的功耗最小,需要将这96列的忆阻器置位为最高阻态(r
max
),以使流过这些忆阻器的电流最小。
[0064]
如图4a所示,每个卷积核的大小为3*3,用1-9表示卷积核不同元素的位置标号,需要说明的是该位置标号不等同于实际的元素值。将n个卷积核均按照通道数d展开为一维向量并映射到忆阻器阵列上,忆阻器阵列上标号为1-9的每个黑色小块的每一个均由n个卷积核的d个通道上的元素组成,例如,忆阻器阵列上标号为1的黑色小块代表n个卷积核第一行第一列的d个通道上的所有元素组成的矩阵,即每个黑色小块的行数为卷积核的输入通道数d,每个黑色小块的列数为卷积核的个数n,也即每个黑色小块代表具有d行n列的矩阵。例如,在图4a所示的映射方式中,忆阻器阵列上仅有n列的忆阻器被使用,而图中的空白区域则表示没有得到充分利用的忆阻器,这些忆阻器在卷积运算过程中全部处于高阻态。
[0065]
由于数模转换模块(dac)的面积和功耗与精度成指数关系,即dac的精度每提高一位,dac的面积和功耗就增大一倍,因此目前有两种方案实现神经网络的卷积计算。
[0066]
一种方案是采用低精度的dac进行模数转换,例如2位(bits)精度的dac;如上所述,低精度的dac的面积和功耗相对更小,所以可以针对忆阻器阵列的每一行提供一个dac单元。例如,为了提高输入并行度,采用低精度的dac去代替高精度dac,使忆阻器阵列的每一行都有一个dac单元,忆阻器阵列的每一行都可以同时工作。如图4a所示,该卷积计算系统包括低精度模数转换模块、忆阻器阵列、输出端的控制选通模块、模数转换模块以及移位累加模块。例如,低精度的数模转换模块将接收的输入信号转换为模拟信号后,同时输入到忆阻器阵列中。
[0067]
但是,这种采用低精度并行计算的方案对于输入数据的精度高于dac的精度的情况,则需要将输入分为多个周期。例如,对于一个8bits的输入需要用一个2bits的dac分四次输入,每次的输入在计算后的结果用adc读出,四次结果可以在数字电路中对应地进行移位累加,得到最终的计算结果。如图4b所示,对于一个8bits精度的输入,使用2bits精度的dac,需要将8bits的输入从高位到低位分成四个部分,每个部分包括2bits且对应于一个周期,每个周期采用低精度的dac接收2bits的部分,该8bits的输入分4次输入到忆阻器阵列中进行计算,例如,第一次输入[6:7]对应的2bits,所得到的计算结果在进行adc转换后被缓存且通过向高位移位6位以用于累加;例如,第二次输入[4:5]对应的2bits,所得到的计算结果在进行adc转换后被缓存且通过向高位移位4位以用于进行累加;例如,第三次输入[2:3]对应的2bits,所得到的计算结果在进行adc转换后被缓存且通过向高位移位2位以用于进行累加;例如,第四次输入[0:1]对应的2bits,所得到的计算结果在进行adc转换后被缓存,与前三次通过移位处理的中间结果相加以得到最终结果。但是,由于每一次计算过程中都存在误差,而移位过程还会放大这些误差。例如,高位上被放大的误差足以淹没低位的计算结果,所以这种低精度dac分周期处理输入的方法依然无法提高输出精度。因此,采用低精度dac的方案不仅可能需要多个计算周期才能得到一个完整的结果,还会导致计算结果精度下降。
[0068]
另一种方案是采用高精度的dac进行模数转换,例如8bits的dac。但是因为高精度的dac的面积相对较大,因此很难做到每一行都有一个dac提供输入,为了节约数模转换模块的开销,还需要通过控制选通模块去复用数模转换模块,例如需通过控制选通模块对dac进行分时复用。如图5a所示,该卷积计算系统包括高精度模数转换模块、输入端的控制选通模块、忆阻器阵列、输出端的控制选通模块以及模数转换模块。例如,高精度的数模转换模块将接收的输入信号转换为模拟信号后,通过输入端的控制选通模块将输入信号分时输出到不同的输出通道中。
[0069]
例如,在如图5a所示的卷积计算系统中,为了给忆阻器阵列中所需的全部行输入数据,高精度的dac被分时复用了4次,每次对应于所需的全部行中的1/4且得到相应的中间结果,四个中间结果再被累加以得到最终结果,忆阻器阵列的输出结果如图5b所示。例如,8bits精度的dac被分时复用了4次,每次忆阻器阵列的输出结果为12bits,例如,每个输出结果的低两位均受到误差噪声的影响。例如,将4次的输出结果相加,得到14bits的最终输出结果,例如,其中仅低4位受到了误差噪声的影响。这种方案的计算精度较高,但是由于dac需要多次分时复用,因此需要多个周期才能得到一个完整的计算结果,所以系统整体的计算速度较慢。
[0070]
本公开至少一实施例提供了一种卷积层的映射方法,该映射方法包括:获取卷积层的维度[k,h,d,n],其中,n为卷积层中的卷积核的个数,k为卷积核的宽度,h为卷积核的高度,d为卷积核的通道数;将卷积层展开为行高度k
×h×
d、列宽度n的第0矩阵,其中,在第0矩阵中的n列分别对应于将n个卷积核分别展开的长度为k
×h×
d的一维向量;基于第0矩阵,创建k-1个变换矩阵,其中,k-1个变换矩阵包括第1矩阵到第k-1矩阵,其中,第m矩阵相对于第m-1矩阵的变换包括第m矩阵中的行号=(第m-1矩阵中的行号 k)mod(k
×h×
d),m为1到k-1之间的整数;将第0矩阵到第k-1矩阵映射到存算一体阵列中,其中,存算一体阵列包括彼此独立的至少一个子阵列。
[0071]
本公开至少一实施例还提供了一种卷积运算方法,该卷积运算方法包括:将用于卷积运算的卷积层按照本公开任一实施例提供的映射方法映射到存算一体阵列中;以滑动方式从输入特征图获取多个批次的输入数据,其中,在每次滑动中,读取输入特征图中对应于卷积层的全部输入数据且进行一维展开作为当前批次的输入数据,输入特征图的通道数为d,卷积运算的卷积步长为1;将多个批次的输入数据分别输入到存算一体阵列计算,以进行卷积运算。
[0072]
在本公开至少一实施例中,可以将如图1c所示的卷积计算过程中的输出特征图的第一个计算输出点表示为ofm1=psum1 psum2 psum3,其中psum1=1*a 2*b 3*c,psum2=4*d 5*e 6*f,psum3=7*g 8*h 9*i。即将输入特征图的每一列与卷积核每一列对应相乘再相加。同样地,第二个计算输出点可以表示为ofm2=psum1 psum2 psum3,其中psum1=1*d 2*e 3*f,psum2=4*g 5*h 6*i,psum3=7*j 8*k 9*l。随着输入数据的滑动变化,输出特征图的第三个计算输出点可以表示为ofm3=psum1 psum2 psum3,其中psum1=1*g 2*h 3*i,psum2=4*j 5*k 6*l,psum3=7*m 8*n 9*o。
[0073]
例如,如图6所示,本公开至少一实施例将三维卷积核展开成为一维向量,该一维向量按照图6中所示的顺序排列。图6中存算一体阵列中的每一个黑色小块的行数等于卷积核的输入通道个数d,黑色小块的列数等于卷积核数量n。本公开至少一实施例将展开的n个
卷积核在存算一体阵列的水平方向上进行复制映射,复制的次数为k-1次。例如,本公开至少一实施例提供的映射方法还需要对复制得到的变换矩阵映射到存算一体阵列上的顺序进行调整,使得每一行的输入都可以与图6所示的卷积核三个不同的列进行运算,可以同时得到3*n个输出结果。
[0074]
例如,本公开至少一实施例提供的卷积层的映射方法和卷积计算方法中的卷积计算步长为1,因此,输入特征图的大部分数据可以被复用k-1次。例如,在如上所述的计算过程中,输入特征图的第二列数据d,e,f在计算过程中被使用了2次,第三列数据被使用了3次。因此,本公开至少一实施例中的输入特征图的复用度得到了提高,存算一体阵列的空间利用率得到了提高,从而减少了数模转换模块的调用次数,提高了计算速度和计算精度。
[0075]
例如,本公开至少一实施例提供的卷积层的映射方法可以将第0矩阵到第k-1矩阵映射到存算一体阵列的一个单个子阵列中,例如,该单个子阵列的行高度不小于k*h*d且列宽度不小于k*n,或者,当单个子阵列的阵列大小小于卷积核所需映射的阵列大小时,可以根据实际需要将第0矩阵到第k-1矩阵映射到存算一体阵列的多个子阵列中。例如,在卷积核展开成的一维向量长度(k
×h×
d)较长,而卷积核的数量n较小的情况下,可以将一维向量k
×h×
d分为z份,将此k*n个一维向量分别映射到存算一体阵列的z个子阵列中。例如,在卷积核展开成的一维向量长度小于忆阻器子阵列的行数,而卷积核的数量n较大的情况下,可以将第0矩阵到第m矩阵映射到一个存算一体子阵列中,而将第m矩阵到第k-1矩阵映射到另一个存算一体子阵列中。
[0076]
例如,在本公开至少一实施例提供的卷积层的映射方法中,第0矩阵到第k-1矩阵可以依序排列映射到存算一体阵列中相应的部分。例如,第0矩阵到第k-1矩阵可以按照创建变换矩阵时的顺序排列,例如正序排列,也可以按照倒序排列或乱序排列的方式映射到存算一体阵列中,只要保证映射到存算一体阵列中第0矩阵到第k-1矩阵在每一行上所对应的卷积核的位置标号不同即可。
[0077]
例如,在本公开至少一实施例提供的卷积层的映射方法中,可以将n个卷积核按照指定的展开方式分别展开的长度为k
×h×
d的一维向量,输入特征图也需要按照与卷积核相同的展开方式展开。例如,可以指定该展开方式为:先展开卷积核的通道数d,然后展开卷积核的高h,最后展开卷积核的宽k,如图4a中的黑色小块所示。例如,也可以指定该展开方式为:先展开卷积核的宽k,然后展开卷积核的高h,最后展开卷积核的通道数d。本公开的实施例对卷积核或输入特征图的展开方式不作限制。
[0078]
例如,本公开至少一实施例提供的卷积运算方法通过在输入特征图的每一行上进行多次水平滑动以获取多个批次中对应当前行的输入数据,每次水平滑动的滑动步长为k。例如,对于一个单通道3*3大小的卷积核来说,每次水平滑动获取输入特征图3*3大小的全部输入数据,然后通过数模转换模块和选通控制模块分为k份分时输入到存算一体阵列中,所需的分时操作周期为k次。
[0079]
例如,本公开至少一实施例提供的卷积运算方法在每个分时操作周期中,将k份每个对应的部分一维向量作为输入信号输入到存算一体阵列中与卷积层进行累乘加运算,以同时获得k*n个输出结果。例如,该k*n个输出结果中可能包括或不包括输出无效值,将所有输出结果中的有效值保留,无效值舍弃。例如,可以通过外围电路实现不同分时操作周期的输出结果有效值的累加,以获得最终的卷积计算结果。对此,例如可以采用如图5a和5b所示
的高精度dac模块来执行该操作。
[0080]
卷积计算是一个不断滑窗的过程,常见的是水平方向滑窗,然后下移一行继续进行水平方向滑窗,直到所有的输入数据全部完成计算。图7为本公开至少一实施例提供的卷积运算方法的流程图,如图7所示,该卷积运算方法包括如下步骤:
[0081]
步骤10,判断卷积核的垂直滑窗是否完成;
[0082]
步骤20,如果卷积核的垂直滑窗没有完成,则读取与卷积核对应的输入特征图的数据;
[0083]
步骤30,判断卷积核的水平滑窗是否完成;
[0084]
步骤40,如果卷积核的水平滑窗没有完成,则卷积核在输入特征图的水平方向上滑动k列;
[0085]
步骤50,如果卷积核的水平滑窗已经完成,则卷积核在输入特征图的垂直方向上滑动1行,然后执行步骤10,直到垂直滑窗完成。
[0086]
例如,上述步骤20的一个具体示例还包括:
[0087]
步骤21,激活卷积核第一列对应输入特征图的输入数据;
[0088]
步骤22,激活卷积核第二列对应输入特征图的输入数据;
[0089]
……
[0090]
步骤23,激活卷积核第k列对应输入特征图的输入数据。
[0091]
例如,步骤10~步骤50对应本公开实施例中以滑动方式从输入特征图获取多个批次的输入数据,步骤21~步骤23对应本公开实施例中在输入多个批次的输入数据时,根据卷积核的宽度维度(k)将当前批次的输入数据划分为k份,并通过多路复用电路将k份每个对应的部分一维向量分时输入到存算一体阵列中。
[0092]
下面将结合一个具体但非限制性的示例对本公开至少一实施例提出的映射方法和卷积运算方法进行详细的说明。
[0093]
图8a和图8b示出了本公开至少一实施例提供的卷积运算过程,整个阵列的计算过程中的每一批次输入数据可以分成k次进行输入激活,每次激活对应于卷积层中卷积核一列的数据,即每一批次输入数据的第k份对应的部分一维向量,例如,在如图8a和图8b所示的实施例中,对于一个3*3的卷积核,每一批次的输入数据被划分为k=3份,计算结果由adc读出,并在外围数字电路进行累加。
[0094]
如8b中表所示,在分时操作的第一个周期,通过选通开关模块将输入特征图对应部分的第一列,即第一批次输入数据的第一份输入向量(即第一份对应的部分一维向量),输入图8a的(a)所示的输入激活区域。此时,由输入特征图得到的第一批次输入数据的第一份输入向量与图中第一列卷积核1、2、3进行乘累加运算得到输出o1的第一个三分之一,记为o1,1,在图中表现为对应于权重副本1的psum1,而图8a的(a)阵列中输入激活区域对应的第二列卷积核7、8、9和第三列卷积核4、5、6在周期一中计算得到的输出结果是无效值,即权重副本2和权重副本3的psum2和psum3无含义而将被舍弃,不计入最终的计算结果中。
[0095]
在分时操作的第二个周期,通过选通开关模块将输入特征图对应部分的第二列,即第一批次输入数据的第二份输入向量(即第二份对应的部分一维向量),输入图8a的(b)所示的输入激活区域。此时第一批次输入数据的第二份输入向量与图中第一列卷积核4、5、6进行乘累加运算得到输出o1的第二个三分之一,记为o1,2,在图中表现为psum1;该输入向
量与图中第二列卷积核1、2、3进行乘累加运算得到输出o2的第一个三分之一,记为o2,1,在图中表现为psum2。而图中第三列卷积核7、8、9在周期二中是无效值的需要舍弃。
[0096]
在分时操作的第三个周期,通过选通开关模块将输入特征图对应部分的第三列,即第一批次输入数据的第三份输入向量(即第三份对应的部分一维向量),输入图8a的(c)所示的输入激活区域。此时第一批次输入数据的第三份输入向量与图中第一列卷积核7、8、9进行乘累加运算得到输出01的最后一个三分之一,记为o1,3,在图中表现为psum1。至此o1=o1,1 o1,2 o1,3,得到了输出特征图的第一个完整的计算输出点;该输入向量与图中第二列卷积核4、5、6进行乘累加,得到输出o2的第二个三分之一o2,2,在图中表现为psum2;该输入向量与图中第三列卷积核1、2、3进行乘累加,得到输出o3的第一个三分之一o1,3,在图中表现在psum3。
[0097]
之后,在输入特征图中,向右滑动三列以获得第二批次输入,在分时操作的第四个周期,通过选通开关模块将输入特征图对应部分的第一列,即第二批次输入数据的第一份输入向量,输入图8a的(a)所示的输入激活区域。由第二批次输入数据的第一份输入向量与图中第一列卷积核1、2、3进行乘累加运算得到输出o4的第一个三分之一,记为o4,1,在图中表现为对应于权重副本1的psum1,图8a的(a)阵列中输入激活区域对应的第三列卷积核7、8、9进行乘累加运算得到输出o2的第三个三分之一,记为o2,3,在图中表现为psum2;图8a的(a)阵列中输入激活区域对应的第二列卷积核4、5、6进行乘累加运算得到输出o3的第二个三分之一,记为o3,2,在图中表现为psum3。在该第四个周期中,至此o2=o2,1 o2,2 o2,3,得到了输出特征图的第二个完整的计算输出点。
[0098]
在分时操作的第五个周期,通过选通开关模块将输入特征图对应部分的第二列,即第二批次输入数据的第二份输入向量,输入图8a的(b)所示的输入激活区域。由第二批次输入数据的第二份输入向量与图中第二列卷积核4、5、6进行乘累加运算得到输出o4的第二个三分之一,记为o4,2,在图中表现为对应于权重副本1的psum1,图8a的(b)阵列中输入激活区域对应的第一列卷积核1、2、3进行乘累加运算得到输出o5的第一个三分之一,记为o5,1,在图中表现为psum2;图8a的(b)阵列中输入激活区域对应的第三列卷积核7、8、9进行乘累加运算得到输出o3的第三个三分之一,记为o3,3,在图中表现为psum3。在该第五个周期中,至此o3=o3,1 o3,2 o3,3,得到了输出特征图的第三个完整的计算输出点。
[0099]
在分时操作的第六个周期,通过选通开关模块将输入特征图对应部分的第三列,即第二批次输入数据的第三份输入向量,输入图8a的(c)所示的输入激活区域。由第二批次输入数据的第三份输入向量与图中第三列卷积核7、8、9进行乘累加运算得到输出o4的第三个三分之一,记为o4,3,在图中表现为对应于权重副本1的psum1,图8a的(c)阵列中输入激活区域对应的第二列卷积核4、5、6进行乘累加运算得到输出o5的第二个三分之一,记为o5,2,在图中表现为psum2;图8a的(c)阵列中输入激活区域对应的第一列卷积核1、2、3进行乘累加运算得到输出o6的第一个三分之一,记为o6,1,在图中表现为psum3。在该第六个周期中,至此o4=o4,1 o4,2 o4,3,得到了输出特征图的第四个完整的计算输出点。
[0100]
之后,在输入特征图中,每次向右滑动三列,且每次滑动之后分三个周期输入对应批次的输入数据的三份输入向量,每个周期都会得到三个输出点各自的三分之一,并可以通过外围数字电路的计算得到一个完整的输出点。并且,在最后一批次的输入数据对应的三个周期中,对于权重副本1分别得到两个无效值而被舍弃,而对于权重副本2得到一个无
效值而被舍弃。
[0101]
在输入特征图中,当一行中进行上述滑动操作结束之后,则进入下一行进行滑动操作,直到所有应操作行都滑动操作完成,将所得到的计算输出点按照相应的维度进行组合可得到输出特征图。
[0102]
综上所述,本公开至少一实施例通过选通开关模块控制输入特征图不同的激活区域,将输入特征图不同批次的输入数据分为k份,分时输入到存算一体阵列中,与已经复制k-1次并映射到存算一体阵列中的卷积核进行卷积运算,从而得到输出点的部分和,并通过外围电路对不同周期中的输出结果进行相加,最终得到输出特征图的计算结果。在水平方向上,每次获取对应于卷积核大小的输入特征图的全部输入数据,即一个批次的输入数据大小为k*h*d,每次滑动获取输入数据的滑动步长为k,从而大幅度节省了读取功耗,由于每批次的输入都可以和k个卷积核并行计算,在k次分时操作周期内即可完成一个计算输出点的全部运算,使输入复用度达到了最高,有效地节省了dac的功耗。
[0103]
因此,本公开的实施例在不降低运算速度的基础上,提高了存算一体阵列的面积利用率,提高了输入数据的复用度和卷积计算的精度,减少了dac的消耗,并解决了累加电流过大造成功耗较大和adc量程不足的问题。
[0104]
图9为本公开一实施例提供的卷积层的映射装置的示意图。该映射装置100包括:存算一体阵列110、维度获取模块120、卷积展开模块130、矩阵变换模块140和权重映射模块150。
[0105]
例如,存算一体阵列110用于完成卷积运算中的累乘加操作,存算一体阵列110包括彼此独立的至少一个子阵列;例如,存算一体阵列的存储器可以是忆阻器、sram单元、dram单元、pcm单元、flash单元等或其他存储器件。
[0106]
例如,维度获取模块120被配置为获取卷积层的维度[k,h,d,n],其中,n为卷积层中的卷积核的个数,k为卷积核的宽度,h为卷积核的高度,d为卷积核的通道数。
[0107]
例如,卷积展开模块130被配置为将卷积层展开为行高度k
×h×
d、列宽度n的第0矩阵,其中,在第0矩阵中的n列分别对应于将n个卷积核分别展开的长度为k
×h×
d的一维向量。
[0108]
例如,矩阵变换模块140被配置为基于第0矩阵,创建k-1个变换矩阵,其中,k-1个变换矩阵包括第1矩阵到第k-1矩阵,其中,第m矩阵相对于第m-1矩阵的变换包括第m矩阵中的行号=(第m-1矩阵中的行号 k)mod(k
×h×
d),m为1到k-1之间的整数。
[0109]
例如,权重映射模块150被配置为将第0矩阵到第k-1矩阵映射到存算一体阵列中。
[0110]
图10为本公开一实施例提供的卷积运算装置的示意图,该卷积运算装置200包括本公开至少一实施例提供的映射装置100,以及数据获取模块210和输入控制模块220。
[0111]
例如,数据获取模块210被配置为以滑动方式从输入特征图获取多个批次的输入数据,其中,在每次滑动中,读取输入特征图中对应于卷积层的全部输入数据且进行一维展开作为当前批次的输入数据。
[0112]
例如,输入控制模块220被配置为将多个批次的输入数据分别输入到存算一体阵列计算,以进行卷积运算。例如,输入控制模块包括开关选通模块和数模转换模块等,例如,开关选通模块例如可以是多路选通器。
[0113]
例如,本公开至少一实施例提供的卷积运算装置还可以包括输出模块和控制模块
等。本公开的实施例对卷积运算装置的模块组成不作限制。
[0114]
虽然上文中已经用一般性说明及具体实施方式,对本公开作了详尽的描述,但在本公开实施例基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本公开精神的基础上所做的这些修改或改进,均属于本公开要求保护的范围。
[0115]
对于本公开,还有以下几点需要说明:
[0116]
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
[0117]
(2)为了清晰起见,在用于描述本公开的实施例的附图中,层或区域的厚度被放大或缩小,即这些附图并非按照实际的比例绘制。
[0118]
(3)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
[0119]
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献