首页> 中国专利> 一种CNN卷积层运算方法及CNN卷积层运算加速器

一种CNN卷积层运算方法及CNN卷积层运算加速器

摘要

本发明提供一种CNN卷积层运算方法及CNN卷积层运算加速器,均能够:读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

著录项

  • 公开/公告号CN111967582B

    专利类型发明专利

  • 公开/公告日2022-07-08

    原文格式PDF

  • 申请/专利权人 苏州浪潮智能科技有限公司;

    申请/专利号CN202010791455.5

  • 发明设计人 杨继林;

    申请日2020-08-07

  • 分类号G06N3/04(2006.01);G06N3/063(2006.01);G06T1/20(2006.01);

  • 代理机构济南舜源专利事务所有限公司 37205;

  • 代理人张营磊

  • 地址 215100 江苏省苏州市吴中区吴中经济开发区郭巷街道官浦路1号9幢

  • 入库时间 2022-08-23 13:59:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-08

    授权

    发明专利权授予

说明书

技术领域

本发明涉及卷积运算加速领域,具体涉及一种CNN卷积层运算方法及CNN卷积层运算加速器。

背景技术

随着CNN(Convolutional Neural Networks,卷积神经网络)的不断发展,CNN在图像分类、图像识别等领域的应用越来越广泛。

CNN卷积层的运算是二维卷积,常见的实现方案是滑窗实现卷积计算,即对k×k卷积核采用专门的控制模块获取同样大小的特征图二维窗,然后将该特征图二维窗在需要进行卷积层计算的特征图上滑动,之后将需要进行卷积层计算的特征图与卷积核对应点做乘加运算。滑窗实现二维卷积的方法比较直观,只要能获取到正确的特征图二维窗,之后的计算过程相对简单。但是,用于产生二维窗的控制模块实现比较复杂。另外,对于k×k卷积核、对于在线输入的需要进行卷积层计算的特征图,往往需要额外增加k-1行存储,由此带来了成本的增加。此外,现有CNN卷积层运算过程中往往需要多次重复读取卷积核中的权重,一定程度上增加了存储带宽压力。

为此,本发明提供一种CNN卷积层运算方法及CNN卷积层运算加速器,用于解决上述问题。

发明内容

针对现有技术的上述不足,本发明提供一种CNN卷积层运算方法及CNN卷积层运算加速器,用于降低CNN卷积运算的复杂度。本发明还用于降低存储带宽压力。本发明还用于降低完成CNN卷积层运算的成本。

第一方面,本发明提供一种CNN卷积层运算方法,包括步骤:

S1、读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

S2、按照预先设定的图像大小阈值,分块图像读取待处理特征图像上的一个分块图像,并依据所述的权重矩阵H(h

S3、判断整幅待处理特征图像是否读取完成,若是,则继续执行步骤S4,否则转而重复执行步骤S2;

S4、按照各所述分块图像之间的相对位置关系,排布步骤S2中得到的各CNN卷积层局部运算结果,之后拼接得到整幅待处理特征图像对应的CNN卷积层运算结果;

其中,步骤S2中依据所述的权重矩阵H(h

P1、将当前读入的分块图像转化为图像矩阵A(a

P2、读取权重矩阵H(h

P3、计算所得到的各局部矩阵的和,该和即为当前所读入的分块图像对应的CNN卷积层局部运算结果;

其中,步骤S2中每次读取的分块图像互不相同;

步骤S2中按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,读取方法包括:

在首次读取分块图像时,按预先设定的读取起始位置从待处理特征图像上读取一个满足所述图像大小阈值要求的分块图像;

在再次读取分块图像时,每个所读取到的分块图像均包含其各相邻分块图像的k-1行或k-1列像素。

进一步地,步骤P2中所涉及到的元素h

在p=0且q=0时,所涉及到的元素h

在p=0且q≠0时,所涉及到的元素h

在p≠0且q=0时,所涉及到的元素h

在p≠0且q≠0时,所涉及到的元素h

进一步地,步骤S1中将转化得到的权重矩阵H(h

进一步地,该CNN卷积层运算方法基于FPGA实现。

进一步地,步骤P2中采用乘法器阵列将每一个元素h

另一方面,本发明提供一种CNN卷积层运算加速器,包括:

第一数据预读模块,用于读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

第二数据预读模块,用于按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像;

局部运算模块,用于依据所述的权重矩阵H(h

判断模块,用于判断整幅待处理特征图像是否读取完成;

卷积层运算结果输出模块,用于在判断模块判断整幅待处理特征图像已读取完成时,按照各所述分块图像之间的相对位置关系,排布局部运算模块所得到的各CNN卷积层局部运算结果,之后拼接得到整幅待处理特征图像对应的CNN卷积层运算结果并输出;

调用模块,用于在判断模块判断整幅待处理特征图像未读取完成时调用数据预读模块继续执行;

其中,所述局部运算模块包括:

图像矩阵转化单元,用于将当前读入的分块图像转化为图像矩阵A(a

局部矩阵获取单元,用于读取权重矩阵H(h

局部运算结果获取单元,用于计算所得到的各局部矩阵的和,该和即为当前所读入的分块图像对应的CNN卷积层局部运算结果;

第二数据预读模块每次读取到的待处理特征图像的分块图像互不相同;

其中,第二数据预读模块按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,读取方法包括:

在首次读取分块图像时,按预先设定的读取起始位置从待处理特征图像上读取一个满足所述图像大小阈值要求的分块图像;

在再次读取分块图像时,每个所读取到的分块图像均包含其各相邻分块图像的k-1行或k-1列像素。

进一步地,所述局部矩阵获取单元中所涉及到的元素h

在p=0且q=0时,所涉及到的元素h

在p=0且q≠0时,所涉及到的元素h

在p≠0且q=0时,所涉及到的元素h

在p≠0且q≠0时,所涉及到的元素h

进一步地,该CNN卷积层运算加速器还包括缓存;

第一数据预读模块将其转化为的权重矩阵H(h

图像矩阵转化单元将其转化为的图像矩阵A(a

进一步地,该CNN卷积层运算加速器基于FPGA实现。

进一步地,局部矩阵获取单元采用乘法器阵列将每一个元素h

本发明的有益效果在于,

(1)本发明提供的CNN卷积层运算方法及CNN卷积层运算加速器,均避免了对现有技术中特征图二维窗的使用,进而避免了对现有技术中用于生成所述特征图二维窗的控制模块的使用,一定程度上降低了CNN卷积运算的复杂度,便于实现。

(2)本发明提供的CNN卷积层运算方法及CNN卷积层运算加速器,均以卷积核中的每个权重(对应元素h

(3)本发明提供的CNN卷积层运算方法及CNN卷积层运算加速器,均将运算过程中所需要的权重矩阵H(h

此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例的方法的示意性流程图。

图2是本发明中所述分块图像F1在待处理特征图像中的相对位置关系分布示意图。

图3是本发明中所述分块图像F2在待处理特征图像中的相对位置关系分布示意图。

图4是本发明中所述分块图像F3在待处理特征图像中的相对位置关系分布示意图。

图5是本发明中所述分块图像F4在待处理特征图像中的相对位置关系分布示意图。

图6是本发明中所述矩阵C1、矩阵C2、矩阵C3和矩阵C4的排布位置示意图。

图7是本发明一个实施例的系统的示意性框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

图1是本发明一个实施例的CNN卷积层运算方法的示意性流程图。

如图1所示,该CNN卷积层运算方法包括:

步骤S1、读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

步骤S2、按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,并依据所述的权重矩阵H(h

步骤S3、判断整幅待处理特征图像是否读取完成,若是,则继续执行步骤S4,否则转而重复执行步骤S2;

步骤S4、按照各所述分块图像之间的相对位置关系,排布步骤S2中得到的各CNN卷积层局部运算结果,之后拼接得到整幅待处理特征图像对应的CNN卷积层运算结果。

其中,步骤S2中依据所述的权重矩阵H(h

步骤P1、将当前读入的分块图像转化为图像矩阵A(a

步骤P2、读取权重矩阵H(h

步骤P3、计算所得到的各局部矩阵的和,该和即为当前所读入的分块图像对应的CNN卷积层局部运算结果。

其中,步骤S2中每次读取到的待处理特征图像的分块图像互不相同;

其中,步骤S2中按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,读取方法包括:

在首次读取分块图像时,按预先设定的读取起始位置从待处理特征图像上读取一个满足所述图像大小阈值要求的分块图像;

在再次读取分块图像时,每个所读取到的分块图像均包含其各相邻分块图像的k-1行或k-1列像素。

可选地,作为本发明一个实施例,步骤P2中所涉及到的元素h

在p=0且q=0时,所涉及到的元素h

在p=0且q≠0时,所涉及到的元素h

在p≠0且q=0时,所涉及到的元素h

在p≠0且q≠0时,所涉及到的元素h

可选地,作为本发明一个实施例,步骤S1中将转化得到的权重矩阵H(h

可选地,作为本发明一个实施例,该CNN卷积层运算方法基于FPGA实现。

可选地,作为本发明一个实施例,步骤P2中采用乘法器阵列将每一个元素h

为了便于对本发明的理解,下面以本发明CNN卷积层运算方法的原理,结合实施例中对待处理特征图像进行CNN卷积层运算的过程,对本发明提供的CNN卷积层运算方法做进一步的描述。

具体的,所述CNN卷积层运算方法包括:

步骤L1、读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

待处理特征图像为需要进行CNN卷积层运算的图像。

待处理特征图像及其进行CNN卷积层运算所需的卷积核均预先存储在外部的DDR(Double Data Rate,双倍速率同步动态随机存储器)中。

在本实施例中,为描述方便,以k=3为例。相对应地,本实施例中用于对待处理特征图像进行CNN卷积层运算的卷积核为3×3的卷积核,进一步地,对应有权重矩阵H(h

为增加对权重矩阵H(h

步骤L2、按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,并依据所述的权重矩阵H(h

其中,该步骤L2中每次读取到的待处理特征图像的分块图像互不相同。

其中,步骤L2中按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,读取方法包括:

在首次读取分块图像时,按预先设定的读取起始位置从待处理特征图像上读取一个满足所述图像大小阈值要求的分块图像;

在再次读取分块图像时,每个所读取到的分块图像均包含其各相邻分块图像的两行或两列像素。

由此可见,在本实施例中,当待处理特征图像的大小小于或等于所述图像大小阈值时,步骤L2中按照预先设定的图像大小阈值首次读取到的待处理特征图像上的一个满足所述图像大小阈值要求的分块图像就是所述待处理特征图像本身;当待处理特征图像本身的大小大于所述图像大小阈值,步骤L2中按照预先设定的图像大小阈值首次读取到的待处理特征图像上的一个满足所述图像大小阈值要求的分块图像则是所述待处理特征图像的局部的图像。

在本实施例中,待处理特征图像的大小大于所述图像大小阈值,预先设定的图像大小阈值为10×9像素,所述待处理特征图像为15×12像素。

在本实施例中,该步骤L2按照预先设定的图像大小阈值,首次读取到待处理特征图像上的一个大小为10×9像素的分块图像F1(可预先设定读取起始位置为待处理特征图像左上角的像素点)。该分块图像F1在待处理特征图像(15×12像素)上的位置如图2所示。图2中虚线部分表示15×12像素的待处理特征图像,每个虚线框代表待处理特征图像的一个像素,图2中黑色矩形框框出的部分代表分块图像F1。

其中,该步骤L2中依据所述的权重矩阵H(h

步骤L21、将当前读入的分块图像F1转化为图像矩阵A(a

图像矩阵

步骤L21中将转化为的图像矩阵A(a

步骤L22、读取权重矩阵H(h

其中,该步骤L22中所涉及到的元素h

在p=0且q=0时,所涉及到的元素h

在p=0且q≠0时,所涉及到的元素h

在p≠0且q=0时,所涉及到的元素h

在p≠0且q≠0时,所涉及到的元素h

在本实施例中,当读取到权重矩阵H(h

图像矩阵A1中除去第n-k+1、n-k+2、n-k+3、…、n-1列及除去第m-k+1、m-k+2、m-k+3、…、m-1行之后余下的所有的行和列形成(m-k+1)×(n-k+1)矩阵,即为图像矩阵A1中除去第4、5列及除去第5、6行之后余下的所有的行和列拼接形成的5×4矩阵,记为乘积矩阵00,具体为:

在本实施例中,当读取到权重矩阵H(h

图像矩阵A1中除去第0、5列以及除去第5、6行之后余下的所有的行和列拼接形成的5×4矩阵,记为乘积矩阵01,具体为:

在本实施例中,当读取到权重矩阵H(h

图像矩阵A1中除去第4、5列及除去第0、6行的所有的行和列拼接形成的5×4矩阵,记为乘积矩阵10,具体为:

在本实施例中,当读取到权重矩阵H(h

图像矩阵A1中除去第0、5列及除去第0、6行的所有的行和列拼接形成的5×4矩阵,记为乘积矩阵11,具体为:

当读取到权重矩阵H(h

对于图像矩阵A1,在读取完权重矩阵H(h

可见本发明以卷积核中的每个权重(对应元素h

步骤L23、计算步骤L22中所得到的各局部矩阵的和,该和即为当前所读入的分块图像F1对应的CNN卷积层局部运算结果。

各局部矩阵的和,通过矩阵的加法进行运算。

步骤L3、判断整幅待处理特征图像是否读取完成,若是,则继续执行步骤L4,否则转而重复执行步骤L2。

在本实施例中,明显在读取分块图像F1后,整幅待处理特征图像没有读取完成,需要继续读取待处理特征图像的分块图像。

在本实施例中,在步骤L2中,按照预先设定的图像大小阈值(10×9像素),整幅待处理特征图像在完成读取后,总计被单独读取的分块图像除上述分块图像F1外,还有分块图像F2、分块图像F3和分块图像F4,其中,分块图像F2、分块图像F3和分块图像F4在整幅待处理特征图像上的位置示意图依次如图3、图4和图5所示。

对于分块图像F2、分块图像F3和分块图像F4,均可参照步骤L2中的分块图像F1,获取其各自对应的CNN卷积层局部运算结果(也是矩阵)。

需要说明的是,在每次读取新的分块图像之前,可先清除上一次存储的分块图像。

步骤L4、按照各所述分块图像之间的相对位置关系,排布步骤L2中得到的各CNN卷积层局部运算结果,之后拼接得到整幅待处理特征图像对应的CNN卷积层运算结果。

比如上述15×12像素的待处理特征图像,整幅待处理特征图像需要读取四次,对应4个分块图像,该4个分块图像按读取顺序依次为分块图像F1、分块图像F2、分块图像F3和分块图像F4,其中分块图像F1、分块图像F2、分块图像F3和分块图像F4在待处理特征图像中的相对位置关系分布示意图如图2所示。

记分块图像F1、分块图像F2、分块图像F3和分块图像F4各自对应的CNN卷积层局部运算结果依次记为矩阵C1、矩阵C2、矩阵C3和矩阵C4,则矩阵C1、矩阵C2、矩阵C3和矩阵C4的排布位置示意图如图6所示。将矩阵C1、矩阵C2、矩阵C3和矩阵C4按照其排布位置拼接形成一个拼接矩阵,该拼接矩阵即为本实施例中整幅待处理特征图像对应的CNN卷积层运算结果。将该CNN卷积层运算结果转化为图像输出,即得到本实施例中整幅待处理特征图像经过CNN卷积层运算后对应的图像。

本实施例中的CNN卷积层运算方法基于FPGA实现。

综上可见,本发明所述的CNN卷积层运算方法,将CNN卷积层运算过程中所需要的权重矩阵H(h

另外可见,本发明所述的CNN卷积层运算方法,还避免了对现有技术中特征图二维窗的使用,进而避免了对现有技术中用于生成所述特征图二维窗的控制模块的使用,一定程度上降低了CNN卷积运算的复杂度,便于实现。

图7是本发明所述CNN卷积层运算加速器的一个实施例。

如图7示,该CNN卷积层运算加速器100包括:

第一数据预读模块101,用于读入用于对待处理特征图像进行CNN卷积层运算的卷积核,并将读入的卷积核转化为权重矩阵H(h

第二数据预读模块102,用于按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像;

局部运算模块103,用于依据所述的权重矩阵H(h

判断模块104,用于判断整幅待处理特征图像是否读取完成;

卷积层运算结果输出模块105,用于在判断模块104判断整幅待处理特征图像已读取完成时,按照各所述分块图像之间的相对位置关系,排布局部运算模块103所得到的各CNN卷积层局部运算结果,之后拼接得到整幅待处理特征图像对应的CNN卷积层运算结果并输出;

调用模块106,用于在判断模块104判断整幅待处理特征图像未读取完成时调用数据预读模块继续执行;

其中,所述局部运算模块103包括:

图像矩阵转化单元1031,用于将当前读入的分块图像转化为图像矩阵A(a

局部矩阵获取单元1032,用于读取权重矩阵H(h

局部运算结果获取单元1033,用于计算所得到的各局部矩阵的和,该和即为当前所读入的分块图像对应的CNN卷积层局部运算结果。

其中,第二数据预读模块每次读取到的分块图像互不相同。

其中,第二数据预读模块102按照预先设定的图像大小阈值,读取待处理特征图像上的一个分块图像,读取方法包括:

在首次读取分块图像时,按预先设定的读取起始位置从待处理特征图像上读取一个满足所述图像大小阈值要求的分块图像;

在再次读取分块图像时,每个所读取到的分块图像均包含其各相邻分块图像的k-1行或k-1列像素。

可选地,作为本发明的一个实施例,所述局部矩阵获取单元1032中所涉及到的元素h

在p=0且q=0时,所涉及到的元素h

在p=0且q≠0时,所涉及到的元素h

在p≠0且q=0时,所涉及到的元素h

在p≠0且q≠0时,所涉及到的元素h

可选地,作为本发明的一个实施例,该CNN卷积层运算加速器还包括缓存;

第一数据预读模块101将其转化为的权重矩阵H(h

图像矩阵转化单元1031将其转化为的图像矩阵A(a

可选地,作为本发明的一个实施例,该CNN卷积层运算加速器基于FPGA实现。

可选地,作为本发明的一个实施例,读取到的待处理特征图像上的一个满足所述图像大小阈值要求的分块图像,为:

在待处理特征图像上未被读取过的部分的大小大于所述图像大小阈值时,读取待处理特征图像上未被读取过的部分上的与所述图像大小阈值大小相等的局部的图像;

在待处理特征图像上未被读取过的部分的大小小于或等于所述图像大小阈值时,读取待处理特征图像上未被读取过的全部图像。

具体实现时,局部矩阵获取单元1032可采用乘法器阵列将每一个元素h

本说明书中各个实施例之间相同相似的部分互相参见即可。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块及所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号