2017-06-06 2 views
0

J'ai la taille de [82,3,780,1024] tenseurs - fusion de 82 images différentes - format uint8. LMDB devient fou en termes de taille, une fois que je commence à les insérer. Est-il possible de compresser ces tenseurs avant de les insérer?Comment compresser des tableaux numpy avant de les insérer dans un ensemble de données LMDB?

Pour insérer la question que je suivre here

je trouve une solution avec cv2.encode et cv2.decode mais ce n'est pas applicable à ces tenseurs afaik.

Répondre

0

Vous pouvez utiliser l'un des nombreux algorithmes de compression rapide en mémoire. Une très bonne option serait d'utiliser la bibliothèque blosc, qui elle-même vous permet d'utiliser un certain nombre d'algorithmes spécialisés (ou performants) dans ce scénario.

Vous pouvez obtenir la liste des algorithmes de compression pris en charge par l'invocation (dans la version blosc 1.4.4)

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

et vous pouvez compresser/décompresser des données binaires ou chaîne en utilisant les méthodes habituelles blosc.compress(bytesobj, typesize=8, clevel=9, shuffle=1, cname='blosclz') et blosc.decompress(bytesobj).

J'utilise généralement l'une des variantes blosc si j'ai besoin de vitesse, et bz2 bibliothèque si je veux de très bons taux de compression (mais un temps d'exécution plus lent).