CN110647978B - 在卷积神经网络中提取卷积窗的系统和方法 - Google Patents
在卷积神经网络中提取卷积窗的系统和方法 Download PDFInfo
- Publication number
- CN110647978B CN110647978B CN201910835873.7A CN201910835873A CN110647978B CN 110647978 B CN110647978 B CN 110647978B CN 201910835873 A CN201910835873 A CN 201910835873A CN 110647978 B CN110647978 B CN 110647978B
- Authority
- CN
- China
- Prior art keywords
- buffer
- data
- register
- line
- convolution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000013528 artificial neural network Methods 0.000 title abstract description 6
- 239000000872 buffer Substances 0.000 claims abstract description 322
- 238000004364 calculation method Methods 0.000 claims description 23
- 238000010586 diagram Methods 0.000 claims description 23
- 238000013527 convolutional neural network Methods 0.000 claims description 17
- 230000003247 decreasing effect Effects 0.000 claims description 3
- 239000013598 vector Substances 0.000 description 31
- 238000000605 extraction Methods 0.000 description 20
- 230000015654 memory Effects 0.000 description 19
- 230000002829 reductive effect Effects 0.000 description 16
- 239000011159 matrix material Substances 0.000 description 12
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 230000000670 limiting effect Effects 0.000 description 5
- 230000003139 buffering effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000000153 supplemental effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
Abstract
提供一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的硬件结构和方法,硬件结构包括:缓冲器,包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,所述缓冲器用于缓冲宽为w_i、高为h_i的输入特征图中的、用于提取卷积窗的B个数据行,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,其中,每个数据行包括w_i个输入数据,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度;移位寄存器模块,包括B行×L列个移位寄存器,其中,移位寄存器模块中的每个寄存器行用于加载用于提取卷积窗的对应缓冲器块,其中,K、B、D、M、L、h、w_i、h_i、S1是正整数。
Description
技术领域
本公开涉及卷积神经网络领域,更具体地,涉及在卷积神经网络中从输入特征图中提取卷积窗的系统和方法。
背景技术
近年来,以机器学习、卷积神经网络为代表的人工智能技术变得越来越普及。日常生活中的车牌识别、人脸识别、语音识别、智能问答、自动驾驶等等都使用到了人工智能的技术。在自动驾驶技术中,卷积神经网络(Convolutional Neural Networks,CNN)广泛应用于车辆、行人、交通灯检测等感知计算。
卷积神经网络的基本组成包括输入层、隐藏层、输出层。卷积神经网络的隐藏层分为卷积层和池化层(又叫采样层)。卷积窗是卷积神经网络中卷积层对数据进行卷积处理的矩阵。卷积窗用于提取输入数据中的特征信息。深度神经网络(Deep L-layer neuralnetwork,DNN)指的是包含更多隐藏层的卷积神经网络。
以彩色图像作为原始输入数据为例,彩色图像数据中含有RGB(红绿蓝)三基色数据,因此存在三个通道的输入数据矩阵。设置卷积窗的大小和步长后,可使用卷积窗对某一通道的输入数据矩阵进行处理。例如卷积窗大小为3×3,横向和纵向步长都设置为2,则自输入数据矩阵的左上角起,提取与卷积窗相同大小的输入数据矩阵中的子矩阵与卷积核的对应位置权重相乘后求和,得到卷积后的第一个元素。卷积窗向右滑动一个步长单位后,重复上述操作得到卷积后的第二个元素。卷积窗再向右滑动一个步长单位,……一直遍历该通道的输入数据矩阵。
上述滑动提取卷积窗和卷积计算(convolution)约占深度神经网络中90%的计算复杂度。
因此,需要改善滑动提取卷积窗和卷积计算的计算效率和计算成本的技术。
发明内容
需要一种高效提取卷积窗的技术。
根据本公开的一个方面,提供一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的硬件结构,所述硬件结构包括:缓冲器,包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,所述缓冲器用于缓冲宽为w_i、高为h_i的输入特征图中的、用于提取卷积窗的B个数据行,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,其中,每个数据行包括w_i个输入数据,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度;移位寄存器模块,包括B行×L列个移位寄存器,其中,移位寄存器模块中的每个寄存器行用于加载用于提取卷积窗的对应缓冲器块,其中,K、B、D、M、L、h、w_i、h_i、S1是正整数。
根据本公开的另一个方面,提供一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的方法,包括:将宽为w_i、高为h_i的输入特征图中、用于提取卷积窗的B个数据行缓冲到缓冲器中,其中,输入特征图的每个数据行包括w_i个输入数据,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,所述缓冲器包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度,其中,输入特征图的每个数据行的w_i个输入数据按位宽M依次缓冲在每个缓冲器块中,每个缓冲器块中未存满输入数据的(M×D-w_i)个存储空间用无效数据填充,使得每个缓冲器块的每个缓冲器行缓冲了M个数据;将用于提取卷积窗的每个缓冲器块中的每个缓冲器行中缓冲的数据按位宽M为单位、在需要加载时、依次加载到移位寄存器模块中的相应寄存器行中的移位寄存器中,所述移位寄存器模块包括B行×L列个移位寄存器,其中,每个缓冲器块对应于相应寄存器行;在一个时钟周期、在用于提取卷积窗的一侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,且在下一时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2,并且继续从该侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,其中,K、B、D、M、L、h、w_i、h_i、S1和S2是正整数。
如此,卷积窗的提取对地址的访问可以是连续的,提高了地址访问的效率,并减少了地址访问带来的延迟,且极大地减少了缓存数据的空间,也减少了重复缓存数据消耗的时间,进一步提高了卷积窗提取的效率。
附图说明
图1示出了现有技术的卷积窗提取的原理图。
图2示出了根据本公开的实施例的一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的硬件结构的示意图。
图3示出了输入特征图的示意图。
图4示出了缓冲器中包括的缓冲数据的示意图。
图5示出了缓冲器中的每个缓冲器块中的每个缓冲器行中缓冲的数据输入到相应寄存器行的示意图。
图6示出了每个移位寄存器中寄存的数据向左侧移动横向步长的示意图。
图7示出了在每个时钟周期提取的卷积窗。
图8示出了在满足一定条件下按时钟周期将多个缓冲器行缓冲的数据加载到移位寄存器模块中的多个寄存器行中的示意图。
图9示出了根据本公开的实施例的在卷积神经网络中从输入特征图中提取K行×K列卷积窗的方法的流程图。
具体实施方式
现在将结合具体实施例对本公开中的技术方案进行清楚、完整地描述,附图中详细例示了本公开的示例。尽管将结合具体实施例描述本公开,但将理解,不是想要将本公开限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本公开的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
如前所述,卷积计算(convolution)约占深度神经网络中90%的计算复杂度。参考图1,图1示出了现有技术的2种卷积窗提取的原理图。在第一种传统的卷积窗的提取中,从在内存中存储的输入特征图中提取各个2×2的卷积窗。提取例如图1中的第一个通道的3×3的输入特征图中的左上的2×2的卷积窗然后,将提取的卷积窗与卷积核进行对应位置加权求和,即1×1+2×1+1×2+1×2=7。提取图1中的第二个通道的输入特征图中的左上的2×2的卷积窗然后,将提取的卷积窗与卷积核进行对应位置加权求和,即,0×1+2×1+0×1+3×1=5。提取图1中的第三个通道的输入特征图中的左上的2×2的卷积窗然后,将提取的卷积窗与卷积核进行对应位置加权求和,即,1×0+2×1+0×1+1×0=2。再计算7+5+2=14得到输出特征矩阵左上角的14。卷积窗向右滑动横向步长1,对各个通道的输入特征图中的右上的2×2的卷积窗进行类似操作。如果卷积窗向下滑动纵向步长1,对各个通道的输入特征图中的左下的2×2的卷积窗进行类似操作。然后,卷积窗向右滑动横向步长1,对各个通道的输入特征图中的右下的2×2的卷积窗进行类似操作。即卷积窗的提取需要横向或纵向滑动横向步长或纵向步长卷积窗来进行提取卷积窗内的数据。
但是,由于访问第一通道、第二通道、第三通道的输入特征图的左上、右上、左下、右下等的2×2个数据在内存中存储的地址是非连续的,因此加载数据时访问的地址是非连续的,这样的非地址连续性的访问对内存不友好,导致访存颠簸,带来卷积窗提取和卷积计算的低效率和高延迟。
可采用第二种现有技术im2col技术来解决上述问题。im2col技术将要卷积的卷积窗中的矩阵数据拉直成行向量。在图1中,例如im2col技术将要卷积的卷积窗中的2×2个矩阵拉直转换成1×4的行向量[1 2 1 1],并缓冲在内存中,如此在从内存中加载卷积窗并进行卷积计算时,可以地址连续地依次提取1×4的行向量中的4个数据1、2、1、1,从而与卷积核1、1、2、2(此时的卷积核也应转换为相应的列向量)进行卷积计算。
但是im2col技术需要大量内存空间来缓冲拉直后的行向量,且如果一个数据在上、下、左、右的多个卷积窗中都要使用的话,则该数据将在内存中被缓冲多次。例如,如图1中最左侧的输入数据特征图中最中间的那个数据1在左上、右上、左下、右下的4个卷积窗中都要使用,因此,该数据1将在内存中被缓冲4次。因此,由于卷积窗的横向和纵向的滑动(或平移)步长小于卷积窗大小,导致相邻的卷积窗之间还有大量数据需要重复存储,带来冗余存储的现象。
而且im2col技术在执行卷积计算之前,仍要通过软件进行im2col的矩阵到向量的转换,也花费了额外的时间。
同时,卷积核也应转换为相应的列向量并缓冲,这也消耗了额外的时间和存储空间。
因此,需要一种既能解决访存地址颠簸问题,同时减少内存读取访问量、提高数据复用率、实现较小的带宽需求获得较大的数据吞吐率的高效提取卷积窗的技术。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施例对本公开作进一步详细说明。
注意,接下来要介绍的示例仅是一个具体的例子,而不作为限制本公开的实施例必须为示出和描述的具体的外形、硬件、连接关系、步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本公开的构思来构造本说明书中未提到的更多实施例。
图2示出了根据本公开的实施例的一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的硬件结构200的示意图。
该硬件结构200包括:缓冲器201和移位寄存器模块202。缓冲器201用于接收宽为w_i、高为h_i的输入特征图203,而移位寄存器模块202用于加载缓冲器201中缓冲的数据206,并输出用于提取卷积窗序列208。
图3示出了输入特征图的具体实例输入特征图205的示意图。如图3所示,输入特征图205是一个三维张量IN[c_i][h_i][w_i]。例如,宽w_i=36,高h_i=6,通道数c_i=2,即2个通道。卷积计算假设第ci(即IFMi)个通道的6×36的输入特征图如图3阴影部分所示,用于进行卷积计算。
具体地,如图2所示,缓冲器201可以包括B个缓冲器块,例如,缓冲器块1、缓冲器块2、缓冲器块3……缓冲器块B。每个缓冲器块具有位宽M和深度D。即,每个缓冲器块具有M×D个存储空间。缓冲器201可以是静态随机存取存储器SRAM,且位宽M可以是8的倍数,例如M=16。当然,缓冲器也可以是其他类型的存储器,位宽M也可以取其他任意值。缓冲器201的缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度,即D等于当然,缓冲器201可以包括多于B个缓冲器块,且缓冲输入特征图的多于B个数据行,只要移位寄存器模块202能够加载用于提取卷积窗所需的缓冲器中缓冲的数据即可。
缓冲器201用于接收宽为w_i、高为h_i的输入特征图205中的、用于提取卷积窗的B个数据行。B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数。B个数据行中的每个数据行包括w_i个输入数据。例如,要提取按纵向步长1滑动的3个3行×3列卷积窗,所需要的最小行数B=5。又例如,要提取按纵向步长2滑动的2个3行×3列卷积窗,所需要的最小行数B=5,又例如,要提取按纵向步长1滑动的1个5行×5列卷积窗,所需要的最小行数B=5,等等。当然,以下描述中还提出了利用纵向步长、卷积窗个数、卷积窗的行数和列数等参数来计算所需要的最小行数B的公式,稍后详细描述。
在本公开中,假设要提取按纵向步长1滑动的3个3行×3列卷积窗,所需要的最小行数B=5。因此,需要宽为36、高为6的第ci个通道的输入特征图205中的、用于提取卷积窗的5个数据行IN[ci,hi:hi+5,:],如图3中阴影标出的部分中的前5行。注意,在此实例地示出了连续的前5个数据行用于提取卷积窗,然而本公开不限于此,只要是用于提取卷积窗的任意5个数据行都是可用的。
如此,输入特征图205的每个数据行的w_i=36个输入数据按位宽M=16依次缓冲在每个缓冲器块中。
若w_i不能被M整除,最后一行可以用无效数据(dummy data)填充。例如,36不能被16整除,因此每个缓冲器块中未存满输入数据的最后一行中的(M×D-w_i)=12个存储空间用无效数据(例如,空数据(或0、或其他任意数据))填充,使得每个缓冲器块的每个缓冲器行缓冲了M=16个数据。其中前两个缓冲器行每个缓冲了16个输入数据,而最后一个缓冲器行缓冲了4个输入数据和12个无效数据,一共16个数据。
注意,这些无效数据只是在缓冲器中起到占位的作用,为了保证每个缓冲器行有16个数据,虽然它们作为一个完整的缓冲器行被加载到移位寄存器模块中,但可以不被提取卷积窗。因为当该缓冲器行的有效数据部分被提取完卷积窗后,即可以停止寄存器的移位和提取过程,并可以开始下一个B个缓冲器行的提取,而闲忙值寄存器可以被复位。
总之,输入特征图的每个数据行的w_i个输入数据按位宽M依次缓冲在每个缓冲器块中,每个缓冲器块中未存满输入数据的(M×D-w_i)个存储空间用无效数据填充,使得每个缓冲器块的每个缓冲器行缓冲了M个数据。
因此,如图4所示,输入特征图IN[ci,hi:hi+5,:]在缓冲器201中共占5缓冲器块空间,可记作缓冲器块r(r=0,1,…,4),每个缓冲器块占个缓冲器行。其中缓冲器块r缓冲了IN[ci,hi+r,:]的输入数据以及剩余的无效数据。
参考图2,移位寄存器模块202可以包括B行×L列个移位寄存器。移位寄存器模块202中的每个寄存器行用于加载缓冲器201中的用于提取卷积窗的对应缓冲器块。注意,本文中的K、B、D、M、L、h、w_i、h_i、S1是正整数。
缓冲器中的每个缓冲器块中的每个缓冲器行中缓冲的数据按位宽M为单位、在需要加载时、依次加载到移位寄存器模块中的相应寄存器行中的移位寄存器中。
在一个时钟周期、从移位寄存器中的一侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算。
在下一时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2,并且继续从该侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,其中,S2是正整数。
在一个实施例中,该硬件结构200还可以包括:卷积窗输出接口209,被配置为输出提取的卷积窗208。移位寄存器模块202中的用于提取卷积窗的一侧的B行×K列个移位寄存器每个被连接到卷积窗输出接口,用于在一个时钟周期提取按纵向步长S1滑动的h个K行×K列卷积窗到卷积窗输出接口209。
为了使得上述移位寄存器模块中寄存的数据在移位过程中能够用于连续地提取卷积窗,M和L的值可以被设置以使得L≥M+B-1,且M≥S2×B,且B=K+S1×(h-1)。当然,当不满足上述条件时,该硬件结构仍能够工作,只是需延迟等待加载足够的数据,直到能够提取按纵向步长S1滑动的h个K行×K列卷积窗。因此上述条件不满足只是导致不能连续地提取卷积窗,使得卷积窗提取效率略降低,但是不作为该硬件结构工作的限制条件。
L≥M+B-1指的是,移位寄存器模块202的列数应该大于或等于每次能够加载到移位寄存器模块202中的M个数据和(B-1)之和,B-1指的是在移位寄存器中寄存的数据剩下每行B-1个数据时,通过B个时钟周期能够将缓冲器201的B个缓冲器块中各自的1行M个数据、在每个时钟周期进行移位的情况下在每个时钟周期依次加载到移位寄存器模块202的对应的B个寄存器行。如此,通过B个时钟周期的加载和移位,保证移位寄存器模块202中寄存的数据恰好按照输入特征图的数据一样对齐。
M≥S2×B指的是,每个时钟周期要加载的M个数据应大于或等于每个时钟周期要移出的S2×B个数据,这样可以保证移位寄存器模块202中寄存的用于提取卷积窗的数据因移位而减少的个数不小于从缓冲器加载而增加的个数。
B=K+S1×(h-1)指的是,为了在一个时钟周期一次性提取按纵向步长S1滑动而得到的h个K×K的卷积窗,至少需要K+S1×(h-1)个寄存器行。
具体地,在假设K为3的情况下,即提取3×3大小的卷积窗,假设纵向步长S1=1,即卷积窗每次纵向滑动1来得到另一卷积窗,假设h为3,即,纵向滑动能够得到3个卷积窗,所需要的移位寄存器模块202的最小行数B=K+S1×(h-1)=3+1×(3-1)=5。而L≥M+4,且M>S2×5。由于在3×3大小的卷积窗的情况下,横向步长S2可能等于1或2,取最大值2的话,M>10,又由于在缓冲器为SRAM的情况下位宽M通常是8的倍数,假设M取16,则L≥20,因此为了留有一定余量,取L=24。在以下的具体例子中,为了示出方便,K为3,B为5,M为16,L为24,S1为1,S2为1,h为3。
如此,移位寄存器模块202可以被设置为包括5行×24列个移位寄存器。
图5示出了缓冲器201中的每个缓冲器块中的每个缓冲器行中缓冲的数据输入到移位寄存器模块202中的相应寄存器行的示意图。
在图5中,移位寄存器模块202包括5行×24列个移位寄存器阵列207,用于实现5行×24列的激活矩阵,可记为激活矩阵Acts_Matrix[5][24]。如前移位寄存器模块202中的每个寄存器行用于加载缓冲器201中的用于提取卷积窗的对应缓冲器块,即移位寄存器模块202中的一个寄存器行对应于缓冲器201中的一个缓冲器块中的3个缓冲器行的数据。注意,在一个时钟周期,通常输入缓冲器201中的一个缓冲器行的数据,而不是一整个缓冲器块的数据。
如图5所示,在初始加载时,在第一个时钟周期,缓冲器201中的缓冲器块0中的第一个缓冲器行的16个数据:c、6、9、9、3、a、1、f、b、a、b、7、5、6、1、2按16为单位按顺序加载到移位寄存器模块202中的第一个寄存器行row0。类似地,在第二个时钟周期,缓冲器201中的缓冲器块1中的第一个缓冲器行的16个数据:f、4、c、a、7、d、0、5、a、0、f、4、b、9、2、8按16为单位按顺序加载到移位寄存器模块202中的第二个寄存器行row1。在第三个时钟周期,缓冲器201中的缓冲器块2中的第一个缓冲器行的16个数据按16为单位按顺序加载到移位寄存器模块202中的第三个寄存器行row2。在第四个时钟周期,缓冲器201中的缓冲器块3中的第一个缓冲器行的16个数据按16为单位按顺序加载到移位寄存器模块202中的第四个寄存器行row3。在第五个时钟周期,缓冲器201中的缓冲器块4中的第一个缓冲器行的16个数据按16为单位按顺序加载到移位寄存器模块202中的第五个寄存器行row4。以下还将参考图8来详细描述每个时钟周期的加载过程。
在初始加载后,移位寄存器模块202中的5个寄存器行中的前16个寄存器列均寄存了数据,而后8列仍是空闲的。当然在此举例的是移位寄存器模块202中的所有寄存器列事先未寄存任何数据的情况下,前16个寄存器列均寄存了数据,而后8列仍是空闲的,但是本公开不限于此,如果移位寄存器模块202中的一些寄存器列已经寄存了数据,则也可以在已经寄存的数据之后继续进行当前输入特征图的初始加载。
在一个实施例中,硬件结构200还可以包括B个闲忙值寄存器(未示出),用于记录对应于B个寄存器行的B个闲忙值,其中一个寄存器行的闲忙值表示该寄存器行的L个寄存器中有几个移位寄存器寄存了待提取卷积窗的输入数据。例如其中一个寄存器行的闲忙值busy_index[r]=idx表示第r个寄存器行中的L个寄存器中用于提取卷积窗的左侧有idx个移位寄存器寄存了数据,可以用于提取卷积窗,而右侧的(L-idx)个寄存器列中的移位寄存器空闲,能够用于加载从缓冲器201中将对应缓冲器块的下一个缓冲行的M个数据,换言之,Acts_Matrix[r,0:busy_index[r]]忙,可以用于卷积窗提取;Acts_Matrix[r,busy_index[r]:L]空闲,能够用于加载数据)。
具体地,例如,5个闲忙值可以用一个闲忙值向量busy_index[5]来表示。因此,在初始加载后,闲忙值向量busy_index[5]=[16,16,16,16,16],因为此时每一个寄存器行中有16个移位寄存器中寄存了数据,即左侧16列可以用于提取卷积窗,右侧8个寄存器列为空闲,能够用来加载数据。
在卷积计算开始时,在一个时钟周期、从移位寄存器中的用于提取卷积窗的一侧(例如左侧)的寄存了数据的前3个寄存器列中、提取按纵向步长1滑动的3个3行×3列卷积窗以用于卷积计算。
如此,从移位寄存器模块提取卷积窗时,能一次性并行提取,位于一侧的B行×K列个移位寄存器的固定位置的h个K行×K列卷积窗。例如,在实践中,可以将提取的位置处的寄存器直接连线到卷积窗输出端口、或将提取的位置处的寄存器经过D触发器寄存后连线到卷积窗输出端口。因此提取卷积窗的效率高,且减少了寻址的时间。
而且,本公开的硬件结构仅缓冲和寄存输入特征图的B个数据行的输入数据一次,即可充分利用移位寄存器模块中的纵向的数据复用,提取按纵向步长滑动的多个卷积窗,能以较小的缓冲器访问量提供较大的数据吞吐率,且节省存储空间,提高卷积窗提取效率。图6示出了每个移位寄存器中寄存的数据向左侧移动横向步长的示意图。
在下一时钟周期,每个移位寄存器中寄存的数据向例如左侧移动横向步长S2(例如S2=1)。此时,如图6所示,移位寄存器阵列207的第一个寄存器行中的第一个数据被移出(即删除),而每个数据向左移动1步,因此第一个寄存器行变为15个移位寄存器寄存15个数据:6、9、9、3、a、1、f、b、a、b、7、5、6、1、2,剩余9个寄存器是空闲的。同时,移位寄存器阵列207的第二个寄存器行中的第一个数据被移出(即删除),而每个数据向左移动1步,因此移第二个寄存器行变为15个移位寄存器寄存15个数据:4、c、a、7、d、0、5、a、0、f、4、b、9、2、8,剩余9个移位寄存器是空闲的。以此类推。
在一个实施例中,当每个移位寄存器中寄存的数据向该侧移动横向步长S2时,该寄存器行的闲忙值减S2。此时,S2=1,因此闲忙值向量busy_index[5]=[15,15,15,15,15],因为此时每一个寄存器行中有15个寄存器中寄存了数据,即左侧15个移位寄存器为忙,右侧9个移位寄存器为空闲。
当然,本文仅举例从移位寄存器的左侧的前3个寄存器列中提取卷积窗,且向左侧移动横向步长,但是本公开不限于此,如果预定从移位寄存器的右侧提取卷积窗,则从移位寄存器的右侧的前3个寄存器列中提取卷积窗,且向右侧移动横向步长的原理也是类似的。图7示出了在每个时钟周期提取的卷积窗。在时钟周期t0,一次性提取并输出3个卷积窗在时钟周期t1,一次性提取并输出3个卷积窗依次类推。
如此,从移位寄存器模块提取卷积窗时,能一次性并行提取,位于一侧的B行×K列个移位寄存器的固定位置的h个K行×K列卷积窗。因此提取卷积窗的效率高,且减少了寻址的时间。
而且,提取卷积窗的过程中从缓冲器块中的缓冲器行加载数据时,对缓冲器行的地址的访问是连续的,因此不会带来访存颠簸的问题,从而提高了地址访问的效率,并减少了地址访问带来的延迟。
同时,由于缓冲器中几乎没有重复缓存数据,因此极大地减少了缓存数据的空间,也减少了重复缓存数据消耗的时间。
本公开充分利用移位寄存器模块中的纵向和横向的数据复用,能以较小的缓冲器访问量提供较大的数据吞吐率,且节省存储空间,提高卷积窗提取效率。
接下来,在初始加载之后的卷积计算开始之后,随着移位寄存器模块202中的数据左移,移位寄存器模块202中的空闲的移位寄存器越来越多。由于一次能够从缓冲器201中加载一行M个数据到移位寄存器模块202中的一个寄存器行中,因此为了保证在初始加载之后每个时钟周期在最左侧的5行3列的移位寄存器中都能寄存了数据,以便能够连续执行一次提取3个3×3卷积窗的提取操作,需要在满足一定条件下按时钟周期将缓冲器201的下一个缓冲器行中缓冲的M个数据补充加载到移位寄存器模块202中的一个寄存器行中。
图8示出了在满足一定条件下按时钟周期将缓冲器201的多个缓冲器行中缓冲的M个数据加载到移位寄存器模块202中的多个寄存器行中的示意图。
在此,硬件结构200还可以包括B个块内行索引寄存器(未示出),用于记录对应于B个寄存器行的B个块内行索引srm_row[B],其中一个寄存器行的块内行索引指示当前要加载对应缓冲器块内的第几个缓冲器行中缓冲的数据。例如,缓冲器201中的每个缓冲器块中一共有3个缓冲器行,且行号为0、1、2,则srm_row[B]的取值可以是0、1、或2。例如,在B=5的情况下,用向量srm_row[5]=[0,0,0,0,0]表示缓冲器201中的缓冲器块0、缓冲器块1至缓冲器块4均从首个缓冲器行(行号为0的缓冲器行)开始读取。
在一个实施例中,如果移位寄存器模块中的一个寄存器行的闲忙值小于或等于预定阈值,则在一个时钟周期,从该寄存器行的由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始、并行地加载相应缓冲器块中的块内行索引指示的那一个缓冲器行的M个数据,且该寄存器行的闲忙值加M,且该寄存器行的块内行索引加1,其中,该预定阈值=(L-M)。
图8的时钟周期[0]-时钟周期[4]示出了初始加载操作的示意图。而图8的时钟周期[12]-时钟周期[16]示出了例如该闲忙值的预定阈值为(L-M)(在L=24、M=16的情况下,即预定阈值=8)时的补充加载操作的示意图。
在初始加载时希望移位寄存器模块202的B个寄存器行初始寄存的数据恰好按照输入特征图的数据一样对齐,可以采用以下两种方式来实现。
第一种初始加载的方式,在时钟周期[0]时,将所有闲忙值复位,赋值为4,闲忙值向量busy_index[5]=[4,4,4,4,4],此时开始加载缓冲器201缓冲的当前输入特征图的数据。从第一个寄存器行中由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始(即从第5列(寄存器列号为4)开始)、并行地加载缓冲器中的第一缓冲器块(缓冲器块0)中的块内行索引(即0)指示的那一个缓冲器行的M(即16)个数据(即,c、6、9、9、3、a、1、f、b、a、b、7、5、6、1、2,用阴影示出)。且第一个寄存器行的闲忙值加M(即16)个,即闲忙值向量busy_index[5]=[20,4,4,4,4]。且第一个寄存器行的块内行索引加1,即srm_row[5]=[1,0,0,0,0],表示第一个寄存器行下一次加载时,需要加载第一缓冲器块(缓冲器块0)中的第二个缓冲器行的数据。
注意,若列号起始值为0,则闲忙值恰好等于与寄存了输入数据的寄存器相邻的第一个空闲移位寄存器的列号,因此,上述描述还可以被重新描述为从第一个寄存器行中列号等于闲忙值的移位寄存器开始、并行地加载缓冲器中的第一缓冲器块(缓冲器块0)中的块内行索引0指示的那一个缓冲器行的即16个数据。
注意,“并行地”加载缓冲器中的第一缓冲器块中的块内行索引指示的那一个缓冲器行的M个数据表示在一个时钟周期一次性加载这M个数据,而非在一个或几个时钟周期加载一个或几个数据。
在时钟周期[1]时,由于过了一个时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2(例如1)时,该寄存器行的闲忙值减S2(即1)。闲忙值向量busy_index[5]=[19,3,3,3,3]。从第二个寄存器行中由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始(即从第4列(寄存器列号为3)开始)、并行地加载缓冲器中的第二缓冲器块(缓冲器块1)中的块内行索引0指示的那一个缓冲器行的16个数据(即f、4、c、a、7、d、0、5、a、0、f、4、b、9、2、8,用阴影示出)。而第二个寄存器行的闲忙值加16个,即闲忙值向量busy_index[5]=[19,19,3,3,3]。且第二个寄存器行的块内行索引加1,即srm_row[5]=[1,1,0,0,0],表示第二个寄存器行的移位寄存器下一次加载时,需要加载缓冲器201中的第二缓冲器块(缓冲器块1)中的第二个缓冲器行的数据。
在时钟周期[2]时,由于又过了一个时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。闲忙值向量busy_index[5]=[18,18,2,2,2]。从第三个寄存器行中由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始(即从第3列(寄存器列号为2)开始)、并行地加载缓冲器中的第三缓冲器块(缓冲器块2)中的块内行索引0指示的那一个缓冲器行的16个数据(即3、5、7、2、d、e、8、4、8、d、2、6、c、2、a、5,用阴影示出)。而第三个寄存器行的闲忙值加16,即闲忙值向量busy_index[5]=[18,18,18,2,2]。且第三个寄存器行的块内行索引加1,即srm_row[5]=[1,1,1,0,0],表示第三个寄存器行的移位寄存器下一次加载时,需要加载缓冲器201中的第三缓冲器块(缓冲器块2)中的第二个缓冲器行的数据。
在时钟周期[3]时,由于又过了一个时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。闲忙值向量busy_index[5]=[17,17,17,1,1]。从第四个寄存器行中由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始(即从第2列(寄存器列号为1)开始)、并行地加载缓冲器中的第四缓冲器块(缓冲器块3)中的块内行索引0指示的那一个缓冲器行的16个数据(即f、0、4、7、0、7、e、4、f、3、8、b、2、b、8、d,用阴影示出)。而第四个寄存器行的闲忙值加16,即闲忙值向量busy_index[5]=[17,17,17,17,1]。且第四个寄存器行的块内行索引加1,即srm_row[5]=[1,1,1,1,0],表示第四个寄存器行的移位寄存器下一次加载时,需要加载缓冲器201中的第四缓冲器块(缓冲器块3)中的第二个缓冲器行的数据。
在时钟周期[4]时,由于又过了一个时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。闲忙值向量busy_index[5]=[16,16,16,16,0]。从第五个寄存器行中由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始(即从第1列(寄存器列号为0)开始)、并行地加载缓冲器中的第五缓冲器块(缓冲器块4)中的块内行索引0指示的那一个缓冲器行的16个数据(即e、7、5、e、6、d、3、2、5、a、b、8、3、2、0、d,用阴影示出)。而第五个寄存器行的闲忙值加16个,即闲忙值向量busy_index[5]=[16,16,16,16,16]。且第五个寄存器行的块内行索引加1,即srm_row[5]=[1,1,1,1,1],表示第五个寄存器行的移位寄存器下一次加载时,需要加载缓冲器201中的第五缓冲器块(缓冲器块4)中的第二个缓冲器行的数据。
此时,缓冲器201中的五个缓冲器块中每个缓冲器块的第一个缓冲器行的数据全部被加载到移位寄存器模块202中,可以开始继续移位和提取卷积窗的操作了。
第二种初始加载的方式,将所有闲忙值复位,赋值为0。在时钟周期[0]-时钟周期[4]不做寄存器的移位,而只做加载,即通过5个时钟周期将缓冲器201中的五个缓冲器块中每个缓冲器块的第一个缓冲器行的数据全部被加载到移位寄存器模块202中。可以开始移位和提取卷积窗的操作了。
当然,为了使初始加载和补充加载的规则统一,简化控制逻辑设计,通常采用上述第一种初始加载的方式。
如图8所示,在时钟周期[5]、时钟周期[6]、……时钟周期[11]中,进行每次移位和提取纵向步长为1而滑动的3个卷积窗的操作,在此省略具体描述。
在时钟周期[12],此时,在该时钟周期的移位之后,闲忙值向量busy_index[5]=[8,8,8,8,8]。如前所述,如果移位寄存器模块202中的第一个寄存器行的闲忙值小于或等于预定阈值8,则由该寄存器行的闲忙值8指示的第一个空闲移位寄存器(寄存器列号为8)开始、并行地加载缓冲器201中的相应缓冲器块中的块内行索引指示的那一个缓冲器行的16个数据,且该寄存器行的闲忙值加16,且该寄存器行的块内行索引加1。因此,在时钟周期[12],向第一个寄存器行的移位寄存器加载缓冲器201中的第一缓冲器块(缓冲器块0)中的块内行索引1指示的那一个缓冲器行(即,第二个缓冲器行)16个数据(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。该寄存器行的闲忙值加16,则闲忙值向量变为busy_index[5]=[24,8,8,8,8]。同时,进行提取纵向步长为1而滑动的3个卷积窗的操作。
在时钟周期[13],每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。此时,闲忙值向量busy_index[5]=[23,7,7,7,7]。从第二个寄存器行的由该寄存器行的闲忙值7指示的第一个空闲移位寄存器(寄存器列号为7)开始、并行地加载缓冲器201中的第二缓冲器块(缓冲器块1)中的块内行索引1指示的那一个缓冲器行(即,第二个缓冲器行)16个数据(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。闲忙值向量变为busy_index[5]=[23,23,7,7,7]。同时,进行提取纵向步长为1而滑动的3个卷积窗的操作。
在时钟周期[14],每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。此时,闲忙值向量busy_index[5]=[22,22,6,6,6]。从第三个寄存器行的由该寄存器行的闲忙值6指示的第一个空闲移位寄存器(寄存器列号为6)开始、并行地加载缓冲器201中的第三缓冲器块(缓冲器块2)中的块内行索引1指示的那一个缓冲器行(即,第二个缓冲器行)16个数据(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。闲忙值向量变为busy_index[5]=[22,22,22,6,6]。同时,进行提取纵向步长为1而滑动的3个卷积窗的操作。
在时钟周期[15],每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。此时,闲忙值向量busy_index[5]=[21,21,5,5,5]。从第四个寄存器行的由该寄存器行的闲忙值5指示的第一个空闲移位寄存器(寄存器列号为5)开始、并行地加载缓冲器201中的第四缓冲器块(缓冲器块3)中的块内行索引1指示的那一个缓冲器行(即,第二个缓冲器行)16个数据(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。闲忙值向量变为busy_index[5]=[21,21,21,21,5]。同时,进行提取纵向步长为1而滑动的3个卷积窗的操作。
在时钟周期[16],每个移位寄存器中寄存的数据向该侧移动横向步长1时,该寄存器行的闲忙值减1。此时,闲忙值向量busy_index[5]=[20,20,20,20,4]。从第五个寄存器行的由该寄存器行的闲忙值4指示的第一个空闲移位寄存器(寄存器列号为4)开始、并行地加载缓冲器201中的第五缓冲器块(缓冲器块4)中的块内行索引1指示的那一个缓冲器行(即,第二个缓冲器行)16个数据(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)。闲忙值向量变为busy_index[5]=[20,20,20,20,20]。同时,进行提取纵向步长为1而滑动的3个卷积窗的操作。
至此,缓冲器201中五个缓冲器块中每个缓冲器块的第二个寄存器行数据全部被加载到移位寄存器模块202中。如此,可以保证移位寄存器模块中的前K个寄存器列都寄存了数据,能够连续进行提取K×K卷积窗的操作。
以此类推,如果将缓冲器201中五个缓冲器块中每个缓冲器块的全部缓冲器行的数据都加载到了移位寄存器模块202中,且已经提取了第ci个通道的输入特征图的某5个数据行IN[ci,hi:hi+5,:]的全部卷积窗,则可以结束卷积窗提取操作。
注意,缓冲器201中的五个缓冲器块中最后一个缓冲器行的无效数据可以不被加载到移位寄存器模块202中。即,可以只加载作为有效数据的输入数据,而不加载无效数据。但是,也可以加载无效数据,在加载了无效数据的情况下,当输入特征图的该5个数据行的全部卷积窗被提取完毕,可以不再对寄存器作移位,因此多加载的无效数据不被用来提取卷积窗,这些无效数据在下次卷积计算时可以被新加载的有效数据(输入特征图的输入数据)覆盖。如此,可以进一步减少加载和移位无效数据所占用的空间和时间。
注意,在结束了第ci个通道的输入特征图的某5个数据行IN[ci,hi:hi+5,:]的全部卷积窗的提取操作之后,输入特征图的最后2个数据行与其下方的3个数据行又能组成要提取卷积窗的5个数据行,因此,可以保留缓冲器201中已经缓冲了的最后2个缓冲器行的数据,而仅重新缓冲所需的3个数据行。即,缓冲器可以保留或新缓冲数据行以获得用于提取卷积窗的那些数据行。因此,重复利用缓冲器201中缓冲的数据,没有增加存储空间,充分利用了数据复用。
注意,提取的卷积窗将被送到处理元件(Processing Element,PE)阵列,并和卷积核中的权重进行加权求和运算。在此不详细阐述。
注意,在此实施例中,采用缓冲器块内的相对行索引来指示要输入缓冲器中的缓冲器块中的哪一个缓冲器行,但是也可以采用绝对行索引来指示,这并非构成对本公开的限制。
本公开提出的卷积窗提取技术,充分利用了数据复用。在纵向上,每个时钟周期并行提取纵向滑动纵向步长的3个3×3卷积窗,虽然提取了一共9行数据,但这些数据均源自输入特征图中的5个数据行,而本公开只需在缓冲器中缓存该5个数据行并将其输入移位寄存器一次,即可在移位寄存器中复用该5个数据行,而无需多次从缓冲器中读入重叠的数据行。在横向上,每2个时钟周期提取横向滑动横向步长的2个3×3卷积窗,2个3×3卷积窗有两列数据是重叠的,即可通过寄存器移位复用该2个重叠列数据,而无需多次从缓冲器中读入重叠的列。因此,本公开的卷积窗提取技术能够复用数据,减少数据存储量,降低存储大量数据的时间成本,能以较小的缓冲器访问量提供较大的数据吞吐率,且节省存储空间,提高卷积窗提取效率。
图9示出了根据本公开的实施例的在卷积神经网络中从输入特征图中提取K行×K列卷积窗的方法900的流程图。
如图9所示,方法900包括:步骤S901、S902、S903。
在步骤S901,将宽为w_i、高为h_i的输入特征图中、用于提取卷积窗的B个数据行缓冲到缓冲器中,其中,输入特征图的每个数据行包括w_i个输入数据,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,缓冲器包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度,其中,输入特征图的每个数据行的w_i个输入数据按位宽M依次缓冲在每个缓冲器块中,每个缓冲器块中未存满输入数据的(M×D-w_i)个存储空间用无效数据填充,使得每个缓冲器块的每个缓冲器行缓冲了M个数据,其中,
在一个实施例中,缓冲器可以是静态随机存取存储器SRAM,且M可以是8的倍数。但缓冲器和M不限于此。
在步骤S902,将用于提取卷积窗的每个缓冲器块中的每个缓冲器行中缓冲的数据按位宽M为单位、在需要加载时、依次加载到移位寄存器模块中的相应寄存器行中的移位寄存器中,移位寄存器模块包括B行×L列个移位寄存器,其中,每个缓冲器块对应于相应寄存器行。
在步骤S903,在一个时钟周期、从一侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,且在下一时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2,并且继续从该侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算。K、B、D、M、L、h、w_i、h_i、S1和S2是正整数。
在一个实施例中,M和L的值可以被设置以使得L≥M+B-1,且M≥S2×B,且B=K+S1×(h-1)。
在一个实施例中,K可以为3,B可以为5,M可以为16,L可以为24,S1可以为1或2,S2可以为1或2,h可以为3或2。
在一个实施例中,该方法900还可以包括:利用B个闲忙值寄存器用于记录对应于B个寄存器行的B个闲忙值,其中一个寄存器行的闲忙值表示该寄存器行的L个移位寄存器中有几个移位寄存器寄存了待提取卷积窗的输入数据,剩余移位寄存器为空闲移位寄存器。
在一个实施例中,该方法900还可以包括:当每个寄存器中寄存的数据向该侧移动横向步长S2时,将该寄存器行的闲忙值减S2。
在一个实施例中,该方法900还可以包括:利用B个块内行索引寄存器用于记录对应于B个寄存器行的B个块内行索引,其中一个寄存器行的块内行索引指示当前要加载缓冲器的对应缓冲器块内的第几个缓冲器行中缓冲的数据。
在一个实施例中,该方法900还可以包括:如果移位寄存器模块中的一个寄存器行的闲忙值小于预定阈值,则从该寄存器行的与寄存了输入数据的移位寄存器相邻的空闲移位寄存器开始、并行地加载缓冲器中的相应缓冲器块中的块内行索引指示的那一个缓冲器行的M个数据,且将该寄存器行的闲忙值加M,且将该寄存器行的块内行索引加1,其中,该预定阈值=(L-M)。
如此,可以保证移位寄存器模块中的前K列都寄存了数据,能够进行提取K×K卷积窗的操作。
根据本公开的实施例,从移位寄存器模块提取卷积窗时,能一次性并行提取,位于一侧的B行×K列个移位寄存器的固定位置的h个K行×K列卷积窗。因此提取卷积窗的效率高,且减少了寻址的时间。
如此,卷积窗的提取对缓冲器中的地址的访问是连续的,且不会带来访存颠簸的问题,从而提高了地址访问的效率,并减少了地址访问带来的延迟。另外,从移位寄存器模块提取卷积窗时,能一次性并行提取,位于一侧的B行×K列个移位寄存器的固定位置的h个K行×K列卷积窗。因此提取卷积窗的效率高,且减少了寻址的时间。
同时,由于缓冲器中缓存的数据几乎没有重复,因此极大地减少了缓存数据的空间,也减少了重复缓存数据消耗的时间。
本公开充分利用移位寄存器模块中的纵向和横向的数据复用,能以较小的缓冲器访问量提供较大的数据吞吐率,且节省存储空间,提高卷积窗提取效率。
当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本公开的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本公开的效果,这种合并和组合而成的实施例也被包括在本公开中,在此不一一描述这种合并和组合。
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本公开的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本公开的范围内。
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的一个或多个微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
在此公开的方法包括用于实现描述的方法的一个或多个动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为一个或多个指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(CD)、激光盘、光盘、数字通用盘(DVD)、软碟和蓝光盘,其中碟通常磁地再现数据,而盘利用激光光学地再现数据。
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由一个或多个处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如RAM、ROM、诸如CD或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (14)
1.一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的装置,所述装置包括:
缓冲器,包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,所述缓冲器用于缓冲宽为w_i、高为h_i的输入特征图中的、用于提取卷积窗的B个数据行,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,其中,每个数据行包括w_i个输入数据,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度;
移位寄存器模块,包括B行×L列个移位寄存器,其中,移位寄存器模块中的每个寄存器行用于加载用于提取卷积窗的对应缓冲器块中缓冲的数据,其中,在一个时钟周期、在用于提取卷积窗的一侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,且,在下一时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2,并且继续从该侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算;
其中,K、B、D、M、L、h、w_i、h_i、S1、S2是正整数。
2.根据权利要求1所述的装置,其中,输入特征图的每个数据行的w_i个输入数据按位宽M依次缓冲在每个缓冲器块中,每个缓冲器块中未存满输入数据的(M×D-w_i)个存储空间用无效数据填充,使得每个缓冲器块的每个缓冲器行缓冲了M个数据,
其中,每个缓冲器行的数据按位宽M为单位、在需要加载时、依次加载到相应移位寄存器行中。
3.根据权利要求1所述的装置,还包括:卷积窗输出接口,被配置为输出提取的卷积窗,
其中,所述移位寄存器模块中的用于提取卷积窗的一侧的B行×K列个移位寄存器每个被连接到卷积窗输出接口,用于在一个时钟周期提取按纵向步长S1滑动的h个K行×K列卷积窗到所述卷积窗输出接口。
4.根据权利要求1所述的装置,其中,L≥M+B-1,且M≥S2×B,且B=K+S1×(h-1)。
5.根据权利要求1所述的装置,还包括B个闲忙值寄存器,用于记录对应于B个寄存器行的B个闲忙值,其中一个寄存器行的闲忙值表示该寄存器行的L个寄存器中有几个移位寄存器寄存了待提取卷积窗的输入数据,剩余移位寄存器为空闲移位寄存器。
6.根据权利要求5所述的装置,其中,当每个移位寄存器中寄存的数据向该侧移动横向步长S2时,该寄存器行的闲忙值减S2。
7.根据权利要求6所述的装置,还包括B个块内行索引寄存器,用于记录对应于B个寄存器行的B个块内行索引,其中一个寄存器行的块内行索引指示当前要加载对应缓冲器块内的第几个缓冲器行中缓冲的数据。
8.根据权利要求7所述的装置,其中,如果移位寄存器模块中的一个寄存器行的闲忙值小于预定阈值,则在一个时钟周期,从该寄存器行的由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始、并行地加载相应缓冲器块中的块内行索引指示的那一个缓冲器行的M个数据,且该寄存器行的闲忙值加M,且该寄存器行的块内行索引加1,其中,该预定阈值=(L-M)。
9.一种在卷积神经网络中从输入特征图中提取K行×K列卷积窗的方法,包括:
将宽为w_i、高为h_i的输入特征图中、用于提取卷积窗的B个数据行缓冲到缓冲器中,其中,输入特征图的每个数据行包括w_i个输入数据,其中,B是能够提取按纵向步长S1滑动的h个K行×K列卷积窗所需要的最小行数,所述缓冲器包括B个缓冲器块,每个缓冲器块具有位宽M和深度D,其中,缓冲器块的深度D是能够在每个缓冲器块中缓冲w_i个输入数据所需要的最小深度,其中,输入特征图的每个数据行的w_i个输入数据按位宽M依次缓冲在每个缓冲器块中,每个缓冲器块中未存满输入数据的(M×D-w_i)个存储空间用无效数据填充,使得每个缓冲器块的每个缓冲器行缓冲了M个数据;
将用于提取卷积窗的每个缓冲器块中的每个缓冲器行中缓冲的数据按位宽M为单位、在需要加载时、依次加载到移位寄存器模块中的相应寄存器行中的移位寄存器中,所述移位寄存器模块包括B行×L列个移位寄存器,其中,每个缓冲器块对应于相应寄存器行;
在一个时钟周期、在用于提取卷积窗的一侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,且在下一时钟周期,每个移位寄存器中寄存的数据向该侧移动横向步长S2,并且继续从该侧的寄存了数据的前K个寄存器列中、提取按纵向步长S1滑动的h个K行×K列卷积窗以用于卷积计算,
其中,K、B、D、M、L、h、w_i、h_i、S1和S2是正整数。
10.根据权利要求9所述的方法,其中,M和L的值被设置以使得L≥M+B-1,且M≥S2×B,且B=K+S1×(h-1)。
11.根据权利要求9所述的方法,还包括利用B个闲忙值寄存器用于记录对应于B个寄存器行的B个闲忙值,其中一个寄存器行的闲忙值表示该寄存器行的L个寄存器中有几个移位寄存器寄存了待提取卷积窗的输入数据,剩余移位寄存器为空闲移位寄存器。
12.根据权利要求11所述的方法,还包括:
当每个移位寄存器中寄存的数据向该侧移动横向步长S2时,将该寄存器行的闲忙值减S2。
13.根据权利要求12所述的方法,还包括利用B个块内行索引寄存器用于记录对应于B个寄存器行的B个块内行索引,其中一个寄存器行的块内行索引指示当前要加载对应缓冲器块内的第几个缓冲器行中缓冲的数据。
14.根据权利要求13所述的方法,还包括:
如果移位寄存器模块中的一个寄存器行的闲忙值小于预定阈值,则在一个时钟周期,从该寄存器行的由该寄存器行的闲忙值指示的第一个空闲移位寄存器开始、并行地加载相应缓冲器块中的块内行索引指示的那一个缓冲器行的M个数据,且将该寄存器行的闲忙值加M,且将该寄存器行的块内行索引加1,其中,该预定阈值=(L-M)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910835873.7A CN110647978B (zh) | 2019-09-05 | 2019-09-05 | 在卷积神经网络中提取卷积窗的系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910835873.7A CN110647978B (zh) | 2019-09-05 | 2019-09-05 | 在卷积神经网络中提取卷积窗的系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647978A CN110647978A (zh) | 2020-01-03 |
CN110647978B true CN110647978B (zh) | 2020-11-03 |
Family
ID=69010065
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910835873.7A Active CN110647978B (zh) | 2019-09-05 | 2019-09-05 | 在卷积神经网络中提取卷积窗的系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647978B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113536220A (zh) * | 2020-04-21 | 2021-10-22 | 中科寒武纪科技股份有限公司 | 运算方法、处理器及相关产品 |
CN113971261B (zh) * | 2020-07-23 | 2024-09-20 | 中科亿海微电子科技(苏州)有限公司 | 卷积运算装置、方法、电子设备及介质 |
CN111932437B (zh) * | 2020-10-10 | 2021-03-05 | 深圳云天励飞技术股份有限公司 | 图像处理方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9978014B2 (en) * | 2013-12-18 | 2018-05-22 | Intel Corporation | Reconfigurable processing unit |
CN107656899A (zh) * | 2017-09-27 | 2018-02-02 | 深圳大学 | 一种基于fpga的模板卷积实现方法和系统 |
WO2019084788A1 (zh) * | 2017-10-31 | 2019-05-09 | 深圳市大疆创新科技有限公司 | 用于神经网络的运算装置、电路及相关方法 |
CN108009631A (zh) * | 2017-11-30 | 2018-05-08 | 睿视智觉(深圳)算法技术有限公司 | 一种基于fpga的vgg-16通用处理模块及其控制方法 |
CN109993273B (zh) * | 2017-12-29 | 2021-05-11 | 深圳云天励飞技术有限公司 | 卷积神经网络的卷积实现方法及相关产品 |
CN208766715U (zh) * | 2018-07-26 | 2019-04-19 | 珠海市一微半导体有限公司 | 3*3卷积算法的加速电路 |
-
2019
- 2019-09-05 CN CN201910835873.7A patent/CN110647978B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110647978A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647978B (zh) | 在卷积神经网络中提取卷积窗的系统和方法 | |
CN106875011B (zh) | 二值权重卷积神经网络加速器的硬件架构及其计算流程 | |
CN110705687B (zh) | 卷积神经网络硬件计算装置及方法 | |
US10936937B2 (en) | Convolution operation device and convolution operation method | |
CN110807170B (zh) | 多样本多通道卷积神经网络Same卷积向量化实现方法 | |
US9619428B2 (en) | SIMD processing unit with local data share and access to a global data share of a GPU | |
GB2554711A (en) | Buffer addressing for a convolutional neural network | |
US20210157594A1 (en) | Data temporary storage apparatus, data temporary storage method and operation method | |
CN113673701B (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
WO2022206556A1 (zh) | 图像数据的矩阵运算方法、装置、设备及存储介质 | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
EP4181024A1 (en) | Dilated convolution acceleration calculation method and apparatus | |
CN114169514B (zh) | 一种卷积硬件加速方法及卷积硬件加速电路 | |
JP2000231513A (ja) | N次元矩形データアレイの任意の所与次元におけるパラレルデータアクセスのためのメモリアーキテクチャ | |
US20220129744A1 (en) | Method for permuting dimensions of a multi-dimensional tensor | |
KR20240035999A (ko) | 뉴럴 프로세싱 유닛 및 컴퓨트-인-메모리 프로세싱 엘리먼트들을 사용한 하이브리드 머신 러닝 아키텍처 | |
CN117435547A (zh) | 人工智能芯片、灵活地访问数据的方法、设备和介质 | |
CN113436057B (zh) | 数据处理方法及双目立体匹配方法 | |
CN115238863A (zh) | 一种卷积神经网络卷积层的硬件加速方法、系统及应用 | |
CN117808063A (zh) | 用于执行计算的方法、计算装置、介质和程序产品 | |
KR101672539B1 (ko) | 그래픽 처리 유닛 및 그 캐싱 방법 | |
CN112200310A (zh) | 智能处理器、数据处理方法及存储介质 | |
CN113128688B (zh) | 通用型ai并行推理加速结构以及推理设备 | |
KR20240036594A (ko) | 인-메모리 연산을 위한 부분 합 관리 및 재구성가능 시스톨릭 플로우 아키텍처들 | |
CN112905526A (zh) | 一种多种类型卷积的fpga实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |