之前的教程我们说了如何使用caffe训练自己的模型,下面我们来说一下如何fine tune。

所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中。

fine tune的好处在于不用完全重新训练模型,从而提高效率,因为一般新训练模型准确率都会从很低的值开始慢慢上升,但是fine tune能够让我们在比较少的迭代次数之后得到一个比较好的效果。在数据量不是很大的情况下,fine tune会是一个比较好的选择。但是如果你希望定义自己的网络结构的话,就需要从头开始了。

这里采用一个实际的例子,钱币分类

1、我们收集了2W张图片,将其中4000张作为测试集,剩下作为训练集。

2、接着我们使用上一篇博客中的方法,生成words.txt、train.txt、test.txt三个文件,这里可以不用生成lmdb,因为caffe支持直接指定图片文件。

3、编辑配置文件,这里我们参考finetune_flickr_style例子(它是用caffenet的训练结果进行finetune的),拷贝其配置文件:

solver.prototxt

  1. net: "examples/money_test/fine_tune/train_val.prototxt"
  2. test_iter:
  3. test_interval:
  4. base_lr: 0.001
  5. lr_policy: "step"
  6. gamma: 0.1
  7. stepsize:
  8. display:
  9. max_iter:
  10. momentum: 0.9
  11. weight_decay: 0.0005
  12. snapshot:
  13. snapshot_prefix: "examples/money_test/fine_tune/finetune_money"
  14. solver_mode: CPU 

train_val.prototxt

其实fine tune使用的网络跟原有网络基本一样,只不过每层调整了一些参数,具体可以参照finetune_flickr_style和caffenet网络配置的对比

  1. name: "FlickrStyleCaffeNet"
  2. layer {
  3. name: "data"
  4. type: "ImageData"
  5. top: "data"
  6. top: "label"
  7. include {
  8. phase: TRAIN
  9. }
  10. transform_param {
  11. mirror: true
  12. crop_size:
  13. mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  14. }
  15. image_data_param {
  16. source: "examples/money_test/data/train.txt"
  17. batch_size:
  18. new_height:
  19. new_width:
  20. }
  21. }
  22. layer {
  23. name: "data"
  24. type: "ImageData"
  25. top: "data"
  26. top: "label"
  27. include {
  28. phase: TEST
  29. }
  30. transform_param {
  31. mirror: false
  32. crop_size:
  33. mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  34. }
  35. image_data_param {
  36. source: "examples/money_test/data/test.txt"
  37. batch_size:
  38. new_height:
  39. new_width:
  40. }
  41. }
  42. ..........
  43. layer {
  44. name: "fc8_flickr"
  45. type: "InnerProduct"
  46. bottom: "fc7"
  47. top: "fc8_flickr"
  48. # lr_mult is set to higher than for other layers, because this layer is starting from random while the others are already trained
  49. param {
  50. lr_mult:
  51. decay_mult:
  52. }
  53. param {
  54. lr_mult:
  55. decay_mult:
  56. }
  57. inner_product_param {
  58. num_output: 17 #这里我们的分类数目
  59. weight_filler {
  60. type: "gaussian"
  61. std: 0.01
  62. }
  63. bias_filler {
  64. type: "constant"
  65. value:
  66. }
  67. }
  68. }
  69. .....

deploy.prototxt

用于实际分类时的网络

  1. .........
  2. layer {
  3. name: "fc8_flickr"
  4. type: "InnerProduct"
  5. bottom: "fc7"
  6. top: "fc8_flickr"
  7. # lr_mult is set to higher than for other layers, because this layer is starting from random while the others are already trained
  8. param {
  9. lr_mult:
  10. decay_mult:
  11. }
  12. param {
  13. lr_mult:
  14. decay_mult:
  15. }
  16. inner_product_param {
  17. num_output:
  18. weight_filler {
  19. type: "gaussian"
  20. std: 0.01
  21. }
  22. bias_filler {
  23. type: "constant"
  24. value:
  25. }
  26. }
  27. }
  28. ...........

4、开始训练

  1. ./build/tools/caffe train -solver examples/money_test/fine_tune/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel

其中model指定的是caffenet训练好的model。

使用fine tune的效果比较好,经过3400多次迭代后,测试集上正确率达到92%,实际测试效果也比较理想。这也许就是深度学习的优势,不需要仔细地挑选特征,只要数据足够,也能得到不错的效果。

caffe简易上手指南(三)—— 使用模型进行fine tune的更多相关文章

  1. caffe简易上手指南(一)—— 运行cifar例子

    简介 caffe是一个友好.易于上手的开源深度学习平台,主要用于图像的相关处理,可以支持CNN等多种深度学习网络. 基于caffe,开发者可以方便快速地开发简单的学习网络,用于分类.定位等任务,也可以 ...

  2. caffe简易上手指南(二)—— 训练我们自己的数据

    训练我们自己的数据 本篇继续之前的教程,下面我们尝试使用别人定义好的网络,来训练我们自己的网络. 1.准备数据 首先很重要的一点,我们需要准备若干种不同类型的图片进行分类.这里我选择从ImageNet ...

  3. UnityShader快速上手指南(三)

    简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...

  4. Rancher 快速上手指南操作(1)

    Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...

  5. Resharper上手指南

    原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...

  6. NewLife.XCode 上手指南2018版(二)增

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  7. NewLife.XCode 上手指南2018版(一)代码生成

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  8. [转]Rancher 快速上手指南操作(1)

    本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...

  9. Caffe学习笔记(三):Caffe数据是如何输入和输出的?

    Caffe学习笔记(三):Caffe数据是如何输入和输出的? Caffe中的数据流以Blobs进行传输,在<Caffe学习笔记(一):Caffe架构及其模型解析>中已经对Blobs进行了简 ...

随机推荐

  1. [转]mysql-5.6.17-win32免安装版配置

    1. 下载mysql-5.6.17-win32:官网下载地址百度 2. 解压到自定义目录,我这里演示的是D:\wamp\mysql\ 3. 复制根目录下的my-default.ini,改名为my.in ...

  2. L011-oldboy-mysql-dba-lesson11

    L011-oldboy-mysql-dba-lesson11 [root@ab01 ~]# mysqladmin -i 1 -r status     #mysqladmin监控的命令 Uptime: ...

  3. vim ctags 的使用

    ubantu 先安装 sudo apt-get install ctags 『基本功能使用方法』常用命令列表:        1.  $ ctags –R *      ($ 为Linux系统Shel ...

  4. iis7伪静态

    http://jingyan.baidu.com/article/67508eb4ff92c69cca1ce49a.html

  5. 解决ionic在ios无法使用focus,ios focus失效的问题

    最近也偷懒,很久没有写博客了.今天在项目中遇到了这个奇葩的问题,基于ionic的ios的hybird APP 无法使用focus()获取焦点和键盘的问题. 问题:基于ionic的ios的hybird ...

  6. Jquery get parameter value

    http://www.sitepoint.com/url-parameters-jquery/ $.urlParam('id') ==> $.urlParam = function(name){ ...

  7. Winform 异步更新listbox

    public partial class Form1 : Form { private BackgroundWorker bw; public Form1() { InitializeComponen ...

  8. apache、php隐藏头信息的方法

    本文介绍下,在apache与php中隐藏头部信息的方法,有需要的朋友参考下. 一.apache隐藏头部信息 apache 的 httpd.conf 有两个配置可以控制是否显示服务器信息给用户.Serv ...

  9. DB2 SQL 递归实现多行合并

    最终效果 原始数据: 转换脚本: WITH post_a AS ( SELECT DISTINCT T.EMP_NO,S.CODE_ FROM inscndb.DTFMA000_EMP_POST T ...

  10. XSS 复合编码 续

    对上文 [web安全]第二弹:XSS攻防中的复合编码问题 的一些补充,思路来源于:http://escape.alf.nu/3/ html解码的问题: 通过appendChild添加的节点,不会被HT ...