我有两个lmdb文件,第一个文件我的网络运行良好,而另一个文件不起作用(丢失开始并保持在0)。所以我想第二个LMDB可能有问题我试着编写一些python代码(大部分来自here)来从lmdbs中获取数据并检查它,但到目前为止,这两个数据库中的任何一个都没有成功。lmdbs包含作为数据的图像和作为标签的边界框信息。
这样做:

for key, value in lmdb_cursor:
    datum.ParseFromString(value)
    label = datum.label
    data = caffe.io.datum_to_array(datum)

在其中一个lmdbs上,给了我一个正确的图像名称的键,但是datum.ParseFromString函数不能从value中检索任何内容。label总是0,而数据是空的ndarray。尽管如此,数据是存在的,值是大约140kb的二进制字符串,它正确地解释了图像的大小加上我猜的边界框信息。
我试着浏览了几个关于从python中的lmdbs读取数据的答案和讨论,但是我找不到任何关于如何读取结构化信息(如边界框标签)的线索。我的猜测是,解析函数需要一个数字标签,并按原样解释第一个字节,然后由于二进制字符串不再有任何意义而丢失剩余的数据?
我知道至少第一个lmdb是正确的,因为我的网络在使用它的训练和测试中都能正确执行。
任何投入将非常感谢!

最佳答案

LMDB中存储的基本元素不是Datum,而是AnnotatedDatumThrefore,你需要小心一点:

datum.ParseFromString(value.datum)
value.annotation_group  # should store the annotations

08-24 13:49