本文主要是介绍文件格式之lmdb,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LMDB:是一种极大减少IO开销的数据管理方式,特别是对于样本多,但是都是小样本的情况特别合适。该数据格式采用的是一种字典的格式。
对于训练神经网络,数据类型复杂多样,有二进制文件,文本文件,编码后的图像文件和JPEG或PNG等等
使用caffe对数据进行处理时,需要将图片转化为lmdb格式的。
求助百度百科,无词条,求助wikipedia,成功,地址.
lmdb 是Lightning Memory-Mapped Database的缩写。
LMDB示例文件为
它包含一个数据文件和一个锁文件。
python 操作
参考教程1,教程2和教程3
python module 为lmdb
直接通过pip
进行安装
pip install lmdb
- 1
读 LMDB
import caffe
import lmdb
import numpy as np
import cv2
from 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.labeldata = caffe.io.datum_to_array(datum)#CxHxW to HxWxC in cv2image = np.transpose(data, (1,2,0))cv2.imshow('cv2', image)cv2.waitKey(1)print('{},{}'.format(key, label))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
写
import lmdb
import numpy as np
import cv2
import caffe
from caffe.proto import caffe_pb2#basic setting
lmdb_file = 'lmdb_data'
batch_size = 256# create the lmdb file
lmdb_env = lmdb.open(lmdb_file, map_size=int(1e12))
lmdb_txn = lmdb_env.begin(write=True)
datum = caffe_pb2.Datum()item_id = -1
for x in range(1000):item_id += 1#prepare the data and labeldata = np.ones((3,64,64), np.uint8) * (item_id%128 + 64) #CxHxW array, uint8 or floatlabel = item_id%128 + 64# save in datumdatum = caffe.io.array_to_datum(data, label)keystr = '{:0>8d}'.format(item_id)lmdb_txn.put( keystr, datum.SerializeToString() )# write batchif(item_id + 1) % batch_size == 0:lmdb_txn.commit()lmdb_txn = lmdb_env.begin(write=True)print (item_id + 1)# write last batch
if (item_id+1) % batch_size != 0:lmdb_txn.commit()print 'last batch'print (item_id + 1)
这篇关于文件格式之lmdb的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!