Caffe& python,读取具有复杂标签结构的LMDB

时间:2018-01-30 07:31:11

标签: python neural-network deep-learning caffe lmdb

我有两个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是正确的,因为我的网络在训练和使用它的测试中都能正确执行。

任何输入都将不胜感激!

1 个答案:

答案 0 :(得分:2)

存储在LMDB中的基本元素不是Datum,而是AnnotatedDatum。因此,你需要小心翼翼地接近它:

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