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
然后再运行数据库读取代码段即可。