caffe-所使用的数据格式

caffe为什么使用LMDB和levelDB,而不是直接使用原始数据

第一,原始数据的类型,种类很多,如二进制文件,.npy文件,多种图像可是文件等等,不可能使用统一的代码来读取,所以转换成统一的格式可以简化数据读取层的实现。具体说是将不同类型的数据存储为key-value的对应关系。便于caffe DataLayer获取这些数据。

第二,使用LMDB和LEVELDB可以提高磁盘的IO利用率。

较新的caffe,都使用LMDBLEVELDB是caffe早起使用的。

什么是protobuff

ProtoBuff是一种实现内存和其他存储介质数据交换(从磁盘读取数据到内存,从内存保存数据到磁盘)的协议。在caffe中protobuff用于解析.prototxt文件,包括超参数设置,和模型结构的定义。protobuff将.prototxt文件中的配置参数按照caffe.proto的协议解析并加载到内存变量Caffe::SolverParameter对象中。自己可以尝试对一个solver.prototxt文件按照caffe.proto解析出参数.

在caffe中使用一个ProtoBuffer工具完成数据在存储介质间的数据交换。

什么是HDF5

HDF5是一种数据格式,同时还有处理这种数据格式的统一函数库。

HDF5, LMDB, ProtoBuff分别在什么时候使用

caffe 模型结构超参数的定义和训练超参数的定义,使用ProtoBuff(默认),可以看到相应的文件都是以.prototxt为后缀,也可以使用HDF5。而caffe所处理的数据,要转换成LMDB。

在caffe官方文档中,由关于data layer的描述:数据可以是来自高效的LMDB,levelDB数据库,可以使来自内存,或者来自HDF5或通用的图像格式的数据(当效率不是很重要时)。