我需要创建一个快速、高效、低开销的例程,用于在 LMDB 中存储键/值对,以便 Caffe 的数据层后续使用(即,无需链接到一堆外部库)。
我审查了 caffe.proto、caffe.pb.h 和 caffe.pb.cc 文件以及其他一些与 Google Protocol Buffer 相关的文件,以了解 Datum 类,它是LMDB 记录。
对我来说,最好的选择似乎是对 datum.SerializeToString() 方法的审核,该方法获取包含 Datum 的所有数据结构和嵌套结构,并将它们转换为某种字符串值。然而,在深入研究了 Google 的 protobuf 后,我一直无法找到这个方法的定义位置。
有人能指出我正确的方向吗?显然,如果有一种更快/更好/更便宜的方式来理解序列化 Datum 值应该如何构建,那么我肯定会接受它。谢谢。
最佳答案
我认为您正在寻找 caffe.io.array_to_datum
方法:这是 caffe protobuf 接口(interface)的 python 包装器,将 numpy 数组(和可选的整数标签)转换为 Datum
对象。
有一个更全面的示例,介绍如何使用 python 接口(interface)为 caffe 读取/写入 LMDB here .
如果您只是将标记图像列表转换为 LMDB,则可以使用 convert_imageset
caffe 附带的工具。
关于machine-learning - LMDB记录数据应该如何组织以便Caffe的数据层可以读取它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52843410/