LMDB文件以及它们如何用于caffe深度学习网络

LMDB files and how they are used for caffe deep learning network

我是深度学习的新手,在使用caffe深度学习网络时遇到了一些问题。基本上,我没有找到任何文档来解释我如何解决我现在正在处理的一系列问题。

请让我先说明一下我的情况。

我有几千张图片,我必须对它们做一系列的预处理操作。对于每个预处理操作,我必须将这些预处理后的图像保存为 4D 矩阵,并存储一个带有图像标签的向量。我会将此信息存储为 LMDB 文件,这些文件将用作 caffe googlenet 深度学习的输入。

我尝试将图像保存为.HD5文件,但最终文件大小为80GB,以我的内存无法处理。

所以,另一个选择是使用 LMDB 文件,对吗?我是这种文件格式的新手,感谢您帮助我理解如何在 Matlab 中创建它们。基本上,我的菜鸟问题是:

1- 这些 LMDB 文件的扩展名为 .MDB,对吗?此扩展名与 Microsoft Access 使用的扩展名相同吗?或者正确的格式是 .lmdb 并且它们不同?

2- 我找到了创建 .mdb 文件的解决方案 (https://github.com/kyamagu/matlab-leveldb),它是否创建了 caffe 所需的文件格式?

3- 对于 caffe,我是否必须为标签创建一个 .mdb 文件,为图像创建另一个 .mdb 文件,或者两者都可以是同一个 .mdb 文件的字段?

4- 创建 .mdb 文件时,我必须标记数据库字段。我可以将一个字段标记为图像,将另一个字段标记为标签吗? caffe 知道哪个字段是什么意思吗?

5- 函数(在 https://github.com/kyamagu/matlab-leveldb 中)database.put('key1', 'value1') 和 database.put('key2', 'value2')呢?我是否必须在一个字段中保存我的 4 维矩阵而在另一个字段中保存标签向量?

Caffe 不使用 LevelDB - 但 it uses LMDB 'Lightning' db from Symas

您可以尝试使用 this Matlab LMDB 包装器 我个人没有使用 LMDB 和 Matlab 的经验,但是 Python 有一个很好的库可以做到这一点:py-lmdb

LMDB 数据库是一个 Key/Value 数据库(类似于 Java 中的 HashMap 或 Python 中的字典)。为了存储 4D 矩阵,您需要了解 Caffe 用于将图像保存为 LMDB 格式的约定。

这意味着将图像转换为适用于 Caffe 的 LMDB 的最佳方法是使用 Caffe。

There are examples in Caffe 关于如何将图像转换为 LMDB - 我会尝试重复它们,然后修改脚本以使用您的图像。

LMDB 文件和 MS Access 文件之间没有连接。

据我所知,您有两个选择:

  1. 使用 "convert_imageset" 工具 - 它位于 tools 文件夹下的 caffe 中,用于将图像文件列表和标签转换为 lmdb。
  2. 而不是 "data layer" 使用 "image data layer" 作为网络的输入。这种类型的层将带有图像文件名和标签列表的文件作为源,因此您不必构建数据库(训练的另一个好处 - 您可以使用 shuffle 选项并获得更好的训练结果)

要使用图像数据层,只需将层类型从 Data 替换为 ImageData。源文件是一个文件的路径,每行包含一个图像文件的路径和由 space 分隔的标签。例如:

/path/to/filnename.png 23

如果您想对数据进行一些预处理而不将预处理文件保存到磁盘,您可以使用 caffe 提供的转换(镜像和裁剪)(有关信息请参见此处 http://caffe.berkeleyvision.org/tutorial/data.html)或实现您自己的转换DataTransformer.