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
我有两个 LMDB 文件,第一个我的网络训练很好,而另一个则不能正常工作(损失开始并保持在 0)。所以我认为第二个 LMDB 可能有问题。我尝试编写一些 python 代码(主要取自
这样做:
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