caffe训练自己的数据总共分三步:
1、将自己的图像数据转换为lmdb或leveldb,链接如下:
http://blog.youkuaiyun.com/quincuntial/article/details/50611459,leveldb格式对应调整即可。
2、求图像均值,链接如下:
http://blog.youkuaiyun.com/quincuntial/article/details/50611650
3、使用已有的神经网络训练数据,本文用的是imagenet的网络。
(1)、将caffe\models\bvlc_reference_caffenet中的文件拷贝到要训练的图像文件夹中,注意:
数据文件和对应的均值文件*.binaryproto以及训练的caffe.exe的数据格式要对应,在生成这些对应的工具文件的.exe文件时要加上对应的宏USE_LMDB或USE_LEVELDB,要对应正确,默认为LMDB文件格式。
(2)、修改solver.prototxt文件
原文件为:
net: "models/bvlc_reference_caffenet/train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU
修改后:
net: "train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.01
stepsize: 1000
display: 1000
max_iter: 10000
momentum: 0.9
weight_decay: 0.0005
snapshot: 5000
snapshot_prefix: "caffenet_train"
solver_mode: CPU
参数解释:
test_iter: 1000是指测试的批次,我们就10张照片,设置10就可以了。
test_interval: 1000是指每1000次迭代测试一次,我们改成500次测试一次。
base_lr: 0.01是基础学习率,因为数据量小,0.01就会下降太快了,因此改成0.001
lr_policy: “step”学习率变化
gamma: 0.1学习率变化的比率
stepsize: 100000每100000次迭代减少学习率
display: 20每20层显示一次
max_iter: 450000最大迭代次数,
momentum: 0.9学习的参数,不用变
weight_decay: 0.0005学习的参数,不用变
snapshot: 10000每迭代10000次显示状态,这里改为2000次
solver_mode: GPU末尾加一行,代表用GPU进行
(3)、修改train_val.prototxt
主要修改下面几个地方
mean_file是你的图像均值文件,根据phase分别对应训练数据的测试数据的均值文件
source是你的图像转换后的文件,lmdb或leveldb文件的文件夹。
crop_size加上#注释掉是因为图像不一定需要裁剪,例如我的图像文件为64*64,裁剪大小为227,没办法裁剪。
然后运行caffe.bat批处理文件,其文件内容为
CaffeConfig.exe train --solver=solver.prototxt
::CaffeConfig.exe use -help
pause
::是bat文件的注释,不用管。
运行bat没错误,就会进行训练,出错的话你就要看错误信息去看看哪个地方有问题,我的运行也出了好多错。
运行截图: