【问题标题】:LMDB: change label of entry in already made lmdb fileLMDB:更改已制作的 lmdb 文件中的条目标签
【发布时间】:2019-03-16 20:09:57
【问题描述】:

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

【问题讨论】:

    标签: caffe lmdb


    【解决方案1】:

    经过一番搜索终于找到了解决方案。我可以使用替换功能,如https://lmdb.readthedocs.io/en/release/ 中所述。

    这里是解决方案的代码sn-p:

    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())
    

    【讨论】:

    • @DmytroPrylipko 是的,当然。这是我使用的代码。 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())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2017-03-07
    • 2016-09-12
    • 1970-01-01
    • 2016-03-24
    • 2018-07-09
    相关资源
    最近更新 更多