机器学习13:Caffe训练自定义数据集

机器学习13:Caffe训练自定义数据集

       这里简要的介绍了下如何使用自己准备的图片数据来训练和测试网络。主要的几个步骤有:

       a.图片数据转换为lmdb格式;    

       b.计算训练数据的均值;

       c.sovler文件和网络的简单修改;

       d.最后caffe训练。

1.数据集准备

        这里我照搬denny402准备的数据。其中共有5个类,每个类100张图片,每个类中用于测试的是20张图片(编号0-19),用于训练的是80张图片(编号20-99)。
       首先在caffe的根目录下的data目录新建文件夹my,将test和train两个目录拷贝到其中。
       然后为train和test中的数据建立了两个txt的列表,分别是文件路径名和对应的label号,需要注意的是label号是从0开始,至4。


       之后是使用convert_imageset.exe将图片转换为lmdb形式。如果你并没有生成这个exe,可以打开caffe的convert_imageset这个工程,右击生成,exe会保存在.\bin文件夹中。
       然后调用下面的命令行生成两个数据集的lmdb。

//转换训练数据
.\bin\convert_imageset.exe
 --shuffle\                       //表示打乱数据的顺序
 --resize_height=256\
 --resize_width=256 \
 .\data\my\                       //存放train和test文件夹的路径
 .\data\trainlist.txt             //根据trainlist.txt读取图片
 .\data\img_train_lmdb

//转换测试数据
.\bin\convert_imageset.exe
 --shuffle\                       //表示打乱数据的顺序
 --resize_height=256\
 --resize_width=256 \
 .\data\my\                   
 .\data\testlist.txt         
 .\data\img_test_lmdb

       这样在data文件夹中会生成img_train_lmdb和img_test_lmdb两个文件夹分别保存了lmdb格式的数据。

2.计算图片均值

       计算图片均值使用的是前一步生成的训练数据的lmdb。
       同样如果需要使用的compute_image_mean.exe并没有生成,可以打开该工程,右击生成即可,生成后,使用下面的命令行得到均值文件。

.\bin\compute_image_mean.exe .\data\img_train_lmdb .\data\mean.binaryproto

       这样就得到了训练数据的均值文件mean.binaryproto。

扫描二维码关注公众号,回复: 9598440 查看本文章

3.sovle.prototxt配置文件和train_val.prototxt模型修改

       这里拷贝了models\bvlc_reference_caffenet\solver.prototxt和train_val.prototxt,并在其中简单修改。

//solver.prototxt
net: "data/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU
//train_val.prototxt
name: "CaffeNet"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "data/mean.binaryproto"
  }
  data_param {
    source: "data/img_train_lmdb"
    batch_size: 256
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/mean.binaryproto"
  }
  data_param {
    source: "data/img_test_lmdb"
    batch_size: 50
    backend: LMDB
  }
}

       主要的修改就是test iter和test batchsize,以及数据源的修改。

       前者是因为我们的数据量发生了改变,另外,在FC这个layer处也要修改下,将1000改为5,因为我们这里只有5个类别。

4.训练和测试

       以上最终完成了程序caffe.exe运行的准备,最后在命令行中输入:

.\bin\caffe.exe train -solver=.\data\solver.prototxt

      等待程序运行结束后可以查看结果。我这里的accuracy大致为93%。


作者:geaus
链接:https://www.jianshu.com/p/607f1e51e3ab

发布了84 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39504171/article/details/103726206