caffe windows训练测试自己的图片

https://www.jianshu.com/p/607f1e51e3ab

geaus
2016.05.17 14:31:53字数 540阅读 4,272

前言:本文参考博客denny402
这里简要的介绍了下如何使用自己准备的图片数据来训练和测试网络。主要的几个步骤有,图片数据转换为lmdb格式,计算训练数据的均值,sovler文件和网络的简单修改,最后caffe训练。

数据准备

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

 
testlist.png


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

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

//转换测试数据
.inconvert_imageset.exe
 --shuffle                      //表示打乱数据的顺序
 --resize_height=256
 --resize_width=256 
 .datamy                   
 .data	estlist.txt         
 .dataimg_test_lmdb

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

计算图片均值

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

.incompute_image_mean.exe .dataimg_train_lmdb .datamean.binaryproto

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

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

这里拷贝了modelsvlc_reference_caffenetsolver.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个类别。

训练和测试

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

.incaffe.exe train -solver=.datasolver.prototxt

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

_________________________________________________________________________________________________________________________________________________
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采
原文地址:https://www.cnblogs.com/leoking01/p/14547423.html