Caffe支持LMDB数据层和ImageDataLayer。 从某些数据集创建LMDB数据库需要一些时间和大量空间。 相比之下,ImageDataLayer只使用非常方便的txt文件。 我的问题是,这两种层之间存在很大的速度差异吗? 非常感谢你!
答案 0 :(得分:5)
LMDB 旨在更快地从给定的key value
获取数据。此外,数据以非压缩格式存储,这使得机器可以轻松读取数据并直接将数据传递给GPU进行处理。
在 ImageDataLayer 中,我们必须从文本文件中读取图像细节,并使用OpenCV将图像读取到内存中。这种未压缩的图像在计算上非常昂贵。
但是LMDB层的最佳性能并非总是如此,它在很大程度上取决于机器的配置。考虑256图像批量大小的示例和大小为227x227x3的图像。还要考虑比使用非常好的GPU和高端i8处理器机器。这里LMDB格式的单个图像可能占用151KB。整批可能占用37MB。如果GPU能够每秒执行10批,则硬盘应该具有370MB / s的读取速度。如果您使用普通的SATA或外部硬盘,由于硬盘的限制,读取如此大块的数据会有瓶颈。
如果caffe无法以所需的速度获取数据,则瓶颈会使整个训练过程更加缓慢。同时,如果您正在读取256个图像并使用多核版本的OpenCV,则可以比读取LMDB更有效地处理数据预取。
如果您已将LMDB数据存储在SSD上,则不会出现上述情况!
答案 1 :(得分:0)
是的,速度差异确实很大。 LMDB针对高速批处理进行了优化。