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

然后再运行数据库读取代码段即可。