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* ...
随机推荐
- tomcat_logs
tomcat logs 目录下各日志文件的含义 参考地址: http://www.cnblogs.com/signheart/p/0ed0bef7dfadf59534eec76ad4607654.ht ...
- openlayers5学习笔记-map事件(moveend)
//事件:地图移动结束 tmp.map.on('moveend', function (evt) { console.log(evt.frameState.extent); }); evt.frame ...
- 基于fullpage的自动播放,手动播放,暂停页面的功能
功能如下: 1.默认加载方式为“自动播放 ”方式,即从第1屏至第5屏 页面循环加载显示,每屏每次仅显示1个页面,页面间停留时间为“10”秒2.手动播放过程中,按数字键“1”-“5”,将直接切到指定页面 ...
- Scalable Web Architecture and Distributed Systems
转自:http://aosabook.org/en/distsys.html Scalable Web Architecture and Distributed Systems Kate Matsud ...
- redi通过哨兵sentinel实现主从切换
本次实验主要为了让哨兵监听redis主从复制,当主节点关闭后,哨兵会选举一台从节点成为主节点,并且让其他从节点变成新主节点得从节点 本次理论需要三台机器,一主两从,为了方便用一台服务器开启三个实例,一 ...
- MySQL数据库唯一性设置(unique index)
1,命令行操作 分为两种.一种是在建表时就想好要加上唯一性,另一种是在后期才发现需要设置唯一性. 建表时: CREATE TABLE `t_user` ( `Id` int(11) NOT NULL ...
- MPlayer 开始支持RTSP/RTP流媒体文件
hostzhu点评:MPlayer对流媒体的支持,让大家能更进一步地利用linux来看网络直播,对Linux下多媒体应用的推动作用可以说不可度量. RTSP/RTP streaming support ...
- java深入的单例模式
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...
- WebService学习总结(6)——WebService常用接口
商业和贸易:1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSer ...
- jQuery(事件对象)
冒泡与阻止冒泡 阻止默认行为