CN113870091A - 卷积计算方法、系统、设备及存储介质 - Google Patents
卷积计算方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN113870091A CN113870091A CN202110997622.6A CN202110997622A CN113870091A CN 113870091 A CN113870091 A CN 113870091A CN 202110997622 A CN202110997622 A CN 202110997622A CN 113870091 A CN113870091 A CN 113870091A
- Authority
- CN
- China
- Prior art keywords
- data
- processed
- convolution
- unit
- block
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本申请涉及一种卷积计算方法、系统、设备及存储介质。所述方法包括:根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;将每个待处理的子块以单元存储块为单位存入;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块;对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,依次得到输出图像的每一行中对应于待处理的子块的部分。上述卷积计算方法、系统、设备及存储介质实现了降低存储和数据传输带宽需求的卷积计算。
Description
技术领域
本申请涉及卷积计算技术领域,特别是涉及一种卷积计算方法、系统、设备及存储介质。
背景技术
卷积操作是现在深度学习中最重要的运算,卷积网络将深度学习推向了几乎所有机器学习任务的最前沿。如何高效的支持卷积操作对神经网络模型的运行起着至关重要的作用,包括模型的绝对运行时间、模型时延、吞吐、功耗、成本、片外带宽需求等方方面面。
由于卷积运算通常是将多通道的输入图像和对应的卷积核分别展开为二维矩阵,通过矩阵相乘来获得计算结果。但由于硬件的限制,为提高计算能效比,需降低对存储空间的需求以及存储搬运带宽的需求。
发明内容
基于此,有必要针对节省存储空间和降低带宽需求的问题,提供一种卷积计算方法、系统、设备及存储介质。
为了实现本申请的目的,本申请采用如下技术方案:
一种卷积计算方法,包括:
根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;其中,所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和;
将每个待处理的子块以单元存储块为单位存入;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块;
对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,以依次得到输出图像的每一行中对应于待处理的子块的部分。
一种卷积计算系统,包括:
分块模块,用于根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;其中,所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和;
子块存入模块,用于将每个待处理的子块以单元存储块为单位存入;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块;
计算模块,用于对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,以依次得到输出图像的每一行中对应于待处理的子块的部分。
一种卷积计算设备,包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的卷积计算程序,所述卷积计算程序被所述处理器执行时实现如上所述的卷积计算方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有卷积计算程序,所述卷积计算程序被处理器执行时实现如上所述的卷积计算方法的步骤。
上述卷积计算方法、系统、设备以及计算机可读存储介质,通过将输入图像进行分块,然后每个待处理的子块都按照移位截取固定长度并逐行存入单元存储块,并且以单次计算容量为单位逐步完成分块的计算,进而完成整个输入图像的卷积计算,而上述步骤中按固定长度移位截取后存储的方式和后续的计算方式由于可以对数据进行大量的复用,因此也节约了存储成本和传输带宽成本。
附图说明
图1为本申请实施例方案涉及的硬件运行环境的卷积计算设备结构示意图;
图2a为卷积计算原理图;
图2b为多通道卷积计算原理图;
图2c为将卷积核转换成二维矩阵的示意图;
图2d为将输入图像转换成二维矩阵的示意图;
图2e为通过二维矩阵乘法得到卷积运算结果的示意图;
图3a为一实施例的卷积计算方法流程图;
图3b为一实施例的卷积计算装置结构图;
图4a为7×17的图像像素分布图;
图4b为图4a的图像经过3×3的卷积运算得到的特征图像的像素分布图;
图4c为将图4a中的7×10的子块的2个通道的输入存入单元存储块的示意图;
图4d为从图4c的数据中读取的用于计算输出图像第一行的部分数据;
图4e为通过滑窗计算输出图像每个像素的过程示意图;
图4f为本申请实施例转换为矩阵乘法运算得到与图4e相同结果的示意图;
图4g为从图4c的数据中读取的用于计算输出图像第二行的部分数据;
图5为一实施例的卷积计算系统模块图。
具体实施方式
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的首选实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本申请的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。
图1是本申请实施例方案涉及的硬件运行环境的卷积计算设备100结构示意图。
本申请实施例的卷积计算设备,可以是例如服务器、个人计算机,智能手机、平板电脑、便携计算机等。只要其具备一定的通用数据处理能力即可。
如图1所示,所述卷积计算设备100包括:存储器104、处理器102及网络接口106。
处理器102在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器104中存储的程序代码或处理数据,例如执行卷积计算程序等。
存储器104至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器104在一些实施例中可以是卷积计算设备100的内部存储单元,例如该卷积计算设备100的硬盘。存储器104在另一些实施例中也可以是卷积计算设备100的外部存储设备,例如该卷积计算设备100上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
进一步地,存储器104还可以包括卷积计算设备100的内部存储单元。存储器104不仅可以用于存储安装于卷积计算设备100的应用软件及各类数据,例如人脸识别模型训练的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
网络接口106可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该卷积计算设备100与其他电子设备之间建立通信连接。
网络可以为互联网、云网络、无线保真(Wi-Fi)网络、个人网(PAN)、局域网(LAN)和/或城域网(MAN)。网络环境中的各种设备可以被配置为根据各种有线和无线通信协议连接到通信网络。这样的有线和无线通信协议的例子可以包括但不限于以下中的至少一个:传输控制协议和互联网协议(TCP/IP)、用户数据报协议(UDP)、超文本传输协议(HTTP)、文件传输协议(FTP)、ZigBee、EDGE、IEEE 802.11、光保真(Li-Fi)、802.16、IEEE 802.11s、IEEE 802.11g、多跳通信、无线接入点(AP)、设备对设备通信、蜂窝通信协议和/或蓝牙(Blue Tooth)通信协议或其组合。
图1仅示出了具有组件102-106的卷积计算设备100,本领域技术人员可以理解的是,图1示出的结构并不构成对卷积计算设备100的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在机器学习领域,尤其是卷积神经网络领域,常涉及卷积运算。参考图2a,卷积运算是使用卷积核202对输入图像204进行滑窗逐个计算,以提取输入图像中的特征得到输出图像206。图2a中,输入图像204的尺寸为8×8,卷积核202的尺寸为2×2。为了计算得到输出图像206的第一个值,将卷积核202与输入图像204左上的4个像素做卷积运算,即把每个像素的值与卷积核202对应位置的值相乘然后把得到的4个乘积相加,2×0+5×1+7×1+4×0=12,得到输出图像206左上角的第一个像素的值。为了得到输出图像206第一行第二列的像素的值,将卷积核202与输入图像204对应的位置向右移动一格,然后按照上述相同的方式计算。在卷积核202对应区域按照步长为1逐步向右移动并计算,就可以得到输出图像206上第一行的所有值。可以理解,当卷积核202对应区域移动至右上角4个像素时,计算得到输入图像204第一行最后一列的值。按照同样的方式,卷积核202对应区域下移一行,即可计算得到输出图像206上第二行的所有值。可知当输入图像204为8×8而卷积核202为2×2时,输出图像206为7×7。当设置不同的卷积核202尺寸或滑动步长时,输出图像206的尺寸也会发生变化。此外输出图像206还可以进行池化处理,进一步压缩。
对于输入图像204而言,通常是多通道的,例如原始图像一般为RGB三通道,中间的特征图像则可以根据情况设置不同的通道数量。上述的卷积过程针对的是一个通道的卷积运算,每个通道的卷积运算方法相同。对于每个通道,卷积核可以相同也可以不同。
如图2b所示,多通道(通道数量为C)的输入图像208与一组卷积核(即与通道数量相同的卷积核,一起组成一个过滤器210)运算的结果为一个通道的输出图像,多个过滤器(数量为Cout)则输出多通道的输出图像212,输出图像212中每个通道图像的尺寸为H’×W’。输出图像212的尺寸根据卷积核的大小、滑动步长、是否池化以及池化方式等均会不同。
在计算机中进行卷积运算时,是使用矩阵乘法。该计算方法需要将输入图像和卷积核转换为二维矩阵,以进行矩阵乘法运算。如图2c所示,具有数量为Cout的过滤器,每个过滤器对应于输入图像具有C个通道,每个通道尺寸为K×K。将其转换为尺寸为Cout×(C×K×K)的二维矩阵,即高为Cout,宽为C×K×K。对于每个过滤器,一个通道按行展开为一维,得到K×K的一行,C个通道拼接为C×K×K的一行。Cout个过滤器形成Cout行。
如图2d所示,输入图像具有通道数量为C,每个通道的尺寸为H×W。将其转换为尺寸为(H’×W’)×(C×K×K)的二维矩阵,即高为(H’×W’),宽为(C×K×K)。
之后,如图2e所示,就可以将图2d的二维矩阵与图2c中的二维矩阵的转置相乘,得到卷积计算的结果。即:
((H’×W’)×(C×K×K))×(Cout×(C×K×K))T=(H’×W’)×Cout
但是上述计算过程受限于内存大小或计算能力,有时候无法将两个矩阵的乘法一次性计算完成。为此,本申请提出一种卷积计算方法,其可以将计算分成多个小部分的计算,并且充分利用每次传输的数据,节省带宽和提高计算效率。
图3a为一实施例的卷积计算方法流程图。该方法包括:
步骤S302:根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块。
如图3b所示,在进行基本的矩阵乘法运算时,从数据存储区302中分别由权重读取单元304读取权重数据,然后送入权重缓存单元306,由特征数据读取单元308读取特征数据然后送入特征缓存单元310。矩阵计算单元312从权重缓存单元306和特征缓存单元310中读取对应的数据,然后进行矩阵乘法运算,将运算结果输出至输出缓存单元314,通过输出数据读写单元316存入数据存储区302。
单元存储块可以是内存中的一个基本的存储块,每个存储块具有8×8个16位大小的存储空间,每一行的8个16位为一个bank。每个16位大小的存储空间可以存放特征图像的一个像素数据。所述单元存储块也是权重缓存单元306和特征缓存单元310中的基本存储单元。
所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和。例如,当卷积核的尺寸为3×3时,bank的宽度为8个像素,则待处理的子块的最大宽度为10个像素。
每个通道按照相同的方式进行划分是指其中一个通道以某种方式划分后,其他通道要与其按照相同的方式进行划分。例如2通道的11×16的输入图像,每个通道都划分为2个3×8、2个8×8的子块。
在其中一个实施例中,所述输入图像为初始输入图像或中间的特征图像。初始输入图像一般为RGB三通道的图像,中间的特征图像则是经过卷积处理后的图像。也即,本申请的方法适用于任何一个卷积计算过程。
步骤S304:将每个待处理的子块以单元存储块为单位存入。其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块。
例如,当卷积核的尺寸为3×3时,且待处理的子块的宽度为10个像素,可以将待处理的子块的每一行以移位截取8个像素的方式分成3行。假设待处理的子块的第一行为a0~a9,则截取的3行分别为a0~a7,a1~a8,a2~a9。
再例如,当卷积核的尺寸为2×2时,且待处理的子块的宽度为9个像素,可以将待处理的子块的每一行以移位截取8个像素的方式分成2行。假设待处理的子块的第一行为a0~a8,则截取的2行分别为a0~a7,a1~a8。
再例如,当卷积核的尺寸为2×2时,且待处理的子块的宽度为8个像素,可以将待处理的子块的每一行以移位截取7个像素的方式分成2行。假设待处理的子块的第一行为a0~a7,则截取的2行分别为a0~a6,a1~a7。此时,截取的每一行不能完全填充单元存储块的一行。这种情况发生于所划分的子块是最后剩余的子块。
当子块的数据存满一个单元存储块bank时,继续在新的单元存储块bank中存储。
步骤S306:对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,依次得到输出图像的每一行中对应于待处理的子块的部分。
单次计算容量即一次性读取一个单元存储块中的8×8的数据,通过多次读取可以获得待卷积计算的数据。该数据与权重矩阵相乘后,可以得到输出图像的一行的一部分,多个子块位于相同行的部分与权重矩阵相乘后,获得输出图像的该行的其他部分,从而形成输出图像的一行。在其中一个实施例中,所述单次计算容量为处理器每个时钟周期能够计算的数据量;所述处理器为单处理器或多处理器。
上述实施例通过将输入图像进行分块,然后每个待处理的子块都按照移位截取固定长度并逐行存入单元存储块,并且以单次计算容量为单位逐步完成分块的计算,进而完成整个输入图像的卷积计算,而上述步骤S304中按固定长度移位截取后存储的方式和后续的计算方式由于可以对数据进行大量的复用,因此也节约了存储成本和传输带宽成本。
以下通过具体的实施例进行说明。
假设每个输入特征值通道的大小为7×17的输入图像,经过3×3的卷积核卷积得到5×15的输出图像,卷积的步长为1。输入图像如图4a所示,输出图像如图4b所示。
假设输入图像具有2个通道。输入图像的每个通道通过分块得到7×10的子块和7×7的子块。以处理7×10的子块(图4a中加粗的部分)为例,结合图3b,将子块中的数据通过特征数据读取单元308搬运到特征缓存单元310,并按照如下格式存储:如图4c所示,地址为addr0的bank中,第0/1/2行是a0,0~a0,9通过滑窗得到。特征数据读取单元308一次性读取a0,0~a0,9,然后通过移位输出到特征缓存单元310中,然后读取下一行的a1,0~a1,9,然后通过移位输出到特征缓存单元310中地址为addr0的bank的第3~5行。直至把所有的行均读取完成存储至特征缓存单元310中之后,再读取下一个通道的输入特征值。
为保证每次矩阵乘法(每个时钟周期的矩阵乘法)能够读取到bank中的8行数据,不存在bank冲突。在其中一个实施例中,所述步骤S304:将每个待处理的子块以单元存储块为单位存入,可以包括:
当输入图像的一个通道的数据存储完成后,若所述一个通道的数据所使用的最后一个单元存储块的剩余空间满足预设条件,则将下一个通道的数据从所述最后一个单元存储块的剩余空间开始存储;否则在新的单元存储块中创建满足所述预设条件的剩余空间,并将下一个通道的数据从所述新的单元存储块的剩余空间开始存储。
在本实施例中,所述预设条件为所述一个通道的数据所使用的最后一个单元存储块的剩余空间包括行:(C×K×K)%8,即通道数C与卷积核的高宽的乘积除以bank的宽度8的余数。在本实施例中,通道数为2、卷积核为3×3,则余数为2,所以第二个通道存储至特征缓存单元310的首行为bank1,地址为第一个通道接下来的一个地址。如果第一个通道存储在特征缓存单元310中最后一个地址的bank1及后续的bank均没有被占用,可以直接使用和上一个通道最后一个地址相同的地址。本实施例中,第一个通道最后一个地址存储的最后一个bank为bank4(addr2的bank4),所以第二个通道需要另起一个地址(第一个通道接下来的地址addr3)存储第一个bank的数据(addr3的bank1)。如图4c所示,第二个通道的数据存储在addr3的bank1至addr5的bank5之间。
特征缓存单元310存储完毕之后,矩阵计算单元312会花费3个时钟周期依次读取:1)addr0 bank0~7;2)addr1 bank0,addr3 bank1~bank7;3)addr4 bank0~1,然后累加即可得到输出特征值通道第一行的8个像素的最终结果。3个时钟周期一次读取的数据如图4d所示。由于上述矩阵乘法运算以两个8×8大小的矩阵相乘为基本单位,所以会同时得到8个通道、每个通道8个像素的结果。
请参考图4e,根据卷积核滑动窗口计算原理,输出图像的每个像素都是滑窗与对应像素区域的乘积的和。例如:
c0,0=b1*a0,0+b2*a0,1+b3*a0,2+b4*a1,0+b5*a1,1+b6*a1,2+b7*a2,0+b8*a2,1+b9*a2,2
c0,1=b1*a0,1+b2*a0,2+b3*a0,3+b4*a1,1+b5*a1,2+b6*a1,3+b7*a2,1+b8*a2,2+b9*a2,2
当有多个通道时,c0,0是多个通道的同一像素区域卷积核的卷积运算结果的加和。
而本实施例的方法中,则可以将上述运算转换成矩阵乘法运算。即图4f所示的过程。
同样的,为了计算输出图像的第二行的8个像素,矩阵计算单元312会依次读取:1)addr0 bank3~7,addr1 bank0~2;2)addr1 bank3,addr3 bank4~bank7,addr4 0~2,3)addr4 bank3~4。3个时钟周期一次读取的数据如图4g所示。
通过以上实施例可以看出:1)在滑窗的过程中,每次滑窗总共需要9个bank的数据,两次滑窗之间复用了6个bank的数据,极大的节省了特征缓存单元310存储的需求,特征缓存单元310节省6/9=66%;2)在从数据存储区302搬运至特征缓存单元310中时,一个数据搬运1次、复用9次,带宽节省至原始带宽的1/9。
在其中一个实施例中,所述步骤S302:根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块,可以为:以所述最大宽度分块,直至剩余子块的宽度小于所述最大宽度或刚好以所述最大宽度划分完。
以卷积核为3×3为例,bank宽度为8,则最大宽度为10。若输入图像的宽度为33,则分成宽度为10的3个子块以及宽度为3的1个子块,剩余子块的宽度为3不能继续划分。若输入图像的宽度为40,则分成宽度为10的4个子块,此时刚好分完。子块的高度不限。
在对上述7×17的输入图像进行分块时,以最大宽度10进行分块,因而得到7×10的子块和7×7的子块。该划分方式可以最大程度利用存储空间。
在其中一个实施例中,所述步骤S302:根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块,可以为:以大于卷积核的宽度并不超过所述最大宽度的宽度进行分块,使得任意两个待处理的子块的宽度相同,或者宽度相差不超过2个像素。
以卷积核为3×3为例,bank宽度为8,则最大宽度为10,最小宽度为4。若输入图像的宽度为33,可以分成宽度为8的3个子块和宽度为9的1个子块。若输入图像的宽度为35,可以分成宽度为7的5个子块。子块的高度不限。该划分方式可以使得处理的子块的大小接近,方便设计计算矩阵。
此外,基于相同的发明构思,提供一种卷积计算系统。如图5所示,所述卷积计算系统500包括:
分块模块502,用于根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;其中,所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和。
如图3b所示,在进行基本的矩阵乘法运算时,从数据存储区302中分别由权重读取单元304读取权重数据,然后送入权重缓存单元306,由特征数据读取单元308读取特征数据然后送入特征缓存单元310。矩阵计算单元312从权重缓存单元306和特征缓存单元310中读取对应的数据,然后进行矩阵乘法运算,将运算结果输出至输出缓存单元314,通过输出数据读写单元316存入数据存储区302。
单元存储块可以是内存中的一个基本的存储块,每个存储块具有8×8个16位大小的存储空间,每一行的8个16位为一个bank。每个16位大小的存储空间可以存放特征图像的一个像素数据。所述单元存储块也是权重缓存单元306和特征缓存单元310中的基本存储单元。
所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和。例如,当卷积核的尺寸为3×3时,bank的宽度为8个像素,则待处理的子块的最大宽度为10个像素。
每个通道按照相同的方式进行划分是指其中一个通道以某种方式划分后,其他通道要与其按照相同的方式进行划分。例如2通道的11×16的输入图像,每个通道都划分为2个3×8、2个8×8的子块。
在其中一个实施例中,所述输入图像为初始输入图像或中间的特征图像。初始输入图像一般为RGB三通道的图像,中间的特征图像则是经过卷积处理后的图像。也即,本申请的方法适用于任何一个卷积计算过程。
子块存入模块504,用于将每个待处理的子块以单元存储块为单位存入;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块。
例如,当卷积核的尺寸为3×3时,且待处理的子块的宽度为10个像素,可以将待处理的子块的每一行以移位截取8个像素的方式分成3行。假设待处理的子块的第一行为a0~a9,则截取的3行分别为a0~a7,a1~a8,a2~a9。
再例如,当卷积核的尺寸为2×2时,且待处理的子块的宽度为9个像素,可以将待处理的子块的每一行以移位截取8个像素的方式分成2行。假设待处理的子块的第一行为a0~a8,则截取的2行分别为a0~a7,a1~a8。
再例如,当卷积核的尺寸为2×2时,且待处理的子块的宽度为8个像素,可以将待处理的子块的每一行以移位截取7个像素的方式分成2行。假设待处理的子块的第一行为a0~a7,则截取的2行分别为a0~a6,a1~a7。此时,截取的每一行不能完全填充单元存储块的一行。这种情况发生于所划分的子块是最后剩余的子块。
当子块的数据存满一个单元存储块bank时,继续在新的单元存储块bank中存储。
计算模块506,用于对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,以依次得到输出图像的每一行中对应于待处理的子块的部分。
单次计算容量即一次性读取一个单元存储块中的8×8的数据,通过多次读取可以获得待卷积计算的数据。该数据与权重矩阵相乘后,可以得到输出图像的一行的一部分,多个子块位于相同行的部分与权重矩阵相乘后,获得输出图像的该行的其他部分,从而形成输出图像的一行。在其中一个实施例中,所述单次计算容量为处理器每个时钟周期能够计算的数据量;所述处理器为单处理器或多处理器。
上述实施例通过将输入图像进行分块,然后每个待处理的子块都按照移位截取固定长度并逐行存入单元存储块,并且以单次计算容量为单位逐步完成分块的计算,进而完成整个输入图像的卷积计算,而上述子块存入模块504中按固定长度移位截取后存储的方式和后续的计算方式由于可以对数据进行大量的复用,因此也节约了存储成本和传输带宽成本。
以下通过具体的实施例进行说明。
假设每个输入特征值通道的大小为7×17的输入图像,经过3×3的卷积核卷积得到5×15的输出图像,卷积的步长为1。输入图像如图4a所示,输出图像如图4b所示。
假设输入图像具有2个通道。输入图像的每个通道通过分块得到7×10的子块和7×7的子块。以处理7×10的子块(图4a中加粗的部分)为例,结合图3b,将子块中的数据通过特征数据读取单元308搬运到特征缓存单元310,并按照如下格式存储:如图4c所示,地址为addr0的bank中,第0/1/2行是a0,0~a0,9通过滑窗得到。特征数据读取单元308一次性读取a0,0~a0,9,然后通过移位输出到特征缓存单元310中,然后读取下一行的a1,0~a1,9,然后通过移位输出到特征缓存单元310中地址为addr0的bank的第3~5行。直至把所有的行均读取完成存储至特征缓存单元310中之后,再读取下一个通道的输入特征值。
为保证每次矩阵乘法(每个时钟周期的矩阵乘法)能够读取到bank中的8行数据,不存在bank冲突。在其中一个实施例中,所述步骤S304:将每个待处理的子块以单元存储块为单位存入,可以包括:
当输入图像的一个通道的数据存储完成后,若所述一个通道的数据所使用的最后一个单元存储块的剩余空间满足预设条件,则将下一个通道的数据从所述最后一个单元存储块的剩余空间开始存储;否则在新的单元存储块中创建满足所述预设条件的剩余空间,并将下一个通道的数据从所述新的单元存储块的剩余空间开始存储。
在本实施例中,所述预设条件为所述一个通道的数据所使用的最后一个单元存储块的剩余空间包括行:(C×K×K)%8,即通道数C与卷积核的高宽的乘积除以bank的宽度8的余数。在本实施例中,通道数为2、卷积核为3×3,则余数为2,所以第二个通道存储至特征缓存单元310的首行为bank1,地址为第一个通道接下来的一个地址。如果第一个通道存储在特征缓存单元310中最后一个地址的bank1及后续的bank均没有被占用,可以直接使用和上一个通道最后一个地址相同的地址。本实施例中,第一个通道最后一个地址存储的最后一个bank为bank4(addr2的bank4),所以第二个通道需要另起一个地址(第一个通道接下来的地址addr3)存储第一个bank的数据(addr3的bank1)。如图4c所示,第二个通道的数据存储在addr3的bank1至addr5的bank5之间。
特征缓存单元310存储完毕之后,矩阵计算单元312会花费3个时钟周期依次读取:1)addr0 bank0~7;2)addr1 bank0,addr3 bank1~bank7;3)addr4 bank0~1,然后累加即可得到输出特征值通道第一行的8个像素的最终结果。3个时钟周期一次读取的数据如图4d所示。由于上述矩阵乘法运算以两个8×8大小的矩阵相乘为基本单位,所以会同时得到8个通道、每个通道8个像素的结果。
请参考图4e,根据卷积核滑动窗口计算原理,输出图像的每个像素都是滑窗与对应像素区域的乘积的和。例如:
c0,0=b1*a0,0+b2*a0,1+b3*a0,2+b4*a1,0+b5*a1,1+b6*a1,2+b7*a2,0+b8*a2,1+b9*a2,2
c0,1=b1*a0,1+b2*a0,2+b3*a0,3+b4*a1,1+b5*a1,2+b6*a1,3+b7*a2,1+b8*a2,2+b9*a2,2
当有多个通道时,c0,0是多个通道的同一像素区域卷积核的卷积运算结果的加和。
而本实施例的方法中,则可以将上述运算转换成矩阵乘法运算。即图4f所示的过程。
同样的,为了计算输出图像的第二行的8个像素,矩阵计算单元312会依次读取:1)addr0 bank3~7,addr1 bank0~2;2)addr1 bank3,addr3 bank4~bank7,addr4 0~2,3)addr4 bank3~4。3个时钟周期一次读取的数据如图4g所示。
通过以上实施例可以看出:1)在滑窗的过程中,每次滑窗总共需要9个bank的数据,两次滑窗之间复用了6个bank的数据,极大的节省了特征缓存单元310存储的需求,特征缓存单元310节省6/9=66%;2)在从数据存储区302搬运至特征缓存单元310中时,一个数据搬运1次、复用9次,带宽节省至原始带宽的1/9。
所述分块模块502具体用于:以所述最大宽度分块,直至剩余子块的宽度小于所述最大宽度或刚好以所述最大宽度划分完。
或所述分块模块502具体用于:以大于卷积核的宽度并不超过所述最大宽度的宽度进行分块,使得任意两个待处理的子块的宽度相同,或者宽度相差不超过2个像素。
以卷积核为3×3为例,bank宽度为8,则最大宽度为10,最小宽度为4。若输入图像的宽度为33,可以分成宽度为8的3个子块和宽度为9的1个子块。若输入图像的宽度为35,可以分成宽度为7的5个子块。子块的高度不限。该划分方式可以使得处理的子块的大小接近,方便设计计算矩阵。
所述子块存入模块504具体用于:
当输入图像的一个通道的数据存储完成后,若所述一个通道的数据所使用的最后一个单元存储块的剩余空间满足预设条件,则将下一个通道的数据从所述最后一个单元存储块的剩余空间开始存储;
否则在新的单元存储块中创建满足所述预设条件的剩余空间,并将下一个通道的数据从所述新的单元存储块的剩余空间开始存储。
上述各模块为与方法一一对应的虚拟装置模块,其具体执行的过程在方法实施例中已有描述,在此不赘述。可以理解,上述方法实施例中描述的内容可以适当引入系统实施例中对其进行支持。
此外,本申请实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有上述卷积计算程序,所述卷积计算程序被处理器执行时实现如上所述的卷积计算方法的步骤。
本申请计算机可读存储介质具体实施方式与上述卷积计算方法各实施例基本相同,在此不再赘述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种卷积计算方法,包括:
根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;其中,所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和;
将每个待处理的子块以单元存储块为单位存入缓存单元中;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单元存储块;
对每个待处理的子块,每次从至少一个所述单元存储块中读取小于或等于单次计算容量的待卷积计算的数据并进行矩阵乘法运算,依次得到输出图像的每一行中对应于待处理的子块的部分。
2.根据权利要求1所述的卷积计算方法,其特征在于,所述输入图像为初始输入图像或中间的特征图像。
3.根据权利要求1所述的卷积计算方法,其特征在于,所述根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块,包括:
以所述最大宽度分块,直至剩余子块的宽度小于所述最大宽度或刚好以所述最大宽度划分完。
4.根据权利要求1所述的卷积计算方法,其特征在于,所述根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块,包括:
以大于卷积核的宽度并不超过所述最大宽度的宽度进行分块,使得任意两个待处理的子块的宽度相同,或者宽度相差不超过2个像素。
5.根据权利要求1所述的卷积计算方法,其特征在于,所述单次计算容量为处理器每个时钟周期能够计算的数据量;所述处理器为单处理器或多处理器。
6.根据权利要求1所述的卷积计算方法,其特征在于,所述将每个待处理的子块以单元存储块为单位存入,包括:
当输入图像的一个通道的数据存储完成后,若所述一个通道的数据所使用的最后一个单元存储块的剩余空间满足预设条件,则将下一个通道的数据从所述最后一个单元存储块的剩余空间开始存储;
否则在新的单元存储块中创建满足所述预设条件的剩余空间,并将下一个通道的数据从所述新的单元存储块的剩余空间开始存储。
7.根据权利要求1所述的卷积计算方法,其特征在于,所述单元存储块具有8×8个16位大小的存储空间,每个16位大小的存储空间用于存放输入图像的一个像素数据。
8.一种卷积计算系统,其特征在于,包括:
分块模块,用于根据输入图像的缓存单元中的单元存储块的大小和卷积核的大小将输入图像的每个通道按照相同的方式进行划分,得到待处理的子块;其中,所述待处理的子块的最大宽度小于单元存储块的宽度与卷积核的宽度的和;
子块存入模块,用于将每个待处理的子块以单元存储块为单位存入;其中,对于待处理的子块的每一行数据,以移位截取固定长度的方式分成与所述卷积核的高度数值相同的行数,逐行存入所述单位存储块;
计算模块,用于对每个待处理的子块,以单次计算容量为限从至少一个所述单元存储块中读取待卷积计算的数据并进行矩阵乘法运算,以依次得到输出图像的每一行中对应于待处理的子块的部分。
9.一种卷积计算设备,其特征在于,包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的卷积计算程序,所述卷积计算程序被所述处理器执行时实现如权利要求1至7中任一项所述的卷积计算方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有卷积计算程序,所述卷积计算程序被处理器执行时实现如权利要求1至7中任一项所述的卷积计算方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110997622.6A CN113870091A (zh) | 2021-08-27 | 2021-08-27 | 卷积计算方法、系统、设备及存储介质 |
PCT/CN2022/099246 WO2023024668A1 (zh) | 2021-08-27 | 2022-06-16 | 卷积计算方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110997622.6A CN113870091A (zh) | 2021-08-27 | 2021-08-27 | 卷积计算方法、系统、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113870091A true CN113870091A (zh) | 2021-12-31 |
Family
ID=78988650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110997622.6A Pending CN113870091A (zh) | 2021-08-27 | 2021-08-27 | 卷积计算方法、系统、设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113870091A (zh) |
WO (1) | WO2023024668A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023024668A1 (zh) * | 2021-08-27 | 2023-03-02 | 深圳云天励飞技术股份有限公司 | 卷积计算方法、系统、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108229671B (zh) * | 2018-01-16 | 2022-03-04 | 华南理工大学 | 一种降低加速器外部数据存储带宽需求的系统和方法 |
CN109447893A (zh) * | 2019-01-28 | 2019-03-08 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种卷积神经网络fpga加速中图像前处理方法及装置 |
US11341210B2 (en) * | 2019-02-15 | 2022-05-24 | Apple Inc. | Two-dimensional multi-layer convolution for deep learning |
CN111199273B (zh) * | 2019-12-31 | 2024-03-26 | 深圳云天励飞技术有限公司 | 卷积计算方法、装置、设备及存储介质 |
CN111897579B (zh) * | 2020-08-18 | 2024-01-30 | 腾讯科技(深圳)有限公司 | 图像数据处理方法、装置、计算机设备和存储介质 |
CN113870091A (zh) * | 2021-08-27 | 2021-12-31 | 深圳云天励飞技术股份有限公司 | 卷积计算方法、系统、设备及存储介质 |
-
2021
- 2021-08-27 CN CN202110997622.6A patent/CN113870091A/zh active Pending
-
2022
- 2022-06-16 WO PCT/CN2022/099246 patent/WO2023024668A1/zh active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023024668A1 (zh) * | 2021-08-27 | 2023-03-02 | 深圳云天励飞技术股份有限公司 | 卷积计算方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023024668A1 (zh) | 2023-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816559B2 (en) | Dilated convolution using systolic array | |
CN107145939B (zh) | 一种低计算能力处理设备的计算机视觉处理方法及装置 | |
CN110073359B (zh) | 用于卷积神经网络的有效数据布局 | |
US11003985B2 (en) | Convolutional neural network system and operation method thereof | |
US10394929B2 (en) | Adaptive execution engine for convolution computing systems | |
JP7007488B2 (ja) | ハードウェアベースのプーリングのシステムおよび方法 | |
CN113065639B (zh) | 算子融合方法、系统、设备及存储介质 | |
US9489342B2 (en) | Systems, methods, and computer program products for performing mathematical operations | |
CN109885407B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
CN112991142B (zh) | 图像数据的矩阵运算方法、装置、设备及存储介质 | |
CN109313663B (zh) | 人工智能计算辅助处理装置、方法、存储介质、及终端 | |
CN111523652B (zh) | 处理器及其数据处理方法、摄像装置 | |
US20200218777A1 (en) | Signal Processing Method and Apparatus | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
CN110147252A (zh) | 一种卷积神经网络的并行计算方法及装置 | |
KR20210014561A (ko) | 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체 | |
CN112416433A (zh) | 一种数据处理装置、数据处理方法及相关产品 | |
CN113870091A (zh) | 卷积计算方法、系统、设备及存储介质 | |
CN109324984B (zh) | 在卷积运算中使用循环寻址的方法和装置 | |
CN112149047A (zh) | 数据的处理方法及装置、存储介质和电子装置 | |
CN110796229B (zh) | 一种实现卷积运算的装置及方法 | |
CN108415881A (zh) | 卷积神经网络的运算装置及方法 | |
CN116109481A (zh) | 缩放方法、芯片、存储介质及电子设备 | |
CN112927125B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
JP5045652B2 (ja) | 相関処理装置及びその相関処理装置で読みとり可能な媒体 |
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 |