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、尝试几种数据增强之后,可根据分错的测试照片进行自己造数据。我目前任务的训练集与测试集特征不均衡,训练集背景干净,但是测试集背景杂乱。训练集与测试集越相近,训练效果必然越好。
Caffe框架-入门浅谈及碰到的坑相关推荐
- win10在Anaconda3下面安装caffe框架(CPU)Python2.7从入门到放弃
最新更新 https://blog.csdn.net/baidu_40691432/article/details/121426736 电脑系统重装,在2021年的11月再次在win10系统上安装ca ...
- 第十五届智能车入门浅谈
@TOC第十五届智能车入门浅谈 写博客原因 这次第十五届全国智能车大赛已经结束了,对于我而言,确实是我大学中一个不可多得的经历,我希望我的这段经历可以保存下来通过博客的形式,同时可以对于其他人有帮助, ...
- Android应用安全开发之浅谈加密算法的坑
<Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题 Android开发中,难免会遇到需要加解密一些数据内容存 ...
- 机器视觉:makefile编译调用Caffe框架的C++程序
Caffe作为在众多公司搞深度学习时较多使用的框架,其在使用的友好程度上显然要比后起的一些深度学习框架要差一些,虽然如此,其作为深度学习的第一个开源框架,自有它的很多优势,比如设计结构.关于Caffe ...
- Egg框架入门教程合集之插件/工具/教程/专栏/开源项目
Egg框架入门教程之示例合集 Awesome Egg.js 很棒的清单,精选了最好的Egg.js插件,工具,教程,文章等.欢迎公关! 内容 博客 文章 讲解 会议活动 外挂程式 应用领域 样板 构架 ...
- 一文了解 caffe 框架 | CSDN 博文精选
作者 | Javier Casas Velasco 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 什么是caffe Caffe 全称:Convolution Archi ...
- 【转】 机器学习入门——浅谈神经网络
[转] 机器学习入门--浅谈神经网络 本文转自:https://blog.csdn.net/bitjoy/article/details/50464989 先从回归(Regression)问题说起.我 ...
- 谈谈FrozenUI前端框架(应用心得) - 入坑篇
FrozenUI框架,是一个相对比较纯粹的css类框架,只适合小项目的样式开发:官方并没有太多,甚至可以说没有提供任何js相关的功能性包,所以个人不推荐开发者使用. 官方宣称: FrozenUI 是一 ...
- 【技术分享】Android应用安全开发之浅谈加密算法的坑
<Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题 Android开发中,难免会遇到需要加解密一些数据内容存到 ...
- Android安全开发之浅谈加密算法的坑
Android安全开发之浅谈加密算法的坑 作者:伊樵.舟海@阿里聚安全 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密 ...
最新文章
- 学霸学长如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了
- SAP RETAIL MM41 创建的商品主数据里为啥会有Vendor Char.按钮?
- 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
- http在链接中加入用户名_爬虫基础——HTTP基本原理
- webrtc 视频 demo
- mit数据集_MIT的DNN硬件加速器教程(二)流行的DNN和数据集
- oracle怎么扩大连接数,如何增加ORACLE连接数
- python连载第十五篇~史上最全列表知识源码+答案
- 安装LoadRunner 11时弹窗提示Micosoft Visual C++ 2005 SP1 可再发行组件包(X86):'命令行选项语法错误。键入命令 / ? 可获得帮助信息'。
- shell---------Debug模式
- 计算机图形学全代码,计算机图形学作业参考代码
- 计算机领域顶级会议、期刊、人物与国家排名2019
- 九针串口定义(公口、母口图解)
- 宏基4752g linux驱动下载,宏基4752g显卡驱动
- power supply surges detected
- android11 前摄相头隐藏闪光灯图标
- 瀑布流布局 js定位
- 前端技术(7) : 省市区联动并设置默认值II
- 骑马与砍杀:风云三国 for Mac(角色扮演游戏)
- 《GIT视频教程》(p41~p44)