0
我有[82,3,780,1024]張量的大小 - 合併82個不同的圖像幀 - 以uint8格式。一旦我開始插入這些數據,LMDB在大小方面就會變得瘋狂。插入前有沒有辦法壓縮這些張量?如何在插入LMDB數據集之前壓縮numpy數組?
對於插入我按照問題here
我找到cv2.encode
和cv2.decode
一個解決方案,但它並不適用於這類張量AFAIK。
我有[82,3,780,1024]張量的大小 - 合併82個不同的圖像幀 - 以uint8格式。一旦我開始插入這些數據,LMDB在大小方面就會變得瘋狂。插入前有沒有辦法壓縮這些張量?如何在插入LMDB數據集之前壓縮numpy數組?
對於插入我按照問題here
我找到cv2.encode
和cv2.decode
一個解決方案,但它並不適用於這類張量AFAIK。
您可以使用衆多快速內存壓縮算法之一。一個非常好的選擇是使用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
庫,如果我想非常好的壓縮比(但運行時間較慢)。