我有两个LMDB文件,第一个可以顺利训练我的网络,而第二个则不能正常工作(损失开始并停留在0)。因此,我认为第二个LMDB可能存在问题。我尝试编写一些Python代码(主要来自这里)来从我的LMDB中提取数据并进行检查,但到目前为止,无论哪个数据库都没有成功。这些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是正确的,因为我的网络在使用它进行训练和测试时表现良好。
非常感谢您的任何帮助!
caffe/scripts/create_annoset.py
和anno-type detection
,将边界框信息以Pascal VOC格式编码为xml。 - powder