我有一个为caffe制作的大型(> 1TB) lmdb文件。它花了很长时间来生成。现在我想更改一些条目的标签。有没有办法在适当的地方改变标签?有一个解决办法,我可以删除它们,并将它们添加回来。但这将导致所有更改的标签(在我的例子中是一个新类)都在lmdb文件的末尾,我认为这不利于训练。
发布于 2019-03-11 19:55:34
经过一番搜索,终于找到了解决方案。我可以使用https://lmdb.readthedocs.io/en/release/中提到的replace函数。
以下是解决方案的代码片段:
map_size = N
env = lmdb.open(lmdb_name, map_size=map_size)
with env.begin(write=True) as txn:
cursor = txn.cursor()
for key, value in cursor:
datum = caffe.proto.caffe_pb2.Datum()
datum.ParseFromString(value)
datum_new = caffe.proto.caffe_pb2.Datum()
datum_new.channels = 3
datum_new.height = size
datum_new.width = size
datum_new.data = datum.data
datum_new.label = 13
cursor.replace(key, datum_new.SerializePartialToString())https://stackoverflow.com/questions/55097001
复制相似问题