概述
Caffe里面的一种数据存储和读取方式是使用数据库格式,将数据保存到特定的一个数据库文件中,然后在代码里面整个读入这个数据库文件。Caffe支持的数据库格式包括lmdb和leveldb,可能很多人是因为caffe才知道这两个库的,但其实这两个库也是非常出名的工具。下面就展示下在Caffe里面用Python接口调用生成的LMDB或者LEVELDB格式的文件的代码吧。
LMDB 操作方式
具体方式见如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import lmdb env = lmdb.open('pool5-lmdb', readonly=True) txn = env.begin() for k, v in txn.cursor(): print k,v
cur = txn.cursor() k, v = cur.item() print k,v v = txn.get(k) print v
import sys sys.path.insert(0, '/data2/yunfeng/caffe20161019/python/') import caffe datum = caffe.proto.caffe_pb2.Datum() datum.ParseFromString(v) print datum.label, datum.channels, datum.width, datum.height
import numpy as np data = caffe.io.datum_to_array(datum) print data.shape
|
LEVELDB 操作方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import leveldb db = leveldb.LevelDB('pool5-leveldb') for k, v in db.RangeIter(): print k,v
v = db.Get(k) db.Put('new_key', 'new_value') db.Delete('new_key')
batch = leveldb.WriteBatch(); batch.Put('hello', 'world'); batch.Put('hello again', 'world'); batch.Delete('hello'); db.Write(batch, sync = True);
import sys sys.path.insert(0, '/data2/yunfeng/caffe20161019/python/') import caffe datum = caffe.proto.caffe_pb2.Datum() datum.ParseFromString(v) print datum.label, datum.channels, datum.width, datum.height
import numpy as np data = caffe.io.datum_to_array(datum) print data.shape
|