Caffe框架-入门浅谈及碰到的坑

Caffe学习主要围绕:数据、deploy.prototxt文件、***.caffemodel文件、solver.prototxt文件、训练脚本文件

数据

数据层有多种格式,可参考:https://www.cnblogs.com/denny402/p/5070928.html

目前我所使用的是ImageData,因为caffe数据增强功能较少,因此自己修改caffe源码,增加数据增强功能,参考:https://github.com/twtygqyy/caffe-augmentation/blob/master/README.md

https://blog.csdn.net/rainforestgreen/article/details/86625603

主要修改data_transformer.cpp文件及caffe.prtoto文件。

注意:使用Deep mutual learning训练时,会先训练多个预训练模型用于相互学习,在输入DML网络之前,不需要进行模型融合,train的时候,-weight后caffemodel之间用逗号隔开即可,比如:-weight = *1.caffemodel,*2.caffemodel

坑1:label分类标签要从0开始,否则loss不收敛

deploy.prototxt文件

此文件为网络结构,在自己数据集上训练需修改几个地方。1、修改输入层,包括数据类型,输入尺寸以及一些数据增强方法,batch大小;2、如果是分类任务主要修改最后一层输出的神经元个数,一般都是在ImageNet公开数据集上进行训练,因此下载下来的为1000;3、修改loss层为softmaxwithloss,添加acc层。各种caffe-modle可从github下载https://github.com/soeaver/caffe-model

相应的可以找到***.caffemodel文件,用于finetune。

坑2:尤其重要一点,4、如果网络中有BN层,注意修改BN层参数use_global_stats为false,默认为true,因为在测试集测试时此参数为true,直接load训练好的模型中的参数;而在训练时,要更改为false,计算训练集的均值。或不使用此参数,train的时候默认为false,test是默认为true。主要修改lr_mult与decay_mult,如下所示,BN层与Scale成对出现。

layer {  
  name: "BatchNorm1"  
  type: "BatchNorm" 
  bottom: "conv1"  
  top: "conv1"   
  param {  
    lr_mult: 0  
    decay_mult: 0  
  }   
  param {  
    lr_mult: 0  
    decay_mult: 0  
  }  
  param {  
    lr_mult: 0  
    decay_mult: 0  
  }
}  

layer {  
  name: "scale1"  
  type: "Scale"
  bottom: "conv1"  
  top: "conv1"    
  scale_param {  
    bias_term: true  
  }  
} 

如果不修改,我在自己数据集上,LR=0.001,loss不收敛,直到LR=0.0001,loss收敛,然后过拟合,训练出的效果并不好,acc=50%左右。

BN层参数未改动之前我在自己数据集上,训练效果特别差,严重过拟合,200类商品分类任务,acc50%左右,我最先想到的是数据问题,进行数据增强(裁剪,噪声,明暗度变化),勉强到70%。然后进行一波数据清洗,acc60%,再进行数据增强(裁剪,明暗度变化、随机擦数),目前acc只达到63%,现在改变BN层参数,继续训练。前面提到几种数据增强,除了随即裁剪,其他都需要在caffe框架中自己添加,可参考上面的教程。

solver.prototxt文件

此文件主要用于设置训练参数,一定要好好看。

里面的各种iteration参数需要自己根据自己的batch以及epoch进行计算。注意test_interval最少要大于一个epoch。

我目前finetune初次训练策略是:初始LR=0.001,LR_Policy为multistep。epoch共50,每10个epoch,LR变为原来0.1。然后根据训练结果调整multistep中stepvalue的值。优化算法采用SGD。

可参考:https://www.cnblogs.com/denny402/p/5074049.html

参数iter_size详解:https://blog.csdn.net/yeler082/article/details/83278371

炼丹可参考:https://blog.csdn.net/sinat_26917383/article/details/54232791

感悟

目前任务仍在进行中,也是第一次接触Caffe框架,拿到一个分类任务,我目前数据集分好了训练集、验证集、测试集,我认为分以下几步:

1、找一简单模型在数据集上训练,获得acc,以此为底线,后面加入策略提升acc。

2、查看数据包括训练集、验证集、测试集。重点查看数量是否均衡以及特征分布是否均衡。数量不均衡需要进行数据扩充。

3、常规数据扩充,数据扩充有两种加入模型的方法。

  • 模型外数据增强。生成图片加入训练集。此方法优点是保留原图与新生成图片,增加了特征及数据量,而且生成的图片可进行人工筛选是否加入训练集,虽然有时筛选会存在遗漏。
  • 模型内数据增强。像Pytorch自带基本数据增强方式,Caffe只有随机裁剪,归一化,很多其他的需自己添加。这种方法优点是增加了样本多样性以及随机性,样本各类之间数量一直保持均衡状态,因为新生成图片会代替原图进行训练;缺点是看不到生成的图片,有可能会对某一类别产生干扰。

根据第一次训练结果,查看类别分错图片,分析并尝试是否可以通过数据增强提升acc,有些比较明显,比如明暗度;随机遮挡或随机擦出可以在一定程度上解决遮挡问题。

4、尝试几种数据增强之后,可根据分错的测试照片进行自己造数据。我目前任务的训练集与测试集特征不均衡,训练集背景干净,但是测试集背景杂乱。训练集与测试集越相近,训练效果必然越好。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值