一种最大池化运算的方法及装置转让专利

申请号 : CN202210420612.0

文献号 : CN115828079B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王务仑

申请人 : 北京爱芯科技有限公司

摘要 :

本申请提供一种最大池化运算的方法及装置,采用芯片中的硬件资源计算一维的最大池化结果及对应的相对索引,由于芯片的硬件只能先读取一个区域内的数据,计算该区域中的最大值并得到相对索引,因此,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,再计算得到一维池化索引。之后,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,再计算得到一维池化索引的索引,最后根据一维池化索引及一维池化索引的索引得到二维池化索引。本实施例的最大池化运算通过芯片中的硬件资源计算,能够同时得到最大池化结果和对应的索引值,不依赖于GPU或CPU等通用控制单元,减少了计算量且控制逻辑易于实现。

权利要求 :

1.一种最大池化运算的方法,其特征在于,包括:

对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;

根据一维池化结果和一次相对索引,得到一维池化索引;

对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引;

根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,所述一维池化索引的索引用于指示二维池化索引;以及根据一维池化索引及一维池化索引的索引,得到二维池化索引;

所述对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,包括:在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;

其中,sizey_x等于图像第二方向上的尺寸,sizey_y由图像第一方向上的尺寸、做池化运算的滤波器在第一方向上的尺寸和做池化运算的滤波器在第一方向上的步进值计算得到;

所述对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,包括:在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;

其中,w_idx_x由图像第二方向上的尺寸、做池化运算的滤波器在第二方向上的尺寸和做池化运算的滤波器在第二方向上的步进值计算得到;

所述根据二维池化结果和二次相对索引,得到一维池化索引的索引,包括:根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及二次相对索引与第二增量相加,得到一维池化索引的索引。

2.如权利要求1所述的方法,其特征在于,所述根据一维池化结果和一次相对索引,得到一维池化索引,包括:对一次相对索引,根据图像第二方向上的尺寸进行放大;

根据图像尺寸及第一方向步进值,得到第一增量;以及

将放大后的一次相对索引与第一增量相加,得到一维池化索引。

3.如权利要求2所述的方法,其特征在于,所述对一次相对索引,根据图像第二方向上的尺寸进行放大,包括进行如下运算:idx_hw=argmax_y×size_x

其中,idx_hw为宽度放大后的一次相对索引,argmax_y为所述一次相对索引,size_x为图像第二方向上的尺寸。

4.如权利要求2所述的方法,其特征在于,所述根据图像尺寸及第一方向步进值,得到第一增量,包括:生成0到size_x×size_y‑1,共计size_x×size_y个数据的第一数据序列;

找出第一数据序列中所有满足(n//size_x)%offset_y==0的数据,并作为第一增量;其中,n为第一数据序列中的数据,size_x为图像第二方向上的尺寸,size_y为图像第一方向上的尺寸,offset_y为做池化运算的滤波器在第一方向上的步进值。

5.如权利要求1所述的方法,其特征在于,所述根据一维池化结果的尺寸及第二方向步进值,得到第二增量,包括:生成0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据的第二数据序列;

找出第二数据序列中所有满足(n%sizey_x)//offset_x==0的数据,并作为第二增量;其中,n为第二数据序列中的数据。

6.一种最大池化运算的装置,其特征在于,包括:

连续池化运算模块,用于对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引;所述对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,包括:在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;

其中,sizey_x等于图像第二方向上的尺寸,sizey_y由图像第一方向上的尺寸、做池化运算的滤波器在第一方向上的尺寸和做池化运算的滤波器在第一方向上的步进值计算得到;

所述对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,包括:在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;

其中,w_idx_x由图像第二方向上的尺寸、做池化运算的滤波器在第二方向上的尺寸和做池化运算的滤波器在第二方向上的步进值计算得到;

流式数据运算模块,用于对根据一维池化结果和一次相对索引,得到一维池化索引;根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,所述一维池化索引的索引用于指示二维池化索引;所述根据二维池化结果和二次相对索引,得到一维池化索引的索引,包括:根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及二次相对索引与第二增量相加,得到一维池化索引的索引跳读模块,用于根据一维池化索引及一维池化索引的索引,得到二维池化索引。

7.如权利要求6所述的装置,其特征在于,所述流式数据运算模块还用于:对一次相对索引,根据图像第二方向上的尺寸进行放大;

根据图像尺寸及第一方向步进值,得到第一增量;以及

放大后的一次相对索引与第一增量相加,得到一维池化索引。

8.如权利要求6所述的装置,其特征在于,所述流式数据运算模块还用于:根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及二次相对索引与第二增量相加,得到一维池化索引的索引。

说明书 :

一种最大池化运算的方法及装置

技术领域

[0001] 本申请涉及集成电路技术设计领域,具体而言,涉及一种最大池化运算的方法及装置。

背景技术

[0002] 最大池化是神经网络中常用的运算操作,他可以实现降低图像的感受野,实现图像的降维,通常会在卷积运算的后面增加一个池化的操作,例如最大池化就是用于计算最大池化的结果,在一些特殊的网络模型中,在得到最大池化的结果的同时,也需要得到最大池化结果在原图中的位置,从而用于将数据恢复成原有图像的尺寸。然而,现有的最大池化运算无法在得到最大池化结果的同时也生成最大池化索引,要想生成最大池化索引通常需要利用CPU或者GPU等通用计算单元的硬件设计方案来实现,这样的硬件设计方案将导致计算量巨大且控制复杂。

发明内容

[0003] 本申请实施例的目的在于提供一种最大池化运算的方法及装置,用以解决现有的最大池化运算无法在得到最大池化结果的同时也生成最大池化索引的问题。
[0004] 本申请实施例提供的一种最大池化运算的方法,包括:
[0005] 对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;
[0006] 根据一维池化结果和一次相对索引,得到一维池化索引;
[0007] 对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引;
[0008] 根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,一维池化索引的索引用于指示二维池化索引;以及
[0009] 根据一维池化索引及一维池化索引的索引,得到二维池化索引。
[0010] 上述技术方案中,可以采用芯片中的硬件资源计算一维的最大池化结果及对应的相对索引,由于芯片的硬件只能先读取一个区域内的数据,计算该区域中的最大值并得到相对索引,因此,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,再计算得到一维池化索引。之后,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,再计算得到一维池化索引的索引,最后根据一维池化索引及一维池化索引的索引得到二维池化索引。因此,本实施例的最大池化运算方法能够同时得到最大池化结果和对应的索引值。
[0011] 在一些可选的实施方式中,根据一维池化结果和一次相对索引,得到一维池化索引,包括:
[0012] 对一次相对索引,根据图像第二方向上的尺寸进行放大;
[0013] 根据图像尺寸及第一方向步进值,得到第一增量;以及
[0014] 将放大后的一次相对索引与第一增量相加,得到一维池化索引。
[0015] 在一些可选的实施方式中,根据二维池化结果和二次相对索引,得到一维池化索引的索引,包括:
[0016] 根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及[0017] 二次相对索引与第二增量相加,得到一维池化索引的索引。
[0018] 在一些可选的实施方式中,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,包括:
[0019] 在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;
[0020] 其中,sizey_x=size_x,sizey_y=(size_y‑filter_y)/offset_y+1;size_x为图像第二方向上的尺寸,size_y为图像第一方向上的尺寸,filter_y为做池化运算的滤波器在第一方向上的尺寸,offset_y为做池化运算的滤波器在第一方向上的步进值。
[0021] 在一些可选的实施方式中,对一次相对索引,根据图像第二方向上的尺寸进行放大,包括进行如下运算:
[0022] idx_hw=argmax_y×size_x
[0023] 其中,idx_hw为宽度放大后的一次相对索引,argmax_y为一次相对索引。
[0024] 在一些可选的实施方式中,根据图像尺寸及第一方向步进值,得到第一增量,包括:
[0025] 生成0到size_x×size_y‑1,共计size_x×size_y个数据的第一数据序列;
[0026] 找出第一数据序列中所有满足(n//size_x)%offset_y==0的数据,并作为第一增量;其中,n为第一数据序列中的数据。
[0027] 在一些可选的实施方式中,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,包括:
[0028] 在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;
[0029] 其中,w_idx_x=(size_x‑filter_x)/offset_x+1;filter_x为做池化运算的滤波器在第二方向上的尺寸,offset_x为做池化运算的滤波器在第二方向上的步进值。
[0030] 在一些可选的实施方式中,根据一维池化结果的尺寸及第二方向步进值,得到第二增量,包括:
[0031] 生成0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据的第二数据序列;
[0032] 找出第二数据序列中所有满足(n%sizey_x)//offset_x==0的数据,并作为第二增量;其中,n为第二数据序列中的数据。
[0033] 本申请实施例提供的一种最大池化运算的装置,包括:
[0034] 连续池化运算模块,用于对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引;
[0035] 流式数据运算模块,用于对根据一维池化结果和一次相对索引,得到一维池化索引;根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,一维池化索引的索引用于指示二维池化索引;
[0036] 跳读模块,用于根据一维池化索引及一维池化索引的索引,得到二维池化索引。
[0037] 上述技术方案中,采用芯片中的硬件资源计算一维的最大池化结果及对应的相对索引,由于芯片的硬件只能先读取一个区域内的数据,计算该区域中的最大值并得到相对索引,因此,利用连续池化运算模块,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引。再利用流式数据运算模块计算得到一维池化索引。之后,利用连续池化运算模块,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引。再利用流式数据运算模块计算得到一维池化索引的索引,最后利用跳读模块根据一维池化索引及一维池化索引的索引得到二维池化索引。本实施例的最大池化运算通过芯片中的硬件资源计算,能够同时得到最大池化结果和对应的索引值,不依赖于GPU或CPU等通用控制单元,减少了计算量且控制逻辑易于实现。
[0038] 在一些可选的实施方式中,流式数据运算模块还用于:
[0039] 对一次相对索引,根据图像第二方向上的尺寸进行放大;
[0040] 根据图像尺寸及第一方向步进值,得到第一增量;
[0041] 放大后的一次相对索引与第一增加相加,得到一维池化索引。
[0042] 在一些可选的实施方式中,流式数据运算模块还用于:
[0043] 根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及[0044] 二次相对索引与第二增量相加,得到一维池化索引的索引。
[0045] 在一些可选的实施方式中,连续池化运算模块,还用于:
[0046] 在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;
[0047] 其中,sizey_x=size_x,sizey_y=(size_y‑filter_y)/offset_y+1;size_x为图像第二方向上的尺寸,size_y为图像第一方向上的尺寸,filter_y为做池化运算的滤波器在第一方向上的尺寸,offset_y为做池化运算的滤波器在第一方向上的步进值。
[0048] 在一些可选的实施方式中,流式数据运算模块还用于如下运算:
[0049] idx_hw=argmax_y×size_x
[0050] 其中,idx_hw为宽度放大后的一次相对索引,argmax_y为一次相对索引。
[0051] 在一些可选的实施方式中,流式数据运算模块还用于:
[0052] 生成0到size_x×size_y‑1,共计size_x×size_y个数据的第一数据序列;
[0053] 找出第一数据序列中所有满足(n//size_x)%offset_y==0的数据,并作为第一增量;其中,n为第一数据序列中的数据。
[0054] 在一些可选的实施方式中,连续池化运算模块,还用于:
[0055] 在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;
[0056] 其中,w_idx_x=(size_x‑filter_x)/offset_x+1;filter_x为做池化运算的滤波器在第二方向上的尺寸,offset_x为做池化运算的滤波器在第二方向上的步进值。
[0057] 在一些可选的实施方式中,流式数据运算模块还用于:
[0058] 生成0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据的第二数据序列;
[0059] 找出第二数据序列中所有满足(n%sizey_x)//offset_x==0的数据,并作为第二增量;其中,n为第二数据序列中的数据。

附图说明

[0060] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0061] 图1为本申请实施例提供的一种最大池化运算的方法步骤流程图;
[0062] 图2为本申请实施例的图像、一维池化结果和一次相对索引的示意图;
[0063] 图3为本申请实施例提供的一次相对索引放大之后的示意图;
[0064] 图4为本申请实施例提供的第一数据序列和第一增量的示意图;
[0065] 图5为本申请实施例提供的一维池化索引的示意图;
[0066] 图6为本申请实施例提供的二次相对索引的示意图;
[0067] 图7为本申请实施例提供的第二增量的示意图;
[0068] 图8为本申请实施例提供的一维池化索引的索引和二维池化索引的示意图;
[0069] 图9为本申请实施例提供的一种最大池化运算的装置的功能模块图。
[0070] 图标:1‑连续池化运算模块,2‑流式数据运算模块,3‑跳读模块。

具体实施方式

[0071] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
[0072] 请参照图1,图1为本申请实施例提供的一种最大池化运算的方法步骤流程图,包括:
[0073] 步骤S1、对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;
[0074] 步骤S2、根据一维池化结果和一次相对索引,得到一维池化索引;
[0075] 步骤S3、对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引;
[0076] 步骤S4、根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,一维池化索引的索引用于指示二维池化索引;以及
[0077] 步骤S5、根据一维池化索引及一维池化索引的索引,得到二维池化索引。
[0078] 本申请实施例中,采用芯片中的硬件资源计算一维的最大池化结果及对应的相对索引,由于芯片的硬件只能先读取一个区域内的数据,计算该区域中的最大值并得到相对索引,因此,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,再计算得到一维池化索引。之后,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,再计算得到一维池化索引的索引,最后根据一维池化索引及一维池化索引的索引得到二维池化索引。本实施例的最大池化运算通过芯片中的硬件资源计算,能够同时得到最大池化结果和对应的索引值,不依赖于GPU或CPU等通用控制单元,减少了计算量且控制逻辑易于实现。
[0079] 需明确的是,在一些可选的实施方式中,上述步骤的计算过程采用GPU或CPU等通用计算单元来实现,本实施例的方法同样能够得到最大池化结果和对应的索引值。
[0080] 为了描述方便,在以下的一个或多个实施例中,将以滤波器尺寸为filter_y=3,filter_x=3,步进值offset_y=3,offset_x=3的最大池化为例进行说明。
[0081] 在一些可选的实施方式中,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引,包括:
[0082] 在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;
[0083] 其中,sizey_x=size_x,sizey_y=(size_y‑filter_y)/offset_y+1;size_x为图像第二方向上的尺寸,size_y为图像第一方向上的尺寸,filter_y为做池化运算的滤波器在第一方向上的尺寸,offset_y为做池化运算的滤波器在第一方向上的步进值。
[0084] 请参照图2,图2为本申请实施例的图像、一维池化结果和一次相对索引的示意图,对尺寸为size_y×size_x(即6×6)的图像进行第一方向(y轴方向)的连续池化运算,即对每个3×1区域均进行最大池化,所有的3×1区域组成了整个图像,例如从左上角的包含a0,a1,a2的3×1区域开始,依次对向右平移的3×1区域进行最大池化,在完成右上角的包含a5,a11,a17的3×1区域的最大池化后,从与a0,a1,a2的3×1区域相邻(即左下角)的包含a18,a24,a30的3×1区域开始依次对向右平移的3×1区域进行最大池化,直到完成右下角的包含a23,a29,a35的3×1区域的最大池化,得到一维池化结果data_y,一维池化结果data_y的尺寸为sizey_x×sizey_y,其中sizey_x=size_x=6,即仍为计算前的图像宽度size_x,sizey_y为计算后的图像的尺寸,计算公式为sizey_y=(size_y‑filter_y)/offset_y+1=2,其中size_y代表原图在y方向的尺寸(值为6),filter_y为做池化运算的滤波器在y方向上尺寸(值为3),offset_y为做池化运算的滤波器在y方向上的步进值(值为3),并得到相同尺寸的一次相对索引argmax_y,一次相对索引argmax_y中ay0‑ay11的值为
0,1,2中的一个,ay0‑ay11分别表示每一3×1区域内的索引,所以将ay0‑ay11称为一次相对索引argmax_y。
[0085] 在一些可选的实施方式中,根据一维池化结果和一次相对索引,得到一维池化索引,包括:
[0086] 步骤S21、对一次相对索引,根据图像第二方向上的尺寸进行放大;
[0087] 步骤S22、根据图像尺寸及第一方向步进值,得到第一增量;以及[0088] 步骤S23、将放大后的一次相对索引与第一增量相加,得到一维池化索引。
[0089] 在一些可选的实施方式中,对一次相对索引,根据图像第二方向上的尺寸进行放大,包括进行如下运算:
[0090] idx_hw=argmax_y×size_x
[0091] 其中,idx_hw为宽度放大后的一次相对索引,argmax_y为一次相对索引。
[0092] 请参照图3,图3为本申请实施例提供的一次相对索引放大之后的示意图,此处采用流式数据运算模块对一次相对索引argmax_y中每一数据均乘以图像在x方向上的尺寸size_x,例如hw0=ay0×6。
[0093] 在一些可选的实施方式中,根据图像尺寸及第一方向步进值,得到第一增量,包括:
[0094] 生成0到size_x×size_y‑1,共计size_x×size_y个数据的第一数据序列;
[0095] 找出第一数据序列中所有满足(n//size_x)%offset_y==0的数据,并作为第一增量;其中,n为第一数据序列中的数据。
[0096] 请参照图4,图4为本申请实施例提供的第一数据序列和第一增量的示意图。由软件生成一组数据序列,从0到size_x×size_y‑1,共计size_x×size_y个数据,本实施例生成0~35的第一数据序列,将其中符合条件的数据都取出来,组成新的数据序列并作为第一增量hwe,其中判断条件如下:假设数据为n,如果n满足(n//size_x)%offset_y==0,其中//为整除运算,%为取余运算,例如当n=2,(2//6)%3=0,满足要求,将对应的数据选出来。
[0097] 请参照图5,图5为本申请实施例提供的一维池化索引的示意图。将放大后的一次相对索引idx_hw与第一增量hwe相加,得到一维池化索引offset_h,这样得到的一维池化索引offset_h中每一数据的值均为0‑35中的某一个,一维池化索引offset_h即表示图像的第一次最大池化的索引。
[0098] 在一些可选的实施方式中,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引,包括:
[0099] 在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;
[0100] 其中,w_idx_x=(size_x‑filter_x)/offset_x+1;filter_x为做池化运算的滤波器在第二方向上的尺寸,offset_x为做池化运算的滤波器在第二方向上的步进值。
[0101] 请参照图6,图6为本申请实施例提供的二次相对索引的示意图。对一维池化结果data_y进行x方向的连续池化运算,即对每个1×3区域均进行最大池化,
[0102] 所有的1×3区域组成了整个一维池化结果data_y,例如从左上角的包含b0,b1,b2的1×3区域开始,依次对向右平移的1×3区域进行最大池化,在完成右上角的包含b3,b4,b5的1×3区域的最大池化后,从与b0,b1,b2的3×1区域相邻(即左下角)的包含b6,b7,b8的1×3区域开始依次对向右平移的1×3区域进行最大池化,直到完成右下角的包含b9,b10,b11的1×3区域的最大池化,得到二次相对索引w_idx,其中得到的二次相对索引w_idx的y方向的尺寸为sizey_y(值为2),x方向的尺寸w_idx_x=(size_x‑filter_x)/offset_x+1=
2,其中size_x代表图像在X方向的尺寸(值为6),filter_x为做池化运算的滤波器在x方向上尺寸(值为3),offset_x为做池化运算的滤波器在y方向上的步进值(值为3),得到的二次相对索引w_idx即为2×2的数据,二次相对索引w_idx中每一数据的值为0,1,2中的一个,wi0‑wi3分别表示每一1×3区域内的索引,所以将wi0‑wi3称为二次相对索引w_idx。
[0103] 在一些可选的实施方式中,根据二维池化结果和二次相对索引,得到一维池化索引的索引,包括:
[0104] 步骤S41、根据一维池化结果的尺寸及第二方向步进值,得到第二增量;
[0105] 步骤S42、二次相对索引与第二增量相加,得到一维池化索引的索引。
[0106] 步骤S41中,根据一维池化结果的尺寸及第二方向步进值,得到第二增量,包括:
[0107] 生成0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据的第二数据序列;
[0108] 找出第二数据序列中所有满足(n%sizey_x)//offset_x==0的数据,并作为第二增量;其中,n为第二数据序列中的数据。
[0109] 请参照图7,图7为本申请实施例提供的第二增量的示意图。由软件生成一组数据序列,从0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据,将其中符合条件的数据取出来,组成新的数据序列并作为第二增量hwc,本实施例中,sizey_x=6,sizey_y=2。判断条件如下:假设数据为n,如果n满足(n%sizey_x)//offset_x==0,其中//为整除,%为取余运算,则将对应的数据选出来,得到第二增量hwc,例如sizey_x=6,offset_x=3,n=3时,满足条件,即需要选出。
[0110] 请参照图8,图8为本申请实施例提供的一维池化索引的索引和二维池化索引的示意图。二次相对索引w_idx与第二增量hwc相加,得到一维池化索引的索引sg_idx。从一维池化结果offset_h的数据中,将索引值为sg_idx的数据全部取出来,即为最终所需的二维池化索引,例如,假设得到sg_idx的数据为2,5,8,9,则将一维池化结果offset_h中对应位置的数据取出来即可,即为oh2,oh5,oh8,oh9。
[0111] 请参照图9,图9为本申请实施例提供的一种最大池化运算的装置的功能模块图,该装置包括连续池化运算模块1、流式数据运算模块2和跳读模块3。其中,连续池化运算模块1,用于对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引;对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引。流式数据运算模块2,用于对根据一维池化结果和一次相对索引,得到一维池化索引;根据二维池化结果和二次相对索引,得到一维池化索引的索引;其中,一维池化索引的索引用于指示二维池化索引。跳读模块3,用于根据一维池化索引及一维池化索引的索引,得到二维池化索引。
[0112] 本申请实施例中,采用芯片中的硬件资源计算一维的最大池化结果及对应的相对索引,由于芯片的硬件只能先读取一个区域内的数据,计算该区域中的最大值并得到相对索引,因此,利用连续池化运算模块1,对图像进行第一方向的连续池化运算,得到一维池化结果和一次相对索引。再利用流式数据运算模块2计算得到一维池化索引。之后,利用连续池化运算模块1,对一维池化结果进行第二方向的连续池化运算,得到二维池化结果和二次相对索引。再利用流式数据运算模块2计算得到一维池化索引的索引,最后利用跳读模块3根据一维池化索引及一维池化索引的索引得到二维池化索引。本实施例的最大池化运算通过芯片中的硬件资源计算,能够同时得到最大池化结果和对应的索引值,不依赖于GPU或CPU等通用控制单元,减少了计算量且控制逻辑易于实现。
[0113] 在一些可选的实施方式中,流式数据运算模块2还用于:对一次相对索引,根据图像第二方向上的尺寸进行放大;根据图像尺寸及第一方向步进值,得到第一增量;放大后的一次相对索引与第一增加相加,得到一维池化索引。
[0114] 在一些可选的实施方式中,流式数据运算模块2还用于:根据一维池化结果的尺寸及第二方向步进值,得到第二增量;以及,二次相对索引与第二增量相加,得到一维池化索引的索引。
[0115] 在一些可选的实施方式中,连续池化运算模块1采用能够进行一维池化运算的单元,可以得到一维池化的索引。流式数据运算模块2采用FMA(可以对流式数据进行运算的单元),其可以进行加减乘除等逻辑运算。跳读模块3采用支持跳读功能的rdma(用于读的直接存储访问DMA)。
[0116] 在一些可选的实施方式中,连续池化运算模块,还用于:在第一次池化运算过程中,对第一方向的每一划分区域均进行池化运算,第一方向步进值为offset_y,得到一维池化结果的尺寸为sizey_x×sizey_y;其中,sizey_x=size_x,sizey_y=(size_y‑filter_y)/offset_y+1;size_x为图像第二方向上的尺寸,size_y为图像第一方向上的尺寸,filter_y为做池化运算的滤波器在第一方向上的尺寸,offset_y为做池化运算的滤波器在第一方向上的步进值。
[0117] 在一些可选的实施方式中,流式数据运算模块还用于如下运算:idx_hw=argmax_y×size_x。其中,idx_hw为宽度放大后的一次相对索引,argmax_y为一次相对索引。
[0118] 在一些可选的实施方式中,流式数据运算模块还用于:生成0到size_x×size_y‑1,共计size_x×size_y个数据的第一数据序列;找出第一数据序列中所有满足(n//size_x)%offset_y==0的数据,并作为第一增量;其中,n为第一数据序列中的数据。
[0119] 在一些可选的实施方式中,连续池化运算模块,还用于:在第二次池化运算过程中,对第二方向的每一划分区域均进行池化运算,第二方向步进值为offset_x,得到二次相对索引的尺寸为sizey_y×w_idx_x;其中,w_idx_x=(size_x‑filter_x)/offset_x+1;filter_x为做池化运算的滤波器在第二方向上的尺寸,offset_x为做池化运算的滤波器在第二方向上的步进值。
[0120] 在一些可选的实施方式中,流式数据运算模块还用于:生成0到sizey_x×sizey_y‑1,共计sizey_x×sizey_y个数据的第二数据序列;找出第二数据序列中所有满足(n%sizey_x)//offset_x==0的数据,并作为第二增量;其中,n为第二数据序列中的数据。
[0121] 在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0122] 另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0123] 再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0124] 在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
[0125] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。