一种高效的神经网络前处理方法技术

技术编号:35686119 阅读:16 留言:0更新日期:2022-11-23 14:31
本公开揭示了一种神经网络前处理方法,其特征在于:如果每次卷积需要m个点的n个通道数据,则重排时:在第1列,先自下向上排列第1个点至第m个点所涉及的m*n个数;进一步的,如果卷积步长是k,则自左向右继续重排至第2列时:第k+1个点的n个通道的数据先从下面开始排列;然后,依次自下向上排列第k+2个点,一直到第k+m个点;进一步的,当重排到第i+1列时,自下向上依次排列:第i*k+1,i*k+2,

【技术实现步骤摘要】
一种高效的神经网络前处理方法


[0001]本公开属于图像卷积计算
,特别涉及一种高效的神经网络前处理方法。

技术介绍

[0002]在深度学习中,为了提升数据传输带宽和计算性能,会使用NCHW、NHWC和CHWN等数据格式,它们是image或feature map等的逻辑数据格式(数据在内存中的存放顺序)。不同的数据格式可以通过增加局部数据的复用性,提高cache中数据的利用率。
[0003]图1示意了现有技术中图像卷积计算拆解过程,以图1所示的一个3X3,步长为2的卷积为例,其表明:每一次卷积需要三个点的三通道数据,但步长又是2,正如图1所示的灰色区域按步长在变化,0、1、2计算完了之后则是2、3、4,由于步长是2所以导致图1中灰色的2所代表的区域被复用,在卷积的过程中每次卷积图像像素点地址会出现不连续的情况,就会导致内存的利用率降低,并且产生对内存的频繁读写,导致处理时间较长。特别是观察图1的下部所示的单行输入图像,可以清楚的发现:由于卷积步长的原因,卷积计算对于部分通道数据可以复用,但这也会导致两次计算的输入图像地址不连续,在数据调度过程中产生分支导致D Cache Miss(数据缓存未命中),在神经网络加速器实际应用中这就会导致极大的资源和时间的开销。
[0004]为了进一步提高输入图像数据的利用率,有必要不断改进数据格式的技术并提出新的数据格式,同时要考虑从已知数据格式到新的数据格式的格式转换。

技术实现思路

[0005]鉴于此,本公开提供了一种神经网络前处理方法,其特征在于:
[0006]如果每次卷积需要m个点的n个通道数据,则重排时:
[0007]在第1列,先自下向上排列第1个点至第m个点所涉及的m*n个数;
[0008]进一步的,如果卷积步长是k,则自左向右继续重排至第2列时:第k+1个点的n个通道的数据先从下面开始排列;然后,依次自下向上排列第k+2个点,一直到第k+m个点;
[0009]进一步的,当重排到第i+1列时,自下向上依次排列:第i*k+1,i*k+2,

,i*k+m个点的n个通道数据。
[0010]优选的,
[0011]如果每次卷积需要的数据为N,该N对应神经网络加速器的计算并行度,当N大于m*n个通道数据时,则自第1列起至倒数第2列,每列补N

(m*n)个0即可。
[0012]优选的,
[0013]最后1列时,根据最后1列的通道数据的实际数量M,补N

M个0即可。
[0014]优选的,
[0015]重排时遵循如下一种HWC数据格式的转换方法,包括如下步骤:
[0016]S100:每次从DDR主存读取高度方向上一整行数据,此为一次格式转换的数据;
[0017]S200:将所有数据顺序依次存储到8个存储区中,每个Block Mem存储区存CH*W/8
个数据,其中CH表示通道数,W表示宽度数;
[0018]S300:将8个Block Mem中的数据并行读取,每个Block Mem输出位宽为8B,拼接成64字节的数据,并将数据存放回DDR主存中。
[0019]优选的,
[0020]重排时遵循如下一种HWC数据格式的转换方法,包括如下步骤:
[0021]S1:从DDR主存中读取图像数据,其中,原始的图像数据默认在主存中以HWC格式存储,所述图像为256*256,所以每个周期,可以从DDR中读取16个点的4个通道数据值;
[0022]S2:将读取到的数据采用前述的神经网络前处理方法以实现通道重排和通道补偿,其中0*4代表补偿的4个通道0,补偿后的每行数据的宽度为128;
[0023]S3:将重排后的数据依次存入8个FIFO先入先出存储器中,其中,FIFO的输入位宽为16字节,输出为8字节,每个FIFO中存128/8=16个点的数据,第一个FIFO存0

15个点对应的前16列,最后一个FIFO存最后16列数据;
[0024]S4:之前8个FIFO是依次顺序写入的,本步骤将其并行读取,即同时读取8个FIFO数据,其中,对于第一个FIFO:由于输出位宽只有8个字节,所以之前一个周期写入的16字节数据将分两个周期读出,第一个周期读出BGRX(0

1),第二个周期读出BGRX2和4个0;对于第二个FIFO,第一个周期读出的数据为GBRX(32

33),第八个FIFO第一个周期读出的数据为GBRX(224

225);
[0025]S5:将8个FIFO输出的8字节数据拼接成64字节的数据写回给DDR主存,当8个FIFO内所有数据都写空,就完成了通道重排后图像HWC到HWC88的格式转换;
[0026]如此,当256行输入图像数据都完成了上述S1至S5的5个步骤,此时整幅原始4通道256*256像素的图像还同时完成了全部的重排处理。
[0027]优选的,
[0028]HWC88存储格式用于实现FM在数据存储中组织格式的重排,且需要满足如下条件:该格式具有良好的局部性,能提高cache中数据的利用率,以及提升数据传输带宽和计算性能。
[0029]优选的,
[0030]所述HWC88存储格式具体为:
[0031]将一行或一行的一部分FM数据平均分为8块,将每块相同位置相同通道组的数据放在内存的相同地址,优先存放每块中相同位置像素点的所有通道。
[0032]优选的,
[0033]FM采用HWC88格式进行卷积运算具体为:将FM上一行FM数据平均分为8块得到并行的8个点,将每块相同位置相同通道组的数据,和卷积核的对应通道相乘。
[0034]由此,本公开提出了一种高效的神经网络前处理方法,其实现了一种输入图像在神经网络计算中的重排方案。并且,本公开实现了从现有HWC格式到此种更高效方案所需要新格式(即HWC88格式)的转换。从而,能够有助于基于本公开所揭示的方案研发一种新的神经网络加速器。需要说明的是,HWC88存储格式用于实现FM在数据存储中组织格式的重排,且需要满足如下条件:该格式具有良好的局部性,能提高cache中数据的利用率,以及提升数据传输带宽和计算性能。
附图说明
[0035]图1是现有技术中图像卷积计算拆解示意图;
[0036]图2A至图2C是本公开一个实施例中单行通道重排图;
[0037]图3是本公开一个实施例中80个点的通道重排的示意图;
[0038]图4是本公开一个实施例中HWC格式与HWC88格式数据的转换图;
[0039]图5是本公开一个实施例中数据通过存储区进行格式转换的示意图;
[0040]图6是本公开一个实施例中80个点的RGB图像格式转换的示意图;
[0041]图7A是本公开一个实施例中256个点的通道重排的示意图;
[0042]图7B是本公本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种神经网络前处理方法,其特征在于:如果每次卷积需要m个点的n个通道数据,则重排时:在第1列,先自下向上排列第1个点至第m个点所涉及的m*n个数;进一步的,如果卷积步长是k,则自左向右继续重排至第2列时:第k+1个点的n个通道的数据先从下面开始排列;然后,依次自下向上排列第k+2个点,一直到第k+m个点;进一步的,当重排到第i+1列时,自下向上依次排列:第i*k+1,i*k+2,

,i*k+m个点的n个通道数据。2.根据权利要求1所述的处理方法,其中,优选的,如果每次卷积需要的数据为N,该N对应神经网络加速器的计算并行度,当N大于m*n个通道数据时,则自第1列起至倒数第2列,每列补N

(m*n)个0即可。3.根据权利要求2所述的处理方法,其中,最后1列时,根据最后1列的通道数据的实际数量M,补N

M个0即可。4.根据权利要求1所述的处理方法,其中,重排时遵循如下一种HWC数据格式的转换方法,包括如下步骤:S100:每次从DDR主存读取高度方向上一整行数据,此为一次格式转换的数据;S200:将所有数据顺序依次存储到8个存储区中,每个Block Mem存储区存CH*W/8个数据,其中CH表示通道数,W表示宽度数;S300:将8个Block Mem中的数据并行读取,每个Block Mem输出位宽为8B,拼接成64字节的数据,并将数据存放回DDR主存中。5.根据权利要求1所述的处理方法,其中,重排时遵循如下一种HWC数据格式的转换方法,包括如下步骤:S1:从DDR主存中读取图像数据,其中,原始的图像数据默认在主存中以HWC格式存储,所述图像为256*256,所以每个周期,可以从DDR中读取16个点的4个通道数据值;S2:将读取到的数据采用权利要求3的处理方法以实现通道重排和通道补偿,其中0*4代表补偿的4个通道0,补偿后的每行数据的宽度为128...

【专利技术属性】
技术研发人员:任鹏举党祺玮陈飞黄晓帆张先娆赵文哲夏天
申请(专利权)人:西安交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1