Python读取LMDB数据:原理与MNIST实例解析

宋时安
宋时安
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何使用Python通过Caffe接口读取LMDB格式数据。LMDB凭借内存映射文件机制,在I/O性能上优于HDF5,特别适合大型数据库。文章详细解析了LMDB的键值对存储结构及Datum对象字段(channels、height、width、data、label),并提供基于MNIST手写数字数据集的Python读取与图像显示完整代码示例,帮助开发者高效处理深度学习数据。

Python读取LMDB数据:原理与MNIST实例解析

鉴于C++在运行速度上的优势,数据写入通常调用C++接口;虽然读取数据也可使用C++,但考虑到Python在数据处理方面的便捷性,此处仅通过Python接口对lmdb文件进行读取,主要处理对象为图片数据。


import lmdb
import numpy as np
import cv2
lmdb_file = "/home/rui/demo"
lmdb_env = lmdb.open(lmdb_file)
lmdb_txn = lmdb_env.begin()
lmdb_cursor = lmdb_txn.cursor()
for key, value in lmdb_cursor:
  img = cv2.imdecode(np.fromstring(value, np.uint8), 3);
  cv2.imshow("demo", img)
  cv2.waitKey(0)

补充知识:Python解析lmdb格式mnist数据集

LMDB与HDF5的性能对比

背景

HDF5和LMDB均为Caffe中常用的数据库格式。相比之下,HDF5的读写格式较为简单;而LMDB采用内存-映射文件(memory-mapped files)机制,因此具备卓越的I/O性能。

HDF5文件的大小受限于可用内存,尽管可通过文件分割来缓解此问题,但其I/O性能仍不及LMDB的页缓存(page caching)策略。

MNIST手写数字字符识别实验在深度学习领域应用广泛,本文旨在演示如何使用Python获取lmdb格式MNIST数据集中的图片并将其显示出来。

Python读取LMDB的实现步骤

Python读取LMDB

首先需确认已安装lmdb库及Caffe的Python包(即Caffe中的pycaffe)。

pip install lmdb

LMDB存储结构与Datum对象解析

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


# -*- coding:utf-8 -*-
import caffe
from caffe.proto import caffe_pb2
import lmdb
import cv2 as cv
env = 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为图片标签。(datum.channels, datum.height, datum.width)

以上即为使用Python操作lmdb进行数据读取的完整实例,供读者参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表