CaffeNet用于Flickr Style数据集上的风格识别
转自 http://blog.csdn.net/liumaolincycle/article/details/48501423
微调是基于已经学习好的模型的,通过修改结构,从已学习好的模型权重中继续训练。下面就在另一个数据集Flickr Style上面微调CaffeNet模型,来预测图像风格,而不再是目标类别。
1.说明
Flickr Style图像数据集在视觉上和训练了bvlc_reference_caffenet
的ImageNet数据集很像,由于这个模型在目标分类上用得很好,我们就想把它也用在风格分类器中。因为只有80,000个图像可用于训练,所以从用了1,000,000个图像的ImageNet学到的参数开始训练,再根据需要进行微调。如果给出caffe train
命令的weights
参数,预训练的权重就会载入模型中,通过名字来匹配层。
因为我们现在只预测20个类而不再是1,000个,所以需要修改模型中的最后一层,把prototxt最后一层的名字由fc8
改为fc8_flickr
。bvlc_reference_caffenet
中没有层名叫fc8_flickr
,因此该层将从随机权重开始训练。同理,可以多改几个其它层的名字,被修改的层都会从随机权重开始训练。
此外,减少solver prototxt中的总体学习率base_lr
,但是增加新引进层的blobs_lr
。主要原因是新数据让新加的层学习很快,模型中剩下的层改变很慢,在solver中设置stepsize
为更低的值,希望学习率下降快一些。我们也可以通过设置blobs_lr
为0来阻止除fc8_flickr
外的所有层微调。
2.步骤
数据集已经分解为带相应标签的URL列表,用一个简单python脚本assemble_data.py下载数据的子集并将其分为训练集和验证集,先看一下用法:
./examples/finetune_flickr_style/assemble_data.py -h
再用它下载数据集:
python examples/finetune_flickr_style/assemble_data.py --workers=-1 --images=2000 --seed 831486
这个脚本下载2000个图像和相应的train/val文件到data/flickr_style
中,这里感谢 鱼蛋蛋哥 和 小咸鱼_ 指出,在用自己的数据训练时,编号一定要从0开始,或者最后一层的输出类别数要大于最大的编号,否则不会收敛。
本例的prototxt还需要ImageNet的均值文件,运行:
./data/ilsvrc12/get_ilsvrc_aux.sh
下载在data/ilsvrc12中。
我们还需要ImageNet训练而得的模型,运行:
./scripts/download_model_binary.py models/bvlc_reference_caffenet
- 1
下载在models/bvlc_reference_caffenet中,就可以开始训练了:
./build/tools/caffe train \
-solver models/finetune_flickr_style/solver.prototxt \
-weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
-gpu 0
可以看一下 models/finetune_flickr_style/solver.prototxt
和models/finetune_flickr_style/train_val.prototxt
中的内容。
注意看损失下降的速度,尽管迭代1000次后达到的23.5%准确率不是很好,但在这么少的迭代次数就达到了,说明模型正在又快又好地学习。当模型在整个训练集上做了100,000次迭代,完全微调好,准确率是39.16%。我只迭代了10,000次,也达到了29.46%,在GTX660上用了一个半小时。
不用微调预训练模型而是直接训练时:
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -gpu 0
微调适用于时间不够或数据不够的情况,即使在CPU模式,每遍历一次训练集也只要大约100s,GPU微调显然更快,并能在数分钟或数小时内学习到有用模型,而不再需要数天或数周了。
3.训练的模型
训练完全部80K图像得到的模型最终准确率为39%,可由下面的命令得到该训练好的模型:
./scripts/download_model_binary.py models/finetune_flickr_style
CaffeNet用于Flickr Style数据集上的风格识别的更多相关文章
- Fine-tuning CaffeNet for Style Recognition on “Flickr Style” Data 数据下载遇到的问题
(下载的时候没有提示 不知道是正在下 还是出现错误 卡着了)..一直没有反应 下载前要以管理员身份运行 sudo su 再 python examples/finetune_flickr_style/ ...
- [中英对照]Linux kernel coding style | Linux内核编码风格
Linux kernel coding style | Linux内核编码风格 This is a short document describing the preferred coding sty ...
- (2) 用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检測模型
步骤一,首先要使voc-release4.01目标检測部分的代码在windows系统下跑起来: 參考在window下执行DPM(deformable part models) -(检測demo部分) ...
- TersorflowTutorial_MNIST数据集上简单CNN实现
MNIST数据集上简单CNN实现 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow机器学习实战指南 源代码请点击下方链接欢迎加星 Tesorflow实现基于MNI ...
- Microsoft Dynamics CRM 2011 当您在 大型数据集上执行 RetrieveMultiple 查询很慢的解决方法
症状 当您在 Microsoft Dynamics CRM 2011 年大型数据集上执行 RetrieveMultiple 查询时,您会比较慢. 原因 发生此问题是因为大型数据集缓存 Retrieve ...
- 在Titanic数据集上应用AdaBoost元算法
一.AdaBoost 元算法的基本原理 AdaBoost是adaptive boosting的缩写,就是自适应boosting.元算法是对于其他算法进行组合的一种方式. 而boosting是在从原始数 ...
- BP算法在minist数据集上的简单实现
BP算法在minist上的简单实现 数据:http://yann.lecun.com/exdb/mnist/ 参考:blog,blog2,blog3,tensorflow 推导:http://www. ...
- NASNet学习笔记—— 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; 核心二:采用resnet和Inception重复使用block结构思想; 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...
- MNIST数据集上卷积神经网络的简单实现(使用PyTorch)
设计的CNN模型包括一个输入层,输入的是MNIST数据集中28*28*1的灰度图 两个卷积层, 第一层卷积层使用6个3*3的kernel进行filter,步长为1,填充1.这样得到的尺寸是(28+1* ...
随机推荐
- Android stroke 边框线 某一边
有时候需要给View加边框线,我们经常是四边一起加,就像这样: <shape xmlns:android="http://schemas.android.com/apk/res/and ...
- 整理Py小demo
from email.mime.text import MIMEText # 第一个参数就是邮件正文,第二个参数是MIME的subtype, # 传入'plain'表示纯文本,最终的MIME就是'te ...
- 完整安装sqlserver always on集群
准备工作 1. 四台已安装windows server 2008 r2 系统的虚拟机,配置如下: CPU : 1核 MEMORY : 2GB DISK : 40GB(未分区) NetAdapter ...
- 06--C语言数学函数
在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include <math.h> 或 #include "math.h",这里的<>跟&quo ...
- /usr/bin/ld: cannot find -lxxx 问题 解决方法总结
最近在做毕设的收尾工作,很多程序都要部署到linux下来运行,遇到了挺多问题,昨天就集中性遇到了 在编译应用时,遇到了 /usr/bin/ld: cannot find -lxxx 这种情况是系统找不 ...
- vc++如何创建程序-构造和继承
#include<iostream.h>//定义一个动物类class Animal{public: void eat();//添加方法 { cout<<"animal ...
- 前端html之------>Table实现表头固定
文章来源于:https://www.cnblogs.com/dacuotecuo/p/3657779.html,请尊重原创,转载请注明出处. 说明:这里主要实现了表头的固定和上下滚动的滑动实现:时间的 ...
- sklearn学习1----sklearn.SVM.SVC
1.SVM有两种作用:分类和回归,分类是用SVC,回归用SVR. 2.SVC:(中文官网) 重点在svm.SVC(),fit(X,Y),以及SVC中的参数. 3.SVC参数: ①C,C是控制软间隔中的 ...
- 自我介绍About me
我的github:www.github.com/dcdcbigbig 欢迎来加star!(雾) tm就是个菜逼
- 【LibreOJ 6279】 数列分块入门 3 (分块)
传送门 code: //By Menteur_Hxy #include<cstdio> #include<iostream> #include<algorithm> ...