CN111898081B - 卷积运算方法及卷积运算装置 - Google Patents

卷积运算方法及卷积运算装置 Download PDF

Info

Publication number
CN111898081B
CN111898081B CN202010657082.2A CN202010657082A CN111898081B CN 111898081 B CN111898081 B CN 111898081B CN 202010657082 A CN202010657082 A CN 202010657082A CN 111898081 B CN111898081 B CN 111898081B
Authority
CN
China
Prior art keywords
input data
region
overlapping
data block
sub
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
Application number
CN202010657082.2A
Other languages
English (en)
Other versions
CN111898081A (zh
Inventor
孔玮曼
翟新刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Zhaoxin Semiconductor Co Ltd
Original Assignee
Shanghai Zhaoxin Semiconductor Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Zhaoxin Semiconductor Co Ltd filed Critical Shanghai Zhaoxin Semiconductor Co Ltd
Priority to CN202010657082.2A priority Critical patent/CN111898081B/zh
Publication of CN111898081A publication Critical patent/CN111898081A/zh
Priority to US17/151,311 priority patent/US20220012587A1/en
Application granted granted Critical
Publication of CN111898081B publication Critical patent/CN111898081B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Image Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明提出一种卷积运算方法及卷积运算装置,该卷积运算方法用于对输入特征图执行卷积运算,生成对应的输出特征图,所述卷积运算方法包含:多个输入数据块中的每个所述输入数据块被分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域;将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间;根据所述不重叠的存储空间中存储的与所述输入数据块对应的区域,生成每个所述输入数据块;及对生成的多个所述输入数据块执行卷积运算,生成所述输出特征图。

Description

卷积运算方法及卷积运算装置
技术领域
本发明涉及一种卷积运算方法及卷积运算装置,特别涉及一种根据输入特征图的输入数据块之间的重叠情况,将输入数据块进行分割处理的卷积运算方法及卷积运算装置。
背景技术
卷积神经网络(Convolutional Neural Networks,CNN)是目前深度神经网络领域发展的主力,在图像辨识方面十分精准。典型的卷积神经网络包括许多层(layer)的运算,例如卷积层(convolution layer)、激活层(Activating layer)、池化层(pooling layer)以及全连接层(fully connected layer)。
使用独立于CPU(Central Processing Unit,中央处理器)的卷积运算模块(硬件模块,比如CNN加速器等)可以有效地提高卷积运算的速度。然而卷积运算模块中用于缓存运算数据(包括输入数据和卷积核等)的缓存空间是有限的,在进行卷积运算时,无法将当前卷积层用到的运算数据全部缓存到卷积运算模块中。因此,如果进行卷积运算用到的运算数据还没有缓存到卷积运算模块中,卷积运算模块将暂停卷积运算并将需要用到的运算数据从卷积运算模块外部的存储器中载入进来,等载入完需要用到的运算数据后才能继续进行卷积运算,从而影响了卷积运算模块的运算速度。
因此,如何在卷积运算模块的缓存空间有限的情况下缓存更多的运算数据,以及如何使每次载入的运算数据更多,以减少卷积运算模块暂停的次数,从而提高卷积运算模块的运算效率,已成为本领域需要解决的问题之一。
发明内容
有鉴于此,本发明提出一种卷积运算方法及卷积运算装置,通过在卷积运算模块中缓存更多的运算数据,以及使每次载入的运算数据更多,以减少卷积运算模块的暂停次数,从而提高了卷积运算模块的运算效率。
本发明的实施例提出一种卷积运算方法,用于对输入特征图执行卷积运算,生成对应的输出特征图,所述卷积运算方法包含:多个输入数据块中的每个所述输入数据块被分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域;将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间;根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域,生成每个所述输入数据块;及对生成的多个所述输入数据块执行卷积运算,生成所述输出特征图。
本发明的实施例提出一种卷积运算装置,用于对输入特征图执行卷积运算,生成对应的输出特征图,所述卷积运算装置包含:缓存,用于存储输入数据块;运算器,用于对所述输入数据块进行卷积运算;数据处理模块,耦接于所述运算器,所述数据处理模块将多个输入数据块中的每个所述输入数据块分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域;二级处理模块,耦接所述缓存,所述二级处理模块将每个所述输入数据块的多个不重叠的区域存入所述缓存中各自对应的不重叠的存储空间;一级处理模块,耦接所述缓存和所述运算器,所述一级处理模块根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域生成每个所述输入数据块,将生成的多个所述输入数据块发送给所述运算器进行卷积运算,生成所述输出特征图。
藉由本申请所述的卷积运算方法和卷积运算装置,在输入特征图的输入数据块之间存在重叠区域的情况下,通过将输入数据块分割为不重叠的区域进行存储,可以在卷积运算装置中缓存更多的输入数据块,从而减少卷积运算模块的暂停次数,因而提高了卷积运算模块的运算效率。
附图说明
图1为根据本发明一实施例绘示的卷积神经网络100的示意图。
图2为根据本发明一实施例绘示的卷积神经网络100中第N卷积层和第N+1卷积层的卷积运算示意图。
图3A为根据本发明一实施例绘示的卷积核为1*1时的分块卷积运算示意图。
图3B为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在上下方向的重叠情况示意图。
图3C为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在左右方向的重叠情况示意图。
图3D为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在左上右下方向的重叠情况示意图。
图3E为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在左下右上方向的重叠情况示意图。
图4为根据本发明一实施例绘示的进行卷积运算时卷积核为k*k、卷积步长为s时的特征图分块示意图。
图5为根据本发明一实施例绘示的包含卷积运算模块的计算装置500的方块图。
图6A为根据本发明一实施例绘示的计算装置500的存储器520中存储的数据的示意图。
图6B为根据本发明一实施例绘示的计算装置500的更详细的方块图。
图6C为根据本发明一实施例绘示的将第N卷积层的输入特征图进行两级压缩后写入存储器的处理流程。
图6D为根据本发明一实施例绘示的计算装置500生成一个输出特征图的处理流程。
图6E为根据本发明另一实施例绘示的计算装置500生成一个输出特征图的处理流程。
图6F-1~6F-2为根据本发明一实施例绘示的计算装置500以从左到右、从上到下的顺序生成一个输出特征图的更详细的处理流程。
图7为根据本发明一实施例绘示的计算装置500对输入数据块进行解压的处理流程。
图8为根据本发明另一实施例绘示的包含卷积运算模块的计算装置800的方块图。
图9A为根据本发明一实施例绘示的计算装置800的存储器820中存储的数据的示意图。
图9B为根据本发明一实施例绘示的计算装置800的更详细的方块图。
图9C为根据本发明一实施例绘示的将第N卷积层的输入特征图进行一级压缩后写入缓存的处理流程。
图9D为根据本发明一实施例绘示的计算装置800生成一个输出特征图的处理流程。
图9E为根据本发明另一实施例绘示的计算装置800生成一个输出特征图的处理流程。
图9F-1~9F-2为根据本发明一实施例绘示的计算装置800生成一个输出特征图的更详细的处理流程。
【符号说明】
100 卷积神经网络
110 输入数据
120 特征提取阶段
121-12X 卷积层
130 分类阶段
131-13Y 全连接层
140 输出数据
210、230、250 特征图集合
220、240 权重
221、223、241、243、245 卷积核组
2211-2213、2231-2233 卷积核
310A-310E、410 输入特征图
313A-313E、413 卷积核
315A-315E、415 输出特征图
1-10 列数或行数
W、w1-w3 宽
H、h1-h3 高
k 卷积核的边长
s 卷积步长
500、800 计算装置
520、820 存储器
530、830 卷积运算模块
531 配置暂存器
538 二级处理模块
539、839 数据处理模块
534 一级处理模块
535 分割模块
537、837 压缩模块
532、832 缓存
5321、5323、8322 缓存段
536 运算器
5361-536Z 运算单元
521、523、525、527、821、823 存储段
M、N 编号
52111-521M1 主区域
52112-521M2 次区域
53211-5321M 输入特征图缓存段
532111-5321M1、832111-8321M1 主缓存段
532113-5321M3、832113-8321M3 次缓存段
5342 暂存器
53421 主暂存段
53423 次暂存段
53425 卷积核组暂存段
534211-53421M 主区域
5342311-534231M、5342331-534233M 次区域
534251-53425M 卷积核组
S601C、S603C、S605C、S607C 步骤
S603D、S605D、S607D、S609D 步骤
S601E、S603E、S605E、S607E、S609E 步骤
S601F、S603F、S605F、S607F、S609F、S613F、S615F、S617F、S619F、S621F、S623F、S625F、S627F、S629F 步骤
S701、S703 步骤
S901C、S903C、S907C 步骤
S903D、S905D、S907D、S909D 步骤
S905E、S907E、S909E 步骤
S901F、S913F、S915F、S917F、S919F、S921F、S923F、S925F、S927F、S929F 步骤
具体实施方式
以下说明完成本发明的实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示元件之间具有优先顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
本公开中的技术方案中使用了两种无损压缩算法,分别是一级压缩和二级压缩。为了方便后文的描述,我们先对这两种压缩算法进行描述。二级压缩算法可以是霍夫曼(Huffman)算法、LZW(Lenpel-Ziv&Welch)算法等,相应的,二级压缩算法格式是霍夫曼(Huffman)算法、LZW(Lenpel-Ziv&Welch)算法等算法的格式。在本公开中,我们一般使用二级压缩算法对经过一级压缩的数据再进行一次压缩,以进一步提高压缩率。
一级压缩算法可用于对包含较多个值为0的元素的矩阵进行压缩处理,一级压缩算法格式如下(包含三个字段,其中的“+”表示前后两个字段紧紧相连,中间没有其它数据):
[Length]+[Mask]+[DesData]
DesData字段(field)表示目标数据字段,DesData字段包含矩阵中所有值不为0的元素,DesData字段中所有元素的顺序与其在矩阵中的顺序(可以使用两种方式排列二维矩阵中元素的顺序:1、按从左到右、从上到下的顺序;2、按从上到下、从左到右的顺序)相同。
Mask字段(field)表示掩码字段,可以根据被压缩矩阵中的元素个数设置Mask字段的长度。Mask字段有两个作用,第一个作用是表示被压缩矩阵中的元素个数;第二个作用是标记被压缩矩阵中的非0元素的位置。使用Mask字段表示被压缩矩阵元素个数的方法有两种,第一种方式是将Mask字段的长度设置为与被压缩矩阵的元素个数相等(后文会描述使用第一种方式的情形);第二种方式是将Mask字段的长度设置为大于被压缩矩阵的元素个数,而将Mask字段中与被压缩矩阵中最后一个元素对应的位的值设为1、将Mask字段中与被压缩矩阵中的元素没有对应关系的位的值设置为0,这样就可以根据Mask字段中最后一个值为1的位的位置计算出被压缩矩阵中的元素个数了(后文会描述使用第二种方式的情形)。在本公开中,需要对很多矩阵进行压缩处理,当所有被压缩矩阵中的元素个数都相同时,可以将Mask字段的长度(Mask字段的长度即Mask字段中包含的位的个数,下同)设置为被压缩矩阵中的元素个数。比如,当所有被压缩矩阵的宽和高都分别为m和n时(即被压缩矩阵中包含m列n行元素,m和n可以是相同或不同的大于0的整数),设置Mask字段的长度为m*n(*表示乘号,下同)个位(bit)。被压缩矩阵中的每一个元素与Mask字段中的每一位一一对应。Mask字段中的每个值为0的位(bit)对应于被压缩矩阵中的一个值为0的元素,Mask字段中的每个值为1的位(bit)对应于被压缩矩阵中的一个值不为0的元素。当被压缩矩阵中某元素的值不为0时,这个元素的值会被存储在DesData字段中相应的位置,并且Mask字段中与其对应的位的值为1。值得注意的是,在另一实施例中,在Mask字段中用值为0的位对应被压缩矩阵中值为非0的元素,而用值为1的位对应被压缩矩阵中值为0的元素。
Length字段表示长度字段,用于指示DesData字段的长度(DesData字段的长度是指DesData字段中的元素个数,下同)。使用Length字段表示DesData字段的长度的方式有两种,分别称为第一长度表示方式和第二长度表示方式。在第一长度表示方式中,Length字段的值等于DesData字段的长度,Length字段可以指示的最大长度值等于Length字段的最大值。比如,对于长度为1个字节(byte)的Length,Length可以表示0-255范围内的DesData字段的长度。在第一长度表示方式中,当Length字段的长度为1个字节时,如果DesData字段的长度超过255(比如260),就无法用Length字段表示了。如果想表示大于255的长度,就需要使用长度更大的Length字段(比如将Length字段的长度改为2个字节,就可以表示260的长度了),但是这样会增加Length字段占用的存储空间。为了解决这个问题,本公开中提出了使用Length字段表示DesData字段的长度的第二长度表示方式。在第二长度表示方式中,Length字段的每个值指示一个具体的长度值,Length字段可以指示的最大元素个数大于Length字段的最大值。比如,长度为2位(bit)的Length字段可以表示4个长度值,并且Length字段的每个值代表的长度值可以根据实际需要进行预设。例如,在一实施例中,Length字段的值为[00]2([]2表示[]中的数字为二进制数字,下同)时代表DesData字段的长度为8、Length字段的值为[01]2时代表DesData字段的长度为12、Length字段的值为[10]2时代表DesData字段的长度为18、Length字段的值为[11]2时代表DesData字段的长度为24。如果被压缩矩阵中包含的值不为0的元素个数与Length字段的值能代表的长度都不同(即被压缩矩阵中包含的值不为0的元素个数不是8、12、18或24中的一个),则可以选择一个大于被压缩矩阵中包含的值不为0的元素个数且能用Length字段的值代表的最小长度值对应的Length字段的值。例如,当被压缩矩阵中包含的值不为0的元素个数为6时,能用Length字段的值代表的大于6的最小长度是8(对应的Length字段的值为[00]2),所以选择Length字段的值为[00]2。由于Length字段的值为[00]2表示DesData字段的长度为8,所以进行压缩处理时,DesData字段中将包含8个元素,其中前6个元素为被压缩矩阵中的值不为0的元素,最后2个元素可以被设置为0或其它数值;Mask字段中与被压缩矩阵中的6个元素对应的6个位被设置为1,其它位被设置为0。进行解压缩处理时,根据Mask字段中值为1的位的位置和DesData字段中与Mask字段中值为1的位对应的元素值,就可以生成被压缩矩阵。
为了便于理解,下面举例说明如何使用一级压缩算法对矩阵进行压缩,假设被压缩矩阵Matrix1如下(假设矩阵的宽(即m)为5、高(即n)为4):
0 0 8 0 0
0 0 0 0 5
0 0 9 10 0
0 0 0 4 0
当使用第一长度表示方式用Length字段的值表示DesData字段的长度对被压缩矩阵Matrix1进行压缩时,设置Length字段的长度为1个字节、Mask的长度为20位(由于被压缩矩阵Matrix1具有20(5*4=20)个元素,所以设置Mask的长度为20位),被压缩矩阵Matrix1经过一级压缩后的数据为(按矩阵中从左到右、从上到下的顺序进行压缩):
[5]10+[00100,00001,00110,00010]2+[8,5,9,10,4]10
其中,[]10表示[]中的数字为十进制数字,[]2表示[]中的数字为二进制数字。[5]10中的5表示DesData字段中包含5个元素。
假设被压缩矩阵Matrix1中的每个元素占用1个字节(byte)的存储空间,压缩前,Matrix1需要占用20个字节的存储空间。经过一级压缩后,Length字段占用1个字节的存储空间,Mask字段占用3个字节(20位)的存储空间,DesData字段占用5个字节的存储空间,即,经过一级压缩后Matrix1共需要占用9个字节的存储空间。所以,在这个例子中,使用第一长度表示方式时,压缩比率为9/20。
当使用第二长度表示方式用Length字段的值表示DesData字段的长度对被压缩矩阵Matrix1进行压缩时,设置Length字段的长度为2位、Mask字段的长度为20位。当Length字段的值为[00]2时代表DesData字段的长度为8、Length字段的值为[01]2时代表DesData字段的长度为12、Length字段的值为[10]2时代表DesData字段的长度为18、Length字段的值为[11]2时代表DesData字段的长度为24。被压缩矩阵Matrix1经过一级压缩后的数据为(按矩阵中从左到右、从上到下的顺序进行压缩):
[00]2+[00100,00001,00110,00010]2+[8,5,9,10,4,0,0,0]10
其中,[]10表示[]中的数字为十进制数字,[]2表示[]中的数字为二进制数字。[00]2表示DesData字段中包含8个元素,[00100,00001,00110,00010]2中只有5个1,说明被压缩矩阵Matrix1中只包含5个值不为0的元素,进行解压缩处理时,[8,5,9,10,4,0,0,0]10中最后的3个元素将被忽略。
假设被压缩矩阵Matrix1中的每个元素占用1个字节(byte)的存储空间,压缩前,Matrix1需要占用20个字节的存储空间。经过一级压缩后,Length字段占用2位的存储空间,Mask字段占用20位的存储空间,即Length字段和Mask字段共占用3个字节的存储空间(共22位);DesData字段占用8个字节的存储空间,即,经过一级压缩后Matrix1共需要占用11个字节的存储空间。所以,在这个例子中,使用第二长度表示方式时,压缩比率为11/20。
在另一实施例中,当多个被压缩矩阵中的元素个数不同时(即有的被压缩矩阵中的元素个数多,有的被压缩矩阵中的元素个数少),为了简化解压缩处理流程,可以将Mask字段的长度设置为元素个数最多的被压缩矩阵的元素个数。在此实施例中,由于Mask字段的长度不再与被压缩矩阵中的元素个数相同,我们不能再使用Mask字段的长度表示被压缩矩阵中的元素个数,而需要一种新的表示被压缩矩阵中的元素个数的机制。为此,我们使用Mask字段中与被压缩矩阵中的最后一个元素对应的位来作为计算被压缩矩阵中的元素个数的标记(将这个位的值设置为1)。具体而言,进行矩阵压缩处理时,不管被压缩矩阵中的最后一个元素为0还是不为0,Mask字段中与其对应的位都被设置为1,Mask字段中这个位之后的所有位都被设置为0。所以,通过Mask字段中位的总个数减去Mask字段中最后一个值为1的位后面的位的个数,就可以得到被压缩矩阵的元素个数。被压缩矩阵中除最后一个元素外,其它元素如果值为0则Mask字段中与其对应的位被设置为0、如果值不为0则Mask字段中与其对应的位被设置为1。这样,进行矩阵解压处理时,根据Mask字段中最后一个值为1的位的位置就可以得到被压缩矩阵中的元素个数。比如,当元素个数最多的被压缩矩阵的大小为6*4时(即包含24个元素),设置Mask字段的长度为24位(bit)。被压缩矩阵中的每一个元素对应于Mask字段中的一个位。被压缩矩阵中除最后一个元素外的每一个值为0的元素对应于Mask字段中的一个值为0的位,被压缩矩阵中除最后一个元素外的每一个值不为0的元素对应于Mask字段中的一个值为1的位,被压缩矩阵中的最后一个元素(值为0或者值不为0)对应于Mask字段中的最后一个值为1的位。在此实施例中,由于Mask字段中的与被压缩矩阵的最后一个元素对应的位的一定为1,进行解压缩处理时,无法通过这个位的值来判断被压缩矩阵的最后一个元素是否不为0,所以我们需要将被压缩矩阵的最后一个元素的值存入DesData字段(即使其值为0)。
在此实施例中,当使用第一长度表示方式用Length字段的值表示DesData字段的长度对被压缩矩阵Matrix1进行压缩时,先设置Length字段的长度为1个字节、Mask的长度为24位(由于多个被压缩矩阵中元素最多的被压缩矩阵中含有24个元素,所以设置Mask的长度为24位),被压缩矩阵Matrix1经过一级压缩后的数据为(按矩阵中从左到右、从上到下的顺序进行压缩):
[6]10+[00100,00001,00110,00011,0000]2+[8,5,9,10,4,0]10
其中,[]10表示[]中的数字为十进制数字,[]2表示[]中的数字为二进制数字。[6]10中的6表示DesData字段中包含6个元素,DesData字段中的最后一个元素0是被压缩矩阵Matrix1中的最后一个元素,Mask字段中与其对应的位是最后一个值为1的位(即Mask字段中的第20个位)。Mask字段中最后一个值为1的位是Mask字段中的第20个位,表示被压缩矩阵Matrix1中包含20个元素。
假设被压缩矩阵Matrix1中的每个元素占用1个字节(byte)的存储空间,压缩前,Matrix1需要占用20个字节的存储空间。经过一级压缩后,Length字段占用1个字节的存储空间,Mask字段占用3个字节(24位)的存储空间,DesData字段占用6个字节的存储空间,即,经过一级压缩后Matrix1共需要占用10个字节的存储空间。所以,在这个例子中,压缩比率为10/20,即压缩比率为1/2。
现在请参见图1,图1为根据本发明一实施例绘示的卷积神经网络100的示意图。如图1所示,卷积神经网络100包含特征提取阶段120和分类阶段130,输入数据110来自神经网络100的外部。以一个RGB图像为例,输入数据110包含3个图像:RGB图像的R通道的图像、G通道的图像和B通道的图像。而以一个灰度图像为例,输入数据110只包含1个图像。
特征提取阶段120包含至少一个卷积层,用于对输入数据110进行特征提取。输入数据110是特征提取阶段120的第1卷积层121的输入数据,第1卷积层121对输入数据进行卷积运算(即特征提取操作)后,生成第1卷积层121的输出数据。第1卷积层121的输出数据可以做为第2卷积层122(即下一卷积层)的输入数据,第2卷积层122对输入数据进行卷积运算(即特征提取操作)后,生成第2卷积层122的输出数据(即下一卷积层的输入数据)。以此类推,第X卷积层12X对来自上一卷积层的输入数据进行卷积运算后,生成第X卷积层12X的输出数据。第X卷积层12X的输出数据被发送给分类阶段130进行分类处理。
在神经网络中,很多卷积层的后面会有一个激活层(未示出),激活层对卷积层的输出数据进行激活处理后再发送给下一卷积层进行卷积运算。经过激活处理后,神经网络中会出现大量的稀疏数据(即数据中包含大量值为0的元素),而在运用本发明所揭示的一级压缩方法下,由于仅存储非0元素所以能大幅减少执行卷积运算时所需的数据存储空间。再者,神经网络中出现的数据包含输入特征图、输出特征图和卷积核等,其中输入特征图、输入特征图的区域、输出特征图和输出特征图的区域等都属于前文中提到的矩阵,都可以使用一级压缩算法和二级压缩算法进行压缩。对神经网络中出现的大量稀疏数据进行存储前,通过使用本公开中提出的一级压缩算法对其进行压缩处理,可以节省大量的存储空间,并可以提高数据传输的效率。
在另一实施例中,在有些卷积层(或激活层)的后面有一个池化层,池化层对卷积层(或激活层)的输出数据进行池化处理后再发送给下一卷积层进行卷积运算。
特征提取阶段120的输出数据会作为分类阶段130的输入数据被发送给分类阶段130进行处理。分类阶段130包含多个全连接层(第1全连接层131至第Y全连接层13Y),接收到输入数据(即特征提取阶段120的输出数据)后,第1全连接层131至第Y全连接层13Y依次对接收到的输入数据进行处理,最后生成输出数据140。输出数据140是神经网络100输出到外部的数据。
输入数据110中的图像经过特征提取阶段120中的第1卷积层的卷积运算(即特征提取操作)后,生成的图像叫做特征图(feature map)。特征提取阶段120中从第2卷积层开始直到第X卷积层,每一卷积层的输入数据中包含的图像叫做输入特征图,每一卷积层的输出数据中包含的图像叫做输出特征图。为了描述方便,本公开中将输入数据110中的图像也称作输入特征图。
图2为根据本发明一实施例绘示的卷积神经网络100中第N卷积层和第N+1卷积层的卷积运算示意图。如图2所示,特征图集合210为卷积神经网络100的第N卷积层的输入数据,特征图集合230为卷积神经网络100的第N卷积层的输出数据。特征图集合230同时也是卷积神经网络100的第N+1卷积层的输入数据,特征图集合250为卷积神经网络100的第N+1卷积层的输出数据。卷积核组集合220为卷积神经网络100的第N卷积层的卷积核组的集合,卷积核组集合240为卷积神经网络100的第N+1卷积层的卷积核组的集合。
特征图集合210包含特征图211、213和215。特征图集合230包含特征图231和233,卷积核组集合220包含卷积核组221和223。卷积核组221包含卷积核2211、2212和2213。在第N卷积层的卷积运算中,卷积核组221中的每个卷积核分别与特征图集合210中的对应特征图进行卷积运算,生成特征图集合230中的特征图231。详细而言,特征图211与卷积核2211进行卷积运算生成第一特征图(未绘示),特征图213与卷积核2212进行卷积运算生成第二特征图(未绘示),特征图215与卷积核2213进行卷积运算生成第三特征图(未绘示),然后将第一特征图、第二特征图和第三特征图中位置相同的像素的值相加生成特征图231中对应位置的像素值(比如,将第一特征图第1行第1列的像素的值、第二特征图第1行第1列的像素的值和第三特征图第1行第1列的像素的值相加,生成特征图231第1行第1列的像素的值;以此类推,可以生成特征图231中所有的像素值)。同理,卷积核组223中的卷积核2231、2232和2233分别与特征图集合210中的对应特征图211、213、215进行卷积运算,再根据卷积运算的结果生成特征图集合230中的特征图233。根据实际应用的需求,可以在第N卷积层和第N+1卷积层之间添加一个池化层(未绘示),将生成的特征图231、233进行池化处理后再输出,然后第N+1卷积层再对经过池化处理后的特征图231、233进行卷积运算。
与第N卷积层的卷积运算类似,在第N+1层的卷积运算中,卷积核组集合240中的卷积核组241、243和245分别与特征图集合230中的特征图231和233进行卷积运算,生成特征图集合250中的特征图251、253和255。
从图2可知,每一卷积层中输入特征图的个数与卷积核组中卷积核的个数相同,每个卷积核组对应一个输出特征图。计算每个输出特征图时都需要用到所有的输入特征图。以第N卷积层为例,计算输出特征图231时,需要用到卷积核组221中的所有卷积核和特征图集合210中的所有输入特征图211、213和215。
由于卷积运算装置能并行处理的输入数据块的宽和高是固定的(比如:5*4),使用卷积运算装置进行卷积运算时,如果输入特征图的宽或高大于卷积运算装置能并行处理的输入数据块的宽或高,就需要先将输入特征图分割为多个输入数据块。然后再将输入数据块发送给卷积运算装置进行卷积运算,以生成输出数据块,最后将生成的输出数据块按顺序拼接成输出特征图。下面将结合图3A-3E对将输入特征图分割为输入数据块时的各种情况进行分析(在图3A-3E的例子中假定进行卷积运算的卷积层中只包含1个输入特征图、1个卷积核和1个输出特征图),在下面的分析过程中,假定卷积运算装置能并行处理的输入数据块的宽和高是5*4,且假定卷积步长为1。
现在请参照图3A,图3A为根据本发明一实施例绘示的卷积核为1*1时的分块卷积运算示意图。如图3A所示,310A为输入特征图,313A为卷积核,315A为输入特征图310A与卷积核313A进行卷积运算后生成的输出特征图。输入特征图310A和输出特征图315A中的每个方框代表一个特征值(即像素值),卷积核313A中的每个方框代表一个权重值。输入特征图310A的大小为10*8。由于卷积核的大小为1*1,输出特征图315A中的每个特征值是由输入特征图310A中位于相同坐标的特征值与卷积核313A中的权重值相乘之后得到的积。因而,输出特征图315A中的每个特征值与输入特征图310A中的每个特征值一一对应,即输出特征图315A与输入特征图310A的大小相同,均为10*8。
如图3A所示,当卷积核为1*1时,为了生成输出特征图315A中带右斜上线(即“/”,下同)的输出数据块,需要使用输入特征图310A中带右斜上线的输入数据块与卷积核313A进行卷积运算。为了生成输出特征图315A中带右斜下线(即“\”,下同)的输出数据块,需要使用输入特征图310A中带右斜下线的输入数据块与卷积核313A进行卷积运算。所以,当卷积核为1*1时,生成输出特征图315A中的两个相邻且不重叠的输出数据块时需要用到的输入特征图310A中的两个输入数据块也相邻且不重叠。
现在请参照图3B,图3B为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在上下方向的重叠情况示意图。如图3B所示,310B为输入特征图,313B为卷积核,315B为输入特征图310B与卷积核313B进行卷积运算后生成的输出特征图。与图3A不同的是,图3B中进行卷积运算时使用的卷积核313B的大小为3*3。如图3B所示,在卷积核为3*3的情况下,输出特征图315B比输入特征图310B的行数少2行、列数少2列(输出特征图315B的大小为8*6,输入特征图310B的大小为10*8)。生成输出特征图315B的卷积运算流程为:将卷积核313B从输入特征图310B的左上角开始,按照从左到右、从上到下的顺序(或者按照从上到下、从左到右的顺序)每次移动一个方框,并依次将卷积核313B中的权重值与输入特征图310B中与卷积核313B重叠的3*3区域中的特征值进行点积(dot product)运算,就可以求出输出特征图315B中所有方框对应的特征值。
图3B用于说明进行卷积运算时输入数据块在上下方向的重叠情况。如图3B所示,当卷积核为3*3时,为了生成输出特征图315B中带右斜上线的区域所组成的输出数据块(为便于描述,下文将其简称为上输出数据块),需要使用输入特征图310B中带右斜上线和交叉线(即下同)的区域所组成的输入数据块(为便于描述,下文将其简称为上输入数据块,大小为5*4,包含310B中第1-2行中的带右斜上线的区域和第3-4行中的带交叉线的区域,即包含310B中的第1-4行中的每一行的前5列中的特征值所在的区域)与卷积核313B进行卷积运算。为了生成输出特征图315B中带右斜下线的区域所组成的输出数据块(为便于描述,下文将其简称为下输出数据块),需要使用输入特征图310B中带右斜下线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为下输入数据块,大小为5*4,包含310B中第3-4行中的带交叉线的区域和第5-6行中的带右斜下线的区域,即包含310B中的第3-6行中的每一行的前5列中的特征值所在的区域)与卷积核313B进行卷积运算。如图3B所示,输入特征图310B中的上输入数据块和下输入数据块之间存在重叠区域,重叠区域就是310B中带交叉线的区域。具体而言,计算输出特征图中位于(2,1)的特征值(即计算上输出数据块中位于左下角的特征值)时,需要使用卷积核313B与输入特征图310B中位于(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)、(4,1)、(4,2)和(4,3)的特征值;计算输出特征图中位于(3,1)的特征值(即计算下输出数据块中位于左上角的特征值)时,需要使用卷积核313B与输入特征图310B中位于(3,1)、(3,2)、(3,3)、(4,1)、(4,2)、(4,3)、(5,1)、(5,2)和(5,3)的特征值。由此可见,在计算上输出数据块中位于左下角的特征值和下输出数据块中位于左上角的特征值时,都会使用输入特征图310B中位于(3,1)、(3,2)、(3,3)、(4,1)、(4,2)和(4,3)的特征值。同理,在计算上输出数据块中位于右下角的特征值和下输出数据块中位于右上角的特征值时,都会使用输入特征图310B中位于(3,3)、(3,4)、(3,5)、(4,3)、(4,4)和(4,5)的特征值。由于在计算上输出数据块中的特征值和下输出数据块中的特征值时,都会使用输入特征图310B中位于(3,1)、(3,2)、(3,3)、(3,4)、(3,5)、(4,1)、(4,2)、(4,3)、(4,4)和(4,5)的特征值,所以将这部分区域称为重叠区域(即310B中带交叉线的区域)。所以,当卷积核为3*3时,生成输出特征图315B中的两个上下相邻且不重叠的输出数据块(即上输出数据块和下输出数据块)时需要用到的输入特征图310B中的两个输入数据块(即上输入数据块和下输入数据块)之间存在5*2大小的重叠区域。
现在请参照图3C,图3C为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在左右方向的重叠情况示意图。图3C用于说明进行卷积运算时输入数据块在左右方向的重叠情况。如图3C所示,当卷积核为3*3时,为了生成输出特征图315C中带右斜上线的输出数据块(为便于描述,下文将其简称为左输出数据块),需要使用输入特征图310C中带右斜上线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为左输入数据块,大小为5*4,包含310C中第1-4行中的带右斜上线的区域和第1-4行中的带交叉线的区域,即包含310C中的第1-4行中的每一行的前5列中的特征值所在的区域)与卷积核313C进行卷积运算。为了生成输出特征图315C中带右斜下线的输出数据块(为便于描述,下文将其简称为右输出数据块),需要使用输入特征图310C中带右斜下线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为右输入数据块,大小为5*4,包含310C中第1-4行中的带右斜下线的区域和第1-4行中的带交叉线的区域,即包含310C中的第1-4行中的每一行的第4-8列中的特征值所在的区域)与卷积核313C进行卷积运算。如图3C所示,输入特征图310C中的左输入数据块和右输入数据块之间存在重叠区域,重叠区域就是310C中带交叉线的区域。所以,当卷积核为3*3时,生成输出特征图315C中的两个左右相邻且不重叠的输出数据块(即左输出数据块和右输出数据块)时需要用到的输入特征图310C中的两个输入数据块(即左输入数据块和右输入数据块)之间存在2*4大小的重叠区域。
现在请参照图3D,图3D为根据本发明一实施例绘示的进行卷积运算时当卷积核为3*3时的输入数据块在左上右下方向的重叠情况示意图。图3D用于说明进行卷积运算时输入数据块在左上右下方向的重叠情况。如图3D所示,当卷积核为3*3时,为了生成输出特征图315D中带右斜上线的输出数据块(为便于描述,下文将其简称为左上输出数据块),需要使用输入特征图310D中带右斜上线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为左上输入数据块,大小为5*4,包含310D中第1-4行中的带右斜上线的区域和第1-4行中的带交叉线的区域,即包含310D中的第1-4行中的每一行的前5列中的特征值所在的区域)与卷积核313D进行卷积运算。为了生成输出特征图315D中带右斜下线的输出数据块(为便于描述,下文将其简称为右下输出数据块),需要使用输入特征图310D中带右斜下线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为右下输入数据块,大小为5*4,包含310D中第1-4行中的带右斜下线的区域和第1-4行中的带交叉线的区域,即包含310D中的第3-6行中的每一行的第4-8列中的特征值所在的区域)与卷积核313D进行卷积运算。如图3D所示,输入特征图310D中的左上输入数据块和右下输入数据块之间存在重叠区域,重叠区域就是310D中带交叉线的区域。所以,当卷积核为3*3时,生成输出特征图315D中的两个左上右下相邻且不重叠的输出数据块(即左上输出数据块和右下输出数据块)时需要用到的输入特征图310D中的两个输入数据块(即左上输入数据块和右下输入数据块)之间存在2*2大小的重叠区域。
现在请参照图3E,图3E为根据本发明一实施例绘示的进行卷积运算时卷积核为3*3时的输入数据块在左下右上方向的重叠情况示意图。图3E用于说明进行卷积运算时输入数据块在左下右上方向的重叠情况。如图3E所示,当卷积核为3*3时,为了生成输出特征图315E中带右斜上线的输出数据块(为便于描述,下文将其简称为左下输出数据块),需要使用输入特征图310E中带右斜上线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为左下输入数据块,大小为5*4,包含310E中第1-4行中的带右斜上线的区域和第1-4行中的带交叉线的区域,即包含310E中的第3-6行中的每一行的前5列中的特征值所在的区域)与卷积核313E进行卷积运算。为了生成输出特征图315E中带右斜下线的输出数据块(为便于描述,下文将其简称为右上输出数据块),需要使用输入特征图310E中带右斜下线线和交叉线的区域所组成的输入数据块(为便于描述,下文将其简称为右上输入数据块,大小为5*4,包含310E中第1-4行中的带右斜下线的区域和第1-4行中的带交叉线的区域,即包含310E中的第1-4行中的每一行的第4-8列中的特征值所在的区域)与卷积核313E进行卷积运算。如图3E所示,输入特征图310E中的左下输入数据块和右上输入数据块之间存在重叠区域,重叠区域就是310E中带交叉线的区域。所以,当卷积核为3*3时,生成输出特征图315E中的两个左下右上相邻且不重叠的输出数据块(即左下输出数据块和右上输出数据块)时需要用到的输入特征图310E中的两个输入数据块(即左下输入数据块和右上输入数据块)之间存在2*2大小的重叠区域。
通过对图3B-3E的分析可知,当卷积核为3*3时,生成输出特征图中的两个相邻且不重叠的输出数据块时需要用到的输入特征图中的两个输入数据块存在重叠区域。同理,当卷积核为5*5或7*7(或者更大的卷积核)时,生成输出特征图中的两个相邻且不重叠的输出数据块时需要用到的输入特征图中的两个输入数据块也存在重叠区域。此外,当卷积核越大,生成输出特征图中的两个相邻且不重叠的输出数据块时需要用到的输入特征图中的两个输入数据块存在的重叠区域也越大。生成输出特征图中的两个左右相邻且不重叠的输出数据块时需要用到的输入特征图中的两个输入数据块存在的重叠区域的宽度为卷积核的宽度减去水平方向的卷积步长(当卷积核为3*3、水平方向的卷积步长为1时,重叠区域的宽度为3减1,即2)。生成输出特征图中的两个上下相邻且不重叠的输出数据块时需要用到的输入特征图中的两个输入数据块存在的重叠区域的高度为卷积核的高度减去竖直方向的卷积步长(当卷积核为3*3、竖直方向的卷积步长为1时,重叠区域的宽度为3减1,即2)。
由上可知,在进行卷积运算时,根据卷积运算装置能并行处理的输入数据块的宽和高,输入特征图被分割为多个输入数据块。假设卷积运算装置能并行处理的输入数据块的大小为w*h(w为宽而h为高,且w和h均为大于0的整数)、卷积核为k*k(k为大于0的整数)、卷积步长为s(s为大于0的整数),当k等于1时,每2个相邻的输入数据块之间没有重叠区域(如图3A所示的情形);当k大于1时,每2个相邻的输入数据块之间有重叠区域,且每2个相邻的输入数据块经过卷积运算后生成的输出数据块相邻且不重叠(如图3B-3E所示的情形)。因此,当卷积核大小与卷积步长为已知时,便可得到整个输入特征图中所有的输入数据块之间的重叠样态。图4所示的分块后的输入特征图中包含了图3B-3E所示的输入数据块之间的重叠情形。下面将详述图4。
图4为根据本发明一实施例绘示的进行卷积运算时卷积核为k*k(k为大于0的整数)、卷积步长为s(s为大于0的整数)时的特征图分块示意图。如图4所示,410为大小为W*H的输入特征图(W和H均为大于0的整数),413为大小为k*k的卷积核,415为对输入特征图410进行分块卷积运算后生成的输出特征图。输出特征图415的大小为(W-(k-s))*(H-(k-s)),输出特征图415中的输出数据块的大小为(w-(k-s))*(w-(k-s))。图4中w为输入数据块的宽(即卷积运算装置能并行处理的输入数据块的宽),h为输入数据块的高(卷积运算装置能并行处理的输入数据块的高),k为卷积核的边长,s为卷积步长。输入特征图410被分割为多个具有重叠区域的输入数据块,比如输入数据块(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)…等,当k大于1时,每2个相邻的输入数据块之间有重叠区域,一如图3B~3E所示。当输入数据块有重叠区域时,可进一步将这些重叠区域进行分类,例如,输入特征图410中的输入数据块(1,1)包含4个区域:非重叠区域E1,1、右竖向重叠区域F1,1、下横向重叠区域H1,1以及右下角重叠区域T1,1;其中,输入数据块(1,1)的右竖向重叠区域F1,1同时也是输入数据块(1,2)的左竖向重叠区域,输入数据块(1,1)的下横向重叠区域H1,1同时也是输入数据块(2,1)的上横向重叠区域,输入数据块(1,1)的右下角重叠区域T1,1同时也是输入数据块(1,2)的左下角重叠区域、输入数据块(2,1)的右上角重叠区域以及输入数据块(2,2)的左上角重叠区域。输入数据块(2,2)包含9个区域:非重叠区域E2,2、右竖向重叠区域F2,2、下横向重叠区域H2,2、右下角重叠区域T2,2、左上角重叠区域T1,1、上横向重叠区域H1,2、右上角重叠区域T1,2、左竖向重叠区域F2,1以及左下角重叠区域T2,1;其中,输入数据块(2,2)的左上角重叠区域T1,1同时也是输入数据块(1,1)的右下角重叠区域,输入数据块(2,2)的上横向重叠区域H1,2同时也是输入数据块(1,2)的下横向重叠区域,输入数据块(2,2)的右上角重叠区域T1,2同时也是输入数据块(1,3)的左下角重叠区域,输入数据块(2,2)的左竖向重叠区域F2,1同时也是输入数据块(2,1)的右竖向重叠区域,输入数据块(2,2)的右竖向重叠区域F2,2同时也是输入数据块(2,3)的左竖向重叠区域,输入数据块(2,2)的左下角重叠区域T2,1同时也是输入数据块(3,1)的右上角重叠区域,输入数据块(2,2)的下横向重叠区域H2,2同时也是输入数据块(3,2)的上横向重叠区域,输入数据块(2,2)的右下角重叠区域T2,2同时也是输入数据块(3,3)的左上角重叠区域。明显的,所有输入数据块的重叠方式都可通过非重叠区域Ex,y、左(右)竖向重叠区域Fx,y、上(下)横向重叠区域Hx,y、以及左下(左上/右上/右下)角重叠区域Tx,y来表示,在此不予赘述。
如图4所示,输入特征图410中的每个输入数据块最多包含9个区域,而位于输入特征图410的第1行、第1列、最后一行以及最后一列的输入数据块包含的区域则少于9个。详细而言,位于输入特征图410的第1行的输入数据块不包含左上角重叠区域、上横向重叠区域以及右上角重叠区域;位于输入特征图410的第1列的输入数据块不包含左上角重叠区域、左竖向重叠区域以及左下角重叠区域;位于输入特征图410的第最后一行的输入数据块不包含左下角重叠区域、下横向重叠区域以及右下角重叠区域;位于输入特征图410的第最后一列的输入数据块不包含右上角重叠区域、右竖向重叠区域以及右下角重叠区域。例如,输入数据块(1,1)包含4个区域,输入数据块(3,1)包含6个区域。为了便于后文的描述,我们将输入特征图中的所有输入数据块都当作是包含9个区域的输入数据块,对于某个特定的输入数据块中,如果其不包含某些区域,我们将其当作是包含了这些区域的输入数据块,并且将这些区域的大小当作是0*0(即宽和高均为0)。比如,我们将输入特征图中的输入数据块(3,1)当作是具有大小为0*0的左竖向重叠区域、左上角重叠区域以及右下角重叠区域的输入数据块。
在另一实施例中,卷积核为长方形,长用k1表示而宽用k2表示(k1和k2可以是大于0的整数并且k1不等于k2)。与图4所示的卷积核是正方形的实施例的不同之处是:输入数据块(1,1)与(1,2)的横向重叠区域的宽度为k1-s,输入数据块(1,1)与(2,1)的竖向重叠区域的高度为k2-s。输出特征图415的大小为(W-(k1-s))*(H-(k2-s)),输出特征图415中的输出数据块的大小为(w-(k1-s))*(h-(k2-s));其它方面均与卷积核为正方形的实施例相同。
在另一实施例中,进行卷积运算时,横向和竖向可以使用不同的卷积步长,比如横向的卷积步长为s1、竖向的卷积步长为s2(s1和s2可以是大于0的整数)。与图4所示的横向卷积步长和竖向卷积步长均为s的实施例的不同之处是:输入数据块(1,1)与(1,2)的横向重叠区域的宽度为k-s1,输入数据块(1,1)与(2,1)的竖向重叠区域的高度为k-s2,输出特征图415中的输出数据块的大小为(w-(k-s1))*(h-(k-s2));其它方面均与横向卷积步长和竖向卷积步长均为s的实施例相同。在另一实施例中,卷积核为长k1而宽为k2的长方形,且横向和竖向皆为不同的卷积步长s1与s2(k1、k2、s1和s2皆为大于0的整数),所以输出特征图415中的输出数据块的大小为(w-(k1-s1))*(h-(k2-s2))。
在本公开下面的描述中,对于需要分块进行卷积运算的输入特征图(在输入特征图的宽、高均小于卷积运算模块能并行处理的输入数据块的宽、高的情况下,卷积运算模块一次可以直接处理一个输入特征图,因而不需要对输入特征图进行分块处理),均以图4所示的方式分为多个具有重叠区域的输入数据块,然后将所有的输入数据块按照从左到右、从上到下(或从上到下、从左到右)的顺序与卷积核进行卷积运算,以生成输出特征图中对应的输出数据块。生成的输出数据块按照从左到右、从上到下(或从上到下、从左到右)的顺序进行组合,以生成输出特征图。
另外,为了便于在后文中对以从左到右、从上到下的顺序处理输入特征图的处理流程进行描述,我们将输入特征图410中的每个输入数据块分成三个部分:横向主区域、上横向次区域以及下横向次区域。详细而言,我们将输入特征图410中每个输入数据块的非重叠区域、左竖向重叠区域和右竖向重叠区域合称为横向主区域。比如,输入数据块(1,1)的横向主区域为:E1,1+F1,1,输入数据块(1,2)的横向主区域为:F1,1+E1,2+F1,2,输入数据块(2,2)的横向主区域为:F2,1+E2,2+F2,2。我们将输入特征图410中每个输入数据块的左下角重叠区域、下横向重叠区域和右下角重叠区域合称为下横向次区域。比如,输入数据块(1,1)的下横向次区域为:H1,1+T1,1,输入数据块(1,2)的下横向次区域为:T1,1+H1,2+T1,2,输入数据块(2,2)的下横向次区域为:T2,1+H2,2+T2,2。我们将输入特征图410中每个输入数据块的左上角重叠区域、上横向重叠区域和右上角重叠区域合称为上横向次区域。比如,输入数据块(3,1)的上横向次区域为:H2,1+T2,1,输入数据块(3,2)的上横向次区域为:T2,1+H2,2+T2,2,输入数据块(3,3)的上横向次区域为:T2,2+H2,3+T2,3。输入数据块(1,1)、(1,2)和(1,3)的上横向次区域的大小都为0*0。我们将输入特征图410中每一行输入数据块的所有下横向重叠区域和右下角重叠区域合称为下横向行重叠区域。比如,第1行输入数据块的下横向行重叠区域为:H1,1+T1,1+H1,2+T1,2+H1,3+T1,3+…。我们将输入特征图410中每一行输入数据块的所有上横向重叠区域和右上角重叠区域合称为上横向行重叠区域。比如,第3行输入数据块的上横向行重叠区域(同时也是第2行输入数据块的下横向行重叠区域)为:H2,1+T2,1+H2,2+T2,2+H2,3+T2,3+…。第1行输入数据块的上横向行重叠区域大小为0*0。
同理,为了便于在后文中对以从上到下、从左到右的顺序处理(即一列一列处理)输入特征图的处理流程进行描述,我们将输入特征图410中每个输入数据块的非重叠区域、下横向重叠区域和上横向重叠区域合称为竖向主区域。比如,输入数据块(1,1)的竖向主区域为:E1,1+H1,1,输入数据块(2,1)的竖向主区域为:H1,1+E2,1+H2,1,输入数据块(2,2)的竖向主区域为:H1,2+E2,2+H2,2。我们将输入特征图410中每个输入数据块的左上角重叠区域、左竖向重叠区域和左下角重叠区域合称为左竖向次区域。比如,输入数据块(1,3)的左竖向次区域为:F1,2+T1,2,输入数据块(2,3)的左竖向次区域为:T1,2+F2,2+T2,2,输入数据块(3,3)的左竖向次区域为:T2,2+F3,2+T3,2。我们将输入特征图410中每个输入数据块的右上角重叠区域、右竖向重叠区域和右下角重叠区域合称为右竖向次区域。比如,输入数据块(1,3)的右竖向次区域为:F1,3+T1,3,输入数据块(2,3)的右竖向次区域为:T1,3+F2,3+T2,3,输入数据块(3,3)的右竖向次区域为:T2,3+F3,3+T3,3。输入数据块(1,1)、(2,1)和(3,1)的左竖向次区域的大小都为0*0。我们将输入特征图410中每一列输入数据块的右竖向重叠区域和右下角重叠区域合称为右竖向列重叠区域。比如,第1列的右竖向列重叠区域为:F1,1+T1,1+F2,1+T2,1+F3,1+T3,1+…。我们将输入特征图410中每一列输入数据块的左竖向重叠区域和左下角重叠区域合称为左竖向列重叠区域。比如,第3列的左竖向列重叠区域(同时也是第2列的右竖向列重叠区域)为:F1,2+T1,2+F2,2+T2,2+F3,2+T3,2+…。为了便于描述,在后文中,将横向主区域和竖向主区域称为主区域,将下横向次区域和右竖向次区域称为第一次区域,将输入数据块的左下角重叠区域和右上角重叠区域称为第一次区域的第一重叠次区域,将输入数据块的下横向迭区域和右竖向重叠区域称为第一次区域的第二重叠次区域,将输入数据块的右下角迭区域称为第一次区域的第三重叠次区域;将第一重叠次区域、第二重叠次区域和第三重叠次区域称为重叠次区域;将上横向次区域和左竖向次区域称为第二次区域;将第一次区域和第二次区域称为次区域。
通过图4中的输入特征图410及其相关描述可知,每个输入数据块的次区域至少包含一个重叠次区域,其中,与输入数据块的次区域的重叠次区域相邻的输入数据块的数量,大于与输入数据块的主区域的重叠区域相邻的输入数据块的数量。
图5为根据本发明一实施例绘示的包含卷积运算模块530的计算装置500的方块图。在一实施例中,计算装置500例如为服务器、桌上型计算机、笔记型计算机、手机、平板或其他具有运算功能的电子装置。
如图5所示,计算装置500包含存储器520及卷积运算模块530。存储器520耦接于卷积运算模块530。卷积运算模块530可用于运行卷积神经网络(比如,图1所示的卷积神经网络100)中的卷积层的卷积运算。存储器520用于存储卷积神经网络中当前卷积层的输入特征图集合、当前卷积层的输出特征图集合、每一卷积层的参数和每一卷积层的卷积核组集合。当前卷积层是指卷积运算模块530正在处理或即将处理的卷积层。在一实施例中,存储器520为系统存储器(system memory)。在另一实施例中,存储器520为静态随机存储器(SRAM)。在另一实施例中,存储器520可为任何计算装置500运用来存储数据的存储器。
如图5所示,卷积运算模块530包含配置暂存器531、二级处理模块538、缓存532、一级处理模块534、运算器536及数据处理模块539。二级处理模块538耦接缓存532,用于从存储器520中读取输入输入特征图和卷积核,然后将读取到的输入特征图进行二级解压,生成一级压缩的输入特征图,然后将一级压缩的输入特征图和卷积核存入缓存532中。一级处理模块534耦接缓存532和运算器536,用于从缓存532中读取一级压缩的输入特征图和卷积核,将一级压缩的输入特征图进行一级解压,生成输入特征图的原始数据(即未经压缩的数据),然后将输入特征图和卷积核发送给运算器536进行卷积运算。运算器536耦接数据一级处理模块534和数据处理模块539,用于接收一级处理模块534发送的输入特征图和卷积核,并对接收到的输入特征图和卷积核进行卷积运算,生成输出特征图,然后将输出特征图发送给数据处理模块。数据处理模块539包含分割模块535和压缩模块537,分割模块535接收运算器536生成的输出特征图,并将输出特征图进行分割为多个输出数据块;然后,压缩模块537将多个输出数据块进行两级压缩后存入存储器520中。配置暂存器531用于存放当前卷积层的参数(这些参数的运用方式将在后文进行说明)。缓存532包含缓存段5321和缓存段5323,缓存段5321用于缓存当前卷积层的输入特征图数据,缓存段5323用于缓存当前卷积层的卷积核组。运算器536包含多个运算单元(运算单元5361至536Z),每个运算单元可以对一个输入数据块和卷积核执行卷积运算以生成输出数据块。本公开中假定运算器536的每个运算单元可以处理的输入数据块的大小为w*h。下面介绍卷积运算模块530执行当前卷积层的卷积运算的处理流程。写入配置暂存器531中的参数包括当前卷积层(即第1卷积层)的输入特征图集合在存储器520中的地址、当前卷积层的输出特征图集合在存储器520中的地址、当前卷积层的输入特征图的宽和高、当前卷积层的卷积核组集合在存储器520中的地址、当前卷积层的卷积核组中卷积核的宽和高、当前卷积层的卷积步长、当前卷积层的填充大小(padding)、下一卷积层卷积核组中卷积核的宽和高、下一卷积层的填充大小。其中,参数当前卷积层的输入特征图的宽和高、当前卷积层的卷积核组集合在存储器520中的地址、当前卷积层的卷积核组中卷积核的宽和高、当前卷积层的卷积步长、当前卷积层的填充大小(padding)、下一卷积层卷积核组中卷积核的宽和高、下一卷积层的填充大小是从存储器520的存储段525中读取的。
首先,二级处理模块538根据配置暂存器531中的参数从存储器520中读取当前卷积层的输入特征图(存储器520中存储的输入特征图是经过两级压缩过的,后文会详述输入特征图通过两级压缩存入存储器520中的处理流程),并将其进行二级解压以得到当前卷积层的输入特征图的一级压缩数据,再将当前卷积层的输入特征图的一级压缩数据存入缓存532的缓存段5321中。另一方面,二级处理模块538亦根据配置暂存器531中的参数从存储器520中读取当前卷积层的卷积核组,并将其存入缓存532的缓存段5323中。
然后,一级处理模块534从缓存段5321中读取当前卷积层的输入特征图的一级压缩数据,并对其进行一级解压(一级压缩数据格式见前文)以得到当前卷积层的输入特征图。一级处理模块534还从缓存段5323中读取与当前卷积层的输入特征图对应的卷积核组。然后一级处理模块534将当前卷积层的输入特征图和与其对应的卷积核组中的卷积核发送给运算器536进行卷积运算。
然后,运算器536将根据配置暂存器531中的参数将当前卷积层的输入特征图和与其对应的卷积核分配给空闲的运算单元进行卷积运算,以生成输出特征图,并将生成的输出特征图发送给数据处理模块539。
最后,数据处理模块539根据配置暂存器531中的参数将接收到的输出特征图进行两级压缩(后文将详述两级压缩的处理流程)后,写入存储器520中。当前卷积层的输出特征图将作为下一卷积层的输入特征图,参与下一卷积层的卷积运算。由于第1卷积层的输入特征图是卷积运算的原始输入数据,在计算装置500进行卷积运算前需要先将其进行两级压缩后存入存储器520。在一实施例中,卷积运算模块530还对外提供解压缩/压缩接口。通过此解压缩/压缩接口,位于卷积运算模块530外部的模块可以调用数据处理模块539以进行压缩操作,或者调用二级处理模块538和/或一级处理模块534进行解压缩操作;此时数据处理模块539、二级处理模块538和一级处理模块534只是单纯地被调用而已。计算装置500可以通过卷积运算模块530提供的解压缩/压缩接口,将第1卷积层的输入特征图进行两级压缩后存入存储器520中。
在另一实施例中,二级处理模块538、缓存532、一级处理模块534、运算器536及数据处理模块539可实现于一流水线(pipeline)中,以提高卷积运算模块530的处理速度。
如前所述,在卷积运算过程中,输入特征图/输出特征图中会产生很多值为0的元素,因此通过本发明的一级压缩可以将卷积运算所需的数据进行大量压缩,所以将大量减少存储在缓存532中时所需的空间。此外,由于卷积运算的层级很多,所以通过本发明的两级压缩将有效地压缩每个卷积层的输入特征图/输出特征图,可以使卷积运算模块530与存储器520之间的数据传输量大为降低(因为经过两级压缩),进而提升计算装置500整体的运算效率。另外,当输入特征图被送往卷积运算模块530进行处理时,因为运算器536不能处理压缩数据(只能处理输入特征图的原始数据),所以才在缓存532中存储输入特征图的一级压缩数据,并在将输入特征图送往运算器536进行处理之前再通过一级解压模块534对其进行解压。
图6A为根据本发明一实施例绘示的计算装置500的存储器520中存储的数据的示意图,图6B为根据本发明一实施例绘示的计算装置500的更详细的方块图,图6C为根据本发明一实施例绘示的将第N卷积层的输入特征图进行两级压缩后写入存储器的处理流程,图6D为根据本发明一实施例绘示的计算装置500生成一个输出特征图的处理流程,图6E为根据本发明另一实施例绘示的计算装置500生成一个输出特征图的处理流程,图6F-1~6F-2为根据本发明一实施例绘示的计算装置500生成一个输出特征图的更详细的处理流程。下面将结合图6A、6B、6C、6D、6E和6F-1~6F-2详细介绍使用卷积运算装置500运行卷积神经网络的处理流程。
如图6A所示,存储器520包含存储段521、523、525和527。存储器520用于存放运行卷积神经网络需要的数据,比如,存储段521用于存放当前卷积层的输入特征图集合,存储段523用于存放当前卷积层的输出特征图集合(执行当前卷积层的卷积运算之前,存储段523中存储的输出特征图个数为0),存储段525用于存放所有卷积层的参数,存储段527用于存放所有卷积层的卷积核组集合。存储段525用以存储相关于每个卷积层的参数,举例来说相关于第1卷积层的参数包括:第1卷积层的输入特征图的宽和高、第1卷积层的卷积核组集合在存储器520中的地址、第1卷积层的卷积核组中卷积核的宽和高、第1卷积层的卷积步长、第1卷积层的填充大小(padding)。存储段525中其他卷积层的参数与第1卷积层的参数类似,此处就不再赘述了。值得注意的是,在卷积运算开始之前,相关于每个卷积层的参数和卷积核组集合就会被分别存入存储段525和存储段527中,并且在卷积运算过程中都不会再改变。
使用计算装置500运行卷积神经网络之前,需要先将运行卷积神经网络需要的数据存入存储器520。详细而言,计算装置500将第1至X卷积层的参数写入存储段525,将第1至X卷积层的卷积核组的集合写入存储段527,将第1卷积层的输入特征图集合按照图6C中的处理流程经过两级压缩后写入存储段521中。此时,由于还没有开始进行第1卷积运算,因而还没有生成第1卷积层的输出特征图,所以存储段523中还没有存放任何输出特征图。值得注意的是,只有第1卷积层的输入特征图集合是由计算装置500通过调用卷积运算模块530对外提供的压缩接口写入存储器520中的;其他卷积层的输入特征图集合都是上一卷积层的输出特征图集合,由数据处理模块539接收到之后直接进行两级压缩后存入存储器520中。比如第1卷积层的输出特征图集合是第2卷积层的输入特征图集合,而第1卷积层的输出特征图集合是由数据处理模块539(进行两级压缩后)写入存储段523中的。数据处理模块539通过图6C的处理流程将当前卷积层的输出特征图集合写入存储段523。下面将结合图6C详述将第N卷积层的所有输入特征图进行两级压缩后写入存储器的处理流程。
如图6C所示,在步骤S601C中,分割模块535生成输入数据块。详细而言,数据处理模块539中的分割模块535根据卷积运算装置530能并行处理的输入数据块的宽和高、第N卷积层的卷积核的宽和高、第N卷积层的卷积步长(可从配置暂存器531中获取这些参数)将第N卷积层的所有输入特征图都先分割为带有重叠区域的输入数据块(使用如图4所示的分割方式)。然后执行步骤S603C。
在步骤S603C中,压缩模块537对输入数据块进行一级压缩。详细而言,数据处理模块539中的压缩模块537将输入特征图的每个输入数据块的主区域(例如,当以从左到右、从上到下的顺序处理输入数据块时,输入数据块(2,2)的主区域为F2,1+E2,2+F2,2;当以从上到下、从左到右的顺序处理输入数据块时,输入数据块(2,2)的主区域为H1,2+E2,2+H2,2)和次区域(例如,当以从左到右、从上到下的顺序处理输入数据块时,输入数据块(2,2)的第一次区域为:T2,1+H2,2+T2,2;当以从上到下、从左到右的顺序处理输入数据块时,输入数据块(2,2)的第一次区域为T1,2+F2,2+T2,2),分别进行一级压缩,生成经过一级压缩的主区域和次区域。在另一实施例中,当以从左到右、从上到下的顺序处理输入数据块时,位于同一行上的所有输入数据块的第一次区域(比如第2行上所有输入数据块的第一次区域为H2,1+T2,1+H2,2+T2,2+H2,3+T2,3+…,值得注意的是,第1行上所有输入数据块的第一次区域H1,1+T1,1+H1,2+T1,2+H1,3+T1,3+…同时也是第2行上所有输入数据块的第二次区域)被当作一个整体进行一级压缩;同理,当以从上到下、从左到右的顺序处理输入数据块时,位于同一列上的所有输入数据块的第一次区域(比如第2列上所有输入数据块的第一次区域为F1,2+T1,2+F2,2+T2,2+F3,2+T3,2+…,值得注意的是,第1列上所有输入数据块的第一次区域F1,1+T1,1+F2,1+T2,1+F3,1+T3,1+…同时也是第2列上所有输入数据块的第二次区域)被当作一个整体进行一级压缩。然后执行步骤S605C。
在步骤S605C中,压缩模块537将经过一级压缩后的输入数据块进行二级压缩。详细而言,数据处理模块539中的压缩模块537将输入特征图的每个输入数据块的经过一级压缩的主区域和次区域,再分别进行二级压缩,生成经过两级压缩的主区域和次区域。在另一实施例中,可以将同一个输入特征图中的多个(比如5个)相邻的输入数据块的主区域作为一个整体(比如按顺序前后连接到一起)进行二级压缩。然后执行步骤S607C。
在步骤S607C中,数据处理模块539将经过二级压缩后的输入数据块存入存储器520。详细而言,数据处理模块539将输入特征图的每个输入数据块的经过二级压缩后的主区域和次区域存入存储器520的存储段521(比如,将第1卷积层的输入特征图存入存储段521)或存储段523(比如,将第2卷积层的输入特征图存入存储段523,即将第1卷积层的输出特征图存入存储段523)中。
现在我们再回到图6A。如图6A所示,进行当前卷积层的卷积运算前,当前卷积层的所有输入特征图(输入特征图5211至输入特征图521M)被顺序存放在存储段521中,且对于每个输入特征图,先存放其主区域,再存放其次区域。比如,存储输入特征图5211时,先将输入特征图5211的所有主区域按从左到右、从上到下的顺序存入存储段521中输入特征图1中的主区域52111,然后再将输入特征图1的所有次区域按照从左到右、从上到下的顺序存放在输入特征图1中的下横向行重叠区域52112。以存储图4中的输入特征图410(假设输入特征图410就是输入特征图1)为例,存储输入特征图410时,先依次把输入特征图410的输入数据块(1,1)的主区域E1,1+F1,1、输入数据块(1,2)的主区域F1,1+E1,2+F1,2,…等,存入存储段521中输入特征图1中的主区域52111。然后,再依次把输入特征图410的第1行输入数据块的第一次区域、第2行输入数据块的第一次区域…等存放在输入特征图1中的次区域52112。在存储段523中存放输出特征图的方式与在存储段521中存放输入特征图的方式相同,此处就不再赘述了。
在另一实施例中,在存储段521(或存储段523)中存放输入特征图(或输出特征图)时,先存放第一次区域,然后再在第一次区域的后面再接着存放主区域。
将第1卷积层的输入特征图集合经过两级压缩写入存储器520之后,运算装置500先将第1卷积层的参数写入配置暂存器531,然后,通知卷积运算模块530开始进行第1卷积层的卷积运算。
接收到开始卷积运算的通知后,计算装置500将以图6D或图6E(后文会详述)中的处理流程对第1卷积层的输入特征图集合与每一个卷积核组进行卷积运算以生成与每一个卷积核组对应的输出特征图。下面先描述图6D中的将输入特征图集合与一个卷积核组进行卷积运算生成一个输出特征图的处理流程。计算装置500先执行步骤S603D。
在步骤S603D中,多个输入数据块中的每个所述输入数据块被分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域。详细而言,所述输入特征图被分割为多个输入数据块,其中,任两个相邻的所述输入数据块之间存在重叠区域;根据所述输入数据块之间的重叠区域,每个所述输入数据块被分割为多个不重叠的区域。具体来说,计算装置500使用前文中描述的图6C中步骤S601C中的处理流程将输入特征图分割为多个带有重叠区域的输入数据块。然后计算装置500根据所述输入数据块之间的重叠区域,将每个所述输入数据块分割为多个不重叠的区域,即将每个所述输入数据块分割为主区域、第一次区域和第二次区域。如图4所示,当以从左到右、从上到下的顺序处理输入特征图时,输入数据块(2,2)被分割为主区域(F2,1+E2,2+F2,2)、第一次区域(T2,1+H2,2+T2,2)和第二次区域(T1,1+H1,2+T1,2),输入数据块(1,2)被分割为主区域(F1,1+E1,2+F1,2)、第一次区域(即输入数据块(2,2)的第二次区域,T1,1+H1,2+T1,2),输入数据块(2,2)与(1,2)相邻,并且输入数据块(2,2)与(1,2)之间存在重叠区域T1,1+H1,2+T1,2;当以从上到下、从左到右的顺序处理输入特征图时,输入数据块(2,2)被分割为主区域(H1,2+E2,2+H2,2)、第一次区域(T1,2+F2,2+T2,2)和第二次区域(T1,1+F2,1+T2,1),输入数据块(2,1)被分割为主区域(H1,1+E2,1+H2,1)、第一次区域(即输入数据块(2,2)的第二次区域,T1,1+F2,1+T2,1),输入数据块(2,1)与(2,2)相邻,并且输入数据块(2,1)与(2,2)之间存在重叠区域T1,1+F2,1+T2,1。然后,计算装置500根据图6C中的步骤S603C、S605C和S607C,将输入特征图的每个输入数据块的区域经过两级压缩后,存入存储器520中。然后执行步骤S605D。
在步骤S605D中,计算装置500将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间。详细而言,计算装置500从存储器520读取经过两级压缩的输入数据块的区域,将其进行二级解压后存入缓存532中。更详细的流程参见后文对图6F-1~6F-2的步骤S603F、S605F、S607F和S609F的描述。然后执行步骤S607D。
在步骤S607D中,计算装置500根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域,生成每个所述输入数据块。详细而言,计算装置500根据缓存532中存储的输入数据块的经过一级压缩的区域,生成对应的输入数据块。更详细的流程参见后文对图6F-1~6F-2的步骤S613F、S615F、S617F和S619F的描述。然后执行步骤S609D。
在步骤S609D中,计算装置500对生成的多个所述输入数据块执行卷积运算,生成所述输出特征图。详细而言,计算装置500将输入数据块发送给运算器536进行卷积运算,生成输出数据块,然后再将输出数据块拼接成输出特征图。更详细的流程参见后文对图6F-1~6F-2的步骤S621F、S623F、S625F、S627F和S629F的描述。
通过上述对图6C和图6D的描述可知,存储器520中存储的输入数据块是经过一级压缩之后又经过二级压缩的数据,缓存532中存储的输入数据块是经过一级压缩的数据,其中,存储器520中存储的输入数据块的压缩比例比缓存532中存储的输入数据块的压缩比例高,于是当卷积运算模块530从外部的存储器520载入数据、或由卷积运算模块530传送数据至存储器520进行存储时,所需的传输数据量与传输时间皆可大幅减少,因此提高系统的执行效率。
下面再描述图6E中的将输入特征图集合与一个卷积核组进行卷积运算生成一个输出特征图的处理流程。计算装置500先执行步骤S601E。
在步骤S601E中,计算装置500对所述输入特征图执行二级解压操作,其中所述输入特征图包含多个输入数据块且任两个相邻的所述输入数据块之间存在重叠区域,其中每个所述输入数据块包含一个主区域和至少一个次区域。详细而言,计算装置500从存储器520读取输入特征图的输入数据块区域,然后将读取到的输入数据块区域进行二级解压操作。更详细的流程参见后文对图6F-1~6F-2的步骤S603F、S605F、S607F和S609F的描述。然后执行步骤S603E。
在步骤S603E中,计算装置500将每个所述输入数据块的二级解压操作后的主区域与二级解压操作后的至少一个次区域分别存储至不同的存储空间。详细而言,计算装置500将每个所述输入数据块的二级解压操作后的主区域与二级解压操作后的至少一个次区域分别存储至缓存532中不同的存储空间。更详细的流程参见后文对图6F-1~6F-2的步骤S603F、S605F、S607F和S609F的描述。然后执行步骤S605E。
在步骤S605E中,计算装置500对每个所述输入数据块的所述二级解压操作后的主区域与所述二级解压操作后的至少一个次区域执行一级解压操作。详细而言,计算装置500从缓存532中读取输入数据块的经过一级压缩的主区域和次区域,对读取到的经过一级压缩的主区域和次区域执行一级解压操作并存入暂存器5342中。更详细的流程参见后文对图6F-1~6F-2的步骤S613F的描述。然后执行步骤S607E。
在步骤S607E中,计算装置500利用每个所述输入数据块的所述一级解压操作后的主区域与所述一级解压操作后的次区域生成每个所述输入数据块。详细而言,计算装置500从暂存器5342中读取输入数据块的经过一级解压操作后的主区域和次区域生成输入数据块。更详细的流程参见后文对图6F-1~6F-2的步骤S619F的描述。然后执行步骤S609E。
在步骤S609E中,计算装置500对每个所述输入数据块执行卷积运算,生成所述输出特征图。详细而言,计算装置500将输入数据块发送给运算器536进行卷积运算,生成输出数据块,然后再将输出数据块拼接成输出特征图。更详细的流程参见后文对图6F-1~6F-2的步骤S621F、S623F、S625F、S627F和S629F的描述。
下面描述图6F-1~6F-2中的将输入特征图集合与一个卷积核组进行卷积运算生成一个输出特征图的更详细的处理流程。卷积运算模块530先执行步骤S601F。
在步骤S601F中,二级处理模块538从存储器读取当前卷积层的一个卷积核组并存入缓存532。详细而言,二级处理模块538根据配置暂存器531中存储的当前卷积层的卷积核组集合在存储器520中的地址,从存储器520的存储段527中读取当前卷积层的一个还没有处理过的卷积核组,并将其存入缓存532的缓存段5323中。根据本公开对图2的描述,每个卷积核组可包含多个卷积核(如缓存段5323中所示的卷积核1至卷积核M)。然后执行步骤S603F。
在步骤S603F中,二级处理模块538从存储器520读取所有输入特征图中位于相同位置的输入数据块的经过两级压缩的主区域(比如,所有输入特征图中输入数据块(1,1)的经过两级压缩的主区域;当以从左到右、从上到下的顺序处理输入数据块时,主区域是指横向主区域;当以从上到下、从左到右的顺序处理输入数据块时,主区域是指竖向主区域;下同)。详细而言,二级处理模块538根据配置暂存器531中存储的当前卷积层的所有输入特征图集合在存储器520中的地址,从存储器520的存储段521中读取每个输入特征图位于相同位置的一个经过两级压缩的主区域。比如,如图6A所示,二级处理模块538读取存储段521中当前卷积层的输入特征图1的输入数据块(1,1)的经过两级压缩的主区域52111,直至输入特征图M的输入数据块(1,1)的经过两级压缩的主区域521M1为止;于是二级处理模块538一共可以读取到M个属于不同的输入特征图的主区域。在另一实施例中,二级处理模块538一次可以读取每个输入特征图的一部分(比如5个)输入数据块的经过两级压缩的主区域。然后执行步骤S605F。
在步骤S605F中,二级处理模块538将读取到的所有输入数据块的经过两级压缩的主区域进行二级解压并存入缓存532。详细而言,二级处理模块538将读取到的所有输入数据块的经过两级压缩的主区域进行二级解压,生成所有输入数据块的经过一级压缩的主区域。然后,二级处理模块538将所有输入数据块的经过一级压缩的主区域存入缓存532的缓存段5321中。比如,二级处理模块538将存储器520的存储段521中存储的输入特征图1的经过二级压缩的主区域52111进行二级解压后生成的一级压缩数据存入输入特征图缓存段53211的主缓存段532111中…等等,直至将输入特征图M的经过二级压缩的主区域521M1进行二级解压后生成的一级压缩数据存入输入特征图缓存段5321M的主缓存段5321M1中为止。然后执行步骤S607F。
在步骤S607F中,卷积运算装置530判断是否需要读取刚读取到的主区域所属的输入数据块的第一次区域。详细而言,在第一实施例中,二级处理模块538每次只读取一个输入数据块的第一次区域。如图4中的输入特征图410所示,当以从左到右、从上到下的顺序处理输入特征图的输入数据块时,如果输入数据块位于输入特征图的最后一行,则判断结果为“否”;如果输入数据块没有位于输入特征图的最后一行,则判断结果为“是”。同理,当以从上到下、从左到右的顺序处理输入特征图的输入数据块时,如果输入数据块位于输入特征图的最后一列,则判断结果为“否”;如果输入数据块没有位于输入特征图的最后一列,则判断结果为“是”。在第二实施例中,二级处理模块538每次读取与读取到的输入数据块位于同一行(或列)的所有输入数据块的第一次区域。如图4中的输入特征图410所示,当以从左到右、从上到下的顺序处理输入特征图的输入数据块时,如果读取到的主区域(即横向主区域)所属的输入数据块位于第1列,说明卷积运算装置530刚开始处理新的一行输入数据块,所以需要读取输入数据块的第一次区域(即下横向行重叠区域),所以判断结果为“是”;但是,如果读取到的主区域所属的输入数据块位于最后一行,由于位于最后一行的输入数据块没有第一次区域,因而不需要读取第一次区域,所以判断结果为“否”;如果读取到的主区域(即横向主区域)所属的输入数据块不位于第1列也不位于最后一行,由于输入数据块的第一次区域已经在处理与其处于同一行第1列的输入数据块时被读取了,所以不需要再次读取,所以判断结果为“否”。同理,当以从上到下、从左到右的顺序处理输入特征图的输入数据块时,如果读取到的主区域(即竖向主区域)所属的输入数据块位于第1行,说明卷积运算装置530刚开始处理新的一列输入数据块,所以还需要读取输入数据块的第一次区域(即右竖向列重叠区域),所以判断结果为“是”。但是,如果读取到的主区域所属的输入数据块位于最后一列,由于最后一列的输入数据块没有第一次区域,因而不需要读取第一次区域,所以判断结果为“否”;如果读取到的主区域(即竖向主区域)所属的输入数据块不位于第1行也不位于最后一列,由于输入数据块的第一次区域已经在处理与其处于同一列第1行的输入数据块时被读取了,所以不需要再次读取,所以判断结果为“否”。在步骤S607F中,如果判断结果为“否”,执行步骤S613F。如果判断结果为“是”,执行步骤S609F。下面先讲步骤S609F。
在步骤S609F中,二级处理模块538从存储器520读取刚读取到的主区域所属的输入数据块的第一次区域,将其进行二级解压后存入缓存532。详细而言,二级处理模块538根据刚读取到的主区域所属的输入数据块的位置,从存储器520的存储段521中读取输入数据块的第一次区域。在第一实施例中,二级处理模块538只读取与输入数据块自己的第一次区域。比如,如图4所示,当以从左到右、从上到下的顺序处理输入数据块时,输入特征图410的输入数据块(2,2)的第一次区域为T2,1+H2,2+T2,2;当以从上到下、从左到右的顺序处理输入数据块时,输入特征图410的输入数据块(2,2)的第一次区域为T1,2+F2,2+T2,2。在第二实施例中,二级处理模块538读取与读取到的输入数据块位于同一行(或列)的所有输入数据块的第一次区域。比如,如图4所示,当以从左到右、从上到下的顺序处理输入数据块时,输入特征图410的与输入数据块(1,1)位于同一行的所有输入数据块的第一次区域(即输入数据块的下横向行重叠区域)为:H1,1+T1,1+H1,2+T1,2+H1,3+T1,3+…。当以从上到下、从左到右的顺序处理输入数据块时,输入特征图410的与输入数据块(1,1)位于同一列的所有输入数据块的第一次区域(即输入数据块的右竖向列重叠区域)为:F1,1+T1,1+F2,1+T2,1+H3,1+T3,1+…。然后,二级处理模块538将读取到的第一次区域进行二级解压,生成各个经过一级压缩的第一次区域,并将各个经过一级压缩的第一次区域分别存入缓存532的缓存段5321的输入特征图缓存段53211的次缓存段532113,…等等,直至输入特征图缓存段532M1的次缓存段5321M3为止。然后执行S613F。
由于存储器520位于卷积运算模块530的外部,卷积运算模块530读取当前卷积层的输入特征图的数据时的速度会受到存储器520与卷积运算模块530之间的数据传输带宽影响。通过在存储器520中存放经过两级压缩的输入特征图数据,减少了存储器520与卷积运算模块530之间的需要传输的数据量,提高了数据传输效率,因而提高了卷积运算模块530进行卷积运算的效率。同时,由于在卷积运算模块530的缓存532中存储的是经过一级压缩的输入特征图数据,而不是未经压缩的原始数据,因而可以在缓存532中存储更多的输入特征图数据,从而可以使卷积运算模块530能对具有更多输入特征图的卷积层进行卷积运算。
在步骤S607F中,当卷积运算装置530判断是否需要读取刚读取到的主区域所属的输入数据块的第一次区域的结果为“否”时,执行步骤S613F。
在步骤S613F中,一级处理模块534从缓存读取所有经过一级压缩的主区域,将其进行一级解压后存入暂存器5342。详细而言,一级处理模块534从缓存532的缓存段5321的输入特征图缓存段53211的主缓存段532113至输入特征图缓存段5321M的主缓存段5321M3读取所有经过一级压缩的主区域,将各个经过一级压缩的主区域进行一级解压后分别存入暂存器5342的主暂存段53421的子暂存段534211至53421M,然后删除缓存532中存储的所有经过一级压缩的主区域。然后执行步骤S615F。
在步骤S615F中,计算装置500判断是否需要读取刚读取到的主区域所属的输入数据块的第一次区域。具体判断方法与步骤S607F类似,此处不再赘述。当判断结果为“否”时,执行步骤S619F。当判断结果为“是”时,执行步骤S617F。下面先讲步骤S617F。
在步骤S617F中,一级处理模块534从缓存532读取各个经过一级压缩的第一次区域,将其进行一级解压后存入暂存器5342。详细而言,一级处理模块534从缓存532的缓存段5321的各个输入特征图缓存段(53211-5321M)的次缓存段读取各个经过一级压缩的第一次区域(532113-5321M3),将各个经过一级压缩的第一次区域进行一级解压后存入暂存器5342的次暂存段53423的子暂存段5342311至534231M(或子暂存段5342331至534233M),然后释放缓存532中刚读取到的第一次区域所占用的存储空间。如图4的输入特征图410所示,当以从左到右、从上到下的顺序处理输入数据块时,为了生成第1行的输入数据块,只需要与第1行输入数据块对应的一个第一次区域。但是为了生成第2行的输入数据块,除需要与第2行输入数据块对应的第一次区域外,还需要与第1行输入数据块对应的一个第一次区域(即第2行输入数据块的第二次区域)。当生成第2行的输入数据块之后,再生成第3行的输入数据块时,就不需要与第1行的输入数据块对应的第一次区域了。举例来说,如图4所示,为了生成输入特征图410的第1行的输入数据块,只需要与第1行所有输入数据块对应的第一次区域(即下横向行重叠区域)H1,1+T1,1+H1,2+T1,2+H1,3+T1,3…。为了生成输入特征图410的第2行的输入数据块,除需要与第2行中所有输入数据块对应的第一次区域(即下横向行重叠区域)H2,1+T2,1+H2,2+T2,2+H2,3+T2,3…,还需要与第1行中所有输入数据块对应的第一次区域(即第2行所有输入数据块的第二次区域)H1,1+T1,1+H1,2+T1,2+H1,3+T1,3…。当生成输入特征图410的第2行的输入数据块之后,再生成第3行的输入数据块时,就不需要与第1行中所有输入数据块的第一次区域H1,1+T1,1+H1,2+T1,2+H1,3+T1,3…了。所以,在生成所有行的输入数据块时,同时最多需要在暂存器534中的次暂存段53423中同时保存当前卷积层每个输入特征图的一行输入数据块中每个输入数据块的两个次区域(即第一次区域和第二次区域)。一级处理模块534每次写入新的第一次区域时,需要判断暂存器5342的次暂存段53423的子暂存段5342311至534231M和子暂存段5342331至534233M中的那组子暂存段中存放的下横向行重叠区域是否已经使用完了,如果判断结果为使用完了,然后使用新的下横向行重叠区域将其覆盖。举例来说,如图4所示,在生成输入特征图410的第3行第一个输入数据块(3,1)时,第1行所有输入数据块对应的第一次区域H1,1+T1,1+H1,2+T1,2+H1,3+T1,3…就使用完了。当以从上到下、从左到右的顺序处理输入数据块时,其处理方式与以从左到右、从上到下的顺序处理输入数据块时类似,此处就不再赘述了。然后执行步骤S619F。
在步骤S619F中,一级处理模块534根据暂存器5342中存储的输入数据块的主区域和次区域生成输入数据块。详细而言,首先,一级处理模块534根据暂存器5342中存储的输入数据块的主区域所属于的输入数据块所在的列数,可以计算出输入数据块的第一次区域和第二次区域在暂存器5342的次暂存段53421中的起始位置。以图4中的输入特征图410为例,输入数据块(3,3)的第一次区域T3,1+H3,3+T3,3和第二次区域T2,2+H2,3+T2,3在暂存器5342的次暂存段53421中的起始位置为2*(w-(k-s))(或2*(w-(h-s)))。
然后,一级处理模块534根据输入数据块的第一次区域和第二次区域在暂存器5342的次暂存段53421中的起始位置,就可以从次暂存段53423中中获取到输入数据块的第一次区域和第二次区域。
最后,一级处理模块534将所有输入数据块的主区域、第一次区域和第二次区域合并,生成输入数据块。然后执行步骤S621F。
在步骤S621F中,一级处理模块534判断刚生成的输入数据块是否是输入特征图的第1个输入数据块。如果“否”,执行步骤S625F。如果“是”,执行步骤S623F。下面先描述步骤S623F。
在步骤S623F中,一级处理模块534从缓存532中读取卷积核组并将其存入暂存器5342。详细而言,一级处理模块534从缓存532的缓存段5323中读取卷积核组(包含卷积核1-M),并将读取到的卷积核组存入暂存器5342的卷积核组暂存段53425的子暂存段534251-53425M中。然后执行步骤S625F。
在步骤S625F中,卷积运算模块530将各输入特征图的输入数据块与卷积核组中对应的卷积核进行卷积运算,生成输出特征图中对应的输出数据块。详细而言,一级处理模块534将所有输入特征图的输入数据块和卷积核组中相应的卷积核(一个输入数据块对应一个卷积核)发送给运算器536。运算器536将接收到的所有输入数据块和预取对应的卷积核分配到空闲的运算单元5361-536Z进行卷积运算(卷积运算的详细流程参见前文中对图2的描述),生成输出特征图中对应的输出数据块。运算器536将生成的输出数据块发送给数据处理模块539。然后执行步骤S627F。
在步骤S627F中,卷积运算模块530判断是否已生成输出特征图的所有输出数据块。如果“否”,卷积运算模块530将再次执行步骤S603F-S627F,生成输出特征图的下一个输出数据块。如果“是”,执行步骤S629F。
在步骤S629F中,卷积运算模块530生成输出特征图。详细来说,生成输出特征图之后,数据处理模块539通过图6C所示的处理流程将生成的输出特征图经过两次压缩后存入存储器520中。
通过再次执行图6F-1~6F-2所示的处理流程,通过在步骤S601F中读取下一个卷积核组,可以生成当前卷积层的下一个输出特征图,直到生成所有当前卷积层的输出特征图。生成所有当前卷积层的输出特征图之后,卷积运算模块530会通知(比如,以中断的方式)计算装置500。然后计算装置500把下一卷积层的参数写入配置暂存器531,并通知卷积运算模块530开始进行下一卷积层的运算。直到完成整个神经网络的运算。
图7为根据本发明一实施例绘示的计算装置500对输入数据块进行解压的处理流程。如图7所示,计算装置500先读取输入数据块(步骤S701),然后对输入数据块进行一级解压(步骤S703)。先执行步骤S701。
在步骤S701中,一级处理模块534读取输入数据块。详细流程请参见前文对图6F-1~6F-2的步骤S613F的描述。然后执行步骤S703。
在步骤S703中,一级处理模块534对输入数据块进行一级解压。详细流程请参见前文对图6F-1~6F-2的步骤S613F-S617F的描述。至于步骤S619F-S627F则是描述将一级解压后的主区域和次区域生成输入数据块、进行卷积运算、并产生输出数据块,在此不予赘述。
在另一实施例中,在卷积运算装置530的缓存532的缓存空间比较充裕的情况下,二级处理模块538每次可以读取更多的输入数据块的主区域,以加快其卷积运算速度。
图8为根据本发明另一实施例绘示的包含卷积运算模块的计算装置800的方块图。与计算装置500不同的是,计算装置800把卷积运算后生成的输出特征图(即下一卷积层的输入特征图)直接存入缓存中(而不存入存储器中),从而避免了向存储器中存入和读取下一卷积层的输入特征图,可以进一步提高计算装置800的运算效率。下面将结合第9A-9F-1~9F-2图介绍计算装置800。
如图8所示,计算装置800包含存储器820和卷积运算模块830,存储器820耦接卷积运算模块830。卷积运算模块830包含配置暂存器531、缓存832、数据处理模块839、一级处理模块534、二级处理模块838和运算器536。数据处理模块839耦接二级处理模块838和运算器536,二级处理模块838耦接缓存832和数据处理模块839,一级处理模块534耦接缓存832和运算器536。卷积运算模块830中的配置暂存器531、一级处理模块534和运算器536,分别与卷积运算装置500中的配置暂存器531、一级处理模块534和运算器536相同,此处就不再赘述了。下面介绍缓存832、二级处理模块838和数据处理模块839。
缓存832包含缓存段5321、5323和8322,缓存段5321、5323和图5中的缓存段5321、5323相同,此处就不再赘述了。缓存段8322用于存储下一卷积层的输入特征图数据(后文将详述)。数据处理模块839包含分割模块535和压缩模块837,压缩模块837藕接分割模块535。分割模块535,与图5中的数据处理模块539中的分割模块535相同,此处就不再赘述了。如前所述,数据处理模块839接收到运算器536生成的输出特征图(即下一卷积层的输入特征图)后,分割模块535将输出特征图分割为输出数据块(即下一卷积层的输入数据块),然后发送给压缩模块837。压缩模块837将接收到的输出数据块进行一级压缩后发送给二级处理模块838,然后由二级处理模块838将经过一级压缩后的输出数据块存入缓存832的缓存段8322中。与计算装置500不同的是,数据处理模块839将经过一级压缩后的输出数据块直接通过二级处理模块838存入缓存832中(而不是先存入存储器820中,然后再由二级处理模块838从存储器中读取回来),从而减少了卷积运算模块830与存储器820之间的数据传输。如果运算器536生成的输出特征图是最后一个卷积层的输出特征图,数据处理模块839将把接收到的输出特征图直接存入存储器820中。
由于第1卷积层的输入特征图(存储在存储器820中)是卷积运算的原始输入数据,在计算装置800进行卷积运算前需要先将其进行一级压缩后存入缓存832中。具体而言,计算装置800从如图9A所示的存储器820的存储段821读取第1卷积层的输入特征图,然后发送给数据处理模块839。数据处理模块839再将接收到的第1卷积层的输入特征图通过分割模块535和压缩模块837进行分割和压缩处理后存入缓存832中,具体的分割和压缩过程在前面已经讲过,此处就不再赘述了。在一实施例中,卷积运算模块830还对外提供解压缩/压缩接口;通过此解压缩/压缩接口,位于卷积运算模块830外部的模块可以调用数据处理模块839以进行解压缩/压缩操作;此时数据处理模块839只是单纯地被调用而已。
图9A为根据本发明一实施例绘示的计算装置800的存储器820中存储的数据的示意图。如图9A所示,存储器820包含存储段821、823、525和527。存储段525和527与存储器520的存储段525和527相同,此处就不再赘述了。存储段821用于存储卷积运算的输入特征图集合(如前段所述,即第1卷积层的输入特征图的集合),存储段823用于存储卷积运算的输出特征图集合(最后一个卷积层的输出特征图集合)。
图9B为根据本发明一实施例绘示的计算装置800的更详细的方块图。如图9B所示,配置暂存器531、运算器536、一级处理模块534、缓存段5321、缓存段5323,与图6B中的配置暂存器531、运算器536、一级处理模块534、缓存段5321、缓存段5323相同,此处就不再赘述了。缓存段8322用于存储下一卷积层的输入特征图的数据,其存储结构与缓存段5321的存储结构完全相同,不同之处是,缓存段5321用于存储当前卷积层的输入特征图数据,而缓存段8322用于存储下一卷积层的输入特征图数据。在一实施例中,缓存段5321和8322可交替用于存储当前卷积层和下一卷积层的输入特征图数据。例如,在对第N层的输入数据块进行卷积运算的过程中,缓存段5321用于存储当前卷积层(即第N卷积层)的输入特征图数据,缓存段8322用于存储下一卷积层(即第N+1卷积层)的输入特征图数据。而在对第N+1层的输入数据块进行卷积运算的过程中,缓存段8322用于存储当前卷积层(即第N+1卷积层)的输入特征图数据,缓存段5321用于存储下一卷积层(即第N+2卷积层)的输入特征图数据,以此类推。
图9C为根据本发明一实施例绘示的将第N卷积层的输入特征图进行一级压缩后写入缓存的处理流程。如图9C所示,数据处理模块839先生成输入数据块(步骤S901C),然后对输入数据块进行一级压缩(步骤903C),最后将经过一级压缩后的输入数据块存入缓存832(步骤S907C)。图9C中的步骤S901C和S903C与图6C中的步骤S601C和S603C相同,此处就不再赘述了。下面描述步骤S907C。
在步骤S907C中,二级处理模块838将经过一级压缩后的输入数据块存入缓存832中。详细而言,二级处理模块838将输入特征图的每个输入数据块的经过一级压缩后的主区域和次区域存入缓存832的缓存段8322(比如,将第N卷积层的输入特征图存入缓存段8322)或缓存段5321(比如,将第N+1卷积层的输入特征图存入缓存段5321,即将第N卷积层的输出特征图存入缓存段5321)中。
接收到开始卷积运算的通知后,计算装置800将以图9D或图9E(后文会详述)中的处理流程对第1卷积层的输入特征图集合与每一个卷积核组进行卷积运算以生成与每一个卷积核组对应的输出特征图。如图9D所示,计算装置800将输入特征图集合与一个卷积核组进行卷积运算生成一个输出特征图的处理流程为:多个输入数据块中的每个所述输入数据块被分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域(步骤S903D);将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间(S905D);根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域,生成每个所述输入数据块(S907D);对生成的多个所述输入数据块执行卷积运算,生成所述输出特征图(S909D)。图9D中的步骤S903D、S907D和S909D,与图6D中的步骤S903D、S907D和S909D相同,此处就不再赘述了。下面介绍步骤S905D。
在步骤S905D中,计算装置800将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间。详细而言,计算装置800的二级处理模块838将在步骤S903D中生成的多个输入数据块的多个不重叠的区域进行一级压缩后存入缓存832的缓存段8322或5321。
图9E为根据本发明另一实施例绘示的计算装置800生成一个输出特征图的处理流程。如图9E所示,计算装置800生成一个输出特征图的处理流程为:对每个所述输入数据块的主区域与至少一个次区域执行一级解压操作(步骤S905E);利用每个所述输入数据块的所述一级解压操作后的主区域与所述一级解压操作后的次区域生成每个所述输入数据块(S907E);对每个所述输入数据块执行卷积运算,生成所述输出特征图(S909E)。图9E中的步骤S907E和S909E,与图6E中的步骤S607E和S609E相同,此处就不再赘述了。下面介绍步骤S905E。
在步骤S905E中,计算装置800对每个所述输入数据块的主区域与至少一个次区域执行一级解压操作。详细而言,计算装置500从缓存532中读取输入数据块的经过一级压缩的主区域和次区域,对读取到的经过一级压缩的主区域和次区域执行一级解压操作并存入暂存器5342中。更详细的流程参见后文对图9F-1~9F-2的步骤S913F的描述。
图9F-1~9F-2为根据本发明一实施例绘示的计算装置800生成一个输出特征图的更详细的处理流程。如图所示,图9F-1~9F-2描述了在卷积运算过程中,计算装置800将输入特征图集合与一个卷积核组进行卷积运算生成一个输出特征图的处理流程。当缓存832的空间够大时,计算装置800在进行卷积运算的过程中,将每一卷积层(不包含最后一个卷积层,最后一个卷积层的输出特征图会直接存储到存储器820中)生成的输出特征图经过分割及一级压缩后直接存入缓存832中,而不需要把每一卷积层生成的输出特征图送往存储器820进行存储,随后再从存储器820加载至卷积运算模块830进行处理,这样可以减少卷积运算模块830与存储器820之间的数据传输,因此可以提升整个系统在执行卷积运算时的效率。
图9F-1~9F-2包含步骤S901F、S913F、S915F、S917F、S919F、S921F、S923F、S925F、S927F和S929F,其中步骤S901F、S913F、S915F、S917F、S919F、S921F、S923F、S925F和S929F与图6F-1~6F-2中的步骤S601F、S613F、S615F、S617F、S619F、S621F、S623F、S625F和S629F相同,此处就不再赘述了。与图6F-1~6F-2不同的是,在步骤S927F中,当卷积运算模块830判断是否已生成输出特征图的所有输出数据块时,如果判断结果为否,则执行步骤S913F。
藉由本申请所述的卷积运算方法和卷积运算装置,在输入特征图的输入数据块之间存在重叠区域的情况下,通过将输入数据块分割为不重叠的区域进行存储,可以在卷积运算装置中缓存更多的输入数据块,从而减少卷积运算模块的暂停次数,因而提高了卷积运算模块的运算效率。
虽然本申请已以实施例公开如上,然其并非用以限定本申请,任何本领域技术人员,在不脱离本申请的精神和范围内,当可作各种的更动与润饰,因此本申请的保护范围当视所附权利要求书界定范围为准。

Claims (16)

1.一种卷积运算方法,用于对输入特征图执行卷积运算,生成对应的输出特征图,其中,所述输入特征图被分割为多个输入数据块,所述卷积运算方法包含:
每个所述输入数据块被分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域,所述输入数据块被分割为主区域和至少一个次区域,所述主区域包含非重叠区域和至少一个重叠区域,所述非重叠区域不与任何相邻输入数据块重叠,所述至少一个重叠区域中的每一个重叠区域只与一个相邻输入数据块重叠;
将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间;
根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域,生成每个所述输入数据块;及
对生成的多个所述输入数据块执行卷积运算,生成所述输出特征图,
其中将每个所述输入数据块的多个不重叠的区域存入缓存中各自对应的不重叠的存储空间的步骤包括:
将所述输入数据块的主区域存入所述缓存的主缓存段;及
将所述输入数据块的至少一个次区域存入所述缓存的次缓存段;
其中,所述主缓存段和所述次缓存段不重叠。
2.如权利要求1所述的卷积运算方法,其中,所述次区域包含的区域皆至少与一个相邻的输入数据块重叠。
3.如权利要求1所述的卷积运算方法,其中,所述次区域至少包含一个重叠次区域,其中,与所述重叠次区域相邻的输入数据块的数量,大于与所述主区域的所述重叠区域相邻的输入数据块的数量。
4.如权利要求1所述的卷积运算方法,还包含:
根据所述输入数据块的所述主区域所对应的非重叠区域和至少一个重叠区域、以及所述输入数据块的所述至少一个次区域所对应的重叠区域进行拼接,生成所述输入数据块。
5.如权利要求4所述的卷积运算方法,其中,所述输入数据块的所述至少一个次区域包含第一次区域,其中,所述第一次区域包含第一重叠次区域、第二重叠次区域及第三重叠次区域,其中,与所述第二重叠次区域重叠的相邻输入数据块的数量小于与所述第一重叠次区域重叠的相邻输入数据块的数量,与所述第二重叠次区域重叠的相邻输入数据块的数量小于与所述第三重叠次区域重叠的相邻输入数据块的数量。
6.如权利要求5所述的卷积运算方法,其中,所述输入数据块的所述至少一个次区域包含第一次区域,其中,所述第一次区域包含第一重叠次区域、第二重叠次区域及第三重叠次区域,其中,所述第二重叠次区域只与一个相邻输入数据块重叠,所述第一重叠次区域与三个相邻输入数据块重叠,所述第三重叠次区域与三个相邻输入数据块重叠。
7.如权利要求4所述的卷积运算方法,还包含:
根据所述主区域读取所述输入数据块的所述至少一个次区域;及
根据所述输入数据块的所述主区域和所述至少一个次区域生成所述输入数据块。
8.如权利要求7所述的卷积运算方法,其中,所述根据所述输入数据块的所述主区域和所述至少一个次区域生成所述输入数据块的步骤包括:
读取所述至少一个次区域;及
将所述输入数据块的所述主区域、所述至少一个次区域进行拼接,生成所述输入数据块。
9.一种卷积运算装置,用于对输入特征图执行卷积运算,生成对应的输出特征图,其中,所述输入特征图被分割为多个输入数据块,所述卷积运算装置包含:
缓存;
运算器,用于对所述输入数据块进行卷积运算;
数据处理模块,耦接于所述运算器,所述数据处理模块将多个输入数据块中的每个所述输入数据块分割为多个不重叠的区域,其中,任两个相邻的所述输入数据块之间存在重叠区域,所述输入数据块被分割为主区域和至少一个次区域,所述主区域包含非重叠区域和至少一个重叠区域,所述非重叠区域不与任何相邻输入数据块重叠,所述至少一个重叠区域中的每一个重叠区域只与一个相邻输入数据块重叠;
二级处理模块,耦接所述缓存,所述二级处理模块将每个所述输入数据块的多个不重叠的区域存入所述缓存中各自对应的不重叠的存储空间;及
一级处理模块,耦接所述缓存和所述运算器,所述一级处理模块根据所述不重叠的存储空间中存储的与每个所述输入数据块对应的区域生成每个所述输入数据块,将生成的多个所述输入数据块发送给所述运算器进行卷积运算,生成所述输出特征图,
其中,所述二级处理模块将所述输入数据块的主区域存入所述缓存的主缓存段,及将所述输入数据块的至少一个次区域存入所述缓存的次缓存段;其中,所述主缓存段和所述次缓存段不重叠。
10.如权利要求9所述的卷积运算装置,其中,所述次区域包含的区域皆至少与一个相邻的输入数据块重叠。
11.如权利要求9所述的卷积运算装置,其中,所述次区域至少包含一个重叠次区域,其中,与所述重叠次区域相邻的输入数据块的数量,大于与所述主区域的所述重叠区域相邻的输入数据块的数量。
12.如权利要求9所述的卷积运算装置,其中,所述一级处理模块根据所述输入数据块的所述主区域所对应的非重叠区域和至少一个重叠区域、以及所述输入数据块的所述至少一个次区域所对应的重叠区域进行拼接,生成所述输入数据块。
13.如权利要求12所述的卷积运算装置,其中,所述输入数据块的所述至少一个次区域包含第一次区域,其中,所述第一次区域包含第一重叠次区域、第二重叠次区域及第三重叠次区域,其中,与所述第二重叠次区域重叠的相邻输入数据块的数量小于与所述第一重叠次区域重叠的相邻输入数据块的数量,与所述第二重叠次区域重叠的相邻输入数据块的数量小于与所述第三重叠次区域重叠的相邻输入数据块的数量。
14.如权利要求12所述的卷积运算装置,其中,所述输入数据块的所述至少一个次区域包含第一次区域,其中,所述第一次区域包含第一重叠次区域、第二重叠次区域及第三重叠次区域,其中,所述第二重叠次区域只与一个相邻输入数据块重叠,所述第一重叠次区域与三个相邻输入数据块重叠,所述第三重叠次区域与三个相邻输入数据块重叠。
15.如权利要求9所述的卷积运算装置,其中,所述一级处理模块根据所述主区域读取所述输入数据块的所述至少一个次区域,及根据所述输入数据块的所述主区域和所述至少一个次区域生成所述输入数据块。
16.如权利要求15所述的卷积运算装置,其中,所述一级处理模块根据所述输入数据块的所述主区域和所述至少一个次区域生成所述输入数据块的步骤包括:
读取所述至少一个次区域;及
将所述输入数据块的所述主区域、所述至少一个次区域进行拼接,生成所述输入数据块。
CN202010657082.2A 2020-07-09 2020-07-09 卷积运算方法及卷积运算装置 Active CN111898081B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010657082.2A CN111898081B (zh) 2020-07-09 2020-07-09 卷积运算方法及卷积运算装置
US17/151,311 US20220012587A1 (en) 2020-07-09 2021-01-18 Convolution operation method and convolution operation device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010657082.2A CN111898081B (zh) 2020-07-09 2020-07-09 卷积运算方法及卷积运算装置

Publications (2)

Publication Number Publication Date
CN111898081A CN111898081A (zh) 2020-11-06
CN111898081B true CN111898081B (zh) 2024-02-27

Family

ID=73192108

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010657082.2A Active CN111898081B (zh) 2020-07-09 2020-07-09 卷积运算方法及卷积运算装置

Country Status (1)

Country Link
CN (1) CN111898081B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113570612B (zh) * 2021-09-23 2021-12-17 苏州浪潮智能科技有限公司 一种图像处理方法、装置及设备
CN116700995B (zh) * 2023-08-03 2023-11-03 浪潮电子信息产业股份有限公司 一种异构内存池并发访问方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018071546A1 (en) * 2016-10-11 2018-04-19 The Research Foundation For The State University Of New York System, method, and accelerator to process convolutional neural network layers
CN110399591A (zh) * 2019-06-28 2019-11-01 苏州浪潮智能科技有限公司 基于卷积神经网络的数据处理方法和装置
CN110826685A (zh) * 2018-08-08 2020-02-21 华为技术有限公司 神经网络卷积计算的方法和装置
WO2020062284A1 (zh) * 2018-09-30 2020-04-02 深圳市大疆创新科技有限公司 基于卷积神经网络的图像处理方法和设备,以及无人机
KR102107077B1 (ko) * 2018-11-20 2020-05-06 주식회사 아나패스 컨볼루션 신경망 추론에서 컨볼루션 연산을 수행하기 위한 라인 단위 메모리 관리 방법 및 그 추론 장치
CN111199273A (zh) * 2019-12-31 2020-05-26 深圳云天励飞技术有限公司 卷积计算方法、装置、设备及存储介质
CN111340201A (zh) * 2018-12-19 2020-06-26 北京地平线机器人技术研发有限公司 卷积神经网络加速器及其执行卷积运算操作的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107145939B (zh) * 2017-06-21 2020-11-24 北京图森智途科技有限公司 一种低计算能力处理设备的计算机视觉处理方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018071546A1 (en) * 2016-10-11 2018-04-19 The Research Foundation For The State University Of New York System, method, and accelerator to process convolutional neural network layers
CN110826685A (zh) * 2018-08-08 2020-02-21 华为技术有限公司 神经网络卷积计算的方法和装置
WO2020062284A1 (zh) * 2018-09-30 2020-04-02 深圳市大疆创新科技有限公司 基于卷积神经网络的图像处理方法和设备,以及无人机
KR102107077B1 (ko) * 2018-11-20 2020-05-06 주식회사 아나패스 컨볼루션 신경망 추론에서 컨볼루션 연산을 수행하기 위한 라인 단위 메모리 관리 방법 및 그 추론 장치
CN111340201A (zh) * 2018-12-19 2020-06-26 北京地平线机器人技术研发有限公司 卷积神经网络加速器及其执行卷积运算操作的方法
CN110399591A (zh) * 2019-06-28 2019-11-01 苏州浪潮智能科技有限公司 基于卷积神经网络的数据处理方法和装置
CN111199273A (zh) * 2019-12-31 2020-05-26 深圳云天励飞技术有限公司 卷积计算方法、装置、设备及存储介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
于洋 ; 桑国明 ; .基于深度学习的多尺度分块压缩感知算法.小型微型计算机系统.2020,(第06期),全文. *
余萍 ; 赵继生 ; .基于矩阵2-范数池化的卷积神经网络图像识别算法.图学学报.2016,(第05期),全文. *
武磊 ; 魏子涵 ; 张伟功 ; 王晶 ; 高岚 ; .一种通用CNN加速器的缓冲区地址调度方法.微电子学与计算机.2020,(第07期),全文. *
舒红乔 ; 洪缨 ; 刘岩 ; .基于参数共享的卷积神经网络压缩.网络新媒体技术.2020,(第01期),全文. *

Also Published As

Publication number Publication date
CN111898081A (zh) 2020-11-06

Similar Documents

Publication Publication Date Title
KR102335955B1 (ko) 컨볼루션 신경망 시스템 및 그것의 동작 방법
US20190303757A1 (en) Weight skipping deep learning accelerator
US20200342632A1 (en) Efficient matrix format suitable for neural networks
CN111898081B (zh) 卷积运算方法及卷积运算装置
US11531479B2 (en) Lossy data compression
KR20180060149A (ko) 컨볼루션 처리 장치 및 방법
US10235738B2 (en) Method of and apparatus for displaying an output surface in data processing systems
US20120013758A1 (en) Memory Compression Technique with Low Latency per Pixel
CN109117950B (zh) 基于人工智能设备的分层稀疏张量压缩方法
CN111510718B (zh) 通过图像文件的块间差异提高压缩率的方法及系统
US20210042616A1 (en) Arithmetic processing device
US20220012587A1 (en) Convolution operation method and convolution operation device
CN109840585B (zh) 一种面向稀疏二维卷积的运算方法和系统
KR102107077B1 (ko) 컨볼루션 신경망 추론에서 컨볼루션 연산을 수행하기 위한 라인 단위 메모리 관리 방법 및 그 추론 장치
US20190318461A1 (en) Histogram Statistics Circuit and Multimedia Processing System
CN114222129A (zh) 图像压缩编码方法、装置、计算机设备和存储介质
CN112422972A (zh) 用于对图像数据的压缩块进行解压缩的方法和解压缩单元
CN111884658A (zh) 数据解压缩方法、数据压缩方法及卷积运算装置
CN113630375A (zh) 使用四叉树方法的参数的压缩设备及方法
US11669736B2 (en) Executing neural networks on electronic devices
US11539955B2 (en) Method and system for improving compression ratio through pixel conversion of image file
CN113452993A (zh) 图像数据解压缩
CN117014618A (zh) 一种基于图像压缩的分块方法、系统及电子设备
KR101672539B1 (ko) 그래픽 처리 유닛 및 그 캐싱 방법
US11663453B2 (en) Information processing apparatus and memory control method

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd.

Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203

Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd.

GR01 Patent grant
GR01 Patent grant