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框架-入门浅谈及碰到的坑相关推荐

  1. win10在Anaconda3下面安装caffe框架(CPU)Python2.7从入门到放弃

    最新更新 https://blog.csdn.net/baidu_40691432/article/details/121426736 电脑系统重装,在2021年的11月再次在win10系统上安装ca ...

  2. 第十五届智能车入门浅谈

    @TOC第十五届智能车入门浅谈 写博客原因 这次第十五届全国智能车大赛已经结束了,对于我而言,确实是我大学中一个不可多得的经历,我希望我的这段经历可以保存下来通过博客的形式,同时可以对于其他人有帮助, ...

  3. Android应用安全开发之浅谈加密算法的坑

    <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题     Android开发中,难免会遇到需要加解密一些数据内容存 ...

  4. 机器视觉:makefile编译调用Caffe框架的C++程序

    Caffe作为在众多公司搞深度学习时较多使用的框架,其在使用的友好程度上显然要比后起的一些深度学习框架要差一些,虽然如此,其作为深度学习的第一个开源框架,自有它的很多优势,比如设计结构.关于Caffe ...

  5. Egg框架入门教程合集之插件/工具/教程/专栏/开源项目

    Egg框架入门教程之示例合集 Awesome Egg.js 很棒的清单,精选了最好的Egg.js插件,工具,教程,文章等.欢迎公关! 内容 博客 文章 讲解 会议活动 外挂程式 应用领域 样板 构架 ...

  6. 一文了解 caffe 框架 | CSDN 博文精选

    作者 | Javier Casas Velasco 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 什么是caffe Caffe 全称:Convolution Archi ...

  7. 【转】 机器学习入门——浅谈神经网络

    [转] 机器学习入门--浅谈神经网络 本文转自:https://blog.csdn.net/bitjoy/article/details/50464989 先从回归(Regression)问题说起.我 ...

  8. 谈谈FrozenUI前端框架(应用心得) - 入坑篇

    FrozenUI框架,是一个相对比较纯粹的css类框架,只适合小项目的样式开发:官方并没有太多,甚至可以说没有提供任何js相关的功能性包,所以个人不推荐开发者使用. 官方宣称: FrozenUI 是一 ...

  9. 【技术分享】Android应用安全开发之浅谈加密算法的坑

    <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题    Android开发中,难免会遇到需要加解密一些数据内容存到 ...

  10. Android安全开发之浅谈加密算法的坑

    Android安全开发之浅谈加密算法的坑 作者:伊樵.舟海@阿里聚安全 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密 ...

最新文章

  1. 学霸学长如何第一时间收到接口报错?不用测试妹子再质疑你是不是接口挂了
  2. SAP RETAIL MM41 创建的商品主数据里为啥会有Vendor Char.按钮?
  3. 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
  4. http在链接中加入用户名_爬虫基础——HTTP基本原理
  5. webrtc 视频 demo
  6. mit数据集_MIT的DNN硬件加速器教程(二)流行的DNN和数据集
  7. oracle怎么扩大连接数,如何增加ORACLE连接数
  8. python连载第十五篇~史上最全列表知识源码+答案
  9. 安装LoadRunner 11时弹窗提示Micosoft Visual C++ 2005 SP1 可再发行组件包(X86):'命令行选项语法错误。键入命令 / ? 可获得帮助信息'。
  10. shell---------Debug模式
  11. 计算机图形学全代码,计算机图形学作业参考代码
  12. 计算机领域顶级会议、期刊、人物与国家排名2019
  13. 九针串口定义(公口、母口图解)
  14. 宏基4752g linux驱动下载,宏基4752g显卡驱动
  15. power supply surges detected
  16. android11 前摄相头隐藏闪光灯图标
  17. 瀑布流布局 js定位
  18. 前端技术(7) : 省市区联动并设置默认值II
  19. 骑马与砍杀:风云三国 for Mac(角色扮演游戏)
  20. 《GIT视频教程》(p41~p44)

热门文章

  1. 格雷希尔Gripseal燃油管快速接头如何做密封性测试
  2. 创建TPL自定义模板
  3. 基于51单片机的8位数码管时钟设计—按键修改时间
  4. 第十四篇 积分器和积分运算电路
  5. Android ndk开发入门集锦一
  6. 机器非正常关机 出现ora-01033 oracle,oracle ORA-01033问题的解决办法
  7. 2021年江西省研究生数学建模竞赛题目(二)题目:全国人口普查问题
  8. Excel键盘快捷键大全(二)
  9. 14 款(移动端)UI 框架
  10. 二、SSM即Spring、SpringMVC、Mybatis整合