天天看點

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

前言

前面介紹的案例都是leveldb的格式,但是比較流行和實用的格式是lmdb,原因從此網站摘取

  • 它們都是鍵/值對(Key/Value Pair)嵌入式資料庫管理系統程式設計庫。
  • 雖然lmdb的記憶體消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允許多種訓練模型同時讀取同一組資料集。
  • 是以lmdb取代了leveldb成為Caffe預設的資料集生成格式。

以下步驟均為在E:\CaffeDev-GPU\caffe-master下實施

第一步

確定路徑E:\CaffeDev-GPU\caffe-master\examples\mnist下存在從mnist官網下載下傳的四個檔案,我在mnist下建立了一個mnist檔案夾,把檔案丢進去了

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

并在E:\CaffeDev-GPU\caffe-master\examples\mnist檔案夾下建立bat檔案建立訓練集create_minist_trainlmdb.bat,内容如下:

E:\CaffeDev-GPU\caffe-master\Build\x64\Debug\convert_mnist_data.exe ./mnist/train-images-idx3-ubyte ./mnist/train-labels-idx1-ubyte ./mnist_train_lmdb
pause
           

接下來建立測試集create_minist_testlmdb.bat,内容如下:

E:\CaffeDev-GPU\caffe-master\Build\x64\Debug\convert_mnist_data.exe ./mnist/t10k-images-idx3-ubyte ./mnist/t10k-labels-idx1-ubyte ./mnist_test_lmdb
pause
           

或者跟我們前面建立leveldb一樣,建立一個bat,内容如下:

set DATA=../../data/mnist
set TOOLS=../../Build/x64/Debug

REM set BACKEND=leveldb
set BACKEND=lmdb

echo "Creating %BACKEND%..."

rd /s /q "mnist_train_%BACKEND%"
rd /s /q "mnist_test_%BACKEND%"

"%TOOLS%/convert_mnist_data.exe" %DATA%/train-images-idx3-ubyte %DATA%/train-labels-idx1-ubyte mnist_train_%BACKEND% --backend=%BACKEND%
"%TOOLS%/convert_mnist_data.exe" %DATA%/t10k-images-idx3-ubyte %DATA%/t10k-labels-idx1-ubyte mnist_test_%BACKEND% --backend=%BACKEND%

echo "Done."

pause
           

第二步

運作建立訓練集的bat,出現我們的第一個問題

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

原因在于記憶體問題,打開caffe.sln,然後修改convert_mnist_data.cpp第101行

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

原始值設定記憶體為1T,然而我們的記憶體并沒這麼大,是以改小一點,差不多100M多一點吧

改完以後重新編譯此cpp檔案,然後再去運作前面建立訓練集和測試集的bat檔案

第三步

運作create_minist_trainlmdb.bat會出現

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

如果你原來有mnist_train_lmdb這個檔案夾記得删掉,否則會出現

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步

因為我們寫bat的時候并未檢測這個檔案夾是否存在,隻是想單純建立這個檔案夾,用來存lmdb資料,是以會出現mkdir應該就是make dir失敗。

如果我們使用第三個bat就不會出現這個問題了,一目了然

【caffe-Windows】以mnist為例lmdb格式資料前言第一步第二步第三步