caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇--caffe学习(6)
来源:互联网 发布:历史发展的必然性 知乎 编辑:程序博客网 时间:2024/05/16 06:48
经过前文介绍之后可以训练得到caffemodel文件,同时得到train_val.prototxt文件,但是我们分类时需要的是deploy.prototxt文件。
因此需要手动将train_val.prototxt文件转换成deploy.prototxt文件
首先将train_val.prototxt文件复制一份保存为deploy.prototxt文件
cp train_val.prototxt deploy.prototxt
首先解释一下两个文件的本质差异:
train_val.prototxt文件: 提供训练网络的输入,输出,网络结构具体参数 训练结束后得到一个caffemodel,model内的参数是各个层之间的权重W和偏置b, model详解可参考我的上一篇文章deploy.prototxt文件: 在已经得到caffemodel的前提下让输入的参数在训练好的网络里面forward一次,并不更新model中的任何参数,只是使用model中的参数
有了以上基础知识,我们就知道在deploy文件中不需要包含权重W和偏置b的设置
然后编辑deploy.prototxt文件
1:删除其中的原来的weight_filler、bias_filler参数部分
layer { # weight_filler、bias_filler删除 name: "ip2" type: "InnerProduct" bottom: "ip1" top: "ip2" param { lr_mult: 1 #权重w的学习率倍数 } param { lr_mult: 2 #偏置b的学习率倍数 } inner_product_param { num_output: 10 weight_filler { type: "gaussian" std: 0.1 } bias_filler { type: "constant" } }}
删除后变为
layer { name: "ip2" type: "InnerProduct" bottom: "ip1" top: "ip2" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 10 }}
2:不需要原来的accuracy层
layer { #删除该层 name: "accuracy" type: "Accuracy" bottom: "ip2" bottom: "label" top: "accuracy" include { phase: TEST }}
3:最后的loss层也要做调整
将原来的:
layer{ name: "loss" #注意此处层名称与下面的不同 type: "SoftmaxWithLoss" #注意此处与下面的不同 bottom: "ip2" bottom: "label" #注意标签项在下面没有了,因为下面的预测属于哪个标签,因此不能提供标签 top: "loss"}
修改为
layer { name: "prob" type: "Softmax" bottom: "ip2" top: "prob"}
4:deploy.prototxt文件只需要对应的输入参数,不需要包含第一层data层
删除像这样的包含 phase: TEST或者 phase: TRAIN的两层,一般在文件的开头,
name: "BN-Inception"layer { name: "data" type: "VideoData" top: "data" top: "label" video_data_param { source: "data/ucf101_flow_train_split_1.txt" batch_size: 32 new_length: 5 num_segments: 3 modality: FLOW shuffle: true name_pattern: "flow_%c_%05d.jpg" } transform_param{ crop_size: 224 mirror: true fix_crop: true more_fix_crop: true multi_scale: true max_distort: 1 scale_ratios: [1,.875,.75] mean_value: 128 is_flow: true } include: { phase: TRAIN }}layer { name: "data" type: "VideoData" top: "data" top: "label" video_data_param { source: "data/ucf101_flow_val_split_1.txt" batch_size: 1 new_length: 5 num_segments: 3 modality: FLOW name_pattern: "flow_%c_%05d.jpg" } transform_param{ crop_size: 224 mirror: false mean_value: 128 is_flow: true } include: { phase: TEST }
取而代之输入:
layer { name: "data" type: "Input" top: "data" input_param { shape: { dim: 1 dim: 3 dim: 32 dim: 32 } }}
参数shape: { dim: 1 dim: 3 dim: 32 dim: 32 }代表的含义如下:
shape { dim: 1 #num,对待识别样本进行数据增广的数量,可自行定义。一般会进行5次crop,之后分别flip。如果该值为10则表示一个样本会变成10个,之后输入到网络进行识别。如果不进行数据增广,可以设置成1 dim: 3 #通道数,表示RGB三个通道 dim: 32 #图像的长和宽,通过 *_train_test.prototxt文件中数据输入层的crop_size获取 dim: 32
本文参考:
1
2
0 0
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇--caffe学习(6)
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)
- caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片
- caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片
- caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片
- caffe的python接口学习:用训练好的模型(caffemodel或者h5)来分类新的图片
- caffe中train_val.prototxt和deploy.prototxt文件的区别
- caffe中train_val.prototxt和deploy.prototxt文件的区别
- caffe中train_val.prototxt文件和deploy.prototxt文件区别和转换--caffe学习(14)
- Caffe(20):用训练好的caffemodel来进行分类
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
- Java的高低字节序转化
- sQL存储过程的优缺点
- 1000的阶乘
- xp下枚举KTIMER计时器(包含DPC计时器)
- 13.《深入理解Java虚拟机》Java与线程
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇--caffe学习(6)
- 测试了一下php5.6的opcache的性能提升
- extjs中apply和applyIf的用法
- 进程与线程的区别
- 手把手教你高德基础地图+定位+设置Marker实现
- 显示传入第二个参数
- 工具类库系列(三)-IniReader
- 数据加载的妙招解析
- 内嵌汇编 jmp