Caffe学习(2)——caffe中的数据层及对应参数

    xiaoxiao2021-03-25  79

    Caffe的运行,首先要基于一个模型(model),比较常用的模型有Lenet、AlexNet、VGG等;一个模型有多个层构成,层有许多种类型,比如数据层(Data Layers)、视觉层(Vision Layers)、激活层(Activation Layers)等,每层对应着许多参数,这些参数都定义在caffe.proto这个配置文件中。

    接下来我们先介绍一下数据层。

    数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从Blobs转换成其他格式进行保存输出。通常,数据的预处理(如减去均值、放大缩小、裁剪和镜像)即在这一层实现,参数设置也在这一层实现。

    数据来源可以来自高效的数据库(如LevelDB、LMDB),也可以来自内存。如果不是很注重效率的话,数据也可来自磁盘的hdf5文件和图片格式文件。

    这里说明一下我们常用的LevelDB和LMDB的区别:

    ——LevelDB

    利用层表方式组织数据,优化写入速度

    优点:为写入进行优化,并进行压缩

    缺点:写入太频繁时,来不及重写,磁盘会爆掉

    ——LMDB

    利用map直接进行映射,尽量少进行内存拷贝(可以为只读,直接返回引擎中的内存),提高读性能;

    利用tree方式组织数据,并且和系统虚拟内存页大小一致的页进行文件组织

    优点:专门进行读优化

    缺点:和系统页一样大的组织方式(4k),如果单条Record为1k,则浪费严重

    这里给出一个示例进行参数讲解:

    layer { name: "mnist" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { scale: 0.00390625 } data_param { source: "H:/win10-caffe/Caffe_BVLC/examples/mnist/mnist-train-leveldb" batch_size: 64 backend: LEVELDB } }其中,name:表示该层的名称,可随意取;

    type:层类型,Data表示数据来源于LevelDB或LMDB;MemoryData表示数据来源于内存;HDF5Data表示数据来源于HDF5,ImageData表示数据来源于图片,Window表示数据来源于Windows。根据数据来源的不同,数据层的类型也不同,一般来说,我们采用的多为LevelDB或LMDB,所以层类型一般设置为Data;

    top或bottom:bottom表示输入数据,top表示输出数据,如果只有top没有bottom,则表示该层只有输出,没有输入,反之亦然。若果有多个bottom,则表示有多个blobs数据的输入和输出;

    include:用于指出该层是训练阶段的层还是测试阶段的层;

    transform_param:数据的预处理,可以将数据变换到定义的范围内;如设置scale为00390625,实际上就是1/255,也就是将输入数据由0-255归一化到0-1之间。

    data_param:根据数据的来源,进行相应的设置:source——包含数据库的目录名;batch_size——每次处理的数据个数;backen:选择采用的数据库来源。

    最后说一句,数据来源不同,参数也不同,一般参数都可望名生意。

    转载请注明原文地址: https://ju.6miu.com/read-35275.html

    最新回复(0)