我有一个大的(> 1TB)lmdb文件为caffe。生成需要很长时间。现在我想更改某些条目的标签。有没有办法改变标签?有一个解决方法,我可以删除它们并添加回来。但这会导致所有已更改的标签(在我的情况下是一个新类)位于lmdb文件的末尾,我认为这对培训不利。
经过一番搜索后终于找到了解决方案我可以使用替换功能,如https://lmdb.readthedocs.io/en/release/中所述。
以下是解决方案的代码段:
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())