一种应用于卷积神经网络的加速方法和加速器与流程

文档序号:15388074发布日期:2018-09-08 00:48阅读:288来源:国知局

本发明属于运算优化技术领域,更具体地,涉及一种应用于卷积神经网络的加速方法和加速器。



背景技术:

卷积神经网络(convolutionalneuralnetwork,cnn)是一种前馈神经网络,其人工神经元可以响应一部分覆盖范围内的周围单元,适用于对大型图像的处理。卷积神经网络广泛应用于图像识别、语音识别等领域,但计算量非常大。

由于卷积神经网络中的激活函数relu(rectifiedlinearunit,修正线性单元)会造成大量稀疏的特征图(featuremap);同时,采用剪枝等方法训练卷积神经网络会造成大量稀疏的权重数据(weightdata)。利用特征图和权重数据的稀疏性可以大幅提高卷积神经网络的计算效率。目前,已有很多方法基于卷积神经网络中特征图和权重数据的稀疏性提高计算速度。这些方法大致可以分为两类,一类着眼于跳过0值。例如有的方法去除输入中的0值,从而减少输入为0的无效计算。另一类采取忽略零值的方法。例如有的方法在输入数据为0时,不执行乘法操作,从而减少运算。但这些方法都着眼于处理稀疏神经网络本身,假定神经网络稀疏是前提。然而实际上卷积神经网络中各层输出特征图可能是稀疏的,可能是非稀疏的。实际运用中卷积神经网络各层的权重数据和特征图的稠密度一般在5%-90%之间分布。

稀疏矩阵是指数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律的矩阵。现有技术中一方面只能对稀疏的卷积神经网络进行处理,在卷积神经网络不是稀疏的情况下计算量很大,运算速度低;另一方面现有技术只能处理卷积神经中权重数据或特征图是稀疏的情况,不能处理权重数据和特征图都是稀疏的情况。



技术实现要素:

为克服上述卷积神经网络运算速度低的问题或者至少部分地解决上述问题,本发明提供了一种应用于卷积神经网络的加速方法和加速器。

根据本发明的第一方面,提供一种应用于卷积神经网络的加速方法,包括:

s1,对于卷积神经网络中的任一层,分别计算该层输出的各特征图的稠密度;

s2,将该层输出的各所述特征图的稠密度与多个预设阈值进行比较,根据比较结果将各所述特征图进行稀疏编码;其中,不同的比较结果对应不同的稀疏编码方式;

s3,基于该层下一层的卷积层对稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核进行卷积。

具体地,所述步骤s1具体包括:

对于任一所述特征图,统计该特征图中非0元素的个数和该特征图中所有元素的总个数;

将该特征图中非0元素的个数与该特征图中所有元素的总个数之间的比值作为该特征图的稠密度。

具体地,所述预设阈值包括第一预设阈值和第二预设阈值;其中,所述第一预设阈值小于所述第二预设阈值;

相应地,所述步骤s2具体包括:

若各所述特征图的稠密度小于所述第一预设阈值,则将各所述特征图编码为稀疏矩阵存储格式;

若各所述特征图的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述特征图中的0元素进行标记;

若各所述特征图的稠密度大于或等于所述第二预设阈值,则不对各所述特征图进行稀疏编码。

具体地,所述步骤s3之前还包括:

计算训练好的卷积网络中各卷积核的稠密度;

若各所述卷积核的稠密度小于所述第一预设阈值,则将各所述卷积核编码为稀疏矩阵存储格式;

若各所述卷积核的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述卷积核中的0元素进行标记;

若各所述卷积核的稠密度大于或等于所述第二预设阈值,则不对各所述卷积核进行稀疏编码。

具体地,所述步骤s3具体包括:

当各所述特征图或各所述卷积核中存在所述标记时,对各所述特征图或各所述卷积核中标记对应的元素不进行计算。

根据本发明另一方面提供一种应用于卷积神经网络的加速器,包括:神经网络计算阵列模块和动态稀疏调整模块;

其中,所述动态稀疏调整模块用于计算卷积神经网络各层输出的各特征图的稠密度,将各所述特征图的稠密度与多个预设阈值进行比较,根据比较结果对各所述特征图进行稀疏编码;其中,不同的比较结果对应的不同稀疏编码方式;

所述神经网络计算阵列模块用于对稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核进行卷积操作。

具体地,所述动态稀疏调整模块包括线上稠密度识别模块、输出临时寄存模块、动态编码模块和动态稀疏控制模块;

其中,所述线上稠密度识别模块用于对于任一所述特征图,统计该特征图中0元素的个数和该特征图中所有元素的总个数;将该特征图中0元素的个数与该特征图中所有元素的总个数之间的比值作为该特征图的稠密度;

所述输出临时寄存模块用于存储卷积神经网络中各层输出的各所述特征图;

所述动态稀疏控制模块用于将所述线上稠密度识别模块输出的各所述特征图的稠密度与多个预设阈值进行比较;

所述动态编码模块用于根据比较结果将所述输出临时寄存模块中各所述特征图进行稀疏编码。

具体地,所述预设阈值包括第一预设阈值和第二预设阈值;其中,所述第一预设阈值小于所述第二预设阈值;

相应地,所述动态编码模块具体用于:

若各所述特征图的稠密度小于所述第一预设阈值,则将各所述特征图编码为稀疏矩阵存储格式;

若各所述特征图的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述特征图中的0元素进行标记;

若各所述特征图的稠密度大于或等于所述第二预设阈值,则不对各所述特征图进行稀疏编码。

具体地,所述动态编码模块还用于:

若预先计算的各所述卷积核的稠密度小于所述第一预设阈值,则将各所述卷积核编码为稀疏矩阵存储格式;

若各所述卷积核的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述卷积核中的0元素进行标记;

若各所述卷积核的稠密度大于或等于所述第二预设阈值,则不对各所述卷积核进行稀疏编码。

具体地,所述神经网络计算阵列模块具体用于:

当各所述特征图或各所述卷积核中存在所述标记时,对各所述特征图或各所述卷积核中标记对应的元素不进行计算。

本发明提供一种应用于卷积神经网络的加速方法和加速器,该方法通过将卷积神经网络中各层输出的各特征图的稠密度与多个预设阈值进行比较,获取各所述特征图的稀疏状态,将不同稀疏状态的特征图进行不同方式的稀疏编码,然后基于各层下一层的卷积层对稀疏编码后的各特征图和预先稀疏编码的卷积神经网络中的卷积核进行卷积操作,减少卷积神经网络中卷积运算的计算量,提高运算速度。

附图说明

图1为本发明实施例提供的应用于卷积神经网络的加速方法整体流程示意图;

图2为本发明实施例提供的应用于卷积神经网络的加速器整体结构示意图;

图3为本发明实施例提供的应用于卷积神经网络的加速器中极限能量效率测试结果示意图;

图4为本发明实施例提供的应用于卷积神经网络的加速器中极限能量效率测试结果对比示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

在本发明的一个实施例中提供一种应用于卷积神经网络的加速方法,图1为本发明实施例提供的应用于卷积神经网络的加速方法整体流程示意图,该方法包括:

s1,对于卷积神经网络中的任一层,分别计算该层输出的各特征图的稠密度;

具体地,所述卷积神经网络中可以包括池化层或不包括池化层。首先对所述卷积神经网络进行训练,训练完成后卷积神经网络中的卷积核不再变动,因此卷积神经网络中的卷积核不需要线上动态稀疏编码,直接线下稀疏编码一次即可。所述线上是指位于加速器的芯片上,所述线下是指不位于所述加速器的芯片上。在每次卷积运算时直接读取稀疏编码的卷积核进行卷积计算。当输入原始图像数据时,对原始图像数据进行稀疏编码,然后将稀疏编码的原始数据和稀疏编码的卷积核输入所述卷积神经网络的第一层卷积层进行卷积计算。由于原始图像数据一般不是稀疏的,也可以不对所述原始图像数据进行稀疏编码,直接输入所述原始图像数据。所述稀疏编码是将数据以稀疏格式存储。

s1中,由于卷积神经网络中每层输出的各特征图的稠密度不一样,不同层输出的特征图也是动态变化的,因此稠密度也是动态变化的。所述稠密度表示各所述特征图的稀疏程度。为了更好地提高所述卷积神经网络的运算速度,计算每一层输出的各特征图的稠密度,以根据每一层输出的各特征图的稠密度对每一层输出的各特征图进行稀疏编码。

s2,将该层输出的各所述特征图的稠密度与多个预设阈值进行比较,根据比较结果将各所述特征图进行稀疏编码;其中,不同的比较结果对应不同的稀疏编码方式;

s2中,现有技术中将各层输出的特征图全部进行稀疏编码,计算量大。本实施例根据所述预设阈值获取该层输出的各所述特征图的稀疏状态。从而将不同稀疏状态的特征图进行不同形式的稀疏编码。

s3,基于该层下一层的卷积层对稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核进行卷积。

s3中,将稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核作为该层下一层的卷积层的输入,进行卷积操作。然后,将所述卷积操作的结果作为所述卷积层下一层的输入,将所述卷积层下一层输出的特征图继续执行上述稀疏编码和卷积操作,直到所述卷积神经网络中最后一层输出各特征图为止。本实施例中不限于卷积核的稀疏编码方式。

本实施例将卷积神经网络中各层输出的各特征图的稠密度与多个预设阈值进行比较,获取各所述特征图的稀疏状态,将不同稀疏状态的特征图进行不同方式的稀疏编码,然后基于各层下一层的卷积层对稀疏编码后的各特征图和预先稀疏编码的卷积神经网络中的卷积核进行卷积操作,减少卷积神经网络中卷积运算的计算量,提高运算速度。

在上述实施例的基础上,本实施例中,所述步骤s1具体包括:对于任一所述特征图,统计该特征图中非0元素的个数和该特征图中所有元素的总个数;将该特征图中非0元素的个数与该特征图中所有元素的总个数之间的比值作为该特征图的稠密度。

具体地,各特征图的稠密度为各特征图中非0元素的个数与各特征图中所有元素的总个数之间的比值。例如,一个特征图中非0元素的个数为10,该特征图中所有元素的总个数为100,则该特征图的稠密度为0.1。

在上述实施例的基础上,本实施例中所述预设阈值包括第一预设阈值和第二预设阈值;所述预设阈值包括第一预设阈值和第二预设阈值;相应地,所述步骤s2具体包括:若各所述特征图的稠密度小于所述第一预设阈值,则将各所述特征图编码为稀疏矩阵存储格式;若各所述特征图的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述特征图中的0元素进行标记;若各所述特征图的稠密度大于或等于所述第二预设阈值,则不对各所述特征图进行稀疏编码。

具体地,本实施例中所述预设阈值包括第一预设阈值th1和第二预设阈值th2。根据所述第一预设阈值和所述第二预设阈值将各所述特征图的特征状态as分为三种状态,即将稠密度小于所述第一预设阈值的特征图分为完全稀疏状态s,将稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值的特征图分为中等稀疏状态m,将稠密度大于或等于所述第二预设阈值的特征图分为完全非稀疏状态d。若各特征图为稀疏状态s,则将各所述特征图编码为稀疏矩阵存储格式,所述稀疏矩阵存储格式包括各所述特征图中的非0数据activ和稀疏索引index,例如坐标编码和压缩稀疏行编码。通过将特征图编码为稀疏矩阵存储格式,可以节省大量存储空间,同时节省大量计算时间。若各特征图为中等稀疏状态m,则将各特征图中的0元素添加标记guard,所述标记用于标识0元素。对于标记的元素可以不参与计算和存储,从而降低功耗。将各特征图中的0元素进行标记也是一种稀疏编码方式。若各特征图为完全非稀疏状态d,则不需要动态编码,直接输出各特征图的非稀疏数据。

在上述实施例的基础上,本实施例中所述步骤s3之前还包括:计算训练好的卷积网络中各卷积核的稠密度;若各所述卷积核的稠密度小于所述第一预设阈值,则将各所述卷积核编码为稀疏矩阵存储格式;若各所述卷积核的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述卷积核中的0元素进行标记;若各所述卷积核的稠密度大于或等于所述第二预设阈值,则不对各所述卷积核进行编码。

具体地,各卷积核的稠密度为各卷积核中非0元素的个数与各卷积核中所有元素的总个数之间的比值。将各卷积核的状态ws与特征图一样分为三种状态。每种状态对应不同的稀疏编码方式。由于特征图和卷积核各存在三种状态,组合后共有9种状态,从而对卷积神经网络的稠密度进行更细粒度的划分。

在上述各实施例的基础上,本实施例中所述步骤s3具体包括:当各所述特征图或各所述卷积核中存在所述标记时,对各所述特征图或各所述卷积核中标记对应的元素不进行计算。

具体地,当各所述特征图或各所述卷积核为完全稀疏状态s时,在输入前去除0,减少存储空间,同时不用对0元素进行计算;当各所述特征图或各所述卷积核为中等稀疏状态m时,各所述特征图或各所述卷积核中的0元素虽然存储,但对标记对应的元素不进行计算,从而减少计算。

在本发明的另一个实施例中提供一种应用于卷积神经网络的加速器,图2为本发明实施例提供的应用于卷积神经网络的加速器整体结构示意图,包括:神经网络计算阵列模块和动态稀疏调整模块;其中,所述动态稀疏调整模块用于计算卷积神经网络中各层输出的各特征图的稠密度,将各所述特征图的稠密度与多个预设阈值进行比较,根据比较结果对各所述特征图进行稀疏编码;其中,不同的比较结果对应的不同稀疏编码方式;所述神经网络计算阵列模块用于对稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核进行卷积操作。

具体地,所述卷积神经网络中可以包括池化层或不包括池化层。首先对卷积神经网络进行训练,训练完成后卷积神经网络中的卷积核不再变动,因此卷积神经网络中的卷积核不需要线上动态稀疏编码,直接线下稀疏编码一次即可。在每次卷积运算时所述神经网络计算阵列模块直接读取线下稀疏编码的卷积核进行卷积计算。当卷积神经网络输入原始图像数据时,动态稀疏调整模块对原始图像数据进行稀疏编码,然后神经网络计算阵列模块根据稀疏编码的原始数据和稀疏编码的卷积核进行卷积计算。由于原始图像数据一般不是稀疏的,也可以不对所述原始图像数据进行稀疏编码,直接输入所述原始图像数据。所述稀疏编码是将数据以稀疏格式存储。

由于卷积神经网络中各层输出的各特征图的稠密度不一样,不同层输出的特征图也是动态变化的,因此稠密度也是动态变化的。所述稠密度表示各所述特征图的稀疏程度。为了更好地提高所述卷积神经网络的运算速度,所述动态稀疏调整模块计算每一层输出的各特征图的稠密度,以根据每一层输出的各特征图的稠密度对每一层输出的各特征图进行稀疏编码。

所述动态稀疏调整模块根据多个预设阈值获取该层输出的各所述特征图的稀疏状态。从而将不同稀疏状态的特征图进行不同形式的稀疏编码,而不仅限于一种稀疏编码。现有技术中将各层输出的特证图全部进行稀疏编码,计算量大。

所述神经网络计算阵列模块根据稀疏编码后的各所述特征图和预先稀疏编码的所述卷积神经网络中的各卷积核进行卷积操作。如果包括池化模块,所述池化模块将所述卷积操作的结果进行池化操作。此外,所述加速器还包括中间数据存储器模块、主芯片控制器和芯片上下数据交流模块。其中,所述主控制器控制加速器整个芯片的运行动作与时序。芯片上下数据交流模块用于从所述芯片外部存储器读取数据或将芯片计算好的数据写入外部存储。例如,初始化后,芯片在所述主控制器的控制下通过所述芯片上下数据交流模块从外部存储器读取原始图像数据和初始卷积核。所述中间数据存储器模块用于存储所述神经网络计算阵列模块计算过程中的中间结果。

本实施例动态稀疏调整模块将卷积神经网络各层输出的各特征图的稠密度与多个预设阈值进行比较,获取各所述特征图的稀疏状态,将不同稀疏状态的特征图进行不同方式的稀疏编码,以供神经网络计算阵列模块对稀疏编码后的各特征图和预先稀疏编码的卷积神经网络中的卷积核进行卷积操作,一方面,减少卷积神经网络中卷积运算的计算量,提高运算速度;另一方面,根据稀疏状态的不同,动态切换加速器的处理状态,提高了加速器的灵活性。

在上述实施例的基础上,本实施例中所述动态稀疏调整模块包括线上稠密度识别模块、输出临时寄存模块、动态编码模块和动态稀疏控制模块;其中,所述线上稠密度识别模块用于对于任一所述特征图,统计该特征图中0元素的个数和该特征图中所有元素的总个数;将该特征图中0元素的个数与该特征图中所有元素的总个数之间的比值作为该特征图的稠密度;所述输出临时寄存模块用于存储卷积神经网络中各层输出的各所述特征图;所述动态稀疏控制模块用于将所述线上稠密度识别模块输出的各所述特征图的稠密度与多个预设阈值进行比较;所述动态编码模块用于根据比较结果将所述输出临时寄存模块中各所述特征图进行稀疏编码。

具体地,所述动态稀疏调整模块具体包括四个模块。所述线上稠密度识别模块用于统计计算过程中各特征图中非0元素的个数,以计算各特征图的稠密度。所述输出临时寄存模块用于将卷积神经网络中各层输出的特征图以非稀疏格式进行暂存。所述动态稀疏控制模块用于通过预设的多个预设阈值控制所述特征图的稀疏状态。所述动态编码模块根据各所述特征图的稀疏状态将所述输出临时寄存模块中各所述特征图进行稀疏编码,从而提高卷积运算的速度。

在上述实施例的基础上,本实施例中所述预设阈值包括第一预设阈值和第二预设阈值;所述预设阈值包括第一预设阈值和第二预设阈值;相应地,所述动态编码模块具体用于:若各所述特征图的稠密度小于所述第一预设阈值,则将各所述特征图编码为稀疏矩阵存储格式;若各所述特征图的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述特征图中的0元素进行标记;若各所述特征图的稠密度大于或等于所述第二预设阈值,则不对各所述特征图进行编码。

具体地,本实施例中所述预设阈值包括第一预设阈值th1和第二预设阈值th2。所述动态稀疏控制模块根据所述第一预设阈值和所述第二预设阈值将各所述特征图的特征状态as分为三种状态,即将稠密度小于所述第一预设阈值的特征图分为完全稀疏状态s,将稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值的特征图分为中等稀疏状态m,将稠密度大于或等于所述第二预设阈值的特征图分为完全非稀疏状态d。

若各特征图为稀疏状态s,则所述动态编码模块将所述输出临时寄存模块中各所述特征图编码为稀疏矩阵存储格式,所述稀疏矩阵存储格式包括各所述特征图中的非0数据activ和稀疏索引index,例如坐标编码和压缩稀疏行编码。通过将特征图编码为稀疏矩阵存储格式,可以节省大量存储空间,同时节省大量计算时间。若各特征图为中等稀疏状态m,则所述动态编码模块将所述输出临时寄存模块中各特征图中的0元素添加标记guard,对于标记的元素可以不参与计算和存储,从而降低功耗。若各特征图为完全非稀疏状态d,则不需要动态编码,所述动态编码模块直接输出各特征图的非稀疏数据。

在上述实施例的基础上,本实施例中所述动态编码模块还用于:若预先计算的各所述卷积核的稠密度小于所述第一预设阈值,则将各所述卷积核编码为稀疏矩阵存储格式;若各所述卷积核的稠密度大于或等于所述第一预设阈值,且小于所述第二预设阈值,则将各所述卷积核中的0元素进行标记;若各所述卷积核的稠密度大于或等于所述第二预设阈值,则不对各所述卷积核进行编码。

具体地,各卷积核的稠密度为各卷积核中非0元素的个数与各卷积核中所有元素的总个数之间的比值。各卷积核的状态ws与特征图一样有三种状态。每种状态对应不同的稀疏编码方式。由于特征图和卷积核各存在三种状态,组合后共有9种状态,从而对卷积神经网络的稠密度进行更细粒度的划分。

在上述各实施例的基础上,本实施例中所述神经网络计算阵列模块具体用于:当各所述特征图或各所述卷积核中存在所述标记时,对各所述特征图或各所述卷积核中标记对应的元素不进行计算。

具体地,当各所述特征图或各所述卷积核为完全稀疏状态s时,在将各所述特征图或各所述卷积核输入所述神经网络计算阵列模块前去除0,减少存储空间,同时不用对0元素进行计算;当各所述特征图或各所述卷积核为中等稀疏状态m时,各所述特征图或各所述卷积核中的0元素虽然存储,但对标记对应的元素不进行计算,从而减少计算。

例如,采用台积电65nm工艺制作所述加速器的芯片,所述芯片的面积为3mm*4mm,运行频率为20-200mhz,功耗为20.5-248.4毫瓦。本实施例中极限能量效率会随着特征图和卷积核稠密度的下降而快速上升,如图3所示。当特征图和卷积核的稠密度均为5%时,极限能量效率可达到62.1tops/w,是不采用本实施例加速器时极限能量效率的6.2倍。如图4所示,相比于只支持特征数据稀疏的实现,本实施例能量效率可提升4.3倍。相比于无自适应稀疏控制的实现,本发明能量效率可提升2.8倍。相比于无稠密度控制但量化精度可变的实现,本发明能量效率可提升2倍。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1