Caffe中lmdb和leveldb格式数据的读取

概述

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