2017-06-06 102 views
0

我有[82,3,780,1024]张量的大小 - 合并82个不同的图像帧 - 以uint8格式。一旦我开始插入这些数据,LMDB在大小方面就会变得疯狂。插入前有没有办法压缩这些张量?如何在插入LMDB数据集之前压缩numpy数组?

对于插入我按照问题here

我找到cv2.encodecv2.decode一个解决方案,但它并不适用于这类张量AFAIK。

回答

0

您可以使用众多快速内存压缩算法之一。一个非常好的选择是使用blosc库,该库本身允许您在这种情况下使用专用(或性能良好)的几种算法。

您可以通过调用获得支持的压缩算法列表(在blosc 1.4.4版)

import blosc 
blosc.compressor_list() 
['blosclz', 'lz4', 'lz4hc', 'snappy', 'zlib', 'zstd'] 

,你可以压缩/解压缩使用通常blosc.compress(bytesobj, typesize=8, clevel=9, shuffle=1, cname='blosclz')blosc.decompress(bytesobj)方法的任何二进制数据或字符串。

我通常使用blosc变体之一,如果我需要速度,和bz2库,如果我想非常好的压缩比(但运行时间较慢)。