2017-04-04 3 views
0

J'ai un grand ensemble de données qui rend mon lmdb énorme. Pour 16.000 échantillons ma base de données est déjà de 20 GB. Mais au total, j'ai 800.000 images qui se retrouveraient dans une énorme quantité de données. Est-il possible de compresser un lmdb? Ou est-il préférable d'utiliser des fichiers HDF5? Je voudrais savoir si quelqu'un sait probablement la meilleure solution pour ce problème.Quelle est la meilleure façon de compresser mes données dans lmdb

+0

avez-vous converti l'image en utilisant 'convert_imageset' de caffe? Si oui, avez-vous utilisé le paramètre '--encoded'? – lnman

+0

Non, j'utilise mon propre code python pour le faire, car je dois modifier et remodeler mes données. @Inman – thigi

+0

Comment encoderiez-vous les fichiers par programme? Ce que je fais est: 'vtxn.put ('{: 0> 10d}'. Format (in_idx), datum.SerializeToString())'. Mais je pense qu'il n'est pas possible de "compresser" la méthode SerializeToString()? @Inman – thigi

Répondre

2

Si vous regardez à l'intérieur fonction ReadImageToDatum en io.cpp il peut garder l'image à la fois le format ou format brut compressé (jpg/png). Pour utiliser le format compressé, vous pouvez compresser l'image chargée en utilisant cv::imencode. Maintenant, il vous suffit de définir la référence aux données compressées et de définir le drapeau encoded. Ensuite, vous pouvez stocker la donnée au lmdb.

+0

Comment définissez-vous le drapeau codé? – thigi

+0

'datum-> set_encoded (true);' tel qu'il est utilisé dans https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp#L133 – lnman

+0

pour python 'datum.encoded = True ' – lnman

0

Il existe différentes techniques pour réduire la taille des entrées, mais cela dépend en grande partie de votre application. Par exemple, les images du jeu de données ILSVRC-2012 peuvent être redimensionnées à environ 256 x 256 pixels sans effets désagréables sur le temps d'apprentissage ou la précision du modèle. Cela réduit l'ensemble de données de 240 Go à 40 Go. Votre ensemble de données peut-il subir une perte de fidélité due à une simple compression "physique"? À quel point devez-vous avoir l'ensemble de données? Je crains de ne pas avoir suffisamment travaillé avec les fichiers HDF5 pour avoir une opinion en connaissance de cause.

+0

Je veux qu'il soit aussi petit que possible et aussi rapide que possible de créer. Donc, je dois probablement trouver le meilleur compromis entre ces deux. J'essaie de créer des fichiers HDF5 au moment où vous pouvez définir un paramètre de compression. Cependant, évidemment, plus la compression est bonne, plus le temps de calcul est long pour créer l'ensemble de données. J'ai mon propre ensemble de données sous forme de pngs. Je dois les stocker dans un lmdb ou hdf5 ou toute autre chose que ** caffe ** accepte. Mais je ne peux pas utiliser les images brutes car je dois les traiter en premier. 4 Go de mes images brutes résultent en 20 Go lors du transfert vers lmdb @Prune – thigi

+0

Vous avez ignoré ma première question et remplacé la seconde par un "meilleur compromis" non mesurable. Cela ne me laisse rien à ajouter à la discussion. – Prune

+0

Eh bien, mon ensemble de données est déjà compressé. La question était comment puis-je stocker l'ensemble de données compressé. Quand j'utilise lmdb mon dataset qui a été compressé avant est beaucoup plus gros, puisque lmdb n'utilise aucune sorte de compression. Par conséquent, j'étais un peu confus au sujet de votre question. @ Prune – thigi