Z:
在安裝了caffe框架后需要讀取大量的數據進行學習訓練。比如在MNIST識別訓練中,一般直接讀圖片會比較耗時,我們一般將圖片轉存為數據庫中。目前主流的數據庫有以下兩種選擇:
- LevelDB
- LmDB
如果我們需要的數據格式是LevelDB,我們需要執行以下命令
gedit^C/caffe/examples/mnist/create_mnist.sh
然后在打開的編輯器里面修改create_mnist.sh腳本的代碼,將BACKEND=lmdb改為:BACKEND="leveldb"
如下腳本中突出顯示部分:
#!/usr/bin/env sh # This script converts the mnist data into lmdb/leveldb format, # depending on the value assigned to $BACKEND. set -e EXAMPLE=examples/mnist DATA=data/mnist BUILD=build/examples/mnist #BACKEND="lmdb" BACKEND="leveldb" echo "Creating ${BACKEND}..." rm -rf $EXAMPLE/mnist_train_${BACKEND} rm -rf $EXAMPLE/mnist_test_${BACKEND} $BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \ $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND} $BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \ $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND} echo "Done."
我們可以通過如下代碼測試讀取LevelDB數據庫所用時間,具體代碼如下
# coding: utf-8 # # 讀取LevelDb數據庫中的數據 import sys import caffe from caffe.proto import caffe_pb2 import leveldb import numpy as np from skimage import io def leveldb_process(path): db = leveldb.LevelDB(path) datum = caffe_pb2.Datum() item_id = 0 for key,value in db.RangeIter(): datum.ParseFromString(value) label = datum.label data = caffe.io.datum_to_array(datum) # do something here item_id += 1 print item_id if __name__ == '__main__': path = sys.argv[1] leveldb_process(path)
當執行讀取levelDB數據庫中的數據時出現錯誤提示:ImportError: No module named leveldb解決辦法如下:
打開終端執行命令:
python2 -m pip install leveldb
然后再運行數據庫讀取代碼段即可。