Caffe 网络参数 网络模型

来源:互联网 发布:模糊图像边缘检测算法 编辑:程序博客网 时间:2024/03/29 13:33

caffe网络参数文件格式为prototxt,一般有train_val.prototxt,deploy.protxt,solver.protxt。通过这些文件进行训练得到网络模型,比如文件交models中的bvlc_alexnet.caffemodel,bvlc_googlenet.caffemodel;

网络模型是由多个层组成的,一般由data、conv、pooling、full-connection层组成,有些网络虽然比较深,但是基本也是多个卷积、多个全连接。在caffe源码中,先初始化一个网络net_,参数文件也是包括了prototxt参数文件,然后也可以直接加上已经训练好的网络模型和计算好的mean文件,然后就可以进行测试了(特征提取、分类等)

层与层之间的数据流是以Blobs进行了。

Blob<float>* input_layer = net_->input_blobs()[0];//输入层Blob<float>* output_layer = net_->output_blobs()[0];//输出层Blob<float>* feature_blob = net_->blob_by_name(blob_names[i]);//直接根据层名来提取数据

注意数据可以从Blobs与其他数据格式进行转化,比如高效的lmdb、levelDB数据库格式
与数据库的转化:

 Datum datum; datum.set_height(feature_blob->height()); datum.set_width(feature_blob->width()); datum.set_channels(feature_blob->channels()); datum.clear_data(); datum.clear_float_data();

也可以直接与内置数据类型进行转化,比如:
const float*data=feature_blob->cpu_data();

prototxt文件中
include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练阶段的层,还是属于测试阶段的层,需要用include来指定。如果没有include参数,则表示该层既在训练模型中,又在测试模型中。
transform_param部分主要是数据的预处理,可以将数据变换到定义的范围内。如设置scale为0.00390625,实际上就是1/255, 即将输入数据由0-255归一化到0-1之间

transform_param {    scale: 0.00390625    mean_file_size: "examples/cifar10/mean.binaryproto"    # 用一个配置文件来进行均值操作    mirror: 1  # 1表示开启镜像,0表示关闭,也可用ture和false来表示    # 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪    crop_size: 227  }

data_param部分要根据数据来源的不同进行设置,层类型type:Data,backend默认是levelDB;MemoryData;HDF5Data;ImageData;windowData;要根据不同的类型进行参数设置

0 0
原创粉丝点击