caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇--caffe学习(6)

经过前文介绍之后可以训练得到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值