lmdb
操作lmdb数据库
import numpy as np
import lmdb
N=10
map_size = 10485760
#map_size:max size (bytes) the database may grow to.
#If database grows lager than map_size,an exception will be raised
#On 64-bit there is no penalty for making this huge(say 1TB).Must be <2GB on 32-bit
env = lmdb.open('lmdbtest', map_size=map_size)
#write
with env.begin(write=True) as txn:
# txn is a Transaction object
for i in range(N):
str_id = '{:08}'.format(i)
# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), 'a'+str_id)
#read
with env.begin() as txn:
cursor = txn.cursor()
for key, value in cursor:
print(key, value)
#delete,将'cifar10_train_lmdb'数据库中的前25000条数据删除
env = lmdb.open('cifar10_train_lmdb',map_size=map_size)
print(env.stat())
i=0
with env.begin(write=True,buffers=True) as txn:
cursor = txn.cursor()
for key, value in cursor:
if i<25000 :
txn.delete(key)
i=i+1
print(env.stat())
执行上述python脚本,生成数据库lmdbtest,并输出:
('00000000', 'a00000000')
('00000001', 'a00000001')
('00000002', 'a00000002')
('00000003', 'a00000003')
('00000004', 'a00000004')
('00000005', 'a00000005')
('00000006', 'a00000006')
('00000007', 'a00000007')
('00000008', 'a00000008')
('00000009', 'a00000009')
{'branch_pages': 3L, 'leaf_pages': 296L, 'overflow_pages': 50000L, 'psize': 4096L, 'depth': 3L, 'entries': 50000L}
{'branch_pages': 3L, 'leaf_pages': 149L, 'overflow_pages': 25000L, 'psize': 4096L, 'depth': 3L, 'entries': 25000L}
图片生成caffe的lmdb格式的输入数据
准备:将图片数据下载到$CAFFE_EXP/images目录下
1.制作train.txt,并给每个图片添加标签
find $CAFFE_EXP/images -name *.png | cut -d '/' -f2-3 > train.txt
给每个样本添加标签,执行less train.txt显示如下
images/cat.png 1
images/dog.png 2
...
2.使用caffe的convert_imageset工具将图片转化为lmdb格式数据库
LOG_logtostderr=1 ../tools/convert_imageset \
--shuffle \
../examples/mnist/createlmdbtest/ \
train.txt \
train_lmdb
详细可查看caffe中的脚本工具create_imagenet.sh
另外,将图片转成大小为256x256的格式的工具还有convert,需要先安装工具ImageMagick,执行sudo yum install ImageMagick即可
。(注明使用bash非sh)
#!/bin/bash
for name in images/*.png; do
echo $name
convert -resize 256x256\! $name $name
done
上述功能也集成在caffe的convert_imageset工具中。
数据集
CIFAR-10
60000张32x32的彩色图片,这些图片分为10类,每类6000张,其中50000张构成训练集,10000张构成测试集。 从该数据集的10类中分别随机抽取10张图片显示如下:
(图片来自该数据集官网)
MNIST
0-9的手写图片共70,000张,其中60,000张构成训练集,10,000构成测试集。每张图片大小为28*28.
mnistdataset 官网
ImageNet 数据集(详见这里)