首页 > 编程知识 正文

caffeine框架,caffe框架是什么

时间:2023-05-03 05:17:59 阅读:187664 作者:1874

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。