Python解析lmdb格式mnist数据集

来源:互联网 发布:北京金山软件年终奖 编辑:程序博客网 时间:2024/06/10 06:01

背景

HDF5和LMDB都是Cafffe中常用的数据库。相对来说,HDF5的读写格式简单;LMDB采用内存-映射文件(memory-mapped files),所以拥有非常好的I/O性能,而且对于大型数据库来说,HDF5的文件常常整个写入内存。所以HDF5的文件大小就受限于内存大小,当然也可以通过文件分割来解决问题,但其I/O性能就不如LMDB的页缓存(page cachiing)策略了。

MNIST手写数字字符识别实验在deep learning 中经常用到,这里使用Python来获取lmdb格式MNIST数据集中的图片并显示出来

Python读取LMDB

首先确认你安装了lmdb和Caffe的python包(Caffe中的pycaffe)。

pip install lmdb

LMDB采用键值对的存储格式,key就是字符形式的ID,value是Caffe中Datum类的序列化形式。

# -*- coding:utf-8 -*-import caffefrom caffe.proto import caffe_pb2import lmdbimport cv2 as cvenv = lmdb.open("mnist_train_lmdb", readonly=True)  # 打开数据文件txn = env.begin()  # 生成处理句柄cur = txn.cursor()  # 生成迭代器指针datum = caffe_pb2.Datum()  # caffe 定义的数据类型for key, value in cur:    print(type(key), key)    datum.ParseFromString(value)  # 反序列化成datum对象    label = datum.label    data = caffe.io.datum_to_array(datum)    print data.shape    print datum.channels    image = data[0]    # image = data.transpose(1, 2, 0)    print(type(label))    cv.imshow(str(label), image)    cv.waitKey(0)cv.destroyAllWindows()env.close()

运行结果:
这里写图片描述

这里写图片描述 这里写图片描述这里写图片描述 ……

读取LMDB数据库中的Datum数据,这里再稍微介绍一下Datum的格式:channels:图片的通道,彩色图有3个通道,灰度图只有1通道,当然也可以用通道数来表示其他意思,比如表示两张图片,每个通道一个单张的图;height:图片(即data)的高;width:图片(即data)的宽;data:图片的数据(像素值);label:图片的label。(datum.channels, datum.height, datum.width)


参考:

  • http://blog.csdn.net/langb2014/article/details/52995349
  • https://zhuanlan.zhihu.com/p/23485774
阅读全文
0 0
原创粉丝点击