文件格式之lmdb

来源:互联网 发布:站点数据和格点数据 编辑:程序博客网 时间:2024/05/16 16:05

使用caffe对数据进行处理时,需要将图片转化为lmdb格式的。
求助百度百科,无词条,求助wikipedia,成功,地址.
lmdb 是Lightning Memory-Mapped Database的缩写。
LMDB示例文件为
这里写图片描述
它包含一个数据文件和一个锁文件。

python 操作

参考教程1,教程2和教程3
python module 为lmdb
直接通过pip进行安装

pip install lmdb

读 LMDB

import caffeimport lmdbimport numpy as npimport cv2from caffe.proto import caffe_pb2lmdb_env = lmdb.open('lmdb_data')lmdb_txn = lmdb_env.begin()lmdb_cursor = lmdb_txn.cursor()datum = caffe_pb2.Datum()for key, value in lmdb_cursor:    datum.ParseFromString(value)    label = datum.label    data = caffe.io.datum_to_array(datum)    #CxHxW to HxWxC in cv2    image = np.transpose(data, (1,2,0))    cv2.imshow('cv2', image)    cv2.waitKey(1)    print('{},{}'.format(key, label))

import lmdbimport numpy as npimport cv2import caffefrom caffe.proto import caffe_pb2#basic settinglmdb_file = 'lmdb_data'batch_size = 256# create the lmdb filelmdb_env = lmdb.open(lmdb_file, map_size=int(1e12))lmdb_txn = lmdb_env.begin(write=True)datum = caffe_pb2.Datum()item_id = -1for x in range(1000):    item_id += 1    #prepare the data and label    data = np.ones((3,64,64), np.uint8) * (item_id%128 + 64) #CxHxW array, uint8 or float    label = item_id%128 + 64    # save in datum    datum = caffe.io.array_to_datum(data, label)    keystr = '{:0>8d}'.format(item_id)    lmdb_txn.put( keystr, datum.SerializeToString() )    # write batch    if(item_id + 1) % batch_size == 0:        lmdb_txn.commit()        lmdb_txn = lmdb_env.begin(write=True)        print (item_id + 1)# write last batchif (item_id+1) % batch_size != 0:    lmdb_txn.commit()    print 'last batch'    print (item_id + 1)