CN110334803A - 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 - Google Patents
基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 Download PDFInfo
- Publication number
- CN110334803A CN110334803A CN201910648411.4A CN201910648411A CN110334803A CN 110334803 A CN110334803 A CN 110334803A CN 201910648411 A CN201910648411 A CN 201910648411A CN 110334803 A CN110334803 A CN 110334803A
- Authority
- CN
- China
- Prior art keywords
- data
- coding
- overturning
- vector
- dot product
- 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
- 238000004364 calculation method Methods 0.000 title claims abstract description 31
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 24
- 239000012634 fragment Substances 0.000 claims abstract description 64
- 230000004913 activation Effects 0.000 claims abstract description 39
- 230000009466 transformation Effects 0.000 claims abstract description 24
- 238000000034 method Methods 0.000 claims abstract description 20
- 239000011159 matrix material Substances 0.000 claims abstract description 12
- 239000013598 vector Substances 0.000 claims description 67
- 238000006243 chemical reaction Methods 0.000 claims description 14
- 238000000151 deposition Methods 0.000 claims description 9
- 230000006870 function Effects 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 8
- 230000001186 cumulative effect Effects 0.000 claims description 6
- 238000013473 artificial intelligence Methods 0.000 abstract description 2
- 239000010410 layer Substances 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000013138 pruning Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000007306 turnover Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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/048—Activation functions
-
- 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
-
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本实施例提供一种基于稀疏化Winograd算法的卷积计算方法及卷积神经网络加速器,涉及集成电路及人工智能领域技术领域。该方法包括对激活数据进行分片,获得多个分片数据d;对每一个分片数据d进行域变换,获得U;以及,获取每一个分片数据d的权重数据V;访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得将所有中的同一像素位置的点乘数据相加,获得融合数据W;根据Winograd卷积公式Y=ATWA,计算激活数据的卷积Y,其中,A为第一变换矩阵。本实施例提供的方法和加速器,能够快速访问U和V中所有相同地址上的两个非零值进行点乘计算,以消除所有含有0输入的冗余乘法操作,提高卷积计算的效率。
Description
技术领域
本申请涉及集成电路及人工智能领域技术领域,尤其涉及一种基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器。
背景技术
卷积神经网络(ConvolutionalNeuralNetwork,CNN)是当前研究的最多,也是应用最为广泛的机器学习算法之一,其包括输入层、卷积层、激活函数、池化层和全连接层。其中,卷积层中的卷积计算是CNN中最消耗计算资源的部分。
目前,CNN模型通常采用剪枝稀疏化和Winograd这两种算法,以减少卷积计算的复杂度,其中包括对稀疏的激活数据和稀疏的权重数据进行点乘运算。具体地,在进行点乘运算的过程中,需要逐一对激活数据和权重数据每两个相同位置的数据进行乘法运算。由于激活数据和权重数据中含有较多的零值,因此,点乘计算的过程中存在很多关于零的冗余乘法操作,导致卷积计算的速度较低。
此外,剪枝稀疏化用于降低模型参数量,同时减少模型推理时所需的计算量。但是目前所常用的剪枝方法所引入的非结构化稀疏,往往会带来数据的不规则性,使得其在常见并行化处理器(如GPU)上的部署无法获得相应的性能提升。另一方面,Winograd算法常用于降低卷积计算的复杂度,其在GPU等硬件平台上的部署可以带来可观的性能提升,但是其在部署过程中往往不能有效地和剪枝算法相结合。所以设计一款可以有效支持两种算法的定制化硬件处理器就显得十分重要。
发明内容
本申请提供了一种基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器,以解决现有的稀疏化Winograd算法卷积计算速度低的问题。
第一方面,本实施例提供一种基于稀疏化Winograd算法的卷积计算方法,包括:
对激活数据进行分片,获得多个分片数据d;
对每一个所述分片数据d进行域变换,获得U;以及,获取每一个所述分片数据d的权重数据V;
访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
将所有中的同一像素位置的点乘数据相加,获得融合数据W;
根据Winograd卷积公式Y=ATWA,计算所述激活数据的卷积Y,其中,A为第一变换矩阵。
在第一方面的第一种实现方式中,所述访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得包括:
确定U的第一数据向量和第一位掩码向量,并确定V的第二数据向量和第二位掩码向量;
对所述第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码;
确定所述二进制编码中的非零值的地址;
根据所述非零值的地址分别从第一数据向量和第二数据向量中获取第一数据和第二数据,并根据所述第一数据和所述第二数据进行点乘计算,获得
在第一方面的第二种实现方式中,确定所述二进制编码的非零值的地址,包括如下步骤:
S0对所述二进制编码进行翻转,获得翻转编码,并对所述翻转编码执行如下步骤S1-S3:
S1使用低位优先编码器,确定翻转编码中优先级最高的非零值的地址,并输出所述地址;
S2将所述非零值置零,获得更新后的翻转编码;
S3当所述更新后的翻转编码不等于零时,携带所述更新后的翻转编码,跳转至步骤S1;当所述更新后的翻转编码等于零时,寻址结束。
在第一方面的第三种实现方式中,在步骤S2中,通过置零公式Xn+1=Xn&(Xn-1),将翻转编码Xn的优先级最高的非零值置零,获得更新后的翻转编码Xn+1,其中,n为时钟周期数。
第二方面,本实施例提供一种基于稀疏化Winograd算法的卷积神经网络加速器,包括:
分片模块,用于从全局片上存储模块或者外部存储器获取激活数据,并对所述激活数据进行分片,获得多个分片数据d;
域变换模块,用于对每一个所述分片数据d进行域变换,获得U;
元素点乘模块,用于获取所述分片数据d的权重数据V;以及,访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
FIFO寄存器,用于寄存中的点乘数据;
累加缓存模块,用于顺序从所述FIFO寄存器中获取所述点乘数据,并将所述点乘数据累加到对应的像素位置,获得部分和数据;
加法树模块,用于将所述部分和数据中,同一像素位置的数据相加,获得融合数据W;
后变换模块,用于根据Winograd卷积公式Y=ATWA,计算所述激活数据的卷积Y,并将Y存储于所述全局片上存储模块或者所述外部存储器,其中,A为第一变换矩阵;
全局片上存储模块,用于存储卷积计算过程中的中间数据。
在第二方面的第一种实现方式中,所述元素点乘模块包括:
第一掩码编码单元,用于确定U的第一数据向量和第一位掩码向量;
第二掩码编码单元,用于确定V的第二数据向量和第二位掩码向量;
按位与单元,用于对所述第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码;
寻址器,用于确定所述二进制编码中的非零值的地址,并根据所述地址访问所述第一数据向量中的第一数据,以及所述第二数据向量中的第二数据;
第一寄存器,用于寄存所述地址和所述第一数据;
第二寄存器,用于寄存所述地址和所述第二数据;
乘法器,用于根据所述第一数据和所述第二数据进行点乘计算,获得
在第二方面的第二种实现方式中,所述第一寻址器和所述第二寻址器结构相同,均包括:
位置翻转器,用于将二进制编码的高低位翻转,获得翻转编码;
信号选择器,用于根据预设的选择信号,将位置翻转器输出的翻转编码输入低位优先编码器,或者,将编码转换模块输出的更新后的翻转编码输入低位优先编码器;
低位优先编码器,用于确定翻转编码中优先级最高的非零值的地址,并输出所述地址;
编码转换模块,用于将翻转编码中的优先级最高的非零值置零,获得更新后的翻转编码。
在第二方面的第三种实现方式中,所述编码转换模块,还用于通过置零公式Xn+1=Xn&(Xn-1),将翻转编码Xn的优先级最高的非零值置零,获得更新后的翻转编码Xn+1,其中,n为时钟周期数。
在第二方面的第四种实现方式中,所述分片模块和所述域变换模块,还用于根据卷积神经网络模型使用激活函数,所述激活函数包括Sigmoid函数和Relu函数。
本实施例提供的基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器,在进行点乘计算的过程中,能够快速访问U和V中所有相同地址上的两个非零值进行点乘计算,以消除所有含有0输入的冗余乘法操作,提高卷积计算的效率,减少卷积计算过程对计算资源和存储资源的占用。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种基于稀疏化Winograd算法的卷积计算方法的流程图。
图2为本申请实施例提供的待卷积数据的示意图。
图3a为本申请实施例提供的分片数据的示意图一。
图3b为本申请实施例提供的分片数据的示意图二。
图3c为本申请实施例提供的分片数据的示意图三。
图3d为本申请实施例提供的分片数据的示意图四。
图4为本申请实施例提供的基于二进制编码的寻址方法的流程图。
图5为本申请实施例提供的一种基于稀疏化Winograd算法的卷积神经网络加速器的结构示意图。
图6为本申请实施例提供的元素点乘模块的结构示意图。
图7为本申请实施例提供的寻址器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,本实施例提供的一种基于稀疏化Winograd算法的卷积计算方法,该方法包括如下步骤S101-S105。
步骤S101,对激活数据进行分片,获得多个分片数据d。
卷积神经网络在对图片进行识别的过程中,卷积层需要对输入层输入的图片的每一个像素位置的RGB(Red Green Blue,红绿蓝)数据进行多次卷积计算。因此,在本次卷积计算的过程中,需要先获取上一次卷积输出的激活数据。
在获取到激活数据之后,按照预设的Padding大小以及Winograd算法对其进行分片操作。以图2示出的大小为6×6的激活数据为例,当卷积核的大小为3×3、分片数据的大小为4×4时,根据Winograd算法对该激活数据进行分片之后,可获得如图3a-3d所示的黑色粗框线内的4个分片数据d1、d2、d3和d4。其中,每一个分片数据都与其相邻的一个分片数据有宽度为2的交叠数据。
步骤S102,对每一个分片数据d进行域变换,获得U;以及,获取每一个分片数据d的权重数据V。
在一种可能的实现方式中,对分片数据d进行域变换包括:先对分片数据d进行激活处理,获得激活后的分片数据d′,再使用第二变换矩阵B对d′进行域变换,获得BTd′B。
在另一种可能的实现方式中,对分片数据d进行域变换包括:先使用第二变换矩阵B对分片数据d进行域变换,获得变换结果BTdB,再使用激活函数对BTdB进行激活处理,获得稀疏化的激活数据,例如Relu(BTdB)。
在本实施例中,V可以为对卷积核g在Winograd域中进行训练、剪枝并使用第三变换矩阵G对其进行域变换后获得的GgGT。也可以为先对卷积核g进行Winograd域内训练,再对其进行剪枝稀疏化处理获得的Prune(train(g))。
在本实施例中,U和V均为稀疏数据,且U和V可以为如下几个示例中的组合形式;
示例一:U为BTd′B,V为GgGT。
示例二:U为BTd′B,V为Prune(train(g))。
示例三:U为Relu(BTdB),V为Prune(train(g))。
步骤S103,访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
首先,将U压缩为第一数据向量和第一位掩码向量,将V压缩为第二数据向量和第二位掩码向量。其中,需要说明的是,第一数据向量中的数据,按照原二维数据块U压缩成一维向量之后的坐标位置,存储在存储器的对应位置上。第二数据向量中的数据,按照原二维数据块V压缩成一维向量之后的坐标位置,存储在存储器的对应位置上。
在本实施例中,第一数据向量是指U中所有非零值按照从左到右、从上到下的顺序依次构成的向量,第二位掩码向量是指将U中所有的非零值替换为1之后,将矩阵内的所有数据按照从左到右、从上到下的顺序依次构成的向量。
示例性的,当时,其对应的第一数据向量为(1,4,9,2,6,7),第一位掩码向量为(1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0)。
第二数据向量是指V中所有非零值按照从左到右、从上到下的顺序依次构成的向量,第二位掩码向量是指将V中所有的非零值替换为1之后,将矩阵内的所有数据按照从左到右、从上到下的顺序依次构成的向量。
示例性的,当时,第二数据向量为(2,5,3,6,1,9,5,8,3),第二位掩码向量为(0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0)。
由于掩码占用的存储空间很少,每个位掩码只占用1bit的存储空间,因此,本实施例提供的卷积计算方法能够在一定程度上降低卷积计算对存储空间的需求。
其次,对第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码。例如,对第一位掩码向量(1,0,1,0,0,0,0,1,0,1,1,0,0,0,1,0)和第二位掩码向量(0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,0)进行按位与的操作,获得二进制编码0010000101100010。
随后,确定二进制编码中的非零值的地址。值得说明的是,请参阅图4,在本实施例提供的卷积计算方法通过如下步骤S0-S3确定二进制编码中的非零值的地址。
步骤S0,将二进制编码的高低位翻转,获得翻转编码。
第一位掩码向量和第二位掩码向量中的数字按照从左至右的顺序,地址分别为0,1,2,3…。但是,二进制编码中的数字的地址却是从右至左依次为0,1,2,3…。因此,为了使位掩码向量中的地址与二进制编码中的地址相对应,需要将二进制编码进行翻转。例如,将二进制编码0010000101100010翻转为0100011010000100。随后,对翻转编码执行如下步骤S1-S3,确定出二进制编码中的非零值的地址。
步骤S1,使用低位优先编码器,确定翻转编码中优先级最高的非零值的地址,并输出该地址。在翻转编码中,其最右边的二进制位为最低位。因此,在低位优先编码器中,按照从左至右的顺序,二进制位的优先级依次升高。
步骤S2,将翻转编码中的优先级最高的非零值置零,获得更新后的翻转编码。示例性的,可以通过置零公式Xn+1=Xn&(Xn-1),将翻转编码Xn的优先级最高的非零值置零,获得更新后的翻转编码Xn+1,其中,n为时钟周期数。
步骤S3,当更新后的翻转编码不等于零时,携带更新后的翻转编码,跳转至步骤S2;当更新后的翻转编码等于零时,寻址结束。
以二进制编码X=0010000101100010为例,在获得该二进制编码之后,首先对二进制编码0010000101100010进行翻转,获得翻转编码0100011010000100,随后经过五个时钟周期依次确定出翻转编码0100011010000100的非零值的地址2,7,9,10,14。
最后,根据非零值的地址分别从第一数据向量和第二数据向量中获取第一数据和第二数据,并根据该第一数据和第二数据进行点乘计算,获得
以和为例,在确定二进制编码X=0010000101100010的非零值的地址2,7,9,10,14之后,即可确定U和V中同时为的非零值的地址为2,7,9,10,14。因此,对U和V进行点乘计算时,只需要计算4×5、9×9、2×5、6×8及7×3,即可得到
步骤S104,将所有中的同一像素位置的点乘数据相加,获得融合数据W。具体可参见现有的Winograd算法,本实施例在此不进行赘述。
步骤S105,根据Winograd卷积公式Y=ATWA,计算激活数据的卷积Y,其中,A为第一变换矩阵。具体可参见现有的Winograd算法,本实施例在此不进行赘述。
本实施例提供的基于稀疏化Winograd算法的卷积计算方法,在进行点乘计算的过程中,能够快速访问U和V中所有相同地址上的两个非零值进行点乘计算,以消除所有含有0输入的冗余乘法操作,提高卷积计算的效率,减少卷积计算过程对计算资源和存储资源的占用。
请参阅图5,基于上述本实施例提供的一种基于稀疏化Winograd算法的卷积计算方法,本实施例还提供一种基于稀疏化Winograd算法的卷积神经网络加速器。该加速器包括分片模块501、域变换模块502、异步控制器503、元素点乘模块504、FIFO(FirstInputFirst Output,先进先出)寄存器505、累加缓存模块506、加法树模块507、后变换模块508、全局片上存储模块509和计算单元局部缓存模块510。
分片模块501,用于从全局片上存储模块509或者外部存储器获取激活数据,并对该激活数据进行分片,获得多个分片数据d。分片模块501包括多个分片单元,该分片单元用于同时对激活数据进行分片,并且根据CNN模型的不同,选择性地使用激活函数(例如ReLU函数、Sigmoid函数等),以支持传统的稀疏化Winograd CNN模型。
具体地,分片模块501在获取到激活数据之后,根据Winograd算法对该激活数据进行分片,获得多个分片数据d。随后,将分片数据d发送至域变换模块502的多个域变换单元内。在发送分片数据的过程中,由于相邻的分片数据之间有交叠,因此,分片模块501在发送该交叠数据的过程中采用多播的方式发送数据,即只对该交叠数据进行一次访问,在获取到该交叠数据之后,进行多次发送,将其发送到不同的处理单元内,以减少对数据的访问功耗。
例如,在图2所示的激活数据中,位于中心的2×2的数据块同时被分片数据d1、d2、d3和d4复用,因此,分片模块501在发送激活数据的过程中,在访问到该2×2的数据块中的数据之后,会将其分别发送给不同的域变换单元。
域变换模块502,用于对每一个分片数据d进行域变换,获得U。该域变换模块502包括多个域变换单元,该域变换单元用于同时对不同的分片数据d进行域变换,并且根据CNN模型的不同,选择性的使用激活函数(例如ReLU函数、Sigmoid函数等)。当域变换模块502内的域变换单元接收到分片模块501发送的分片数据d之后,并行对多个分片数据d进行域变换。
元素点乘模块504,用于获取分片数据d的权重数据V;以及,访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
具体地,元素点乘模块504包括多个元素点乘单元,该元素点乘单元用于并行从计算单元局部缓存模块510中获取经过处理的权重数据V。
请参阅图6,元素点乘模块504包括:第一掩码编码单元601、第二掩码编码单元602、按位与单元603、寻址器604、第一寄存器605、第二寄存器606和乘法器607。
其中,第一掩码编码单元601,用于从外部激活缓存单元获取U,并确定U的第一数据向量和第一位掩码向量。第二掩码编码单元602,用于从外部权重缓存单元获取V,并确定V的第二数据向量和第二位掩码向量。按位与单元603,用于对第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码。寻址器604,用于确定二进制编码中的非零值的地址,并根据该地址从外部激活存储单元访问第一数据向量中的第一数据,以及从外部权重存储单元中访问第二数据向量中的第二数据。第一寄存器605,用于寄存非零值的地址和第一数据。第二寄存器606,用于寄存非零值的地址和第二数据。乘法器607,用于根据第一数据和第二数据进行点乘计算,获得
请参阅图7,寻址器604包括位置翻转器701、信号选择器702、低位优先编码器703和编码转换模块704。其中,位置翻转器701,用于将二进制编码的高低位翻转,获得翻转编码。信号选择器702,用于根据预设的选择信号,将位置翻转器701输出的翻转编码输入低位优先编码器703,或者,将编码转换模块704输出的更新后的翻转编码输入优先编码器。例如,在第一个时钟周期内,根据信号0,将位置翻转器701输出的翻转编码编码发送到低位优先编码器703。在其它时钟周期内,根据信号1,将编码转换模块704输出的更新后的翻转编码发送到低位优先编码器703。低位优先编码器703,用于确定翻转编码中优先级最高的非零值的地址,并输出该地址。编码转换模块704,用于将翻转编码中的优先级最高的非零值置零,获得更新后的翻转编码。
元素点乘模块504在完成一个点乘计算之后,将计算结果存储于FIFO寄存器505中。并通过异步控制器503访问下一个U和V,进行点乘计算。该异步控制器503设置于域变换模块502和元素点乘模块504之间的数据通道上,能够将域变换模块502输出的数据,异步地输送至元素点乘模块504中的元素点乘单元,缓解由于不规则不可预测的稀疏化数据带来的元素点乘单元负载不均衡的问题。
FIFO寄存器505,包括多个寄存单元,用于寄存中的点乘数据。
累加缓存模块506,包括多个累加缓存单元,每个累加缓存单元与FIFO寄存器505的多块寄存单元连接,串行访问FIFO寄存器505,从FIFO寄存器505中取出分片数据的点乘数据,并且并行工作将点乘数据累加到对应的像素位置,得到计算中间值及部分和数据。
加法树模块507,用于将累加缓存模块506缓存的部分和数据中,同一像素位置的数据相加,获得融合数据W。
后变换模块508,用于并行根据Winograd卷积公式Y=ATWA,计算激活数据的卷积Y,其中,A为第一变换矩阵。并且,将数据按照分片模块501所要求的数据结构写入到外部存储或者全局片上缓存模块中,最终完成CNN一层卷积层的卷积计算。
本实施例提供的基于稀疏化Winograd算法的卷积神经网络加速器,能够快速访问U和V中所有相同地址上的两个非零值进行点乘计算,以消除所有含有0输入的冗余乘法操作,高效地实现低计算复杂度的CNN卷积层计算,降低减少卷积计算过程对计算资源和存储资源的占用。
相比于其它基于稀疏化Winograd算法的CNN加速器,本实施例提供的加速器可以在VGG-16模型上,达到1.7倍至5.1倍的加速比,同时只使用了更少的硬件资源。还可以节省大量的计算资源与功耗,提供更低的推理时延,很适合应用在物联网、嵌入式芯片等对面积、功耗与时延要求严苛的场景中。
此外,在本实施例提供的加速器中,卷积计算的数据流在各个模块或结构之间并行传输,在各个模块内串行处理,并且,本层卷积计算的结果存储于全局片上存储单元,能够在高效利用所有硬件资源的同时,提高计算吞吐率。
需要说明的是,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
应当理解的是,本申请并不局限于上面已经描述的内容,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (9)
1.一种基于稀疏化Winograd算法的卷积计算方法,其特征在于,包括:
对激活数据进行分片,获得多个分片数据d;
对每一个所述分片数据d进行域变换,获得U;以及,获取每一个所述分片数据d的权重数据V;
访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
将所有中的同一像素位置的点乘数据相加,获得融合数据W;
根据Winograd卷积公式Y=ATWA,计算所述激活数据的卷积Y,其中,A为第一变换矩阵。
2.根据权利要求1所述的方法,其特征在于,所述访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得包括:
确定U的第一数据向量和第一位掩码向量,并确定V的第二数据向量和第二位掩码向量;
对所述第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码;
确定所述二进制编码中的非零值的地址;
根据所述非零值的地址分别从第一数据向量和第二数据向量中获取第一数据和第二数据,并根据所述第一数据和所述第二数据进行点乘计算,获得
3.根据权利要求2所述的方法,其特征在于,确定所述二进制编码的非零值的地址,包括如下步骤:
S0对所述二进制编码进行翻转,获得翻转编码,并对所述翻转编码执行如下步骤S1-S3:
S1使用低位优先编码器,确定翻转编码中优先级最高的非零值的地址,并输出所述地址;
S2将所述非零值置零,获得更新后的翻转编码;
S3当所述更新后的翻转编码不等于零时,携带所述更新后的翻转编码,跳转至步骤S1;当所述更新后的翻转编码等于零时,寻址结束。
4.根据权利要求3所述的方法,其特征在于,在步骤S2中,通过置零公式Xn+1=Xn&(Xn-1),将翻转编码Xn的优先级最高的非零值置零,获得更新后的翻转编码Xn+1,其中,n为时钟周期数。
5.一种基于稀疏化Winograd算法的卷积神经网络加速器,其特征在于,包括:
分片模块,用于从全局片上存储模块或者外部存储器获取激活数据,并对所述激活数据进行分片,获得多个分片数据d;
域变换模块,用于对每一个所述分片数据d进行域变换,获得U;
元素点乘模块,用于获取所述分片数据d的权重数据V;以及,访问每一组U和V中,所有相同地址上的两个非零值进行点乘计算,获得
FIFO寄存器,用于寄存中的点乘数据;
累加缓存模块,用于顺序从所述FIFO寄存器中获取所述点乘数据,并将所述点乘数据累加到对应的像素位置,获得部分和数据;
加法树模块,用于将所述部分和数据中,同一像素位置的数据相加,获得融合数据W;
后变换模块,用于根据Winograd卷积公式Y=ATWA,计算所述激活数据的卷积Y,并将Y存储于所述全局片上存储模块或者所述外部存储器,其中,A为第一变换矩阵;
全局片上存储模块,用于存储卷积计算过程中的中间数据。
6.根据权利要求5所述的加速器,其特征在于,所述元素点乘模块包括:
第一掩码编码单元,用于确定U的第一数据向量和第一位掩码向量;
第二掩码编码单元,用于确定V的第二数据向量和第二位掩码向量;
按位与单元,用于对所述第一位掩码向量和第二位掩码向量进行按位与操作,获得一个二进制编码;
寻址器,用于确定所述二进制编码中的非零值的地址,并根据所述地址访问所述第一数据向量中的第一数据,以及所述第二数据向量中的第二数据;
第一寄存器,用于寄存所述地址和所述第一数据;
第二寄存器,用于寄存所述地址和所述第二数据;
乘法器,用于根据所述第一数据和所述第二数据进行点乘计算,获得
7.根据权利要求6所述的加速器,其特征在于,所述寻址器包括:
位置翻转器,用于将二进制编码的高低位翻转,获得翻转编码;
信号选择器,用于根据预设的选择信号,将位置翻转器输出的翻转编码输入低位优先编码器,或者,将编码转换模块输出的更新后的翻转编码输入低位优先编码器;
低位优先编码器,用于确定翻转编码中优先级最高的非零值的地址,并输出所述地址;
编码转换模块,用于将翻转编码中的优先级最高的非零值置零,获得更新后的翻转编码。
8.根据权利要求7所述加速器,其特征在于,
所述编码转换模块,还用于通过置零公式Xn+1=Xn&(Xn-1),将翻转编码Xn的优先级最高的非零值置零,获得更新后的翻转编码Xn+1,其中,n为时钟周期数。
9.根据权利要求5所述加速器,其特征在于,
所述分片模块和所述域变换模块,还用于根据卷积神经网络模型使用激活函数,所述激活函数包括Sigmoid函数和Relu函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910648411.4A CN110334803A (zh) | 2019-07-18 | 2019-07-18 | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910648411.4A CN110334803A (zh) | 2019-07-18 | 2019-07-18 | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110334803A true CN110334803A (zh) | 2019-10-15 |
Family
ID=68145625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910648411.4A Pending CN110334803A (zh) | 2019-07-18 | 2019-07-18 | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110334803A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111178258A (zh) * | 2019-12-29 | 2020-05-19 | 浪潮(北京)电子信息产业有限公司 | 一种图像识别的方法、系统、设备及可读存储介质 |
CN111882028A (zh) * | 2020-06-08 | 2020-11-03 | 北京大学深圳研究生院 | 用于卷积神经网络的卷积运算装置 |
CN112883982A (zh) * | 2021-01-08 | 2021-06-01 | 西北工业大学 | 一种面向神经网络稀疏特征的数据去零编码及封装方法 |
WO2021114903A1 (zh) * | 2019-12-09 | 2021-06-17 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN114371735A (zh) * | 2022-01-07 | 2022-04-19 | 广东汇天航空航天科技有限公司 | 一种飞行器地理围栏数据处理方法及系统 |
CN115456152A (zh) * | 2022-08-11 | 2022-12-09 | 南方科技大学 | 基于权重预编码的稀疏卷积神经网络加速器和计算设备 |
CN115952846A (zh) * | 2022-12-14 | 2023-04-11 | 北京登临科技有限公司 | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
US20180046916A1 (en) * | 2016-08-11 | 2018-02-15 | Nvidia Corporation | Sparse convolutional neural network accelerator |
CN109325591A (zh) * | 2018-09-26 | 2019-02-12 | 中国科学院计算技术研究所 | 面向Winograd卷积的神经网络处理器 |
CN109359730A (zh) * | 2018-09-26 | 2019-02-19 | 中国科学院计算技术研究所 | 面向固定输出范式Winograd卷积的神经网络处理器 |
-
2019
- 2019-07-18 CN CN201910648411.4A patent/CN110334803A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180046916A1 (en) * | 2016-08-11 | 2018-02-15 | Nvidia Corporation | Sparse convolutional neural network accelerator |
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
CN109325591A (zh) * | 2018-09-26 | 2019-02-12 | 中国科学院计算技术研究所 | 面向Winograd卷积的神经网络处理器 |
CN109359730A (zh) * | 2018-09-26 | 2019-02-19 | 中国科学院计算技术研究所 | 面向固定输出范式Winograd卷积的神经网络处理器 |
Non-Patent Citations (1)
Title |
---|
HAONAN WANG 等: "A Low-latency Sparse-Winograd Accelerator for Convolutional Neural Networks", 《2019 IEEE INTERNATIONAL CONFERENCE ON ACOUSTICS, SPEECH AND SIGNAL PROCESSING (ICASSP)》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021114903A1 (zh) * | 2019-12-09 | 2021-06-17 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN111178258A (zh) * | 2019-12-29 | 2020-05-19 | 浪潮(北京)电子信息产业有限公司 | 一种图像识别的方法、系统、设备及可读存储介质 |
CN111178258B (zh) * | 2019-12-29 | 2022-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种图像识别的方法、系统、设备及可读存储介质 |
CN111882028A (zh) * | 2020-06-08 | 2020-11-03 | 北京大学深圳研究生院 | 用于卷积神经网络的卷积运算装置 |
CN111882028B (zh) * | 2020-06-08 | 2022-04-19 | 北京大学深圳研究生院 | 用于卷积神经网络的卷积运算装置 |
CN112883982A (zh) * | 2021-01-08 | 2021-06-01 | 西北工业大学 | 一种面向神经网络稀疏特征的数据去零编码及封装方法 |
CN112883982B (zh) * | 2021-01-08 | 2023-04-18 | 西北工业大学 | 一种面向神经网络稀疏特征的数据去零编码及封装方法 |
CN114371735A (zh) * | 2022-01-07 | 2022-04-19 | 广东汇天航空航天科技有限公司 | 一种飞行器地理围栏数据处理方法及系统 |
CN114371735B (zh) * | 2022-01-07 | 2023-11-03 | 广东汇天航空航天科技有限公司 | 一种飞行器地理围栏数据处理方法及系统 |
CN115456152A (zh) * | 2022-08-11 | 2022-12-09 | 南方科技大学 | 基于权重预编码的稀疏卷积神经网络加速器和计算设备 |
CN115456152B (zh) * | 2022-08-11 | 2023-12-05 | 南方科技大学 | 基于权重预编码的稀疏卷积神经网络加速器和计算设备 |
CN115952846A (zh) * | 2022-12-14 | 2023-04-11 | 北京登临科技有限公司 | Ai算法架构的实现装置、稀疏卷积运算方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110334803A (zh) | 基于稀疏化Winograd算法的卷积计算方法和卷积神经网络加速器 | |
CN106970896B (zh) | 面向向量处理器的二维矩阵卷积的向量化实现方法 | |
CN107862374B (zh) | 基于流水线的神经网络处理系统和处理方法 | |
CN107506828B (zh) | 用于稀疏连接的人工神经网络计算装置和方法 | |
CN107704916A (zh) | 一种基于fpga实现rnn神经网络的硬件加速器及方法 | |
CN103019656B (zh) | 可动态重构的多级并行单指令多数据阵列处理系统 | |
CN109165732A (zh) | 神经网络处理装置及其执行向量乘加指令的方法 | |
US20220058486A1 (en) | System and method of accelerating execution of a neural network | |
CN108733348B (zh) | 融合向量乘法器和使用其进行运算的方法 | |
CN109409510B (zh) | 神经元电路、芯片、系统及其方法、存储介质 | |
CN110036369A (zh) | 一种计算方法及相关产品 | |
CN107844826A (zh) | 神经网络处理单元及包含该处理单元的处理系统 | |
CN111178519A (zh) | 卷积神经网络加速引擎、卷积神经网络加速系统及方法 | |
CN107977704A (zh) | 权重数据存储方法和基于该方法的神经网络处理器 | |
CN108898554A (zh) | 提高图像分辨率的方法及相关产品 | |
CN107203808B (zh) | 一种二值卷积装置及相应的二值卷积神经网络处理器 | |
CN110163355A (zh) | 一种计算装置及方法 | |
US20220164663A1 (en) | Activation Compression Method for Deep Learning Acceleration | |
CN108665063A (zh) | 用于bnn硬件加速器的双向并行处理卷积加速系统 | |
CN110276447A (zh) | 一种计算装置及方法 | |
CN109032670A (zh) | 神经网络处理装置及其执行向量复制指令的方法 | |
CN107766935B (zh) | 多层人造神经网络 | |
CN111563599A (zh) | 一种量子线路的分解方法、装置、存储介质及电子装置 | |
CN108596331A (zh) | 一种细胞神经网络硬件架构的优化方法 | |
CN107944545A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191015 |
|
RJ01 | Rejection of invention patent application after publication |