1.数据准备
在 caffe_master/data 中新建文件夹 myself,在myself/train/cat文件里存放训练猫的图片 40 张(名称为cat1~cat40),在myself/train/dog文件里存放训练狗的图片 40 张(名称为cat1~cat40),在myself/val文件里测试狗的图片 10 张和测试猫的图片10张。
根据训练和测试的图片生成train.txt文件和val.txt文件,此文件里包含文件名和分类标签(标签从0开始,0,1,2....)。
可在train文件夹路径下,使用
find -name *.pgm |cut -d '/' -f2-3 >train.txt
脚本命令来生成train.txt文件。val.txt的生成方法类似。
图片需要通过在后面添加不同的数字区分开来,因此还需命令:
sed -i '1,70s/.*/& 0/' train.txt和sed -i'71,141s/.*/& 1/' train.txt
2.转换为LMDB格式
在caffe/example目录下新建目录myself。并将caffe/examples/imagenet 目录下create_imagenet.sh文件拷贝到myself中。
#!/usr/bin/env sh
EXAMPLE=examples/mytest ##根据自己的路径修改
DATA=data/mydata //
TOOLS=bulid/tools
echo "Create train lmdb.."
rm -rf $EXAMPLE/mytest_train_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_height=256 \
--resize_width=256 \
/home/wujx/caffe/data/mydata/ \ ##训练图片的路径
$DATA/train.txt \ ##输入train.txt的路径
$EXAMPLE/mytest_train_lmdb ##输出train_lmdb的路径
echo "Create test lmdb.."
rm -rf $EXAMPLE/mytest_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width=256 \
--resize_height=256 \
/home/wujx/caffe/data/mydata/ \ ##测试图片的路径
$DATA/test.txt \ ##输入test.txt的路径
$EXAMPLE/mytest_test_lmdb ##输出test_lmdb的路径
echo "All Done.."
返回caffe根目录 运行 sh ./examples/myself/create_imagenet.sh
接下来就会在examples/myself 下生成 两个文件夹 myself_train_lmdb和 myself_train_lmdb
3.训练数据
把caffe/models/bvlc_reference_caffenet中
train_val.prototxt
网络结构文件
solver.prototxt
网络参数文件
文件复制到caffe/examples/mytest文件夹中
编辑train_val.prototxt文件,注意修改数据层的路径。
练参数文件的配置:
②修改solver.prototxt
test_iter: 1000是指测试的批次,我们就10张照片,设置10就可以了。 test_interval: 1000是指每1000次迭代测试一次,我改成了10。 base_lr: 0.01是基础学习率,因为数据量小,0.01就会下降太快了,因此改成0.001 lr_policy: “step”学习率变化 gamma: 0.1学习率变化的比率 stepsize: 100000每100000次迭代减少学习率 display: 20每20层显示一次 max_iter: 4000最大迭代次数, momentum: 0.9学习的参数,不用变 weight_decay: 0.0005学习的参数,不用变 snapshot: 10000每迭代10000次显示状态,这里改为1000次 solver_mode: GPU末尾加一行,代表用GPU进行
拷贝examples/imagenet目录下的train_caffenet.sh文件到example/myself目录下。
注意修改路径。
./examples/myself/train_caffenet.sh
开始训练网络