发明内容
针对上面提到的码表大小由于编码后的最大码字长度过长而导致码表存储空间过大的问题,提出了一种数据压缩方法和装置,其能控制和缩短最大码字长度,从而降低用于码表的存储空间大小。
依据本发明的第一方面,提供了一种数据压缩方法,其包括:
获取参数的多个取值,以及所述多个取值中每一者的出现概率;
将所述出现概率与预定阈值进行比较,其中所述出现概率小于所述预定阈值的取值为第一组取值,而所述出现概率大于或等于所述预定阈值的取值为第二组取值;
对所述第一组取值进行预处理;以及
对所述第二组取值和经预处理的第一组取值进行编码。
在这里,预定阈值可以根据实际应用情况而由本领域技术人员具体确定。一般来说,预定阈值越大,则第一组取值的数量会越多,对最大码字长度的降低效果越显著,但是可能对总体编码效率的影响会越大;相反,如果预定阈值越小,则第一组取值的数量会越少,对最大码字长度的降低效果会较小,但是可能对总体编码效率的影响会越小。
此外,对第一组取值进行预处理然后进行编码的目的在于降低该组取值的编码码字长度。
优选地,对所述第一组取值进行预处理可以包括:获取所述第一组取值中各取值的原始编码码字。
优选地,对所述第二组取值和经预处理的第一组取值进行编码可以包括:
对所述第二组取值进行可变字长编码,得到所述第二组取值中各取值对应的编码后码字,以及
将所述可变字长编码所得的最短编码后码字在末尾补充0和1中的一者作为所述最短编码后码字对应的取值的补充后码字,并且将所述最短编码后码字在末尾补充0和1中的另一者作为前缀与所获取的所述第一组取值中各取值的原始编码码字组合分别作为所述第一组取值中的各取值的组合码字。
优选地,上述方法还可以包括:形成码表,所述码表可至少包括:所述第一组取值中的各取值及其分别对应的所述组合码字;所述第二组取值中的各取值及其分别对应的所述编码后码字或补充后码字。
优选地,所述方法还可以包括:在根据所述码表对输入比特流进行译码时,如果译码结果为所述前缀,则在所述输入比特流中从所述前缀往后取预设N个比特作为所述原始编码码字进行输出,其中N可以是所述原始编码码字的长度。原始编码码字的长度N优选为大于2的自然数,N越大,本发明的数据压缩方法的优势更显著。
优选地,对所述第一组取值进行预处理可以包括:
将所述第一组取值中各取值的出现概率设置为使得:所述第一组取值中各取值的出现概率之和不大于所述第二组取值中的次小值,并且所述第一组取值能够形成平衡二叉树。更加优选地,对所述第一组取值进行预处理可以包括:计算所述第一组取值中各取值的出现概率的平均值,并且将所述第一组取值中各取值的出现概率设置为彼此相等且小于或等于所述平均值。在这里,所述预处理旨在使得对所述第一组取值编码后的码字长度更加均匀。
优选地,对所述第二组取值和经预处理的第一组取值进行编码包括:
对所述第二组取值和经预处理的第一组取值一起进行可变字长编码。
优选地,所述可变字长编码可以为香农编码、费诺编码或者霍夫曼编码。
依据本发明的第一方面,提供了一种数据压缩装置,包括获取单元、比较单元、预处理单元和编码单元,其中获取单元与比较单元连接,比较单元与预处理单元及编码单元连接,预处理单元与编码单元连接,其特征在于,
所述获取单元用于获取参数的多个取值,以及所述多个取值中每一者的出现概率;
所述比较单元用于将所述获取单元获取的出现概率与预定阈值进行比较,并且将来自所述获取单元的所述多个取值分为其出现概率小于所述预定阈值的第一组取值、以及其出现概率大于或等于所述预定阈值的第二组取值;
所述预处理单元对来自所述比较单元的所述第一组取值进行预处理;以及
所述编码单元对来自所述比较单元的所述第二组取值和经所述预处理单元预处理的第一组取值进行编码。
在这里,预定阈值可以根据实际应用情况而由本领域技术人员具体确定。一般来说,预定阈值越大,则第一组取值的数量会越多,对最大码字长度的降低效果越显著,但是可能对总体编码效率的影响会越大;相反,如果预定阈值越小,则第一组取值的数量会越少,对最大码字长度的降低效果会较小,但是可能对总体编码效率的影响会越小。
此外,对第一组取值进行预处理然后进行编码的目的在于降低该组取值的编码码字长度。
优选地,所述预处理包括:获取所述第一组取值中各取值的原始编码码字。
优选地,所述编码单元进行的编码可以包括:
对所述第二组取值进行可变字长编码,得到所述第二组取值中各取值对应的编码后码字,以及
将所述可变字长编码所得的最短编码后码字在末尾补充0和1中的一者作为所述最短编码后码字对应的取值的补充后码字,并且将所述最短编码后码字在末尾补充0和1中的另一者作为前缀与所获取的所述第一组取值中各取值的原始编码码字组合分别作为所述第一组取值中的各取值的组合码字。
优选地,所述编码单元还用于形成码表,所述码表至少包括:所述第一组取值中的各取值及其分别对应的所述组合码字;所述第二组取值中的各取值及其分别对应的所述编码后码字或补充后码字。
优选地,所述预处理单元对所述第一组取值进行预处理包括:
将所述第一组取值中各取值的出现概率设置为使得:所述第一组取值中各取值的出现概率之和不大于所述第二组取值中的次小值,并且所述第一组取值能够形成平衡二叉树。
优选地,所述预处理单元还可以用于:
计算所述第一组取值中各取值的出现概率的平均值,并且将所述第一组取值中各取值的出现概率设置为彼此相等且小于或等于所述平均值。
优选地,所述编码单元还可以用于:对所述第二组取值和经预处理的第一组取值一起进行可变字长编码。
优选地,所述可变字长编码为香农编码、费诺编码或者霍夫曼编码。
根据本发明的又一方面,还提供了一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令被处理器执行时实现如上所述的方法。
利用以上方案,针对进行本发明的编码前概率最小的一部分码字进行预处理,从而达到降低最大编码后码字长度的效果。因为人工神经网络的参数中有一部分取值的出现概率是远小于其他部分的取值,因此针对这部分取值的处理对压缩效率影响不大,但却会显著降低译码的复杂度和实现代价,尤其是存储器空间的代价。
应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举说明本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
在本发明中,应理解,诸如“包括”或“具有”等术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不旨在排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在的可能性。
另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
在图1中,示出了根据本发明一实施例的数据压缩方法的流程示意图。该数据压缩方法包括:
S101:获取参数的多个取值,以及所述多个取值中每一者的出现概率;
S102:将所述出现概率与预定阈值进行比较,其中所述出现概率小于所述预定阈值的取值为第一组取值,而所述出现概率大于或等于所述预定阈值的取值为第二组取值;
S103:对第一组取值进行预处理;以及
S104:对第二组取值和经预处理的第一组取值进行编码。
在这里,对所述参数的类型不作具体限定,其可以是各种参数,例如人工神经网络中的各种参数(例如卷积计算中涉及的参数),或者其它数学模型或算法中的参数;本发明实施例中的数据压缩方法所达效果的有效程度高低,与各参数取值概率分布差异的大小呈正相关。本申请中以人工神经网络中的参数为例进行说明,但是不限于人工神经网络中的参数。
本发明实施例中,对参数取值的处理并非如传统那样采用统一方式,而是对参数取值进行分组,并对不同组的取值进行不同的处理,从而实现控制和缩短最大码字长度,进而降低用于码表的存储空间大小的目的。
本领域技术人员可以理解的是,预定阈值越大,则第一组取值中的取值数量会越多,对最大码字长度的降低效果越显著,但是可能对总体编码效率的影响会越大;相反,如果预定阈值越小,则第一组取值中的取值数量会越少,对最大码字长度的降低效果会较小,但是可能对总体编码效率的影响会越小。
此外,对第一组取值进行预处理然后进行编码的目的在于降低该组取值的编码后码字长度。
下面结合图2和图3进一步描述本发明实施例。图2为根据本发明另一实施例的数据压缩方法的示例,其中(a)示出采用传统霍夫曼编码的示例,而(b)和(c)示出采用本发明实施例中的方法的示例;图3为根据本发明另一实施例的数据压缩方法的另一示例,其中(a)示出采用传统霍夫曼编码的示例,而(b)和(c)示出采用本发明实施例中的方法的示例。
如图2所示,在本示例中,参数A在编码前的原始编码码字长度N为3比特(例如,该参数A以3比特进行量化编码),具有8个取值a1、a2、a3、a4、a5、a6、a7、a8,分别具有原始编码码字000、001、010、011、100、101、110、111,对应的出现概率为分别为1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/128。如图中(a)所示,如果采用传统霍夫曼(Huffman)编码,尽管所得编码的最短码字长度仅为1,即取值a1对应的编码后码字1,但是所得编码的最大码字长度达到了7比特,即取值a7对应的编码后码字0000001和取值a8对应的编码后码字0000000。
在采用本发明实施例中的数据压缩方法的情况下,如图2中(b)和(C)所示,假如预定阈值为1/48,则通过上述步骤S102将取值a1、a2、a3、a4、a5、a6、a7、a8的概率1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/128与该预定阈值进行比较后将参数A的8个取值分为两组,即第一组取值a6、a7、a8和第二组取值a1、a2、a3、a4、a5。接着对第一组取值a6、a7、a8进行预处理以获取第一组取值a6、a7、a8中各取值的原始编码码字101、110、111。同时,如图2中(b)所示,对第二组取值a1、a2、a3、a4、a5进行可变字长编码如霍夫曼编码,得到第二组取值a1、a2、a3、a4、a5中各取值对应的编码后码字1、01、001、0001、0000,此外,将所得编码后码字中的最短编码后码字1在末尾补充0作为所述最短编码后码字对应的取值a1的补充后码字10,并且将所述最短编码后码字1在末尾补充1作为前缀11,将该前缀11与所获取的第一组取值a6、a7、a8中各取值的原始编码码字101、110、111组合,得到11101、11110、11111,分别作为第一组取值a6、a7、a8中的各取值的组合码字,如图2中(c)所示。这样,本发明实施例最终所得的最长编码后码字的长度为5,比传统编码对应的最长编码后码字的长度7减小了。
本实施例中的数据压缩方法中形成的码表如下表1所示,该码表可至少包括:第一组取值中的各取值及其分别对应的组合码字;第二组取值中的各取值及其分别对应的编码后码字或补充后码字。
表1
编码后码字 |
编码前取值 |
码字长度 |
10 |
a1 |
2 |
01 |
a2 |
2 |
001 |
a3 |
3 |
0001 |
a4 |
4 |
0000 |
a5 |
4 |
11101 |
a6 |
5 |
11110 |
a7 |
5 |
11111 |
a8 |
5 |
在上述获得前缀的方式中,当然也可以是将第二组取值a1、a2、a3、a4、a5中各取值的所得编码后码字中的最短编码后码字1在末尾补充1作为所述最短编码后码字对应的取值a1的补充后码字11,并且将所述最短编码后码字1在末尾补充0作为前缀10,将该前缀10与所获取的第一组取值a6、a7、a8中各取值的原始编码码字101、110、111组合,得到10101、10110、10111,分别作为第一组取值a6、a7、a8中的各取值的组合码字。
在根据所得到的码表对输入比特流进行译码时,如果译码结果为所述前缀,则在输入比特流中从所述前缀往后取预设N个比特作为原始编码码字进行输出,其中N为所述原始编码码字的长度。原始编码码字长度N优选为大于2的自然数,N越大,本发明的数据压缩方法的优势更显著。
在另一示例中,如图3所示,参数A在编码前的原始编码码字长度N为4比特(例如,该参数A以4比特进行量化编码),具有16个取值a1、a2、a3、a4、a5、a6、a7、a8、a9、a10、a11、a12、a13、a14、a15、a16,分别具有原始编码码字0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111,对应的出现概率为分别为1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/256、1/512、1/1024、1/2048、1/4096、1/8192、1/16384、1/32768、1/32768。如图3中(a)所示,如果采用传统霍夫曼(Huffman)编码,尽管所得编码的最短码字长度仅为1,即取值a1对应的编码后码字1,但是所得编码的最大码字长度达到了15比特,即取值a15对应的编码后码字000000000000001和取值a16对应的编码后码字000000000000000。
在采用本发明实施例中的数据压缩方法的情况下,如图3中(b)和(C)所示,假如预定阈值为1/72,则通过上述步骤S102将取值a1、a2、a3、a4、a5、a6、a7、a8、a9、a10、a11、a12、a13、a14、a15、a16的概率与该预定阈值进行比较后将参数A的16个取值分为两组,即第一组取值a7、a8、a9、a10、a11、a12、a13、a14、a15、a16和第二组取值a1、a2、a3、a4、a5、a6。接着对第一组取值a7、a8、a9、a10、a11、a12、a13、a14、a15、a16进行预处理以获取第一组取值a7、a8、a9、a10、a11、a12、a13、a14、a15、a16中各取值的原始编码码字0110、0111、1000、1001、1010、1011、1100、1101、1110、1111。同时,如图3中(b)所示,对第二组取值a1、a2、a3、a4、a5、a6进行可变字长编码如霍夫曼编码,得到第二组取值a1、a2、a3、a4、a5、a6中各取值对应的编码后码字1、01、001、0001、00001、00000,此外,将所得编码后码字中的最短编码后码字1在末尾补充0作为所述最短编码后码字对应的取值a1的补充后码字10,并且将所述最短编码后码字1在末尾补充1作为前缀11,将该前缀11与所获取的第一组取值a7、a8、a9、a10、a11、a12、a13、a14、a15、a16中各取值的原始编码码字0110、0111、1000、1001、1010、1011、1100、1101、1110、1111组合,得到110110、110111、111000、111001、111010、111011、111100、111101、111110、111111,分别作为第一组取值中的各取值的组合码字,如图3中(c)所示。这样,本发明实施例最终所得的最长编码后码字的长度为6,比传统编码对应的最长编码后码字的长度15显著减小了。
本实施例中的数据压缩方法中形成的码表如下表2所示,该码表可至少包括:第一组取值中的各取值及其分别对应的组合码字;第二组取值中的各取值及其分别对应的编码后码字或补充后码字。
表2
图4为根据本发明又一实施例的数据压缩方法的示例,其中(a)示出采用传统霍夫曼编码的示例,而(b)示出采用本发明实施例中的方法的示例。
如图4所示的示例中,参数A在根据本发明编码前的原始编码码字长度N为3比特(例如,该参数A以3比特进行量化编码),具有8个取值a1、a2、a3、a4、a5、a6、a7、a8,分别具有原始编码码字000、001、010、011、100、101、110、111,对应的出现概率为分别为1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/128。如图中(a)所示,如果采用传统霍夫曼编码,尽管所得编码的最短码字长度仅为1,即取值a1对应的编码后码字1,但是所得编码的最大码字长度达到了7比特,即取值a7对应的编码后码字0000001和a8对应的编码后码字0000000。
在采用本发明实施例中的数据压缩方法的情况下,如图4中(b)所示,假如预定阈值为1/24,则通过上述步骤S102将取值a1、a2、a3、a4、a5、a6、a7、a8的概率1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/128与该预定阈值进行比较后将参数A的8个取值分为两组,即第一组取值a5、a6、a7、a8和第二组取值a1、a2、a3、a4。接着对第一组取值a5、a6、a7、a8进行预处理以将其中各取值的出现概率重新设置为使得:第一组取值a5、a6、a7、a8中各取值的出现概率之和不大于第二组取值a1、a2、a3、a4中的次小值1/8,并且第一组取值能够形成平衡二叉树,这是为了避免对第一组取值重新编码时所得码字长度不够均匀而彼此差别太大。更加优选地,对第一组取值a1、a2、a3、a4进行的预处理可以包括:计算第一组取值a1、a2、a3、a4中各取值的出现概率的平均值,并且将第一组取值a1、a2、a3、a4中各取值的出现概率设置为彼此相等且小于或等于该平均值,这样,对第一组取值a1、a2、a3、a4编码后所得的码字长度能够更加均匀。
接下来,对第二组取值a5、a6、a7、a8和出现概率被重新设置后的第一组取值a1、a2、a3、a4一起进行编码,例如进行可变字长编码,如图4中(b)所示。本实施例中的数据压缩方法中形成的码表如下表3所示,该码表可至少包括:第一组取值中的各取值及其分别对应的组合码字;第二组取值中的各取值及其分别对应的编码后码字或补充后码字。
表3
编码后码字 |
编码前取值 |
码字长度 |
1 |
a1 |
1 |
01 |
a2 |
2 |
001 |
a3 |
3 |
0001 |
a4 |
4 |
000011 |
a5 |
6 |
000010 |
a6 |
6 |
000001 |
a7 |
6 |
000000 |
a8 |
6 |
这样,本示例中最终所得的最长编码后码字的长度为6,比传统编码对应的最长编码后码字的长度7减小了。
这里的可变字长编码可以为香农编码、费诺编码或者霍夫曼编码,或者其它编码方式。
下面结合图5描述用于实现上述数据压缩方法的数据压缩装置。如图5所示,示出了根据本发明又一实施例的数据压缩装置500的示意图。该数据压缩装置500包括:获取单元501、比较单元502、预处理单元503和编码单元504,其中获取单元501与比较单元502连接,比较单元502与预处理单元503及编码单元504连接,预处理单元503与编码单元504连接。
其中,获取单元501用于获取参数的多个取值,以及所述多个取值中每一者的出现概率;
比较单元502用于将获取单元501获取的出现概率与预定阈值进行比较,并且将来自获取单元502的所述多个取值分为其出现概率小于预定阈值的第一组取值、以及其出现概率大于或等于所述预定阈值的第二组取值;
预处理单元503对来自比较单元502的第一组取值进行预处理;以及
编码单元504对来自比较单元502的第二组取值和经预处理单元503预处理的第一组取值进行编码。
在这里,预定阈值可以根据实际应用情况而由本领域技术人员具体确定。一般来说,预定阈值越大,则第一组取值的数量会越多,对最大码字长度的降低效果越显著,但是可能对总体编码效率的影响会越大;相反,如果预定阈值越小,则第一组取值的数量会越少,对最大码字长度的降低效果会较小,但是可能对总体编码效率的影响会越小。
此外,对第一组取值进行预处理然后进行编码的目的在于降低该组取值的编码后码字长度。
在一具体示例中,预处理可以包括:获取第一组取值中各取值的原始编码码字。
编码单元504进行的编码可以包括:
对第二组取值进行可变字长编码,得到第二组取值中各取值对应的编码后码字,以及将可变字长编码所得的最短编码后码字在末尾补充0和1中的一者作为所述最短编码后码字对应的取值的补充后码字,并且将所述最短编码后码字在末尾补充0和1中的另一者作为前缀与所获取的所述第一组取值中各取值的原始编码码字组合分别作为所述第一组取值中的各取值的组合码字。
此外,编码单元504还可以用于形成码表,该码表至少包括:所述第一组取值中的各取值及其分别对应的所述组合码字;所述第二组取值中的各取值及其分别对应的所述编码后码字或补充后码字。
在另一具体示例中,预处理单元503对第一组取值进行的预处理包括:
将第一组取值中各取值的出现概率设置为使得:第一组取值中各取值的出现概率之和不大于第二组取值中的次小值,并且第一组取值能够形成平衡二叉树。
或者,预处理单元503还可以用于:
计算第一组取值中各取值的出现概率的平均值,并且将第一组取值中各取值的出现概率设置为彼此相等且小于或等于该平均值。
编码单元504还可以用于:对第二组取值和经预处理的第一组取值一起进行可变字长编码。
可变字长编码为香农编码、费诺编码或者霍夫曼编码,或者其它编码方式。
根据本发明的又一实施例,还提供了一种计算机可读存储介质。如图6所示,示出了根据本发明一实施例的计算机可读存储介质600的示意图,该计算机可读存储介质上存储有计算机指令,该计算机指令被处理器执行时实现如上所述的数据压缩方法。该计算机可读存储介质600可以采用便携式紧凑盘只读存储器(CD-ROM)。然而,本发明的计算机可读存储介质600不限于此,在本文件中,计算机可读存储介质可以是任何包含或存储计算机指令的有形介质。
利用以上方案,针对进行本发明的编码前概率最小的一部分码字进行预处理,从而达到降低最大编码后码字长度的效果。因为人工神经网络的参数中有一部分取值的出现概率是远小于其他部分的取值,因此针对这部分取值的处理对压缩效率影响不大,但却会显著降低译码的复杂度和实现代价,尤其是存储器空间的代价。
附图中的流程图和框图,图示了按照本公开各种实施例的方法、装置和计算机可读存储介质的可能实现的体系架构、功能和操作。应当注意,流程图中的每个方框所表示的步骤未必按照标号所示的顺序进行,有时可以基本并行地执行,有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的硬件来实现,或者可以用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。
通过以上对实施例的描述,本领域的技术人员可以清楚地了解到各实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。