caffe finetuning实践

网络上关于caffe微调的资料很多,今天自己动手实践了一下。顺便把实践过程记录下来,备忘。

一、下载model参数

下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel,保存在caffenet目录下

二、准备数据

有自己的数据最好,如果没有,可以下载本练习的数据http://pan.baidu.com/s/1MotUe。

共有500张图片,分为大巴车、恐龙、大象、鲜花和马五个类,每个类100张。编号分别以3,4,5,6,7开头,各为一类。从其中每类选出20张作为测试,其余80张作为训练。因此最终训练图片400张(放在train文件夹内,每个类一个子文件夹),测试图片100张(放在test文件夹内,每个类一个子文件夹)。

三、图像数据转换成db(leveldb/lmdb)文件

1、先将图像文件名和标签信息存在txt文件中,编写处理脚本,分别处理训练集和测试集

# /usr/bin/env sh

DATA=train

echo "Create train.txt..."

OUTPUT=./train.txt

rm -rf $OUTPUT

# labels.0:bus;1:dinosaur;2:elephant;3:flower;4:horse

# find $DATA -name 3*.jpg | cut -d '/' -f3 |sed "s/$/ 1/">>$OUTPUT

find $DATA -name 3*.jpg | sed "s/$/0/">>$OUTPUT

find $DATA -name 4*.jpg | sed "s/$/1/">>$OUTPUT

find $DATA -name 5*.jpg | sed "s/$/2/">>$OUTPUT

find $DATA -name 6*.jpg | sed "s/$/3/">>$OUTPUT

find $DATA -name 7*.jpg | sed "s/$/4/">>$OUTPUT

echo "Done.."

也可以用caffe自带的examples/imagenet/create_imagenet.sh脚本处理。

2、使用caffe自带的convert_imageset工具转化图像,并用compute_image_mean计算出均值文件

convert_imageset --shuffle --resize_height=256 --resize_width=256 ./  ./train.txt  ./img_train_lmdb
 
compute_image_mean ./img_train_lmdb ./caffe/img_mean.binaryproto
 
convert_imageset --shuffle --resize_height=256 --resize_width=256 ./  ./test.txt  ./img_test_lmdb

至此,图像已经转化为ldmb格式,并分别存放在img_train_lmdb和img_test_lmdb目录下

四、修改网络配置文件train_val.prototxt

1、修改mean_file的路径。"caffenet/imagenet_mean.binaryproto"

2、修改输入数据的参数data_param。训练集为source: "./img_train_lmdb" ;测试集为source: "./img_test_lmdb"

3、修改fc8层,将其名称改成name: "fc8_re",top: "fc8_re",将本层的输出类别数由原来的1000,改成5,即num_output: 5。同时修改accuracy和loss层中的bottom: "fc8_re"

五、修改网络训练文件solver.prototxt

net: "caffenet/train_val.prototxt"

test_iter: 1000

test_interval: 1000

base_lr:0.0005

lr_policy: "step"

gamma: 0.1

stepsize: 500

display: 50

max_iter:5000

momentum: 0.9

weight_decay:0.0002

snapshot: 500

snapshot_prefix: "caffenet/caffenet_train"

solver_mode: GPU

此文件修改的重点是学习率base_lr,因为是用微调,所以lr就应该比从头训练用的数值更小。

六、微调训练

经过上述步骤的准备和修改工作之后,就可以训练自己的数据了。命令如下:

caffe train -solver caffenet/solver.prototxt -weights caffenet/bvlc_reference_caffenet.caffemodel-gpu 0

测试:caffe test -model caffenet/train_val.prototxt -weightscaffe/caffenet_train_iter_1000.caffemodel

实验结果,经过1000次迭代之后,训练和测试的准确率都达到100%!


猜你喜欢

转载自blog.csdn.net/eagelangel/article/details/51759526
今日推荐