关于caffe模型训练与处理的一些小结

1. BN层的参数 use_global_status

use_global_stats: true 表示使用预训练模型内的BatchNorm层均值与方差参数,而非基于当前batch内计算均值和方差,若是从头训练则必须设置为false(caffe默认是设置false,可不手动设置), 若是finetuning则根据情况设置。

2. LOSS层参数 loss_weight

loss_weight表示当前loss层的权重,默认设置为1,当有多个loss层的时候可根据需要调整。

3. caffe输出.caffemodel里保存的参数
NetParameter proto;
ReadProtoFromBinaryFile("path to your .caffemodel", &proto);
WriteProtoToTextFile(proto, "path to output .caffemodel.txt");

4. caffe读取模型保存的参数并赋值给另一个网络的同名层

在已有模型基础上构建自己模型的时候,有些层的参数想直接复用原来的,有两种办法:第一种就直接修改由以上第三条得到的模型txt文件,将参数拷贝过去,数据量比较大,可以按照对应格式写个脚本拷贝(该方法还可以将其他如tensorflow等的模型参数转成caffe的,当然要注意的地方很多);第二种办法是调caffe的库去赋值,该办法很简单,只需要知道所需层的name即可,代码如下:

deploy_path="origin_model_deploy.prototxt"
model_path="origin_model.caffemodel"

new_deploy_path = "new_model_deploy.prototxt"
new_model_path = "new_model.caffemodel"

def transModel():
    net = caffe.Net(deploy_path, model_path, caffe.TEST)
    new_net = caffe.Net(new_deploy_path, new_model_path, caffe.TEST)
    # 所需层的name,此处以卷积层为例
    conv_params = ['conv1/7x7_s2','conv2/3x3_reduce','conv2/3x3']

    # copy conv layers' params
    for pr in conv_params:
        new_net.params[pr][0].data[...] = net.params[pr][0].data[...];
        #new_net.params[pr][1].data[...] = net.params[pr][1].data[...]; # 如果有多个data

    new_net.save('new_model_inherit.caffemodel')

transModel()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值