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
Répondre
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
.
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.
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
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
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
avez-vous converti l'image en utilisant 'convert_imageset' de caffe? Si oui, avez-vous utilisé le paramètre '--encoded'? – lnman
Non, j'utilise mon propre code python pour le faire, car je dois modifier et remodeler mes données. @Inman – thigi
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