一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

分块压缩编码方法、装置、计算机设备及可读存储介质与流程

2021-12-07 20:56:00 来源:中国专利 TAG:


1.本技术涉及数据压缩技术领域,尤其涉及分块压缩编码方法、装置、计算机设备及可读存储介质。


背景技术:

2.神经网络模型中存在大量的权重数据,这些权重数据都是以二进制格式存储在计算机中。目前,为了减少这些权重数据所需的存储空间,常使用压缩编码的方式,减少所有权重数据占用的二进制位宽,以减小最终所需的内存空间。
3.一种常见的压缩编码方式为二进制标记(binary-mask)压缩编码,其压缩编码过程中需要建立两张表格,分别为记录表格和数据表格,参见图1,图中的表1即为记录表格,表2为数据表格。在针对原始数据集进行压缩编码时,若原始数据集中的某一数据为0,则在表1的对应位置中记0;若不为0,则在表1的对应位置中记1,并同时将该数据记入表2中。所有数据记入完成后,表1中的每个数据只会是0或1,仅占用一个比特的位宽,而表2中数据的二进制位宽与原本所占用的位宽一致,并未得到压缩。因此,原始数据集中0的占比越大,表2中的数据就会越少,binary-mask压缩编码的压缩效果则越好。
4.但是,神经网络模型的权重数据中,有很多都是集中在0附近但不为0的数据,这些数据的特点是:数值小、占比高且不为0,这种情况下,若使用binary-mask压缩编码对这些数据进行压缩,其压缩效果将变差。


技术实现要素:

5.为了解决因神经网络权重数据大多为集中在0附近但不为0的数据,从而导致使用binary-mask压缩编码的压缩效果较差的问题,本技术通过以下实施例公开了分块压缩编码方法、装置、计算机设备及可读存储介质。
6.本技术第一方面公开了一种分块压缩编码方法,所述方法包括:
7.获取原始数据集;
8.按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据;
9.获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽;
10.将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块;
11.将每个所述标志位宽记入与之对应的所述二进制数据块的前端,获取所述原始数据集的压缩编码结果。
12.可选的,所述获取任一所述数据块的标志数据及标志位宽,包括:
13.对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处
理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块;
14.针对所述目标数据块中完成所述预处理的所有数据,提取最大值;
15.将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据;
16.将所述标志数据在二进制格式下的位宽作为所述标志位宽。
17.可选的,所述按照预设的数据长度,将所述原始数据集划分为多个数据块,包括:
18.根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
19.本技术第二方面公开了一种分块压缩编码装置,所述装置应用于本技术第一方面所述的分块压缩编码方法,所述分块压缩编码装置包括:
20.数据集获取模块,用于获取原始数据集;
21.数据集划分模块,用于按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据;
22.标志数据获取模块,用于获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽;
23.二进制转换模块,用于将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块;
24.压缩编码模块,用于将每个所述标志位宽记入与之对应的所述二进制数据块的前端,获取所述原始数据集的压缩编码结果。
25.可选的,所述标志数据获取模块包括:
26.预处理单元,用于对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块;
27.最大值提取单元,用于针对所述目标数据块中完成所述预处理的所有数据,提取最大值;
28.标志数据获取单元,用于将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据;
29.标志位宽获取单元,用于将所述标志数据在二进制格式下的位宽作为所述标志位宽。
30.可选的,所述数据集划分模块包括:
31.划分补零单元,用于根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
32.本技术第三方面公开了一种分块压缩编码方法,所述方法包括:
33.获取原始数据集;
34.按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中
至少包含两个数据;
35.获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽;
36.将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块;
37.设置标记数据块;
38.依次将所有所述数据块的标志位宽及其对应的合并次数记入所述标记数据块中,其中,若某一所述数据块的标志位宽与相邻所述数据块的标志位宽皆不同,则该数据块的标志位宽对应的合并次数为零,若存在连续相邻数据块的标志位宽相同,则将所述连续相邻数据块的标志位宽合并记入所述标记数据块中,且该标志位宽对应的合并次数为所述连续相邻数据块的个数减一;
39.获取所述原始数据集的压缩编码结果,所述压缩编码结果包括多个所述二进制数据块以及一个所述标记数据块。
40.可选的,所述获取任一所述数据块的标志数据及标志位宽,包括:
41.对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块;
42.针对所述目标数据块中完成所述预处理的所有数据,提取最大值;
43.将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据;
44.将所述标志数据在二进制格式下的位宽作为所述标志位宽。
45.可选的,所述按照预设的数据长度,将所述原始数据集划分为多个数据块,包括:
46.根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
47.本技术第四方面公开了一种分块压缩编码装置,所述装置应用于本技术第三方面所述的一种分块压缩编码方法,所述分块压缩编码装置包括:
48.数据集获取模块,用于获取原始数据集;
49.数据集划分模块,用于按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据;
50.标志数据获取模块,用于获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽;
51.二进制转换模块,用于将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块;
52.标记数据块设置模块,用于设置标记数据块;
53.标记模块,用于依次将所有所述数据块的标志位宽及其对应的合并次数记入所述标记数据块中,其中,若某一所述数据块的标志位宽与相邻所述数据块的标志位宽皆不同,
则该数据块的标志位宽对应的合并次数为零,若存在连续相邻数据块的标志位宽相同,则将所述连续相邻数据块的标志位宽合并记入所述标记数据块中,且该标志位宽对应的合并次数为所述连续相邻数据块的个数减一;
54.压缩编码模块,用于获取所述原始数据集的压缩编码结果,所述压缩编码结果包括多个所述二进制数据块以及一个所述标记数据块。
55.可选的,所述标志数据获取模块包括:
56.预处理单元,用于对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块;
57.最大值提取单元,用于针对所述目标数据块中完成所述预处理的所有数据,提取最大值;
58.标志数据获取单元,用于将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据;
59.标志位宽获取单元,用于将所述标志数据在二进制格式下的位宽作为所述标志位宽。
60.可选的,所述数据集划分模块包括:
61.划分补零单元,用于根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
62.本技术第五方面公开了一种计算机设备,包括:
63.存储器,用于存储计算机程序;
64.处理器,用于执行所述计算机程序时实现如本技术第一方面所述的分块压缩编码方法的步骤或者如本技术第三方面所述的分块压缩编码方法的步骤。
65.本技术第六方面公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理执行时实现如本技术第一方面所述的分块压缩编码方法的步骤或者如本技术第三方面所述的分块压缩编码方法的步骤。
66.本技术公开了分块压缩编码方法、装置、计算机设备及可读存储介质。其中一种分块压缩编码方法包括获取原始数据集,并按照预设的数据长度,将原始数据集划分为多个数据块,然后获取任一数据块的标志数据及标志位宽,通过将每个数据块中的所有数据转换为位宽与所述标志位宽一致的二进制数,获取对应的多个二进制数据块,最后将每个标志位宽记入与之对应的所述二进制数据块的前端,获取原始数据集的压缩编码结果。另一种分块压缩编码方法中,在获取对应的多个二进制数据块之后,设置标记数据块,依次将所有所述数据块的标志位宽及其对应的合并次数记入所述标记数据块中,获取所述原始数据集的压缩编码结果,所述压缩编码结果包括多个二进制数据块以及一个标记数据块。
67.上述分块压缩编码方法中,使用每个数据块各自对应的标志位宽,将所有数据转换为二进制数,而binary-mask压缩编码中使用统一的固定位宽将所有非零数据转换为二进制数,其所使用的固定位宽为默认的位宽,通常大于或等于所有非零数据对应的最大位宽,因此,利用上述分块压缩编码方法压缩得到的数据将占用较小内存,其压缩效果优于binary-mask压缩编码的压缩效果。
附图说明
68.为了更清楚地说明本技术的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
69.图1为现有的binary-mask压缩编码示意图;
70.图2为本技术第一实施例公开的分块压缩编码方法的工作流程示意图;
71.图3为本技术第一实施例公开的分块压缩编码的结果示意图;
72.图4为本技术第一实施例公开的一种原始数据集示意图;
73.图5为针对图4中的原始数据集,采用本技术第一实施例公开的分块压缩编码方法进行压缩编码得到的结果示意图;
74.图6为本技术第一实施例公开的分块压缩编码方法与binary-mask压缩编码方法的压缩效果对比图;
75.图7为本技术第三实施例公开的分块压缩编码方法的工作流程示意图;
76.图8为本技术第三实施例公开的分块压缩编码的结果示意图;
77.图9为针对图4中的原始数据集,采用本技术第三实施例公开的分块压缩编码方法进行压缩编码得到的结果示意图;
78.图10为本技术第三实施例公开的分块压缩编码方法与binary-mask压缩编码方法的压缩效果对比图。
具体实施方式
79.为了解决因神经网络权重数据大多为集中在0附近但不为0的数据,从而导致使用binary-mask压缩编码的压缩效果较差的问题,本技术通过以下实施例公开了分块压缩编码方法、装置、计算机设备及可读存储介质。
80.本技术第一实施例公开了一种分块压缩编码方法,参见图2所示的工作流程示意图,所述方法包括:
81.步骤s11,获取原始数据集。
82.很多神经网络模型的权重数据都是32位的浮点数,通常在进行压缩编码之前,提前将这些32位的浮点数转化为定点数据,可以提高后续的压缩效果。因此,该步骤所获取的原始数据集中任一数据都是定点数据。本实施例中,原始数据集中的定点数据为int8类型,即为8位有符号整型。
83.步骤s12,按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据。
84.具体的,根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作,使得最后一个数据块的数据长度达到预设的数据长度。
85.例如,若原始数据集中包含55736160个权重数据,可以按照127这个数据长度对原始数据集进行分块,这种情况下,原始数据集将会被分为438868个数据块,其中最后一个数据块需通过补零操作添加76个零。或者,也可以按照207这个数据长度对原始数据集进行分块,这种情况下,原始数据集将会被分为269257个数据块,其中最后一个数据块需通过补零
操作添加39个零。
86.作为示例,针对inceptionresnet v2神经网络模型,该网络模型包含55736160个权重数据,本实施例将数据长度预先设置为127,最终得到438868个数据块,其中最后一个数据块通过补零操作添加76个零;针对densenet 121神经网络模型,该网络模型包含7894208个权重数据,本实施例将数据长度预先设置为87,最终得到90739个数据块,其中最后一个数据块通过补零操作添加85个零;针对nasnetmobile神经网络模型,该网络模型包含3517626个权重数据,本实施例中将数据长度预先设置为207,最终得到16994个数据块,其中最后一个数据块通过补零操作添加136个零。
87.步骤s13,获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽。
88.本实施例中,原始数据集中的定点数据为int8类型,因此任一数据块中的数据格式也均为int8类型,基于此,可通过以下方法获取任一所述数据块的标志数据及标志位宽:
89.对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块。
90.针对所述目标数据块中完成所述预处理的所有数据,提取最大值。
91.将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据。
92.将所述标志数据在二进制格式下的位宽作为所述标志位宽。
93.步骤s14,将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块。其中,带符号二进制数的首位为符号位,若符号位为“1”,则表示该二进制数为负数,若为“0”,则表示该二进制数为正数。
94.在执行该步骤之前,由于任一数据块中的数据格式均为int8类型,因此每个数据都是8比特二进制数,即每个数据都占用8位位宽。执行完本步骤后,每个数据块中的数据都被转换为与各自标志位宽相同的带符号二进制数,此时,只有在标志位宽为8的情况下,其对应的数据块中的每个数据才会继续占用8位位宽,对于标志位宽小于8的情况,其对应的数据块中每个数据所占用的位宽均会小于8位,因此本步骤得到的多个二进制数据块,其所需的内存空间将比原始数据集小很多。
95.基于上述原理,在步骤s12中,所述预设的数据长度大小可根据神经网络权重数据的总数,设置为合适的大小,原则上只要不会使数据块的总个数过少或过多即可。数据块个数最多的情况下,最起码要确保每个数据块中至少有两个数据,因为如果每个数据块中只有一个数据,则不会产生任何压缩效果,数据块个数最少的情况下,最起码要确保至少存在一个数据块的标志位宽小于8比特,因为如果所有数据块的标志位宽都是8比特的话,同样的也不会产生压缩效果。如果每个数据块的标志位宽都是8比特,那么可以调节数据长度,重新对原始数据集进行划分。
96.步骤s15,将每个所述标志位宽记入与之对应的所述二进制数据块的前端,获取所述原始数据集的压缩编码结果。
97.标志位宽同样是以二进制格式记入二进制数据块的前端,由于标志位宽最大只能
是8,所以本实施例中,使用3比特二进制数表示所有标志位宽。
98.计算机在对压缩编码结果中的每个数据块进行操作时,可按照前端记载的标志位宽大小进行数据的读取。
99.图3为本实施例最终得到的压缩编码结果示意图,该压缩编码结果中包括n个二进制数据块,每个二进制数据块包含m个数据(即在将原始数据集划分为多个数据块时,所述预设的数据长度为m)。第一个二进制数据块的数据分别为num 11、
……
、num 1m,其前端记载的标志位宽为width 1;第二个二进制数据块的数据分别为num 21、
……
、num 2m,其前端记载的标志位宽为width 2;第n个二进制数据块的数据分别为num n1、
……
、num nm,其前端记载的标志位宽为width n。
100.以下结合一个简单示例,对本方案进行说明:
101.若原始数据集总共包含45个数据,分别为{6、0、4、1、-4、2、-1、1、-5、-15、1、-7、9、12、0、-2、0、-21、15、-33、5、7、9、8、1、-16、17、4、32、2、0、7、14、3、-10、-2、26、3、17、5、-1、0、9、6、-3},预设的数据长度为8,可将该原始数据集划分为6个数据块,参见图4,最后一个数据块通过补零操作需补3个零(为了便于理解及说明,此处采用十进制格式进行例举,但实际应用中,原始数据集中任一数据的格式为带符号二进制)。
102.针对第一个数据块,求得标志数据为6,其对应的标志位宽为4比特,转换所得的二进制数据块中每个数据均采用4比特二进制数表示,二进制数据块的前端记有标志位宽(4比特),该标志位宽采用3比特二进制数表示,即100。
103.针对第二个数据块,求得标志数据为-15,其对应的标志位宽为5比特,转换所得的二进制数据块中每个数据均采用5比特二进制数表示,二进制数据块的前端记有标志位宽(5比特),该标志位宽采用3比特二进制数表示,即101。
104.针对第三个数据块,求得标志数据为-33,其对应的标志位宽为7比特,转换所得的二进制数据块中每个数据均采用7比特二进制数表示,二进制数据块的前端记有标志位宽(7比特),该标志位宽采用3比特二进制数表示,即111。
105.针对第四个数据块,求得标志数据为32,其对应的标志位宽为7比特,转换所得的二进制数据块中每个数据均采用7比特二进制数表示,二进制数据块的前端记有标志位宽(7比特),该标志位宽采用3比特二进制数表示,即111。
106.针对第五个数据块,求得标志数据为34,其对应的标志位宽为7比特,转换所得的二进制数据块中每个数据均采用7比特二进制数表示,二进制数据块的前端记有标志位宽(7比特),该标志位宽采用3比特二进制数表示,即111。
107.针对第六个数据块,求得标志数据为9,其对应的标志位宽为5比特,转换所得的二进制数据块中每个数据均采用5比特二进制数表示,二进制数据块的前端记有标志位宽(5比特),该标志位宽采用3比特二进制数表示,即101。
108.最终压缩编码结果参见图5。从图中可以看出,每个二进制数据块中的任一数据所占用的空间均小于8比特,相较于原始数据集,该压缩编码的结果能够节约较大的内存空间。
109.上述分块压缩编码方法的压缩效果优于binary-mask压缩编码方法,因为上述原始数据集中仅有5个零,对于非零数据,binary-mask压缩编码的方式仍会使用8比特位宽二进制数表示,压缩效果并不明显。而本实施例中,所有二进制数据块中数据的位宽均小于8
比特,压缩编码结果所需的内存空间远小于binary-mask压缩编码方法的结果。
110.另外,即使上述原始数据集中不包含一个零,利用本实施例公开的方法进行压缩编码,仍能得到与存在5个零时等同的压缩效果,而使用binary-mask压缩编码进行压缩,则会因为没有零,而导致没有任何压缩效果。
111.参见图6,图6为binary-mask压缩编码方式和本实施例分块压缩编码方法分别对densenet 121网络模型、densenet 169网络模型、densenet 201网络模型、inception v3网络模型、inceptionresnet v2网络模型、nasnetlarge网络模型、nasnetmobile网络模型、resnet网络模型及xception网络模型进行压缩的压缩率对比图,其中,压缩率是指压缩后的数据量除以压缩前的数据量得到的值。从图6中可明显看出,本实施例的分块压缩编码方法的压缩率均比binary-mask压缩编码方式的压缩率低,即压缩效果均优于binary-mask压缩编码方式。
112.本技术第二实施例公开了一种分块压缩编码装置,所述装置应用于本技术第一实施例所述的分块压缩编码方法,对于本实施例中未公开的细节,请参照第一实施例公开的内容。
113.所述分块压缩编码装置包括:
114.数据集获取模块,用于获取原始数据集。
115.数据集划分模块,用于按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据。
116.标志数据获取模块,用于获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽。
117.二进制转换模块,用于将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块。
118.压缩编码模块,用于将每个所述标志位宽记入与之对应的所述二进制数据块的前端,获取所述原始数据集的压缩编码结果。
119.进一步的,所述标志数据获取模块包括:
120.预处理单元,用于对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块。
121.最大值提取单元,用于针对所述目标数据块中完成所述预处理的所有数据,提取最大值。
122.标志数据获取单元,用于将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据。
123.标志位宽获取单元,用于将所述标志数据在二进制格式下的位宽作为所述标志位宽。
124.进一步的,所述数据集划分模块包括:
125.划分补零单元,用于根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
126.本技术第三实施例公开了一种分块压缩编码方法,第三实施例中公开的分块压缩编码方法相较于第一实施例,区别在于:第一实施例所得到的压缩编码结果中,每个二进制数据块的前端都添加了用于记载标志位宽的3比特冗余,实际应用中,由于权重数据的量非常大,因此二进制数据块的个数可能也非常多,这种情况下,所有标志位宽叠加所产生的冗余将非常大,需占用较多空间。考虑到标志位宽的值只会处于0-8之间,必定存在很多二进制数据块的标志位宽是相同的,因此第三实施例另外设置了专门用于记载标志位宽的数据块,在记入标志位宽的过程中,将相邻的同一标志位宽进行合并记入,并记入它们的合并次数,以尽量减少所有标志位宽所占用的内存空间。
127.参见图7所示的工作流程示意图,本实施例公开的分块压缩编码方法包括:
128.步骤s21,获取原始数据集。
129.与第一实施例相同,本实施例中,原始数据集中的定点数据为int8类型,即为8位有符号整型。
130.步骤s22,按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据。
131.具体的,根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作,使得最后一个数据块的数据长度达到预设的数据长度。
132.步骤s23,获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽。
133.本实施例中,原始数据集中的定点数据为int8类型,因此任一数据块中的数据格式也均为int8类型,可通过以下方法获取任一所述数据块的标志数据及标志位宽:
134.对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块。
135.针对所述目标数据块中完成所述预处理的所有数据,提取最大值。
136.将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据。
137.将所述标志数据在二进制格式下的位宽作为所述标志位宽。
138.步骤s24,将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块。其中,带符号二进制数的首位为符号位,若符号位为“1”,则表示该二进制数为负数,若为“0”,则表示该二进制数为正数。
139.需要说明的是,步骤s21-步骤s24与第一实施例中的步骤s11-步骤s14相同,因此实施过程中的细节,可参照第一实施例中公开的内容。
140.步骤s25,设置标记数据块。
141.步骤s26,依次将所有所述数据块的标志位宽及其对应的合并次数记入所述标记数据块中,其中,若某一所述数据块的标志位宽与相邻所述数据块的标志位宽皆不同,则该数据块的标志位宽对应的合并次数为零,若存在连续相邻数据块的标志位宽相同,则将所述连续相邻数据块的标志位宽合并记入所述标记数据块中,且该标志位宽对应的合并次数
为所述连续相邻数据块的个数减一。
142.在一种实现方式中,所述标记数据块的数据长度与任一所述数据块的长度相同。这种情况下,若所有数据块的标志位宽及其对应的合并次数均记入后,标记数据块中还存在空余,则进行补零操作。
143.步骤s27,获取所述原始数据集的压缩编码结果,所述压缩编码结果包括多个所述二进制数据块以及一个所述标记数据块。
144.图8为本实施例最终得到的压缩编码结果示意图,该压缩编码结果中包括n个二进制数据块和一个标记数据块。每个二进制数据块包含m个数据(即在将原始数据集划分为多个数据块时,所述预设的数据长度为m)。第一个二进制数据块的数据分别为num 11、num 12、
……
、num 1m;第二个二进制数据块的数据分别为num 21、num 22、
……
、num 2m;第n个二进制数据块的数据分别为num n1、
……
、num nm。
145.图8中最后一个数据块为标记数据块,用于记入标志位宽和合并次数,其中,width 1对应第一个数据块的标志位宽,cb 1为第一个数据块标志位宽与相邻数据块标志位宽的合并次数;width x对应第一个数据块的标志位宽,cb x为第一个数据块标志位宽与相邻数据块标志位宽的合并次数。
146.若第一个数据块的标志位宽与第二个数据块的标志位宽不相同,则cb 1记为0(表示width 1合并次数为0),此时width 2接着记入第二个数据块的标志位宽;若第一个数据块的标志位宽与第二个数据块的标志位宽相同,但与第三个数据块的标志位宽不同,则cb 1记为1(表示width 1合并记入了一次),此时width 2接着记入第三个数据块的标志位宽;若第一个数据块的标志位宽与第二个、第三个数据块的标志位宽均相同,但与第四个数据块的标志位宽不同,则cb 1记为2(表示width 1合并记入了两次),此时width 2接着记入第四个数据块的标志位宽。
147.标志位宽和合并次数均以二进制格式记入标记数据块。其中,由于标志位宽最大只能是8,因此本实施例使用3比特二进制数表示所有标志位宽。
148.针对合并次数,可采用1比特、2比特、3比特或4比特的位宽来表示,一旦选定,所有的合并次数均使用同一位宽的二进制数表示。作为示例,若采用2比特二进制数来表示合并次数,则每次记入的合并次数最大只能是3(因为2比特二进制数最大为11),即单次最大只能针对4个连续相邻数据块的标志位宽进行合并,如果存在五个连续相邻数据块的标志位宽相同,则第五个数据块的标志位宽则记入至下一个width中,对应的合并次数记为0。
149.以下结合一个简单示例,对本方案进行说明:
150.若原始数据集总共包含45个数据,分别为{6、0、4、1、-4、2、-1、1、-5、-15、1、-7、9、12、0、-2、0、-21、15、-33、5、7、9、8、1、-16、17、4、32、2、0、7、14、3、-10、-2、26、3、17、5、-1、0、9、6、-3},预设的数据长度为8,可将该原始数据集划分为6个数据块,最后一个数据块通过补零操作需补3个零(为了便于理解及说明,此处采用十进制格式例举,但实际应用中,原始数据集中任一数据的格式为带符号二进制)。该原始数据集与第一实施例中相同,具体可参见图4所示。
151.针对第一个数据块,求得标志数据为6,其对应的标志位宽为4比特,转换所得的二进制数据块中每个数据均采用4比特二进制数表示,标志位宽(4比特)记入标记数据块的标志位宽1中,该标志位宽采用3比特二进制数表示,即100,由于与第二个数据块的标志位宽
不同,因此,合并次数1记为0,采用2比特二进制数表示,即00。
152.针对第二个数据块,求得标志数据为-15,其对应的标志位宽为5比特,转换所得的二进制数据块中每个数据均采用5比特二进制数表示,标志位宽(5比特)记入标记数据块的标志位宽2中,该标志位宽采用3比特二进制数表示,即101,由于与第一个、第三个数据块的标志位宽均不同,因此,合并次数2记为0,采用2比特二进制数表示,即00。
153.针对第三个数据块,求得标志数据为-33,其对应的标志位宽为7比特,转换所得的二进制数据块中每个数据均采用7比特二进制数表示,标志位宽(7比特)记入标记数据块的标志位宽3中,该标志位宽采用3比特二进制数表示,即111,由于与第四个、第五个数据块的标志位宽均相同,因此,合并次数3记为2,采用2比特二进制数表示,即10。
154.针对第四个数据块,求得标志数据为32,其对应的标志位宽为7比特,转换所得的二进制数据块中每个数据均采用7比特二进制数表示,由于标志位宽(7比特)已与第三个、第五数据块合并,因此不再重复记入标记数据块中,相应的,其合并次数也不记入。
155.针对第五个数据块,求得标志数据为34,其对应的标志位宽为7比特,由于标志位宽(7比特)已与第三个、第四个数据块合并,因此不再重复记入标记数据块中,相应的,其合并次数也不记入。
156.针对第六个数据块,求得标志数据为9,其对应的标志位宽为5比特,转换所得的二进制数据块中每个数据均采用5比特二进制数表示,标志位宽(5比特)记入标记数据块的标志位宽4中,该标志位宽采用3比特二进制数表示,即101,由于与第五个数据块的标志位宽不同,且不存在第七个数据块,因此,合并次数4记为0,采用2比特二进制数表示,即00。
157.最终压缩编码结果参见图9。从图中可以看出,每个二进制数据块中的任一数据所占用的空间均小于8比特,相较于原始数据集,该压缩编码的结果能够节约较大的内存空间。
158.本实施例公开的分块压缩编码方法的压缩效果优于binary-mask压缩编码方法,因为上述原始数据集中仅有5个零,对于非零数据,binary-mask压缩编码的方式仍会使用8比特位宽二进制数表示,压缩效果并不明显。而本实施例中,所有二进制数据块中数据的位宽均小于8比特,压缩编码结果所需的内存空间远小于binary-mask压缩编码方法的结果。
159.另外,即使上述原始数据集中不包含一个零,利用本实施例公开的方法进行压缩编码,仍能得到与存在5个零时等同的压缩效果,而使用binary-mask压缩编码进行压缩,则会因为没有零,而导致没有任何压缩效果。
160.参见图10,图10为binary-mask压缩编码方式和本实施例分块压缩编码方法分别对densenet 121网络模型、densenet 169网络模型、densenet 201网络模型、inception v3网络模型、inceptionresnet v2网络模型、nasnetlarge网络模型、nasnetmobile网络模型、resnet网络模型及xception网络模型进行压缩的压缩率对比图,其中,压缩率是指压缩后的数据量除以压缩前的数据量得到的值。从图10中可明显看出,本实施例的分块压缩编码方法的压缩率均比binary-mask压缩编码方式的压缩率低,即压缩效果均优于binary-mask压缩编码方式。
161.本技术第四实施例公开了一种分块压缩编码装置,所述装置应用于本技术第三实施例所述的一种分块压缩编码方法,对于本实施例中未公开的细节,请参照第三实施例公开的内容。
162.所述分块压缩编码装置包括:
163.数据集获取模块,用于获取原始数据集。
164.数据集划分模块,用于按照预设的数据长度,将所述原始数据集划分为多个数据块,任一所述数据块中至少包含两个数据。
165.标志数据获取模块,用于获取任一所述数据块的标志数据及标志位宽,所述标志数据为所述数据块中所有数据在二进制格式下位宽最大的数据,所述标志位宽为所述标志数据在二进制格式下的位宽。
166.二进制转换模块,用于将每个所述数据块中的所有数据转换为位宽与所述标志位宽一致的带符号二进制数,获取对应的多个二进制数据块。
167.标记数据块设置模块,用于设置标记数据块。
168.标记模块,用于依次将所有所述数据块的标志位宽及其对应的合并次数记入所述标记数据块中,其中,若某一所述数据块的标志位宽与相邻所述数据块的标志位宽皆不同,则该数据块的标志位宽对应的合并次数为零,若存在连续相邻数据块的标志位宽相同,则将所述连续相邻数据块的标志位宽合并记入所述标记数据块中,且该标志位宽对应的合并次数为所述连续相邻数据块的个数减一。
169.压缩编码模块,用于获取所述原始数据集的压缩编码结果,所述压缩编码结果包括多个所述二进制数据块以及一个所述标记数据块。
170.进一步的,所述标志数据获取模块包括:
171.预处理单元,用于对目标数据块中的所有数据进行预处理,所述预处理包括正数预处理及负数预处理,其中,所述正数预处理用于对正数取绝对值,所述负数预处理用于对负数取绝对值后减一,所述目标数据块为任一所述数据块。
172.最大值提取单元,用于针对所述目标数据块中完成所述预处理的所有数据,提取最大值。
173.标志数据获取单元,用于将所述最大值对应的未经所述预处理的原数据作为所述目标数据块的所述标志数据。
174.标志位宽获取单元,用于将所述标志数据在二进制格式下的位宽作为所述标志位宽。
175.进一步的,所述数据集划分模块包括:
176.划分补零单元,用于根据所述预设的数据长度,对所述原始数据集进行划分,获取多个所述数据块,其中,若划分所得的最后一个数据块的数据长度短于所述预设的数据长度,则对所述最后一个数据块进行补零操作。
177.本技术第五实施例公开了一种计算机设备,包括:
178.存储器,用于存储计算机程序。
179.处理器,用于执行所述计算机程序时实现如本技术第一实施例所述的分块压缩编码方法的步骤或者如本技术第三实施例所述的分块压缩编码方法的步骤。
180.本技术第六实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理执行时实现如本技术第一实施例所述的分块压缩编码方法的步骤或者如本技术第三实施例所述的分块压缩编码方法的步骤。
181.以上结合具体实施方式和范例性实例对本技术进行了详细说明,不过这些说明并
不能理解为对本技术的限制。本领域技术人员理解,在不偏离本技术精神和范围的情况下,可以对本技术技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本技术的范围内。本技术的保护范围以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献