用自己的数据在Caffe环境下跑第一个CNN
- 注意 :本文所在环境为:Ubuntu 14.04、Caffe、Anaconda 2环境下。
1、准备数据
数据 :数据为500张,共五个类别:大巴车、恐龙、大象、鲜花和马,每个类100张。
每个类别拿出20张作为测试,训练集目录为:data/re/train/,测试目录为:data/re/test/
2、数据转换
首先在data统计目录下新建一个文件夹:
第一种:
命令行的方式,打开一个终端,切换到data文件夹同级目录,输入
mkdir examples/myfile
vi examples/myfile/create_filelist.sh
第二种方式
:手动的方式,像windows里面一样在目录下,右键创建文件夹。
接下来,如果是一种方式
,则在弹出的命令行内copy以下代码:
#!/usr/bin/env sh
DATA=data/re/
MY=examples/myfile
echo "Create train.txt..."
rm -rf $MY/train.txt
for i in 3 4 5 6 7
do
find $DATA/train -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/train.txt
done
echo "Create test.txt..."
rm -rf $MY/test.txt
for i in 3 4 5 6 7
do
find $DATA/test -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"
按 esc
输入:wq
就退出了编辑。
如果是第二种方式
,那么可以直接新建一个txt文件,将以上代码复制进去保存,然后将文件连同后缀一起改为:create_filelist.sh
保存即可。
然后在终端输入以下代码:
sh examples/myfile/create_filelist.sh
将会在examples/myfile/
文件夹下创建train.txt
和test.txt
两个文件。形如:train/551.jpg 5
然后新建一个文件(方法同上):
vi examples/myfile/create_lmdb.sh
内容为:
#!/usr/bin/env sh
MY=examples/myfile
echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_height=256 \
--resize_width=256 \
/home/xxx/caffe/data/re/ \
$MY/train.txt \
$MY/img_train_lmdb
echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width=256 \
--resize_height=256 \
/home/xxx/caffe/data/re/ \
$MY/test.txt \
$MY/img_test_lmdb
echo "All Done.."
注意
:将上述的两个/home/xxx/caffe/data/re/
路径改为你自己刚才创建的绝对路径(查看当前文件夹路径:ctrl+L)
按esc
输入:wq
回车后,退出编辑状态,然后再命令行输入:
sh examples/myfile/create_lmdb.sh
成功以后在examples/myfile
会生成:img_train_lmdb
和img_test_lmdb
两个文件。
3、计算均值
- 注意:此时需要用到caffe的路径。
在终端中输入以下代码:
build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
三部分组成:caffe计算程序的路径
、lmdb文件
、生成的均值位置和名字
。以上各个路径建议都用完整的路径,不要用相对路径。
4、模型配置
在你的caffe安装路径下,在文件夹models/bvlc_reference_caffenet/
路径下copy两个文件:solver.prototxt
train_val.prototxt
到examples/myfile/
路径下.
可以选择手动过去copy也可以采用以下代码,用命令行来copy:
cp models/bvlc_reference_caffenet/solver.prototxt examples/myfile/
cp models/bvlc_reference_caffenet/train_val.prototxt examples/myfile/
修改solver.prototxt
:
net: "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
注意
: 最后一行根据你是CPU还是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: "examples/myfile/mean.binaryproto"
}
data_param {
source: "examples/myfile/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: "examples/myfile/mean.binaryproto"
}
data_param {
source: "examples/myfile/img_test_lmdb"
batch_size: 50
backend: LMDB
}
}
5、训练
终端中输入:
build/tools/caffe train -solver examples/myfile/solver.prototxt
注意
: 上述的路径都要用完整的路径,根据自己的路径进行修改。结束!