2017-04-04 199 views
0

我有一個很大的數據集,這使我的lmdb變得龐大。對於16.000個樣本,我的數據庫已經是20 GB。但總的來說,我有800.000圖像,這將最終導致大量的數據。有沒有辦法壓縮lmdb?還是使用HDF5文件更好?我想知道有沒有人知道這個問題的最佳解決方案。在lmdb中壓縮我的數據的最佳方法是什麼?

+0

您是否使用caffe的'convert_imageset'轉換圖像?如果是的話,你使用'--encoded'參數嗎? – lnman

+0

不,我使用我自己的python代碼來做,因爲我必須改變和重塑我的數據。 @Inman – thigi

+0

你會如何以編程方式對文件進行編碼?我做的是:'vtxn.put('{:0> 10d}'.format(in_idx),datum.SerializeToString())''。但我認爲不可能「壓縮」SerializeToString()方法? @Inman – thigi

回答

2

如果你在ReadImageToDatum函數裏看io.cpp它可以保持圖像壓縮(jpg/png)格式或原始格式。要使用壓縮格式,您可以使用cv::imencode壓縮加載的圖像。現在您只需將數據設置爲壓縮數據並設置encoded標誌。然後您可以將數據存儲在lmdb中。

+0

你如何設置編碼標誌? – thigi

+0

'datum-> set_encoded(true);'用於https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp#L133 – lnman

+0

for python'datum.encoded = True ' – lnman

0

有各種技術可以減少輸入大小,但其中的大部分取決於您的應用程序。例如,ILSVRC-2012數據集圖像可以調整大小爲256x256像素,而不會對訓練時間或模型精度造成不良影響。這將數據從240Gb減少到40Gb。您的數據集是否會因簡單的「物理」壓縮而失去保真度?你有多少小小的數據集?

恐怕我沒有足夠的HDF5文件有足夠的知情意見。

+0

我希望它儘可能小,儘可能快地創建。所以,我可能不得不在這兩者之間找到最佳的折衷方案。我正在嘗試在可以設置壓縮參數的時刻創建HDF5文件。但是,顯然壓縮越好,創建數據集的計算時間就越長。我有我自己的數據集的形式爲PNG。我需要將它們存儲在lmdb或hdf5或其他** caffe **接受的其他內容中。但我不能使用原始圖片本身,因爲我必須先處理它們。 4GB的原始圖像在傳輸到lmdb時會導致20GB @Prune – thigi

+0

您忽略了我的第一個問題,並以無法衡量的「最佳平衡」替換第二個問題。這使我沒有什麼可以增加討論。 – Prune

+0

那麼,我的數據集已經被壓縮了。問題是我如何存儲壓縮的數據集。當我使用lmdb時,我之前壓縮的數據集變得更大,因爲lmdb不使用任何類型的壓縮。因此,我對你的問題有點困惑。 @Prune – thigi

相關問題