C++ Caffe&x2B;不带lmdb的Opencv

C++ Caffe&x2B;不带lmdb的Opencv,c++,opencv,caffe,lmdb,C++,Opencv,Caffe,Lmdb,当使用caffe时,要创建包含图像的训练数据集,我们需要以特殊格式(如lmdb)创建数据库,但可以选择将一批图像传递给caffe,例如vector 为了澄清这一点,我正在寻找能够处理大量无法放入内存的图像的解决方案(但假设一个训练批(包含例如50个图像)可以存储在内存中)。Caffe可以接受多种类型的输入,这取决于我们使用的输入层。 一些可用的输入方法包括: 资料 记忆数据 HDF5数据 图像数据等 在模型文件中,您找到的第一个层是层类型:Data,它使用lmdb或leveldb作为输入方法。将

当使用caffe时,要创建包含图像的训练数据集,我们需要以特殊格式(如lmdb)创建数据库,但可以选择将一批图像传递给caffe,例如
vector


为了澄清这一点,我正在寻找能够处理大量无法放入内存的图像的解决方案(但假设一个训练批(包含例如50个图像)可以存储在内存中)。

Caffe可以接受多种类型的输入,这取决于我们使用的输入层。 一些可用的输入方法包括:

  • 资料
  • 记忆数据
  • HDF5数据
  • 图像数据等
  • 在模型文件中,您找到的第一个层是
    层类型:Data
    ,它使用
    lmdb或leveldb
    作为输入方法。将一组图像转换到这些数据库非常容易,因为Caffe已经提供了转换图像的工具

    层类型:MemoryData
    直接从内存读取数据,这在测试阶段将摄像头输入作为Caffe输入传递时非常有用。强烈建议不要使用此层进行培训

    图层类型:ImageData
    将文本文件作为输入。文本文件包含所有图像名称及其完整路径和类号。Caffe使用OpenCV读取该层中的图像。它还负责图像的所有变换。因此,建议使用ImageData,而不是使用OpenCV读取图像然后传递到MemoryData层

    ImageData层从中读取图像的.txt格式必须为:

    /path/to/the/image/imageName.jpg classNumber

    强烈建议使用LMDB或LevelDB,因为如果图像路径或名称包含空格,或者当任何图像损坏时,ImageData都不需要正常工作

    可以找到各层的详细信息


    内存根据型号和批量大小在GPU中分配。如果发生内存溢出,可以尝试减小批处理大小。Caffe轻松处理了120万张图像的Imagenet数据库培训。因此,如果批量大小最佳,算法应该可以正常工作。

    为什么不建议在培训中使用MemoryData?此外,从lmdb和ImageData读取数据的速度是否有任何差异?不建议初学者使用MemoryData,因为如果训练没有按预期进行,可能会造成困难。此外,MemoryData层也不推荐对图像进行转换,这意味着在将来使用MemoryData的版本中,在将数据传递到MemoryData层之前,将在外部执行平均图像减法、裁剪、调整大小等操作。