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

Caffe & python, reading LMDB with complex label structure

我有两个 LMDB 文件,第一个我的网络训练很好,而另一个则不能正常工作(损失开始并保持在 0)。所以我认为第二个 LMDB 可能有问题。我尝试编写一些 python 代码(主要取自 )以从我的 LMDB 中获取数据并检查它,但到目前为止,这两个数据库中的任何一个都没有成功。 LMDB 包含作为数据的图像和作为标签的边界框信息。

这样做:

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

在任何一个 LMDB 上都给了我一个正确的图像名称的密钥,但是 datum.ParseFromString 函数无法从 value 中检索任何内容。 label 始终为 0,而数据是一个空的 ndarray。尽管如此,数据在那里,值是一个大约 140 KB 的二进制字符串,它正确地说明了图像的大小加上我猜的边界框信息。

我尝试浏览 python 中有关从 LMDB 读取数据的几个答案和讨论,但我找不到任何关于如何读取边界框标签等结构化信息的线索。我的猜测是解析函数需要一个数字标签并解释第一个字节,然后由于二进制字符串不再有意义而导致剩余数据丢失?

我知道至少第一个 LMDB 是正确的,因为我的网络在使用它的训练和测试中都表现正确。

任何输入将不胜感激!

您的 LMDB 中存储的基本元素不是 Datum, but rather AnnotatedDatum。因此,您需要小心处理它:

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