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

标签 python neural-network deep-learning caffe lmdb

我有两个 LMDB 文件,第一个我的网络训练很好,而另一个则不能正常工作(损失开始并保持为 0)。所以我认为第二个 LMDB 可能有问题。我尝试编写一些 python 代码(主要取自 here)以从我的 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,而 data 是一个空的 ndarray。尽管如此,数据在那里,值是一个大约 140 KB 的二进制字符串,它正确地说明了图像的大小加上我猜的边界框信息。

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

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

任何输入将不胜感激!

最佳答案

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

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

关于python - Caffe & python,读取标签结构复杂的LMDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48516113/

相关文章:

machine-learning - Seq2Seq模型中Bucketing的概念

python - sed 保持匹配过去的换行符

neural-network - caffe 火车中出现错误

machine-learning - Keras 中的一对多 LSTM

machine-learning - 为什么用caffe训练时 `Train net output`损失和 `iteration loss`是相同的?

Tensorflow物体检测: Using transfer learning on local running

python - cython 中奇怪的整数行为

python - Elasticsearch Python 客户端添加geo_point

python - Unittest 用mock模拟读取yaml文件

machine-learning - 如何防止caffe中的权重更新