LMDB: изменить метку записи в уже созданном файле lmdb - PullRequest
2 голосов
/ 11 марта 2019

У меня большой (> 1 ТБ) файл lmdb, созданный для caffe.Генерация заняла много времени.Теперь я хочу изменить метки некоторых записей.Есть ли способ изменить метку на месте?Существует способ обойти их, чтобы я мог их удалить и добавить обратно.Но это приведет к тому, что все измененные метки (в моем случае новый класс) будут в конце файла lmdb, что, я думаю, не подходит для обучения.

1 Ответ

1 голос
/ 11 марта 2019

Наконец нашел решение после некоторого поиска.Я могу использовать функцию замены, как указано в 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())
...