您的位置:首页 > 其它

训练和测试自己的图片

2017-03-14 09:40 447 查看
1.准备数据

下载图片,共有500张图片,分为大巴车、恐龙、大象、鲜花和马五个类,每个类100张。地址:http://pan.baidu.com/s/1nuqlTnN

2.转换lmdb格式

新建一个文件夹,用来存放配置文件和脚本文件,然后编写一个脚本create_filelist.sh,用来生成train.txt和test.txt清单文件

sudo mkdir examples/newfile
sudo vi examples/newfile/create_filelist.sh


编写脚本

1 #!/usr/bin/env sh
2 DATA=data/re/
3 MY=examples/newfile
4
5 echo "Create train.txt..."
6 rm -rf $MY/train.txt
7 for i in 3 4 5 6 7
8 do
9 find $DATA/train -name $i*.jpg | cut -d '/' -f4-6 | sed "s/$/ $i/">>$MY/train.txt
10 done
11 echo "Create test.txt..."
12 rm -rf $MY/test.txt
13 for i in 3 4 5 6 7
14 do
15 find $DATA/test -name $i*.jpg | cut -d '/' -f4-6 | sed "s/$/ $i/">>$MY/test.txt
16 done
17 echo "All done"
运行

sudo sh examples/myfile/create_filelist.sh
在examples/newfile/ 文件夹下生成train.txt和test.txt两个文本文件



//////////////////////////////////////////////////////////////////////////////////////////////////

python语言编写,在newfile文件夹下新建一个create_filelist.py文件,输出如下代码

# -*- coding: utf-8 -*-

import os
data_path='data/re/'
my='examples/newfile/'
classes=[3,4,5,6,7]

def gen_txt(phase):
f=open(my+phase+'.txt','w')
for c in classes:
folder=str(c)
images=os.listdir(data_path+phase+'/'+folder)
for img in images:
f.write(phase+'/'+folder+'/'+img+' '+folder+'\n')
gen_txt('train')
gen_txt('test')
运行 sudo python examples/newfile/create_filelist.py

//////////////////////////////////////////////////////////////////////////////////////////////////

接着再编写一个脚本文件,调用convert_imageset命令来转换数据格式

sudo vi examples/newfile/create_lmdb.sh


脚本内容

1 #!usr/bin/env sh
2 MY=examples/newfile
3
4 echo "Create train lmdb.."
5 rm -rf $MY/img_train_lmdb
6 build/tools/convert_imageset \
7 --shuffle \
8 --resize_height=256 \
9 --resize_width=256 \
10 /home/caffe/data/re/ \
11 $MY/train.txt \
12 $MY/img_train_lmdb
13
14 echo "Create test lmdb.."
15 rm -rf $MY/img_test_lmdb
16 build/tools/convert_imageset \
17 --shuffle \
18 --resize_width=256 \
19 --resize_height=256 \
20 /home/caffe/data/re/ \
21 $MY/test.txt \
22 $MY/img_test_lmdb
23
24 echo "All Done.."


注:如果报错一般都是路径写错。



运行成功后,会在 examples/myfile下面生成两个文件夹img_train_lmdb和img_test_lmdb



3.计算均值

图片减去均值再训练,会提高训练速度和精度。caffe程序提供了一个计算均值的文件compute_image_mean.cpp。

sudo build/tools/compute_image_mean examples/newfile/img_train_lmdb examples/newfile/mean.binaryproto


compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。

4.创建模型并编写配置文件

模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到newfile文件夹内

sudo cp models/bvlc_reference_caffenet/solver.prototxt examples/newfile/
sudo cp models/bvlc_reference_caffenet/train_val.prototxt examples/newfile/


修改配置文件solver.prototxt

sudo vi examples/newfile/solver.prototxt
1 net: "examples/newfile/train_val.prototxt"
2 test_iter: 2
3 test_interval: 50
4 base_lr: 0.001
5 lr_policy: "step"
6 gamma: 0.1
7 stepsize: 100
8 display: 20
9 max_iter: 500
10 momentum: 0.9
11 weight_decay: 0.005
12 snapshot: 100
13 snapshot_prefix: "examples/newfile/caffenet_train"
14 solver_mode: CPU
100个测试数据,batch_size为50,因此test_iter设置为2,就能全cover了。在训练过程中,调整学习率,逐步变小。

修改train_val.protxt,只需要修改两个阶段的data层文件地址就可以了,其它可以不用管







5.训练和测试

sudo build/tools/caffe train -solver examples/newfile/solver.prototxt






正确率为93%。

本文主要参考http://www.cnblogs.com/denny402/p/5083300.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: