我有两个LMDB文件,第一个我的网络训练很好,而另一个没有真正工作(丢失开始并保持在0)。所以我认为第二个LMDB可能有问题。我尝试编写一些python代码(主要来自here)来从我的LMDB中获取数据并检查它,但到目前为止,没有任何2个数据库的运气。 LMDB包含图像作为数据和边界框信息作为标签。
这样做:
react-router
任何一个LMDB上的都会给我一个正确的图像名称的密钥,但for key, value in lmdb_cursor:
datum.ParseFromString(value)
label = datum.label
data = caffe.io.datum_to_array(datum)
函数无法从datum.ParseFromString
中检索任何内容。 value
始终为0,而数据为空ndarray。尽管如此,数据存在,值是一个大约140 KB的二进制字符串,它正确地说明了图像的大小加上我猜的边界框信息。
我尝试浏览几个回答和讨论处理从python中读取LMDB的数据,但我找不到任何关于如何读取结构化信息(例如边界框标签)的线索。我的猜测是解析函数需要一个数字标签并解释第一个字节,然后由于二进制字符串不再有任何意义而丢失剩余的数据?
我知道至少第一个LMDB是正确的,因为我的网络在训练和使用它的测试中都能正确执行。
任何输入都将不胜感激!
答案 0 :(得分:2)
存储在LMDB中的基本元素不是Datum
,而是AnnotatedDatum
。因此,你需要小心翼翼地接近它:
datum.ParseFromString(value.datum)
value.annotation_group # should store the annotations