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系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
随机推荐
- caffe windows编译
MicroSoft维护的caffe已经作为官方的caffe分支了,编译方式也改了,刚好最近重装了一次caffe windows, 记录一下里面的坑 https://github.com/BVLC/ca ...
- P4774 [NOI2018]屠龙勇士
P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) ...
- sublime常用方法
1.如何打开一个文件夹? project----->Add Folder to Project 2.如何同一个窗口下进行分屏操作? 使用快捷键:shift+Alt+2 3.如何使html代码进行 ...
- SQL Server 日期格式和日期操作
SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT():同样,关于日期的操作函数,也分为传统方法:DATEADD()等 ...
- UWP MySQL 最新版 6.10.5是坏的
#实锤#证实了,MySQL 最新版 6.10.5,在UWP平台并不能连接,是坏的 Oracle竟然没有测试吗?直接上线??? 我已经把把BUG设置为最高严重等级,提交给了官方. I'm using u ...
- 【转】阿里云Linux系统被攻击的处理过程
4-22日 19:48分,在等女儿跳舞下课的时候,在“多看”进入大刘等人的<毁灭之城:地球碎块>,读到了“诅咒 3.0”病毒出现的时候,阿里云发来短信“尊敬的用户,您的云服务器x.x.x. ...
- 通过Task异步加快对数组的运算
一.介绍 Task是.NetFramework3.0出现的,线程是基于线程池,然后提供了丰富的API. 先用AverageAssign方法把一组数据平均分成n组,再通过遍历n组数据,循环开Task多线 ...
- OpenGL 笔记<1> 固定管线实例 + 双缓存测试实例
欲以此分类来记录opengl的学习历程,此为第一篇,所以先来一个固定管线的例子,以及对双缓存的测试. 一.配置环境 写之前,先进行配置,然后再讲内容. 注:第一部分涉及的代码均忽略. [环境配置传送门 ...
- MapReduce 基础学习
什么是MapReduce? mapreduce 是一种软件框架 mapreduce job将任务分解为独立的块儿到不同的map task,进行并行处理: map任务输出会做相应的排序处理,并作为r ...
- 【python 2.7】输入任意字母数字,输出其对应的莫尔斯码并播放声音
#python 2.7 #!/usr/bin/env python # -*- coding:utf-8 -*- import os import winsound,sys,time __author ...