LMDB:更改已经创建的lmdb文件中的条目标签

问题描述 投票:2回答:1

我有一个大的(> 1TB)lmdb文件为caffe。生成需要很长时间。现在我想更改某些条目的标签。有没有办法改变标签?有一个解决方法,我可以删除它们并添加回来。但这会导致所有已更改的标签(在我的情况下是一个新类)位于lmdb文件的末尾,我认为这对培训不利。

caffe lmdb
1个回答
1
投票

经过一番搜索后终于找到了解决方案我可以使用替换功能,如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())
© www.soinside.com 2019 - 2024. All rights reserved.