Caffe(3)--lmdb数据格式相关

caffe对于训练数据格式,支持:lmdb、h5py…… **lmdb:**常用于单标签数据,像分类等 **h5py:**用于多标签数据,对于回归等问题

原因: 1、数据类型多种多样,有二进制文件、文本文件、编码后的图像文件(如JPEG、PNG、网络爬取的数据等),不可能用一套代码实现所有类型的输入数据读取,转换为统一格式可以简化数据读取层的实现; 2、使用LMDB、LEVELDB可以提高磁盘IO利用率。

MNIST数据集

MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分: 每张图都已经进行尺寸归一化,数字居中处理,固定尺寸为 28×28。

Training set images: train-images-idx3-ubyte.gz (9.45MB, 包含60,000个样本) Training set labels: train-labels-idx1-ubyte.gz (28.2KB, 包含60,000个标签) Test set images: t10k-images-idx3-ubyte.gz (1.57MB, 包含10,000个样本) Test set labels: t10k-labels-idx1-ubyte.gz (4.43KB, 包含10,000个标签)

MNIST数据集来自美国国家标准与技术研究所,National Institute of Standards and Technology (NIST)。训练集(training set)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(the Census Bureau)的工作人员。测试集(test set)也是同样比例的手写数字数据。

MNIST也可以通过在caffe目录下执行下面脚本获取:

./data/mnist/get_mnist.sh

下载到的原始数据为二进制文件,通过执行下面脚本可以将二进制数据,生成LMDB格式数据:

./examples/mnist/create_mnist.sh

执行后,会生成 examples/mnist/mnist_train_lmdb/ 和 examples/mnist/mnist_test_lmdb/ 这两个目录。每个目录下都有两个文件:data.mdb 和 lock.mdb。

LMDB数据库(Lightning Memory-Mapped Database)

LMDB和SQLite/MySQL等关系型数据库不同,属于key-value数据库(把LMDB想成dict会比较容易理解),键key与值value都是字符串。 文件结构简单,一个文件夹,里面一个数据文件,一个锁文件。数据随意复制,随意传输。它的访问简单,不需要运行单独的数据管理进程。只要在访问的代码里引用 LMDB 库,访问时给文件路径即可。

1、Python环境下使用LMDB:

pip install lmdb

使用时,import lmdb调用

2、LMDB基本操作流程:

env = lmdb.open()     # 打开环境
txn = env.begin()      # 建立事务
txn.put(key, value)    # 进行插入和修改
txn.delete(key)        # 进行删除
txn.get(key)          # 进行查询
txn.cursor()          # 进行遍历
txn.commit()         # 提交更改

测试示例见:bu5/bu5project/LMDB-lwp/lmdb_test.py

3、实际操作

(1)lmdb转image和label

对MNIST数据集转换得到的lmdb文件进行解析,得到image和label。 脚本见lmdb_to_image_label.py,运行脚本对MNIST进行解析,并将图片按label命名并分别存放或者存放在一个文件夹。

(2)Image 和label转lmdb

脚本见create_lmdb_and_filelist.py脚本根据实际数据灵活修改,目前脚本针对MNIST数据集。 脚本同时也生成了图片和label列表清单txt文件,在生成lmdb时会用到。

转换测试: 对生成的lmdb文件,使用3(1)中的方法再次进行转换,查看结果: 经测试,格式转换可复原数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券