Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练。
但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需要对整个caffe框架有一个很清楚的了解,难度比较高;同时,在使用数据迭代训练自己模型时会耗费很多计算资源。对于单GPU或者没有大的GPU计算能力的研究者会比较困难。所以,使用已经训练好的caffe模型来进行finetuning就会是一个比较好的选择。
一来,finetuning的过程和训练的过程步骤大体相同,因此在finetuning的过程中可以对caffe训练过程有一个详细的了解,通过一步步的训练和finetuning,在寻找最优参数过程中加深对caffe框架的理解,为自己后续自己从头开始训练一个caffe深度网络模型打好基础。
另外,finetuning需要的计算资源相对较少,使用的trikes相对较少,难度较低,比较适合caffe新手。在finetuning过程中熟悉caffe的各种接口和操作。
话不多少,进入正题:使用caffe进行finetuing
在finetuning之前,我们应该了解到caffe是一个深度学习框架,在建立好神经网络模型之后,使用大量的数据进行迭代调参数获取到一个深度学习模型,我们使用这样的模型来实现我们的任务,如:图像分类,目标检测等。
在caffe中,训练好的模型为*.caffemodel,在github上面下载的caffe源代码中并没有caffemodel,需要我们单独去下载,下载地址同样也在caffe在git的官网上(经典Alex模型下载点这里),在git上面还有其它已经训练好的模型文件,如GooLenet,Rcnn模型等等。
在下载好model文件之后,按照下面的步骤进行模型的finetuning。
1. 下载数据,转换数据( Convert data)
2. 定义网络结构(Define net (as prototxt) )
3. 设置网络训练过程中的各种参数(Define solver (as prototxt) )
4. 开始训练(Train (with pretrained weights))
1.下载数据按照要求准备好数据,这里主要讲一下如何将数据转换写入db文件中,方便网络训练过程中对数据的读写要求。
使用tools/convert_imageset.cpp将获取到的数据和标签写入db文件中。
需要注意的是,对于每一个训练样本,文件的格式应该是:
“[path/to/image.jpeg] [label]”
2.设计定义网络结构
● 如果是训练过程,那么需要重新写一个*.prototxt 文件,文件格式可以参考src/caffe/proto/caffe.proto下的定义。最简单的方法就是复制一个example中的proto文件根据自己的需要进行修改
● 如果需要对网络进行finetuning,那么复制一份该model文件对应的prototxt文件进行修改,因为finetuning的过程是让原有训练好的模型适应自己的数据,因此一般情况下,网络的模型并没有大的变化。需要做的事情有:
○ 修改文件中的数据层(因为是进行finetuning,因此数据输入层是自己的数据)
○ 修改输出层,因为一般情况下,finetuning的应用与原模型的应用不完全相同。
如:imagenet中的分类输出为1000类,所以在最终输出层时会是一个1000的向量,但是在实际应用中,类别可能只有10+种,因此不能直接使用imagenet中的输出层,需要对输出层进行修改;
○ 如果GPU比较小,计算能力比较差的话,需要减小batch_size参数,提高迭代效率;
○ **将blobs_lr参数设置为0**, 因为在finetuning过程中,网络的答题框架参数是不变的,我们只需要使用自己的数据对网络的小部分结构中参数进行更新和学习,因此需要将blob_lr参数设置为0,将网络的层参数进行冻结,不进行更新。
3.定义网络参数(proto文件)
在对caffe熟悉过程中,了解到在使用caffe进行网络训练时,需要在*.proto文件中设定网络训练所需参数信息。需要修改的地方有:
○ 将网络改成自己的网络
○ 修改snapshot的前缀snapshot_prefix(用于存储训练过程中的中间结果)
○ 减小基础学习率(base learning rate,divide by 100)
○ 修改参数max_iter 和 snapshot
Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning的更多相关文章
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练. 但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需 ...
- caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片
经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测. 我们从mnist数据集的t ...
- Caffe使用step by step:caffe框架下的基本操作和分析
caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需 ...
- 【神经网络与深度学习】Caffe使用step by step:caffe框架下的基本操作和分析
caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需 ...
- Step By Step(Lua数据持久化)
Step By Step(Lua数据持久化) 1. 数据文件: 我们可以利用Lua中table的构造式来定义一种文件格式,即文件中的数据是table构造并初始化的代码,这种方式对于Lua程序而言 ...
- SQL Server 维护计划实现数据库备份(Step by Step)(转)
SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server ...
- EF框架step by step(7)—Code First DataAnnotations(2)
上一篇EF框架step by step(7)—Code First DataAnnotations(1)描述了实体内部的采用数据特性描述与表的关系.这一篇将用DataAnnotations描述一下实体 ...
- EF框架step by step(7)—Code First DataAnnotations(1)
Data annotation特性是在.NET 3.5中引进的,给ASP.NET web应用中的类提供了一种添加验证的方式.Code First允许你使用代码来建立实体框架模型,同时允许用Data a ...
- 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
随机推荐
- Python_sklearn机器学习库学习笔记(六) dimensionality-reduction-with-pca
# 用PCA降维 #计算协方差矩阵 import numpy as np X=[[2,0,-1.4], [2.2,0.2,-1.5], [2.4,0.1,-1], [1.9,0,-1.2]] np.c ...
- Flutter - Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)
方案1: 更改项目的Encoding方式 File -> Settings -> Editor, choose "File Encodings", change Pr ...
- centos7搭建ANT+jmeter+jenkins接口测试自动化环境
一.环境准备 因为用到了jmeter和apache-tomcat,centos7必须要有java环境,所以配置jdk和apache-tomcat什么的,就不多说了,自行操作 帮你们偷懒: ant下载地 ...
- WebGL之sprite精灵效果显式数字贴图
接着前一篇<WebGL实现sprite精灵效果的GUI控件>,我们继续开发我们的数字系统GUI控件,因为这套数字系统是基于sprite效果的,所以数字随相机转动而旋转(永远面对相机),随场 ...
- Unity优化方向——优化Unity游戏中的脚本(译)
原文地址:https://unity3d.com/cn/learn/tutorials/topics/performance-optimization/optimizing-scripts-unity ...
- 4星|《钱的历史》:大英博物馆的钱币简史,彩图众多不适合在kindle上阅读
钱的历史(大英博物馆权威出品,一部金钱简史) 大英博物馆的两位钱币馆馆长的作品.非常专业.基本是世界钱币简史.从钱币的发展变迁讲到涉及到的历史大事,重心当然是欧洲的钱币史,中国.印度也各安排了一章. ...
- 在Maven上Web项目添加Spring框架
1. pom.xml添加Spring依赖包 <!-- spring 核心依赖--> <!-- context依赖beans,aop,core,expression;core依赖log ...
- markdown | Latex | 书写测试
我永远喜欢markdown! 建图 graph TD; 1-->2 1-->3 1-->4 2-->5 2-->6 3-->7 3-->8 4-->9 ...
- 使用python实现用微信远程控制电脑
首先,我们要先看看微信远程控制电脑的原理是什么呢? 我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我 ...
- Struct2笔记②--完善登陆代码
上节课的代码 写完整 登陆成功在页面上显示用户名和密码: username:${requestScope.username }<br> password:${requestScope. ...