用于卷积的方法、计算设备和计算机可读存储介质与流程

文档序号:24559257发布日期:2021-04-06 12:09阅读:66来源:国知局
用于卷积的方法、计算设备和计算机可读存储介质与流程

本公开的实施例总体上涉及机器学习领域,更具体地涉及一种用于卷积的方法、计算设备和计算机可读存储介质。



背景技术:

人工智能中的一种典型计算为卷积计算。卷积计算是将卷积核中的权重和对应的输入像素块相乘再相加进而生成对应输出特征的值。在进行块卷积(blockconvolution)时,往往会丢失图像周边的像素。当使用小内核时,对于任何给定的卷积,可能只会损失几个像素。然而,当应用许多连续的卷积层时,如果每层都有丢失,最后图像丢失可能会很严重。

因此,在进行卷积前,通常会通过在输入的原始图像的边界周围添加额外的像素,即对原始图像进行填充(padding),然后再对经填充的填充图像进行卷积,从而通过增加图像的有效尺寸,以避免像素信息丢失。



技术实现要素:

本公开提供了一种用于卷积的方法、计算设备和计算机可读存储介质,能够提供一种用于卷积计算的像素填充的高速缓存实现。

根据本公开的第一方面,提供了一种用于卷积的方法。该方法包括:确定用于存储填充块的多条高速缓存线,填充块为组成填充图像的多个填充块中的一个填充块,并且填充块包括多个像素;以及基于过滤器的大小,从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素,过滤器用于对填充图像进行卷积。

根据本发明的第二方面,还提供了一种计算设备,该设备包括:至少一个处理单元;以及至少一个存储器,至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令,指令当由至少一个处理单元执行时,使得设备执行根据第一方面的方法的步骤。

根据本公开的第三方面,还提供了一种计算机可读存储介质。该计算机可读存储介质上存储有计算机程序,计算机程序被机器执行时执行本公开的第一方面的方法。

在一些实施例中,确定属于填充块的像素包括:基于过滤器的大小确定填充大小;以及基于填充大小,从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素。

在一些实施例中,确定用于存储填充块的多条高速缓存线包括:基于填充块的类型,确定用于存储填充块的多条高速缓存线。

在一些实施例中,确定属于填充块的像素包括:通过使用多个高速缓存线的虚拟地址,从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素。

在一些实施例中,该方法还包括将确定的属于填充图像的像素加载到像素缓冲区。

在一些实施例中,还方法还包括:将与填充图像的权重有关的信息加载到权重缓冲区。

在一些实施例中,原始图像为8*8像素。

在一些实施例中,多个填充块中的一个填充块为8*8像素。

在一些实施例中,多条高速缓存线包括第一高速缓存线、第二高速缓存线、第三高速缓存线和第四高速缓存线。

在一些实施例中,过滤器的大小为3*3,填充图像的填充大小为1,并且从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素包括:从第一高速缓存线的像素集合中确定属于填充块的1个像素;从第二高速缓存线的像素集合中确定属于填充块的7个像素;从第三高速缓存线的像素集合中确定属于填充块的7个像素;以及从第四高速缓存线的像素集合中确定属于填充块的49个像素。

在一些实施例中,过滤器的大小为7*7,填充图像的填充大小为3,并且从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素包括:从第一高速缓存线的像素集合中确定属于填充块的9个像素;从第二高速缓存线的像素集合中确定属于填充块的15个像素;从第三高速缓存线的像素集合中确定属于填充块的15个像素;以及从第四高速缓存线的像素集合中确定属于填充块的25个像素。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图用于更好地理解本方案,不构成对本申请的限定。

图1示意性示出了传统的用于卷积计算的方法的示意图;

图2示意性示出了本公开的多个实施例能够在其中实现的计算设备的示意图;

图3示出了根据本公开的实施例的用于卷积的方法的流程图;

图4a和图4b分别示出了根据本公开的实施例的填充图像和填充块的示意图;

图5示出了根据本公开的实施例的填充块的示意图;

图6a和6b示出了根据本公开的实施例的填充图像和填充块的示意图;以及

图7a和7b示出了根据本公开的实施例的填充图像和填充块的示意图。

这些附图中,相同或相似参考符号用于表示相同或相似元素。

具体实施方式

以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在本公开内容的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

如前文所述,在进行卷积前,通常会在输入的原始图像的边界周围添加额外像素以生成填充图像,即对原始图像进行填充(padding)。以下结合图1说明传统的用于卷积计算的方法。图1示意性示出了传统的用于卷积计算的方法100的示意图。

如图1所示,在对2x2像素的原始图像105进行卷积前,首先对该2*2像素的原始图像105进行填充,其中该原始图像105由像素5、6、9和10组成。在一个示例中,从图像的角度看,像素5、6、9和10中的每个像素可以包括红绿蓝(rgb)三种颜色的信息。在另一个示例中,如果是物品,则例如当该物品为口红时,每个像素可以包括口红的颜色、口红的型号、口红的外观等信息。换句话说,每个像素都可以具有多个(例如,3个、几百个、或几千个)特征。

在图1所示的示例中,填充大小被定义为1。换句话说,将在原始图像105外面填充一圈像素(即包括像素0、1、2、3、4、7、8、11、12、13、14和15),从而获得4*4像素的填充图像110。

之后,可以对上述填充图像110进行过滤。例如,通过使用过滤器的大小(即卷积核的大小)为3x3(未示出)的过滤器进行卷积计算。在进行过滤时,上述4*4像素的填充图像110将被分成9个2*2像素,如图1所示。此外,每个2*2像素具有相应的权重(例如,权重0至权重8),以用于卷积计算,从而得到2*2像素的输出图像138(例如,包括5’、6’、9’和10’)。

更具体地,例如在对4x4像素的填充图像110上进行3x3卷积核(未示出)的计算,针对3x3卷积核,包括9个权重,即初始权重(weight0)到第八权重(weight8)。由此,如图1所示,2x2像素120中的每个像素具有初始权重;2x2像素122中的每个像素具有第一权重;2x2像素124具有第二权重;2x2像素126中的每个像素具有第三权重;2x2像素128中的每个像素具有第四权重;2x2像素130中的每个像素具有第五权重;2x2像素132中的每个像素具有第六权重;2x2像素134中的每个像素具有第七权重;2x2像素136中的每个像素具有第八权重。由此,将加载对应于每个权重的2x2像素的数据,以用于卷积。

此外,可以理解,上述权重是可以被调整的。具体地,人工智能的过程可以包括训练(training)和学习(learning)两个部分。在进行训练后,将得到相应的权重。此外,当训练的数据量越来越庞大后,权重将可以被不断调整,从而得到统计上的一个结果。例如,在统计了100个样本以后,权重0被确定为0.5。之后,当例如获得另外100个样本后,可能发现将权重0调整为0.56比较合适。换句话说,在不断的训练过程中,权重0-8的值可以根据训练的结果不断调整不断变化。同时,在经过了一定时间的训练后,上述权重值将趋于稳定,从而得到一组合适的权重值。

综上,卷积和填充(padding)是人工智能中一项很重要的课题。由此,当需要进行卷积时,如何将输入的原始图像105的填充图像110进行加载时(即,如何加载填充图像110),特别是原始图像105的周围像素(即,被填充的像素),成为实现加载像素以进行后续的卷积计算的过程中的一个不得不考虑的问题。

为此,针对上述提及的所需解决的问题,本公开的实施方式提供了一种用于卷积的方法,旨在至少部分地解决上述问题。在本公开的方案中,首先确定用于存储填充块的多条高速缓存线,填充块为组成填充图像的多个填充块中的一个填充块,并且填充块包括多个像素。然后,基于过滤器的大小,从多条高速缓存线中的至少一条高速缓存线存储的像素集合中确定属于填充块的像素,过滤器用于对填充图像进行卷积。由此,提供了一种用于卷积计算的像素填充的高速缓存实现,从而能够获得组成填充图像的填充块的像素,进而将获得的填充块的像素组合成完整的填充图像,以用于卷积。

下面将结合图2至图7来具体描述本公开的实施方式。

图2示意性示出了本公开的多个实施例能够在其中实现的计算设备200的示意图。如图2所示,计算设备200至少包括处理器210和高速缓存220。在一个示例中,计算设备200例如可以用于芯片。在另一个示例中,计算设备200可以用于图像处理单元(gpu)加速的神经网络计算。

处理器210用于对从高速缓存加载的像素进行处理。在一个实施例中,处理器210可以为通用矩阵乘单元(gemm)。在其他实施例中,处理器150可以为其他类型的处理器,本公开的范围在此方面不受限制。

高速缓存220用于缓存数据。在一个示例中高速缓存220可以缓存有用于卷积的原始图像。高速缓存220可以包括多个高速缓存线230。每个高速缓存线230具有一个虚拟地址,从而使得处理器210可以利用该虚拟地址从高速缓存线230加载数据。

在一些实施例中,计算设备200还可以包括第一缓冲区240和第二缓冲区250。在一些示例中,第一缓冲区240可以用于存储与原始图像或者填充图像的像素有关的数据。在一些示例中,第二缓冲区250可以用于存储与填充图像的权重有关的数据。例如,从高速缓存220的高速缓存线230加载的与填充图像的像素有关的数据可以被加载到第一缓冲区240,以便于处理器210读取。此外,在另一示例中,从高速缓存220的高速缓存线230加载的与填充图像权重有关的数据可以被加载到第一缓冲区240,以便于处理器210读取。

以下结合图3和图4a-4b说明用于卷积的方法。图3示出了根据本公开的实施例的用于卷积的方法的流程图。应当理解,方法300可以包括未示出的附加组成部分、动作和/或可以省略所示出的组成部分、动作,本公开的范围在此方面不受限制。图4a和图4b分别示出了根据本公开的实施例的填充图像和填充块的示意图。应当理解,图4a和图4b仅示出的填充图像和/或填充块的根据本公开的实施例的示例。在其他示例实施例中,填充图像也可以为其他尺寸或者以其他尺寸被存储。本公开的范围在此方面不受限制。

如图3所示,在步骤310,计算设备200可以确定用于存储填充块的多条高速缓存线230。填充块为组成填充图像的多个填充块中的一个填充块,并且填充块包括多个像素。

在一些示例中,原始图像可以为m*n像素,其中m和n为正整数。例如,原始图像可以为8*8像素。在一些示例中,高速缓存线230包括一个像素集合。例如,一个高速缓存线230可以包括原始图像的8*8像素的像素集合,由此该像素集合包括64个像素。

图4a和图4b分别示出了根据本公开的实施例的填充图像和填充块示意图。下面将参考图4a和4b对填充图像和填充块以及其在高速缓存220中的存储进行描述。

如图4a所示,原始图像410(即输入图像)被存储在高速缓存线4中。在一些实施例中,可以使用3*3的过滤器对上述8*8像素的原始图像410或对10*10像素的填充图像420进行卷积。在如图4a所述的实施例中,填充大小为1(即,在原始图像410周围添加一圈像素)。可以理解,填充大小也可以为2、3等其他数目,本公开的保护范围不限于此。

在如图4a所示的具体示例中,填充图像420包括存储在高速缓存线4中的8*8像素的原始图像410以及经填充的填充图像420的其他部分的像素。如图4所示,填充图像420还包括被存储在高速缓存线0中的1个像素,被存储在高速缓存线1中的8个像素,被存储在高速缓存线2中的1个像素,被存储在高速缓存线3中的8个像素,被存储在高速缓存线5中的8个像素,被存储在高速缓存线6中的1个像素,被存储在高速缓存线7中的8个像素,被存储在高速缓存线8中的1个像素。

在一个示例中,填充图像420可以被分成多个填充块。图4b示出了根据本公开的实施例的填充块的示意图。可以理解,图4b仅示出了将填充图像420划分为多个填充块的一种划分方式。也可以使用与图4b不同的划分方式将填充图像420划分为多个填充块。本公开的保护范围不限于此。

如图4b所示,组成填充图像420的多个填充块可以为不同的类型的填充块。例如,多个填充块可以包括以下四种类型的填充块:填充块422(也可以被称为填充块0主体类型的填充块)、填充块424(也可以被称为填充块1主体类型的填充块)、填充块426(也可以被称为填充块0尾部类型的填充块)、以及填充块428等(也可以被称为填充块1尾部类型的填充块),如图4b所示。

在一些实施例中,填充块422可以包括填充图像420的64个像素,填充块424可以包括填充图像420的16个像素(即被存储在被存储与存储原始图像410的高速缓存线4相邻的高速缓存5中的左边两列像素)和/或高速缓存线5中的其他一些像素,填充块426可以包括填充图像420的16个像素,并且填充块428可以包括填充图像420的4个像素以及被存储与原始图像410的高速缓存线4相邻的高速缓存线8中的一些像素。

由此,在步骤310,计算设备200确定用于存储填充块422的多条高速缓存线230(即,高速缓存线0、1、2、3)。填充块422为组成填充图像420的多个填充块中的一个填充块,并且填充块包括64个像素。

可以理解,填充图像420也可以被分成其他数目的填充块。此外,可以以图4b以外的其他方式将填充图像420分成其他形式的多个填充块。本公开的范围在上述这些方面不受限制。

在步骤320,计算设备200基于过滤器的大小,从多条高速缓存线230中的至少一条高速缓存线230存储的像素集合中确定属于填充块的像素,过滤器用于对填充图像420进行卷积。由此,提供了一种用于卷积计算的像素填充的高速缓存220实现,从而能够获得组成填充图像420的填充块(例如,填充块422、424、426和428)的像素,进而将获得的填充块的像素组合成完整的填充图像420,以用于卷积。

图5示出了根据本公开的实施例的填充块422的示意图。在一个示例中,过滤器大小可以为3*3如图4a和图4b所示的示例,计算设备200基于该过滤器大小,从高速缓存线0的像素集合中确定属于填充块422的1个像素;从高速缓存线1的像素集合中确定属于填充块422的7个像素;从高速缓存线3的像素集合中确定属于填充块422的7个像素;并且从高速缓存线4的像素集合中确定属于填充块422的49个像素,如图5所示。在一个根据的示例中,可以确定高速缓存线0的虚拟地址,然后通过使用高速缓存线0的虚拟地址,从高速缓存线0中确定属于填充块422的一个像素。

在另一个示例中,根据需要或软件配置,计算设备200可以基于该过滤器大小,从高速缓存线1的像素集合中确定属于填充块422的7个像素,而不需要确定其他的高速缓存线中的属于填充块422的像素。由此,可以节省需要加载的像素的数目。

类似地,在另一个示例中,如图4所示,过滤器大小为3*3。计算设备200基于该过滤器大小,从高速缓存线1的像素集合中确定属于填充块424的1个像素;从高速缓存线2的像素集合中确定属于填充块424的1个像素;从高速缓存线4的像素集合中确定属于填充块424的7个像素;并且从高速缓存线5的像素集合中确定属于填充块424的7个像素。类似的,可以分别从高速缓存线3、4、6和7中确定属于填充块426的像素,以及从高速缓存线4、5、7和8中确定属于填充块428的像素。由此,可以通过上述分别获得填充图像420的像素,以用于组成填充图像420。在获得属于填充块422、424、426和418的像素后,就可以将向这四个填充块拼成填充图像420,以对填充图像420而并非原始图像410进行卷积计算,从而降低在卷积过程中的像素数据丢失率,提高计算精确度。

图6a和6b以及图7a和7b分别示出了根据本公开的实施例的填充图像420和填充块的示意图。在一些实例中,如图6所示,当过滤器大小为3*3时,计算设备200基于该过滤器大小,确定填充大小为1,即在原始图像410周围填充一圈的像素。由此,对于填充块422来说,计算设备200可以从高速缓存线0的像素集合中确定属于填充块422的像素63;从高速缓存线1的像素集合中确定属于填充块422的像素56-62;从高速缓存线3的像素集合中确定属于填充块422的像素7、15、23、31、39、47和55;并且从高速缓存线4的像素集合中确定属于填充块422的像素0-6、8-14、16-22、24-30、32-38、40-46、48-54等,如图6b所示。

在另一些实例中,如图7所示,当过滤器大小为7*7时,计算设备200基于该过滤器大小,确定填充大小为3,即在原始图像410周围填充三圈的像素。由此,对于填充块422(或者称为填充块0主体类型的填充块)来说,计算设备200可以从高速缓存线0的像素集合中确定属于填充块422的像素45-47、53-55和61-63;从高速缓存线1的像素集合中确定属于填充块422的像素40-44、48-52和56-60;从高速缓存线3的像素集合中确定属于填充块422的像素5-7、13-15、21-23、29-31和37-39;并且从高速缓存线4的像素集合中确定属于填充块422的像素0-4、8-12、16-20、24-28、32-36等,如图7所示。

可以理解,过滤器的大小也可以为3*3和7*7以外的其他大小。可以通过软件预先配置不同大小的过滤器所对应的填充大小。例如,当过滤器大小为7*7像素时,可以从高速缓存线0的像素45开始读取(即,x=3,y=3,即在x方向填充3,在y方向上填充3),或者也可以从其他的像素开始读取。换句话说,在上述不同的过滤器所对应的填充大小的配置下,可以从不同的高速缓存线230读取出不同的像素。

在另一些实施例中,过滤器的大小可以为1*7、1*3、3*3、7*1等。例如,当过滤器的大小可以为1*7时,可能两条高速缓存器就足够了,不需要在x轴方向上进行填充,仅需要在y轴方向上进行填充。例如,当过滤器的大小可以为6*6时,可以在x轴方向上填充3,在y轴方向上填充3(即,x=3,y=3);也可以在x轴方向上填充3,在y轴方向上填充2(即,x=3,y=2);还可以在x轴方向上填充2,在y轴方向上填充3(即,x=2,y=3)等。

在另一些实施例中,还可以进行负向填充,即当过滤器的大小为7*7时,可以在与x轴的方向相反的方向上填充3,在与y轴的方向相反的方向上填充3(即,x=-3,y=-3)。本公开的保护范围在此方面不受限制。

由此,可以理解,从硬件代价方面,在针对各种不同过滤器大小来对像素进行选择时,硬件中的选择器mux的可能性的数目为(填充大小+1)2。换句话说,就是每一位像素可以由多少个像素的位置中选择出来。

在一些实施例中,当计算设备200具有高速缓存线230的高读取带宽的情况下,可以同时访问多条(例如,四条)高速缓存线230中存储的像素,以提高加载效率。在另一些实例中,也可以通过多个周期(cycle)分别访问各个四条高速缓存线230中存储的像素。本公开的保护范围在此方面不受限制。

在一些实施例中,可以基于填充块的类型,确定用于存储填充块的多条高速缓存线230。例如,当填充块的类型为填充块0主体类型的填充块时,计算设备200可以确定高速缓存线0、1、3和4为用于存储这一类型的填充块的缓存线。类似地,当填充块的类型为填充块1尾部类型的填充块时,计算设备200可以确定高速缓存线4、5、7和8为用于存储这一类型的填充块的缓存线。

在一些实施例中,可以使用多个高速缓存线230的虚拟地址,从多条高速缓存线230中的至少一条高速缓存线230存储的像素集合中确定属于填充块的像素。例如,高速缓存线0、1、3和4分别具有各自的虚拟地址,这些虚拟地址之间可能连续也可能不连续。例如,高速缓存可能具有坐标为(x,y)的起始地址,其中x=0,y=0。在此基础上,基于高速缓存220的设计,高速缓存线230的虚拟地址可以在x方向上连续或者在y方向上连续。不同图像在z方向上坐标不同。换句话说,地址在z方向上的坐标可以表示不同原始图像410,可以利用线性的乘法方式计算像素在x方向和y方向上的位置。由此,计算设备200可以确定填充图像420的填充块的多个高速缓存线230的虚拟地址。例如,该虚拟地址可以为高速缓存220的起始地址+偏移量,其中偏移量为在高速缓存220中与x,y,z有关的函数f(x,y,z)。

应当理解方法300可被实现为计算机软件程序,其可以被有形地包含于机器可读介质,例如存储单元。在一些实施例中,计算机程序的部分或者全部可以经由rom和/或通信单元而被载入和/或安装到计算设备200上。当计算机程序被加载到ram并由处理器执行时,可以执行上文描述的方法300的一个或多个动作。

本公开可以是方法、计算设备、计算机存储介质和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是——但不限于——电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

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