问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将一维数据或其他非图像数据转换成lmdb

发布网友 发布时间:2022-04-25 12:57

我来回答

1个回答

热心网友 时间:2022-04-08 20:37

caffe事儿真多,数据必须得lmdb或者leveldb什么的才行,如果数据是图片的话,那用caffe自带的
convert_image.cpp就行,但如果不是图片,就得自己写程序了。我也不是计算机专业的,我哪看得懂源码,遂奋发而百度之,然无甚结果,遂
google之,尝闻“内事不决问百度,外事不决问google”,古人诚不我欺。在caffe的google
group里我找到了这个网址:http://deepdish.io/2015/04/28/creating-lmdb-in-python/
代码如下:

import numpy as np
import lmdb
import caffe

N = 1000

# Let's pretend this is interesting data
X = np.zeros((N, 3, 32, 32), dtype=np.uint8)
y = np.zeros(N, dtype=np.int64)

# We need to prepare the database for the size. We'll set it 10 times
# greater than what we theoretically need. There is little drawback to
# setting this too big. If you still run into problem after raising
# this, you might want to try saving fewer entries in a single
# transaction.
map_size = X.nbytes * 10

env = lmdb.open('mylmdb', map_size=map_size)

with env.begin(write=True) as txn:
# txn is a Transaction object
for i in range(N):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = X.shape[1]
datum.height = X.shape[2]
datum.width = X.shape[3]
datum.data = X[i].tobytes() # or .tostring() if numpy < 1.9
datum.label = int(y[i])
str_id = '{:08}'.format(i)

# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), datum.SerializeToString())

  这是用python将数据转为lmdb的代码,但是我用这个处理完数据再使用caffe会出现std::bad_alloc错误,后来经过艰苦地奋斗,查阅了大量资料,我发现了问题所在:

  1.caffe的数据格式默认为四维(n_samples, n_channels, height, width) .所以必须把我的数据处理成这种格式

  2.最后一行txn.put(str_id.encode('ascii'), datum.SerializeToString())一定要加上,我一开始一维python2不用写这个,结果老是出错,后来才发现这行必须写!

  3.如果出现mdb_put: MDB_MAP_FULL: Environment mapsize limit reached的
错误,是因为lmdb默认的map_size比较小,我把lmdb/cffi.py里面的map_size默认值改了一下,改成了
1099511627776(也就是1Tb),我也不知道是不是这么改,然后我又把上面python程序里map_size = X.nbytes
这句改成了map_size = X.nbytes * 10,然后就成功了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母爱情:最不像演员的演员,出场狼狈却没想到是个“王者”吗?_百度知 ... 上海交大研究生电气工程及其自动化专业住宿条件如何 上海交大的电气工程怎么样 上海交通大学电气工程系历史沿革 上海交大电院直博几年 抖音的取消收藏功能怎么不见了 成考本科专业有哪些专业可以选 专升本成人高考有些什么专业可以选择 2024专升本成考有什么专业可以选 2024美术生高考文化课300分能上什么大学 唐太宗是一个怎么样的皇帝 唐朝皇帝李世民是不是汉人?拜托了各位 谢谢 唐朝李世民的历史 关于python转换数据为lmdb格式的问题 我国古代的皇帝有庙号溢号尊号年号的那么唐太宗属于 如何使用python創建LMDB文件 李世民是什么生肖 唐太宗属什么生肖? 小学生平板支撑最高记录 李世民属什么生肖 李世民在十二生肖属什么? 唐太宗是属什么的 李世民属什么的啊 唐朝李世民是什么属相 眼药水打开后能用多久 家里养了几条小金鱼需要每天都换水吗 李世民属什么?_? 眼睛很累,滴了眼药水后眼睛内有灼热的感觉,这是怎么回事! 鱼需要天天换水么? 滴完眼药水后,眼睛会很疼,那眼睛应该睁开还是闭上 唐朝皇帝李世民和大将有多少 名字是 唐太宗属性 李世民是哪个朝代的皇帝? 唐朝皇帝李世民属相时辰有几个甲 唐太宗属于什么号? 冰箱放在高温的环境下行吗 冰箱温度升高怎么回事? 冰箱超高温是什么意思? 冰箱长期处在高温的情况下会怎样 把冰箱放置到高温50度以上有没有安全隐患? 梦见在古代的宫里有个妹妹,还认识两个太监? 周公解梦 梦见自己回到古代,而且被追杀。 梦见自己在古代、好像是皇后的贴身宫女、是什么意思? 梦到自己回到古代,看见皇宫里刺客暗杀了皇帝,死了。啥意思? 梦见自己在宫廷里争权夺位 梦到古代我拿着刀去皇宫里杀一个人,杀没杀死不清楚,但又被人追杀,后来... 梦见古代人穿着宫里的服饰手里拿着灯朝我走过来 期货交易中平仓与平今有什么区别? 期货开仓平仓平今什么意思? 有没有办法把MP4格式视频转成RMVB格式?