郓城做网站,杭州营销网站建设平台,西安微信商城网站开发,个人简历在线填写电子版学习caffe中踩了不少坑#xff0c;这里我参考了此博主的文章#xff0c;并体会到了如何训练自己的模型#xff1a;http://www.cnblogs.com/denny402/p/5083300.html
学习caffe的目的#xff0c;不是简单的做几个练习#xff0c;最终还是要用到自己的实际项目或科研中。因…学习caffe中踩了不少坑这里我参考了此博主的文章并体会到了如何训练自己的模型http://www.cnblogs.com/denny402/p/5083300.html
学习caffe的目的不是简单的做几个练习最终还是要用到自己的实际项目或科研中。因此本文介绍一下从自己的原始图片到lmdb数据再到训练和测试模型的整个流程。
一、准备数据
有条件的同学可以去imagenet的官网http://www.image-net.org/download-images下载imagenet图片来训练。但是我没有下载一个原因是注册账号的时候验证码始终出不来听说是google网站的验证码而我是上不了google的。第二个原因是数据太大了。。。
我去网上找了一些其它的图片来代替共有500张图片分为大巴车、恐龙、大象、鲜花和马五个类每个类100张。需要的同学可到我的网盘下载http://pan.baidu.com/s/1nuqlTnN
编号分别以34567开头各为一类。我从其中每类选出20张作为测试其余80张作为训练。因此最终训练图片400张测试图片100张共5类。我将图片放在caffe根目录下的data文件夹下面。即训练图片目录data/re/train/ ,测试图片目录: data/re/test/
二、转换为lmdb格式
具体的转换过程可参见我的前一篇博文Caffe学习系列(11)图像数据转换成dbleveldb/lmdb)文件
首先在examples下面创建一个myfile的文件夹来用存放配置文件和脚本文件。然后编写一个脚本create_filelist.sh用来生成train.txt和test.txt清单文件
# sudo mkdir examples/myfile
# sudo vi examples/myfile/create_filelist.sh
编辑此文件写入如下代码并保存
按 CtrlC 复制代码 按 CtrlC 复制代码
然后运行此脚本
# sudo sh examples/myfile/create_filelist.sh
成功的话就会在examples/myfile/ 文件夹下生成train.txt和test.txt两个文本文件里面就是图片的列表清单。 接着再编写一个脚本文件调用convert_imageset命令来转换数据格式。
# sudo vi examples/myfile/create_lmdb.sh
插入
按 CtrlC 复制代码 按 CtrlC 复制代码
因为图片大小不一因此我统一转换成256*256大小。运行成功后会在 examples/myfile下面生成两个文件夹img_train_lmdb和img_test_lmdb分别用于保存图片转换后的lmdb文件。 三、计算均值并保存
图片减去均值再训练会提高训练速度和精度。因此一般都会有这个操作。
caffe程序提供了一个计算均值的文件compute_image_mean.cpp我们直接使用就可以了
# sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
compute_image_mean带两个参数第一个参数是lmdb训练数据位置第二个参数设定均值文件的名字及保存路径。
运行成功后会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。
四、创建模型并编写配置文件
模型就用程序自带的caffenet模型位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件复制到myfile文件夹内
# sudo cp models/bvlc_reference_caffenet/solver.prototxt examples/myfile/
# sudo cp models/bvlc_reference_caffenet/train_val.prototxt examples/myfile/
修改其中的solver.prototxt
# sudo vi examples/myfile/solver.prototxt net: examples/myfile/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 100个测试数据batch_size为50因此test_iter设置为2就能全cover了。在训练过程中调整学习率逐步变小。
修改train_val.protxt只需要修改两个阶段的data层就可以了其它可以不用管。 name: CaffeNet
layer {name: datatype: Datatop: datatop: labelinclude {phase: TRAIN}transform_param {mirror: truecrop_size: 227mean_file: examples/myfile/mean.binaryproto}data_param {source: examples/myfile/img_train_lmdbbatch_size: 256backend: LMDB}
}
layer {name: datatype: Datatop: datatop: labelinclude {phase: TEST}transform_param {mirror: falsecrop_size: 227mean_file: examples/myfile/mean.binaryproto}data_param {source: examples/myfile/img_test_lmdbbatch_size: 50backend: LMDB}
} 实际上就是修改两个data layer的mean_file和source这两个地方其它都没有变化 。
五、训练和测试
如果前面都没有问题数据准备好了配置文件也配置好了这一步就比较简单了。
# sudo build/tools/caffe train -solver examples/myfile/solver.prototxt
运行时间和最后的精确度会根据机器配置参数设置的不同而不同。我的是gpucudnn运行500次大约8分钟精度为95%。 分类: caffe