caffe中两个lmdb的合并 [python]
1、安装lmdb
2、Ubuntu 系统命令:pip install lmdb
3、运行代码:combine_lmdb.py
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 12 17:50:48 2018
@author: Sarah
"""
import lmdb
env1 = lmdb.open("/home/www/www_python/dataset/train_001_lmdb")
env2 = lmdb.open("/home/www/www_python/dataset/train_002_lmdb")
txn1 = env1.begin()
txn2 = env2.begin()
database1 = txn1.cursor()
database2 = txn2.cursor()
env3 = lmdb.open("/home/www/www_python/dataset/train_result_lmdb", map_size=int(1e12))
txn3 = env3.begin(write=True)
print(env3.stat())
count =0
for (key, value) in database1:
# 将数据放到结果数据库事务中
txn3.put(key, value)
count += 1
if(count % 1000 == 0):
# 将数据写入数据库,必须的,否则数据不会写入到数据库中
txn3.commit()
count = 0
txn3 = env3.begin(write=True)
if(count % 1000 != 0):
txn3.commit()
count = 0
txn3 = env3.begin(write=True)
for (key, value) in database2:
txn3.put(key, value)
if(count % 1000 == 0):
txn3.commit()
count = 0
txn3= env3.begin(write=True)
if(count % 1000 != 0):
txn3.commit()
count = 0
txn_3 = env3.begin(write=True)
#查询合并前后的lmdb的数据,确认合并成功
print txn1.stat()['entries']
print txn2.stat()['entries']
print txn3.stat()['entries']
print("success")
lmdb的形式,来源convert_imageset.cpp
【lmdb的key】 八位数的前缀+原始文件名
string key_str = caffe::format_int(line_id, 8) + "_" + lines[line_id].first;
【lmdb的value】 读取图像到datum,然后序列后为字符串
status = ReadImageToDatum(root_folder + lines[line_id].first,
lines[line_id].second, resize_height, resize_width, is_color,
enc, &datum);
string out;
CHECK(datum.SerializeToString(&out));
txn->Put(key_str, out);
待解决的问题:
1、lmdb内存的设置
-
# map_size定义最大储存容量,单位是kb,以下定义1TB容量
-
map_size=1099511627776
2、caffe中多标签的lmdb 问题
3、lmdb读写显示问题
ps.小王有话说: 人生不容易,大家随便活