本发明涉及图像处理,特别涉及一种卷积和池化合并的优化方法。
背景技术:
1、集成电路技术日益成为技术发展的焦点,芯片厂商纷纷开发自己的芯片。而在芯片应用中,根据不同的应用场景,在各自的芯片设计中也会产生各自的需求问题。例如,北京君正集成电路股份有限公司(以下简称:北京君正)生产的芯片,其中的北京君正t30、t31型号的芯片,其寄存器是128位寄存器,并且寄存器个数是有限的,一共32个寄存器,使用现有技术时如果超过32个,将会导致前面加载的寄存器数据存储到内存中,后面处理再使用时,将存储的数据再重新加载,导致效率很低。因而在优化设计中势必要考虑寄存器个数问题。
2、因此,现有技术存在的缺陷在于:
3、在寄存器个数有限的情况下,一张特征图卷积计算后,将结果保存,并生成新的特征图,将新的特征图作为输入进行池化处理,处理后结果再保存一整新的特征图。这种处理,进行了两次加载数据,两次保存数据,造成了时间上的浪费。
4、另外,现有技术中的常用术语如下:
5、1、simd指令:单指令流多数据流,即一次运算指令可以执行多个数据流,这样可以提高程序的运算速度。更通俗理解,就是一种矢量(向量)的计算。不同芯片,具体指令集不同。
6、2、特征图:输入数据通过卷积计算后得到的结果称之为特征图(或输出数据),数据通过全连接后生成的结果也称为特征图(或输出数据)。特征图大小一般表示为长×宽×深度,或1×深度。深度又被称为通道。
7、3、卷积:将卷积核的中心放置在要计算的像素上,一次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的结构就是该位置的新像素值,这个过程称为卷积。
8、4、池化:在通过卷积层获得特征(feature map)之后,下一步要做的就是利用这些特征进行整合、分类。常见的池化有最大池化(max pooling),平均池化(averagepooling)。
技术实现思路
1、为了解决上述现有技术中的问题,本技术的目的在于:通过本方法将两次加载数据,两次保存数据优化到一次加载数据、一次处理数据,并对中间一些算法进行优化,以降低整体的运行时间。
2、具体地,本发明提供一种卷积和池化合并的优化方法,所述方法包括:
3、s1,量化与池化函数分析:
4、s1.1,设卷积计算初步结果为a,量化相乘系数为b,第一次移位系数为shift_left,第二次移位系数为shift_right,最终结果为res,公式如下:
5、amax=max(a,0) (1)
6、ab=amax*b>>(15-shift_left) (2)
7、res0=round(ab>>shift_right) (3)
8、res=min(res0,15)-8 (4)
9、s1.2,对上面的公式进行分析,自变量为a,其他参数shift_left、shift_right为给定的常量,则有公式(1)(2)(3)都是递增函数,而min(res0,15)也是增函数,所以公式(4)是递增函数,那么由公式(1)至(4)得到的res是关于a的一个递增函数,即量化处理是一个处理递增函数的过程;
10、s2,优化处理方法:
11、先对卷积计算初步结果进行池化处理,再使用量化处理对池化结果进行量化处理。
12、所述方法中的池化处理,是比较同一个通道的几个数据,选择最大的一个数据。
13、所述方法使用池化处理是采用最大池化,并且池化核是2x2,步长是2。
14、所述步骤s2进一步包括:
15、s2.1,优化处理中池化处理采用2x2的核,步长为2的池化;
16、设量化处理模块为vrd=quantization(vrs,vrt),其中vrs、vrt为卷积计算初步结果寄存器,vrs、vrt中的数据是量化前且只是卷积计算累加和的结果,vrs、vrt每个存储的是8个16比特的数据;vrd是生成的结果,存储的是16个8比特的数据;
17、s2.2,根据特征图的宽度和高度,进行池化和量化处理,实现卷积运算和池化运算的整合:
18、其中,设卷积计算初步结果为sum_0、sum_1、sum_2、sum_3、sum_4、sum_5、sum_6、sum_7,这些参数均为存储8个16bit的寄存器;
19、特征图深度是16的倍数,每次处理都是16的倍数方式处理,sum_0和sum_1、sum_2和sum_3、sum_4和sum_5、sum_6和sum_7,分别代表处理的16个数据;
20、卷积计算初步结果看作一个特征图,在宽度和高度上,两个步长才会生成一个池化后的一个宽度和一个高度的结果。
21、所述步骤s2.2进一步包括:
22、a)特征图的宽度和高度能被2整除的部分:
23、设卷积计算初步结果的特征图
24、宽度wi高度hi上取值,则有sum_0和sum_1;
25、宽度wi+1高度hi上取值,则有sum_2和sum_3;
26、宽度wi高度hi+1上取值,则有sum_4和sum_5;
27、宽度wi+1高度hi+1上取值,则有sum_6和sum_7;
28、池化处理:
29、比较sum_0、sum_2,选择出其中一个大的数据,存放到sum_0中;
30、比较sum_0、sum_4,选择出其中一个大的数据,存放到sum_0中;
31、比较sum_0、sum_6,选择出其中一个大的数据,存放到sum_0中;
32、比较sum_1、sum_3,选择出其中一个大的数据,存放到sum_0中;
33、比较sum_1、sum_5,选择出其中一个大的数据,存放到sum_0中;
34、比较sum_1、sum_7,选择出其中一个大的数据,存放到sum_0中;量化处理:
35、使用量化函数模块,对sum_0、sum_1进行量化处理,并将处理的结果存放到sum_0,表示为:
36、sum_0=quantization(sum_0,sum_1),
37、其中,输入sum_0、sum_1为卷积计算初步结果寄存器,sum_0、sum_1中的数据是量化前且只是卷积计算累加和的结果,sum_0、sum_1每个存储的是8个16比特的数据;输出sum_0是生成的结果,存储的是16个8比特的数据;
38、b)特征图的宽度被2整除后的余数部分,高度是被2整除的部分:
39、此时在卷积计算初步结果的特征图
40、宽度wi高度hi上取值,则有sum_0和sum_1;
41、宽度wi高度hi+1上取值,则有sum_4和sum_5;
42、比较sum_0、sum_4,选择出其中一个大的数据,存放到sum_0中;
43、比较sum_1、sum_5,选择出其中一个大的数据,存放到sum_0中;
44、量化处理:
45、使用量化函数模块,对sum_0、sum_1进行量化处理,并将处理的结果存放到sum_0,表示为:
46、sum_0=quantization(sum_0,sum_1);
47、c)特征图的宽度被2整除的部分,高度是被2整除的余数部分:
48、卷积计算初步结果的特征图
49、宽度wi高度hi上取值,则有sum_0和sum_1;
50、宽度wi+1高度hi上取值,则有sum_2和sum_3;
51、池化处理:
52、比较sum_0、sum_2,选择出其中一个大的数据,存放到sum_0中;
53、比较sum_1、sum_3,选择出其中一个大的数据,存放到sum_0中;
54、量化处理:
55、使用量化函数模块,对sum_0、sum_1进行量化处理,并将处理的结果存放到sum_0,表示为:
56、sum_0=quantization(sum_0,sum_1);
57、d)特征图的宽度被2整除余数的部分,高度是被2整除余数的部分;
58、卷积计算初步结果的特征图
59、宽度wi高度hi上取值,只有sum_0和sum_1;
60、宽度wi+1高度hi、宽度wi高度hi+1、宽度wi+1高度hi+1都已经溢出到特征图外面,不存在;
61、使用量化函数模块,对sum_0、sum_1进行量化处理,并将处理的结果存放到sum_0,表示为:
62、sum_0=quantization(sum_0,sum_1);
63、通过a)、b)、c)、d)实现卷积计算和池化运算的整合。
64、由此,本技术的优势在于:提供了一种优化方法,采用这种方法后,将处理多次的量化处理只处理一次,省去了很多量化处理。在卷积整个处理中,量化部分的计算也是很大的,所以这样处理可以极大的节省时间,可以很大程度上提高效率。