CN110245748B - 卷积神经网络实现方法、装置、硬件加速器、存储介质 - Google Patents
卷积神经网络实现方法、装置、硬件加速器、存储介质 Download PDFInfo
- Publication number
- CN110245748B CN110245748B CN201810195606.3A CN201810195606A CN110245748B CN 110245748 B CN110245748 B CN 110245748B CN 201810195606 A CN201810195606 A CN 201810195606A CN 110245748 B CN110245748 B CN 110245748B
- Authority
- CN
- China
- Prior art keywords
- data
- convolution calculation
- output data
- storage space
- packet
- 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
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/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)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Error Detection And Correction (AREA)
Abstract
本发明公开了一种卷积神经网络实现方法、装置、硬件加速器、存储介质。通过对输入数据存储方式进行调度,使得能够得到适于运算处理的输入数据。在一个实施例中,为第一次分组卷积计算的输出数据分配大于其总数据量的存储空间,将第一个分组的输出数据拷贝到后面的预留存储空间中,然后从新的地址开始执行第二次分组卷积计算,实现了两个分组数据之间的交互。在另一个实施例中,分配较大的存储空间,将前后两个卷积计算的输出数据连续存储到其中,简单地实现了两个输出数据的级联。在另一个实施例中,通过对连续存储的多个通道的数据的通道起始位置进行不同的偏移操作,实现了矩阵向左、右、上、下移位的效果。由此,可以加速卷积神经网络计算。
Description
技术领域
本发明涉及一种卷积神经网络实现,特别涉及一种卷积神经网络计算的加速方法。
背景技术
卷积神经网络(Convolutional Neural Networks,CNN),是一种深度前馈人工神经网络,已被应用于诸多领域,并且在一些领域已经超过了人类的能力,如图像识别。
近年来,基于CNN的网络结构设计得到了越来越多人的关注。在性能逐渐提高的同时,人们也意识到,如果想在计算能力以及功耗严格受限的移动设备或者嵌入式设备应用神经网络模型,就必须降低模型的规模。目前,减少模型规模的主要有两种方法:一种是基于已有的较大规模的模型进行压缩,将大模型转换成小模型。主流技术包括:裁剪(pruning),量化(quantization),蒸馏(distilling)等。另一种,直接设计精简的网络模型,包括MobileNet,MobileNetV2,ShuffleNet,ShiftNet等。
MobileNet,ShuffleNet只考虑了如何降低网络的计算量(Flops)和参数量(weights),ShiftNet只考虑了如何降低网络的参数量(weights),它们降低这些指标的同时,也付出了一定的代价。而在实际使用中,推理(Inference)速度并不是完全和计算量、参数量成反比的。
因此,仍然需要一种能够加速卷积神经网络计算的方案。
发明内容
本发明要解决的技术问题是提供一种卷积神经网络计算的实现方案,器能够进一步加速卷积神经网络计算。
根据本发明的一个方面,提供了一种卷积神经网络实现方法,包括:将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中,预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量,从而在存储空间尾部具有部分空闲的预留存储空间;将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中;以及从存储空间中新的地址开始读取数据,以执行第二次分组卷积计算,新的地址被设置为使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
由此,简单地实现了两个分组的数据之间的交互,显著降低了需要拷贝的数据量,减少了数据拷贝所需要的时间,提高了卷积神经网络的计算速度。
可选地,新的地址为第一个分组的输出数据的第一部分之后紧接的地址或第一部分中除了第一个地址以外的地址。
根据本发明的另一个方面,提供了一种卷积神经网络实现装置,包括:存储装置,用于将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中,预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量,从而在存储空间尾部具有部分空闲的预留存储空间;拷贝装置,用于将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中;以及读取装置从存储空间中新的地址开始读取数据,以执行第二次分组卷积计算,新的地址被设置为使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
根据本发明的另一个方面,提供了一种卷积神经网络实现方法,包括:将第一个卷积计算的输出数据存储到为其分配的存储空间的前部区域,所分配的存储空间的尺寸不小于第一个卷积计算和第二个卷积计算的输出数据的数据量总和;将第二个卷积计算的输出数据紧接第一个卷积计算的输出数据存储到存储空间中,从而形成第一个卷积计算的输出数据和第二个卷积计算的输出数据级联在一起的级联数据;以及从存储空间直接读取级联数据,以便执行后续操作。
由此,可以节省数据拷贝时间,提高卷积神经网络的计算速度。
根据本发明的另一个方面,提供了一种卷积神经网络实现装置,包括:第一存储装置,用于将第一个卷积计算的输出数据存储到为其分配的存储空间的前部区域,所分配的存储空间的尺寸不小于第一个卷积计算和第二个卷积计算的输出数据的数据量总和;第二存储装置,用于将第二个卷积计算的输出数据紧接第一个卷积计算的输出数据存储到存储空间中,从而形成第一个卷积计算的输出数据和第二个卷积计算的输出数据级联在一起的级联数据;以及级联数据读取装置,用于从存储空间直接读取级联数据,以便执行后续操作。
根据本发明的另一个方面,提供了一种卷积神经网络实现方法,包括:在存储器上连续存储多个通道的数据,每个通道包括M×N个数据,构成M列N行矩阵,该M×N矩阵逐行依次连续存储,M和N均为正整数;对于所存储的每一个通道的数据的起始位置执行偏移操作后,从偏移后的新起始位置处开始依次读取M×N个数据;逐个通道地,将执行偏移操作后读取的多组M×N个数据连续地存储在存储器上,以便执行后续操作。
由此,只需要对数据执行一次地址偏移的拷贝,即可实现与现有技术类似的操作,实现方案简单,且操作速度快。
可选地,偏移操作包括:向后偏移一个数据的长度;向前偏移一个数据的长度;向后偏移M个数据的长度;向前偏移M个数据的长度。
可选地,对不同偏移操作方式排定顺序,对于多个通道,按预先排定的顺序依次循环执行不同的偏移操作。
根据本发明的另一个方面,提供了一种卷积神经网络实现装置,包括:通道数据存储装置,用于在存储器上连续存储多个通道的数据,每个通道包括M×N个数据,构成M列N行矩阵,该M×N矩阵逐行依次连续存储,M和N均为正整数;数据偏移装置,用于对于所存储的每一个通道的数据的起始位置执行偏移操作后,从偏移后的新起始位置处开始依次读取M×N个数据;连续存储装置,用于逐个通道地,将执行偏移操作后读取的多组M×N个数据连续地存储在存储器上,以便执行后续操作。
根据本发明的另一个方面,提供了一种用于卷积神经网络的硬件加速器,包括:数据处理模块,用于对输入数据执行预定的计算处理,并产生输出数据;数据存储模块,用于存储数据处理模块所需的输入数据或数据处理模块的输出数据;控制模块,用于对数据处理模块和数据存储模块进行控制,以执行上述卷积神经网络实现方法。
可选地,数据处理模块是卷积计算模块,用于对输入数据进行卷积计算。
根据本发明的另一个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行上述卷积神经网络实现方法。
通过使用本发明的上述技术方案,不仅能够减少计算量和参数量,而且能够实现高效的卷积神经网络加速。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了根据本发明提出的卷积神经网络计算加速方法的流程图。
图2示出了可以实施根据本发明的卷积神经网络计算加速方法的卷积神经网络硬件加速器的示意性框图。
图3示出了使用本发明提出的内存混淆方案的卷积神经网络实现方法的流程图。
图4A和图4B示意性地示出了在内存混淆方案实现过程中的数据存储状态。
图5示意性地示出了可用于实现使用上述内存混淆方案的卷积神经网络实现装置。
图6示出了使用本发明提出的直接级联方案的卷积神经网络实现方法的流程图。
图7A和图7B示意性地示出了在直接级联方案实现过程中的数据存储状态。
图8示意性地示出了可用于实现使用上述直接级联方案的卷积神经网络实现装置。
图9是ShiftNet方案中移位操作的示意图。
图10示出了使用本发明提出的地址偏移方案的卷积神经网络实现方法的流程图。
图11A至图11E示意性地示出了根据本发明的地址偏移方案。
图12示意性地示出了可用于实现使用上述地址偏移方案的卷积神经网络实现装置。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
根据本发明,提出了一种利用内存操作来加速卷积神经网络计算的方案。
图1示出了根据本发明提出的卷积神经网络计算加速方法的流程图。
如图1所示,在步骤S110,通过对运算处理的输入数据在存储器上的存储方式进行调度,使得能够在存储器上得到连续存储的适于该运算处理的输入数据。
然后,在步骤S120,在执行后续的运算处理时,直接读取经过上述调度后存储的输入数据。
由此,可以方便且快速地实现卷积神经网络计算。
这里的运算处理可以是卷积计算,也可以是其它计算处理。这里的输入数据可以是先前的卷积计算的输出结果数据,也可以是其它数据。
本发明的卷积神经网络计算加速方法可以应用于使用软件方法来实现卷积神经网络计算的场景,也可以应用于采用FPGA或ASIC等硬件加速器来实现卷积神经网络计算的场景。
图2示出了可以实施根据本发明的卷积神经网络计算加速方法的卷积神经网络硬件加速器的示意性框图。
该硬件加速器可以包括数据处理模块210、数据存储模块220和控制模块230。
数据处理模块210用于对输入数据执行预定的计算处理,并产生输出数据。数据处理模块210例如可以是卷积计算模块,用于对输入数据进行卷积计算。
数据存储模块(也可以称为“存储器”)220用于存储(或者缓存)数据处理模块210所需的输入数据或数据处理模块210的输出数据。
控制模块230用于对数据处理模块210和数据存储模块220进行控制。
一方面,控制模块230对输入数据进行存储调度,以在数据存储模块220中得到适用于数据处理模块210所要执行的数据处理且连续存储的输入数据。
另一方面,控制模块230还控制数据处理模块210从数据存储模块220的指定地址处读取输入数据,并将数据处理模块210的输出数据写入到数据存储模块的指定位置。
作为实施例,下文中将描述三种存储调度方案,内存混淆(Memory Shuffle),直接级联(Direct Concatetation),地址偏移(Address Shift),这些方案可以单独应用,也可以结合应用。通过使用这些调度方案,不仅能够减少计算量和参数量,而且能够实现高效的卷积神经网络加速。
【内存混淆】
在卷积神经网络设计中,会用到分组卷积(Group Convolution)。
在分组卷积过程中,将数据分为多个组,例如分为三个组,A、B、C。分别对这三个组进行卷积计算。
采用分组卷积可以显著降低计算量和参数存储量。例如,如果分组数量为3,那么可以减少3倍的计算量和参数量。
但是分组卷积会阻碍组间的信息交互,即A、B、C三组的数据之间不能交互。
2017年提交到arxiv.org网站(arXiv:1707.01083v2)的论文“ShuffleNet:AnExtremely Efficient Convolutional Neural Network for Mobile Devices”提出了一种称为“ShuffleNet”的数据混淆(Shuffle)方法,用来解决这个问题。
简要说来,例如可以将A组数据分为三部分A1、A2、A3,将B组数据分为三部分B1、B2、B3,将C组数据也分为三部分C1、C2、C3。
在第一次卷积运算中,分别对这三组数据A、B、C进行卷积运算,输出三组输出数据:{A1'、A2'、A3'};{B1'、B2'、B3'};{C1'、C2'、C3'}。
然后,将这三组输出数据重新分组(也可以称为“混淆”),形成新的三组数据:{A1'、B1'、C1'};{A2'、B2'、C2'};{A3'、B3'、C3'}。
在第二次卷积运算中,分别对新的三组数据进行卷积运算。这样,就在一定程度上实现了原来的A、B、C三组数据之间的信息交互。
但是,在实际使用过程中,这样操作会非常的耗时。这是因为需要大量的内存拷贝操作。
具体说来,卷积运算的输入数据需要是连续存储的,输出也是连续存储的。这样,就需要在第二次卷积运算之前,将第一次卷积运算后连续存储的输出数据{A1'、B1'、C1'};{A2'、B2'、C2'};{A3'、B3'、C3'},几乎全部拷贝复制一遍,从而经过大量数据拷贝操作,得到连续存储的输入数据{A1'、B1'、C1'};{A2'、B2'、C2'};{A3'、B3'、C3'}。
下面参考图3和4A、4B详细描述根据本发明的用于卷积神经网络的内存混淆方案。
图3示出了使用本发明提出的内存混淆方案的卷积神经网络实现方法的流程图。
首先,为第一次分组卷积计算的输出数据预先分配存储空间。优选地,预先分配的存储空间是连续的。
这样,在分组卷积计算过程中,在步骤S310,可以将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中。
这里,预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量。这样,在预先分配的存储空间中连续存储第一次分组卷积计算的全部输出数据之后,还可以在该存储空间尾部具有部分空闲的预留存储空间。
预留存储空间的尺寸可以根据需要来设定,例如可以不小于每个分组对应的卷积计算输出数据的一半。
这里,仍然以三个分组为例进行描述。
图4A和图4B示意性地示出了在内存混淆方案实现过程中的数据存储状态。
图4A示意性地示出了第一次分组卷积计算之后,三个分组的输出结果在所分配的存储空间中的存储情况。
如图4A所示,为了下文描述方便,将第一分组卷积计算Conv1的输出结果划分为A1、A2两部分。A1部分和A2部分的数据量比例可以根据需要来设定。在一个优选的实施例中,这两部分的数据量可以设为相同。
同样地,以相同的比例将第二分组卷积计算Conv2的输出结果划分为B1、B2两部分;将第三分组卷积计算Conv2的输出结果划分为C1、C2两部分。
A1、B1、C1的数据量相同,例如可以均包含N1个数据。A2、B2、C2的数据量相同,例如可以均包含N2个数据。
这样,如图4A所示,第一次分组卷积计算的输出结果连续地存储在所分配的存储空间中,A1、A2、B1、B2、C1、C2。
应当理解,这里的“划分”只是为了描述方便而对数据的不同部分予以不同标记进行表示。
如图4A所示,在数据C2部分之后,还存在部分空闲的预留存储空间。
然后,在步骤S320,将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中。
如图4B所示,数据A1部分被拷贝到数据C2部分之后的预留存储空间中。换言之,将存储空间中第一次分组卷积全部计算结果的前N1个数据拷贝到预留存储空间中。
如图4B所示,上述存储空间中连续地存储了A1、A2、B1、B2、C1、C2、A1。
这样,在步骤S330,如图4B所示,可以从上述存储空间中新的地址开始读取数据,以执行第二次分组卷积计算。上述新的地址被设置为使得每个分组的卷积计算(Conv1、Conv2、Conv3)的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
例如,可以从第N1+1个数据开始读取数据。也即在第一次分组卷积计算中,第一个分组的输入是A2、B1,第二个分组的输入是B2、C1,第三个分组的输入是C2、A1。第二次分组卷积计算的输入数据也是连续存储的,如图4B中的虚线框所示。
应当理解,也可以从第2至N个数据中的任一个开始读取数据以执行第二次分组卷积计算。这样也可以使得每个分组卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果,只是有一部分拷贝到存储空间尾部的数据没有在卷积计算中用到。
这样,本发明只需要通过简单地将第一个分组卷积的部分计算结果直接拷贝到最后一个分组卷积的计算结果后面,然后从新的地址开始执行下一次的分组卷积计算,就能够达到各个分组之间的信息交互,而且显著降低了需要拷贝的数据量,可以实现很好的加速。
上述现有技术中的ShuffleNet方案几乎需要拷贝所有数据,才能将第一次分组卷积计算的输出结果整理为第二次分组卷积计算所需要的连续存储的输入数据。
而在本发明的内存混淆方案中,以三个分组为例,如果按照拷贝一个分组的卷积计算结果的一半来计算,那么仅需要拷贝全部数据的六分之一。
可见,与上述ShuffleNet方案相比,本发明的内存混淆方案在简单地实现两个分组的数据之间的交互的同时,显著降低了需要拷贝的数据量,减少了数据拷贝所需要的时间,提高了卷积神经网络的计算速度。而本发明的内存混淆方案和上述ShuffleNet方案对卷积神经网络性能的影响是基本相当的。
图5示意性地示出了可用于实现使用上述内存混淆方案的卷积神经网络实现装置。一些细节与上文参考图3和图4A、4B描述的内容相同,在此不再赘述。
该卷积神经网络实现装置可以包括存储装置510、拷贝装置520、读取装置530。
存储装置510将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中。
如上文所述,预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量。这样,在预先分配的存储空间中连续存储第一次分组卷积计算的全部输出数据之后,还可以在该存储空间尾部具有部分空闲的预留存储空间。
拷贝装置520将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中。
读取装置530从上述存储空间中新的地址开始读取数据,以执行第二次分组卷积计算。上述新的地址被设置为使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
在采用FPGA或ASIC等硬件加速器来实现卷积神经网络计算的场景下,上述内存混淆方案也可以采用图2所示的硬件加速器来实现。
具体说来,控制模块230在数据存储模块(存储器)220上预先分配上述存储空间。控制模块230执行控制将数据处理模块210中的卷积计算模块(图中未示出)执行第一次分组卷积计算的输出数据连续存储到所分配的存储空间中。控制模块230执行控制将存储空间中第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中。控制模块230执行控制从上述存储空间中新的地址开始读取数据,输入到数据处理模块210的卷积计算模块(图中未示出),以执行第二次分组卷积计算,使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
【直接级联】
在2015年提交到arxiv.org网站(arXiv:1512.03385v1)且收录于CVPR2016会议论文集的论文“Deep Residual Learning for Image Recognition”(ResNet方案)中,提到了一种加深网络的方法,就是短路连接(shortcut connection),有两种:一种是求和(Sum),即将两个卷积的输出相加然后用于后续操作;一种是级联(Concatenation),即将两个卷积的输出级联在一起用于后续操作。
本发明的发明人通过实践发现,这两种短路连接方案的效果是基本等价的。但是求和方案是比较耗时的,而级联方案则需要将两个卷积的输出重新拷贝一次以得到连续存储的数据以用于后续操作,存在内存拷贝的时间。
本发明提出了一种新的卷积计算输出数据级联的方法,可以让这个操作做到不耗时。
图6示出了使用本发明提出的直接级联方案的卷积神经网络实现方法的流程图。
图7A和图7B示意性地示出了在直接级联方案实现过程中的数据存储状态。
首先,在为第一个卷积计算的输出数据分配存储空间。优选地,所分配的存储空间是连续的。在此,所分配的存储空间的尺寸不小于第一个卷积计算和下面将要进行的第二个卷积计算的输出数据的数据量总和。
这样,在卷积神经网络的计算过程中,在步骤S610,如图7A所示,可以将第一个卷积计算的输出数据(第一输出数据)存储到为其分配的存储空间的前部区域710。这样,在存储空间中还存在部分空闲的预留存储空间720。
在步骤S620,如图7B所示,可以将第二个卷积计算的输出数据(第二输出数据)存储到该预留存储空间720中,即将其起始存储位置设置为紧接第一个卷积计算的输出数据的存储区域710之后。
这样,在第二个卷积计算完成后,其输出数据被直接与第一个卷积计算的输出数据连续地存储在所分配的存储空间中。不需要额外的数据拷贝操作,即可实现数据级联。
于是,在步骤S630,可以从上述存储空间直接读取级联数据(即级联在一起的第一输出数据和第二输出数据),以便对其进行接下来的操作。例如,接下来可以对该级联数据进行ReLU操作。
通过使用上述直接级联方案,可以节省数据拷贝时间,提高卷积神经网络的计算速度。
图8示意性地示出了可用于实现使用上述直接级联方案的卷积神经网络实现装置。一些细节与上文参考图6和图7A、7B描述的内容相同,在此不再赘述。
该卷积神经网络实现装置可以包括第一存储装置810、第二存储装置820和级联数据读取装置830。
第一存储装置810将第一个卷积计算的输出数据(第一输出数据)存储到为其分配的存储空间的前部区域710。
如上所述,预先为第一个卷积计算的输出数据分配的存储空间的尺寸不小于第一个卷积计算和下面将要进行的第二个卷积计算的输出数据的数据量总和。这样,在存储空间中还存在部分空闲的预留存储空间720。
第二存储装置820将第二个卷积计算的输出数据(第二输出数据)存储到该预留存储空间720中,即将其起始存储位置设置为紧接第一个卷积计算的输出数据的存储区域710之后。
这样,在第二个卷积计算完成后,其输出数据被直接与第一个卷积计算的输出数据连续地存储在所分配的存储空间中。不需要额外的数据拷贝操作,即可实现数据级联。
级联数据读取装置830从上述存储空间直接读取级联数据(即级联在一起的第一输出数据和第二输出数据),以便对其进行接下来的操作。
在采用FPGA或ASIC等硬件加速器来实现卷积神经网络计算的场景下,上述直接级联方案也可以采用图2所示的硬件加速器来实现。
具体说来,控制模块230在数据存储模块(存储器)220上预先分配上述存储空间。控制模块230执行控制将数据处理模块210中的卷积计算模块(图中未示出)先后输出的上述第一输出数据和第二输出数据先后连续存储在存储空间的前部区域710和预留区域720,实现数据级联。然后,控制模块230执行控制,将存储空间中的级联数据输入到数据处理模块210以进行后续处理,例如ReLU操作。
【地址偏移】
在2017年提交到arxiv.org网站(arXiv:1704.04861v1)的论文“MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications”中,用到了深度级别的卷积(Depthwise Convolution)。但是这个操作是比较耗时的。
在2017年提交到arxiv.org网站(arXiv:1711.08141v2)的论文“Shift:A ZeroFLOP,Zero Parameter Alternative to Spatial Convolutions”(ShiftNet方案)对MobileNets方案进行了改进。其中,利用特征图(feature map)的移位操作(Shift)来实现基本等价的效果。
图9是ShiftNet方案中移位操作的示意图。
如图9所示,在所述移位操作中,沿不同的方向(右,左,下,上……)对其输入张量(M个通道,每个通道有DF×DF个元素)的每个通道(channel)进行移位,以便进行后续的运算处理。进行移位操作后,有一个方向上的元素数量将少于DF。此时,可以通过在相应位置补充一行或一列“0”来重新构建DF×DF的阵列。
ShiftNet中的移位操作也是比较耗时的。
本发明提出了一种内存上的地址偏移技术可以达到同样的效果,并且速度比上述两种方案都快。
图10示出了使用本发明提出的地址偏移方案的卷积神经网络实现方法的流程图。
图11A至图11E示意性地示出了根据本发明的地址偏移方案。
在步骤S1010,如图11A所示,在存储器上连续存储多个通道的数据。每个通道包括M×N个数据,可以构成一个M×N(M列N行)矩阵。该M×N矩阵逐行依次连续存储。M和N均为正整数。
这里,上述多个通道的数据可以是上一层卷积计算的输出数据。在图像处理的情况下,一个通道的数据例如可以对应于一帧图像。
然后,在步骤S1020,对于所存储的每一个通道的数据的起始位置执行偏移操作后,从偏移后的新起始位置处开始依次读取M×N个数据。
偏移操作可以包括下述操作:
向后偏移一个数据的长度,如图11B所示;
向前偏移一个数据的长度,如图11C所示;
向后偏移一行(M个)数据的长度,如图11D所示;
向前偏移一行(M个)数据的长度,如图11E所示。
为便于理解,图11B至图11E中分多行进行表示。应当理解,图中所示每一行的数据在存储器中是连续存储的,即下一行的开头数据的存储地址紧接在上一行的结尾数据的存储地址之后。
图中标注“A”的框表示原通道数据的起始位置,即原来一组M×N个数据中的第一个数据。图中标注“B”的框表示原通道数据的结束位置,即原来一组M×N个数据中的最后一个数据。
为便于理解,在图11B第2至N行每行开头用虚线框示出了偏移操作前该行开头的数据,该数据即为图中上一行结尾的数据。
同样地,在图11C第1至N-1行每行结尾用虚线框示出了偏移操作前该行结尾的数据,该数据即为图中下一行开头的数据。
所读取的M×N个数据仍然可以构成一个M×N矩阵。图11B至图11E中粗线框中的数据(图11B和图11C中为(M-1)×N个数据,图11D和图11E中为M×(N-1)个数据)在矩阵中的相对位置与原来矩阵中的相对位置相同,只是与原来的M×N矩阵相比,向右(图11B)或向左(图11C)移动了一列,或者向下(图11D)或向上(图11E)移动了一行,并在矩阵移动方向上补充了一列或一行数据。
为便于理解,这里以3×3矩阵为例,描述向后偏移一个数据的长度的情况。假设一个通道的数据为:
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
下一个通道开头一个数据为0。
数据存储结构则为“……,1,2,3,4,5,6,7,8,9,0,……”。
从这个通道的起始位置“1”向后偏移一个数据的长度,新的起始位置为2。从2开始读取3×3个数据,得到“2,3,4,5,6,7,8,9,0”。表示为3×3矩阵形式则为:
2 | 3 | 4 |
5 | 6 | 7 |
8 | 9 | 0 |
与原来的通道相比,向右移动了一列,并且在右侧补入了一列数据“4,7,0”。
其它几种偏移方式与此类似,在此不再赘述。
对于相邻的四个通道,可以采取互不相同的偏移操作。
优选地,对上述四种偏移操作方式排定顺序。对于多个通道,按预先排定的顺序依次循环执行不同的偏移操作。
鉴于第一个通道前面没有数据,因此对于第一个通道的偏移操作为向后偏移一个数据的长度(向右移动一列)或一行(M个)数据的长度(向下移动一行)。类似地,最后一个通道后面没有数据,因此对于最后一个通道的偏移操作为向前偏移一个数据的长度(向左移动一列)或一行(M个)数据的长度(向上移动一行)。
然后,在步骤S1030,逐个通道地,将步骤S1020中所偏移读取的一组组M×N个数据连续地存储在存储器上,以供后面的操作中使用。
后面的操作例如可以是下一层的卷积计算。例如,针对连续四个通道读取拷贝后得到的四组M×N数据可以拼接在一起用于下一层的处理。
由此,只需要对数据执行一次地址偏移的拷贝,即可实现与上述ShiftNet方案类似的操作。
图12示意性地示出了可用于实现使用上述地址偏移方案的卷积神经网络实现装置。一些细节与上文参考图10和图11A至图11E描述的内容相同,在此不再赘述。
该卷积神经网络实现装置可以包括通道数据存储装置1210、数据偏移装置1220、连续存储装置1230。
通道数据存储装置1210将多个通道的数据连续存储在存储器上。每个通道包括M×N个数据,可以构成一个M×N矩阵。该M×N矩阵逐行依次连续存储。
对于所存储的每一个通道的数据的起始位置,数据偏移装置1220执行偏移操作,从新的起始位置处开始依次读取M×N个数据。
偏移操作可以如上文中参考图11B至图11E所描述的方式。
对于相邻的四个通道,可以采取互不相同的偏移操作。
优选地,对上述四种偏移操作方式排定顺序。对于多个通道,按预先排定的顺序依次循环执行不同的偏移操作。
鉴于第一个通道前面没有数据,因此对于第一个通道的偏移操作为向后偏移一个数据的长度(向右移动一列)或一行(M个)数据的长度(向下移动一行)。类似地,最后一个通道后面没有数据,因此对于最后一个通道的偏移操作为向前偏移一个数据的长度(向左移动一列)或一行(M个)数据的长度(向上移动一行)。
连续存储装置1230逐个通道地将数据偏移装置1220所偏移读取的一组组M×N个数据连续地存储在存储器上,以供后面的操作中使用。
在采用FPGA或ASIC等硬件加速器来实现卷积神经网络计算的场景下,上述地址偏移方案也可以采用图2所示的硬件加速器来实现,即由控制模块230控制数据存储模块220按上述方式拷贝存储数据,并将偏移读取后存储在数据存储模块220(也即存储器)上的数据输入到数据处理模块210执行后续处理。
上文中已经参考附图详细描述了根据本发明的卷积神经网络实现方案。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (12)
1.一种卷积神经网络实现方法,包括:
将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中,所述预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量,从而在所述存储空间尾部具有部分空闲的预留存储空间;
将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中;以及
从所述存储空间中新的地址开始读取数据,以执行第二次分组卷积计算,所述新的地址被设置为使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
2.根据权利要求1所述的方法,其中,
所述新的地址为所述第一个分组的输出数据的第一部分之后紧接的地址或所述第一部分中除了第一个地址以外的地址。
3.根据权利要求1所述的方法,还包括:
将第一个卷积计算的输出数据存储到为其分配的存储空间的前部区域,所分配的存储空间的尺寸不小于第一个卷积计算和第二个卷积计算的输出数据的数据量总和;
将第二个卷积计算的输出数据紧接所述第一个卷积计算的输出数据存储到所述存储空间中,从而形成第一个卷积计算的输出数据和第二个卷积计算的输出数据级联在一起的级联数据;以及
从所述存储空间直接读取级联数据,以便执行后续操作。
4.根据权利要求1至3中任何一项所述的方法,还包括:
在存储器上连续存储多个通道的数据,每个通道包括M×N个数据,构成M列N行矩阵,该M×N矩阵逐行依次连续存储,M和N均为正整数;
对于所存储的每一个通道的数据的起始位置执行偏移操作后,从偏移后的新起始位置处开始依次读取M×N个数据;以及
逐个通道地,将执行偏移操作后读取的多组M×N个数据连续地存储在存储器上,以便执行后续操作。
5.根据权利要求4所述的方法,其中,所述偏移操作包括:
向后偏移一个数据的长度;
向前偏移一个数据的长度;
向后偏移M个数据的长度;
向前偏移M个数据的长度。
6.根据权利要求5所述的方法,其中,
对不同偏移操作方式排定顺序,
对于多个通道,按预先排定的顺序依次循环执行不同的偏移操作。
7.一种卷积神经网络实现装置,包括:
存储装置,用于将第一次分组卷积计算的输出数据连续存储到为其预先分配的存储空间中,所述预先分配的存储空间的尺寸大于第一次分组卷积计算的输出数据的总数据量,从而在所述存储空间尾部具有部分空闲的预留存储空间;
拷贝装置,用于将第一个分组的输出数据前部的第一部分拷贝到最后一个分组的输出数据之后的预留存储空间中;以及
读取装置从所述存储空间中新的地址开始读取数据,以执行第二次分组卷积计算,所述新的地址被设置为使得每个分组的卷积计算的输入都包含第一次分组卷积计算中相邻两个分组的部分输出结果。
8.根据权利要求7所述的卷积神经网络实现装置,包括:
第一存储装置,用于将第一个卷积计算的输出数据存储到为其分配的存储空间的前部区域,所分配的存储空间的尺寸不小于第一个卷积计算和第二个卷积计算的输出数据的数据量总和;
第二存储装置,用于将第二个卷积计算的输出数据紧接所述第一个卷积计算的输出数据存储到所述存储空间中,从而形成第一个卷积计算的输出数据和第二个卷积计算的输出数据级联在一起的级联数据;以及
级联数据读取装置,用于从所述存储空间直接读取级联数据,以便执行后续操作。
9.根据权利要求7或8所述的卷积神经网络实现装置,包括:
通道数据存储装置,用于在存储器上连续存储多个通道的数据,每个通道包括M×N个数据,构成M列N行矩阵,该M×N矩阵逐行依次连续存储,M和N均为正整数;
数据偏移装置,用于对于所存储的每一个通道的数据的起始位置执行偏移操作后,从偏移后的新起始位置处开始依次读取M×N个数据;以及
连续存储装置,用于逐个通道地,将执行偏移操作后读取的多组M×N个数据连续地存储在存储器上,以便执行后续操作。
10.一种用于卷积神经网络的硬件加速器,包括:
数据处理模块,用于对输入数据执行预定的计算处理,并产生输出数据;
数据存储模块,用于存储数据处理模块所需的输入数据或数据处理模块的输出数据;以及
控制模块,用于对所述数据处理模块和所述数据存储模块进行控制,以执行按照权利要求1-6中任何一项所述的方法。
11.根据权利要求10所述的硬件加速器,其中,
所述数据处理模块是卷积计算模块,用于对输入数据进行卷积计算。
12.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810195606.3A CN110245748B (zh) | 2018-03-09 | 2018-03-09 | 卷积神经网络实现方法、装置、硬件加速器、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810195606.3A CN110245748B (zh) | 2018-03-09 | 2018-03-09 | 卷积神经网络实现方法、装置、硬件加速器、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110245748A CN110245748A (zh) | 2019-09-17 |
CN110245748B true CN110245748B (zh) | 2021-07-13 |
Family
ID=67882706
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810195606.3A Active CN110245748B (zh) | 2018-03-09 | 2018-03-09 | 卷积神经网络实现方法、装置、硬件加速器、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110245748B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110910434B (zh) * | 2019-11-05 | 2023-05-12 | 东南大学 | 基于fpga高能效实现深度学习视差估计算法的方法 |
CN111666150B (zh) * | 2020-05-09 | 2022-01-11 | 深圳云天励飞技术股份有限公司 | 存储空间的分配方法、装置、终端及计算机可读存储介质 |
CN111626414B (zh) * | 2020-07-30 | 2020-10-27 | 电子科技大学 | 一种动态多精度神经网络加速单元 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102007477A (zh) * | 2008-07-23 | 2011-04-06 | 密克罗奇普技术公司 | 增强的微处理器或微控制器 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106447034A (zh) * | 2016-10-27 | 2017-02-22 | 中国科学院计算技术研究所 | 一种基于数据压缩的神经网络处理器、设计方法、芯片 |
CN107491787A (zh) * | 2017-08-21 | 2017-12-19 | 珠海习悦信息技术有限公司 | 局部二值化cnn的处理方法、装置、存储介质及处理器 |
-
2018
- 2018-03-09 CN CN201810195606.3A patent/CN110245748B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102007477A (zh) * | 2008-07-23 | 2011-04-06 | 密克罗奇普技术公司 | 增强的微处理器或微控制器 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106447034A (zh) * | 2016-10-27 | 2017-02-22 | 中国科学院计算技术研究所 | 一种基于数据压缩的神经网络处理器、设计方法、芯片 |
CN107491787A (zh) * | 2017-08-21 | 2017-12-19 | 珠海习悦信息技术有限公司 | 局部二值化cnn的处理方法、装置、存储介质及处理器 |
Non-Patent Citations (2)
Title |
---|
Deep Residual Learning for Image Recognition;Kaiming He;《IEEE》;20161212;全文 * |
ShuffleNet:An Extremely Efficient Convolutional Neural Network for Mobile Devices;xiangyu zhang等;《arXiv》;20170704;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110245748A (zh) | 2019-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110245748B (zh) | 卷积神经网络实现方法、装置、硬件加速器、存储介质 | |
CN108416327B (zh) | 一种目标检测方法、装置、计算机设备及可读存储介质 | |
EP4030302A1 (en) | Buffer addressing for a convolutional neural network | |
CN111199273A (zh) | 卷积计算方法、装置、设备及存储介质 | |
JP6927320B2 (ja) | 推論装置、畳み込み演算実行方法及びプログラム | |
CN111338695B (zh) | 基于流水线技术的数据处理方法及相关产品 | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
US11593630B2 (en) | Efficient convolutional engine | |
EP3633559A1 (en) | Information processing apparatus, information processing method, non-transitory computer-readable storage medium | |
JP7551223B2 (ja) | シストリックアレイに基づくデータ処理方法、計算装置、及びコンピュータプログラム | |
CN111008691A (zh) | 一种权值和激活值都二值化的卷积神经网络加速器架构 | |
CN114168106A (zh) | 基于卷积神经网络的数据处理方法、装置及设备 | |
CN109324984A (zh) | 在卷积运算中使用循环寻址的方法和装置 | |
WO2023231999A1 (zh) | 卷积运算方法、卷积运算装置、电子设备及存储介质 | |
CN116881618A (zh) | 通用矩阵乘计算优化方法、装置及处理器 | |
US12094084B2 (en) | Multi-channel feature map fusion | |
CN112905526B (zh) | 一种多种类型卷积的fpga实现方法 | |
US20220253220A1 (en) | Data transfers in neural processing | |
CN113971261B (zh) | 卷积运算装置、方法、电子设备及介质 | |
CN112257859B (zh) | 特征数据处理方法及装置、设备、存储介质 | |
CN112308217B (zh) | 一种卷积神经网络加速方法及系统 | |
CN111461144A (zh) | 一种用于加速卷积神经网络的方法 | |
CN115456858B (zh) | 图像处理方法、装置、计算机设备及计算机可读存储介质 | |
CN117291240B (zh) | 卷积神经网络加速器及电子设备 | |
CN111831254B (zh) | 图像处理加速方法、图像处理模型存储方法及对应装置 |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200908 Address after: Unit 01-19, 10 / F, 101, 6 / F, building 5, yard 5, Anding Road, Chaoyang District, Beijing 100029 Applicant after: Xilinx Electronic Technology (Beijing) Co., Ltd Address before: 100083, 17 floor, four building four, 1 Wang Zhuang Road, Haidian District, Beijing. Applicant before: BEIJING DEEPHI TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |