如何将数据附加到现有的 LMDB?
how to append data to existing LMDB?
我有大约 100 万张图像要放入此数据集中,每次 10000 张附加到集合中。
我确定 map_size 来自此 article
的引用是错误的
使用这条线创建了集合
env = lmdb.open(Path+'mylmdb', map_size=int(1e12)
每 10000 个样本使用此行将数据写入文件,其中 X 和 Y 是要放入 LMDB 的数据的占位符。
env = create(env, X[:counter,:,:,:],Y,counter)
def create(env, X,Y,N):
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].tostring() # 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())
#pdb.set_trace()
return env
我如何编辑此代码,以便将新数据添加到此 LMDB 而不是替换,因为此当前方法将其替换在相同位置。
我用 env.stat().
检查生成后的长度
让我对上面的评论进行扩展。
LMDB 中的所有条目均根据唯一键存储,并且您的数据库已包含 i = 0, 1, 2, ...
的键。您需要一种方法来为每个 i
找到唯一的键。最简单的方法是在现有数据库中找到最大的键并不断添加。
假设现有键是连续的,
max_key = env.stat()["entries"]
否则,更彻底的方法是遍历所有键。 ()
max_key = 0
for key, value in env.cursor():
max_key = max(max_key, key)
最后,只需替换 for
循环的第 7 行,
str_id = '{:08}'.format(i)
来自
str_id = '{:08}'.format(max_key + 1 + i)
附加到现有数据库。
我有大约 100 万张图像要放入此数据集中,每次 10000 张附加到集合中。
我确定 map_size 来自此 article
的引用是错误的使用这条线创建了集合
env = lmdb.open(Path+'mylmdb', map_size=int(1e12)
每 10000 个样本使用此行将数据写入文件,其中 X 和 Y 是要放入 LMDB 的数据的占位符。
env = create(env, X[:counter,:,:,:],Y,counter)
def create(env, X,Y,N):
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].tostring() # 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())
#pdb.set_trace()
return env
我如何编辑此代码,以便将新数据添加到此 LMDB 而不是替换,因为此当前方法将其替换在相同位置。 我用 env.stat().
检查生成后的长度让我对上面的评论进行扩展。
LMDB 中的所有条目均根据唯一键存储,并且您的数据库已包含 i = 0, 1, 2, ...
的键。您需要一种方法来为每个 i
找到唯一的键。最简单的方法是在现有数据库中找到最大的键并不断添加。
假设现有键是连续的,
max_key = env.stat()["entries"]
否则,更彻底的方法是遍历所有键。 (
max_key = 0
for key, value in env.cursor():
max_key = max(max_key, key)
最后,只需替换 for
循环的第 7 行,
str_id = '{:08}'.format(i)
来自
str_id = '{:08}'.format(max_key + 1 + i)
附加到现有数据库。