Caffe图片模型训练流程
Step1:训练、测试图片与列表清单准备;
准备图片训练集与测试集,把相应的图片放在对应的目录下。如:训练图片目录:E:/data/train/ ,测试图片目录: E:/data/test/。同时编写相应的脚本文件存放所对应图片的列表清单,即train.txt和test.txt(列表清单中与对应的图片进行一一对应);
Step2:转换为对应的lmdb数据格式;
深度学习(Caffe)原始数据图片格式为(jpg,jpeg,png,tif),同时图片大小格式不统一。而在(Caffe)深度学习中经常使用的数据类型是lmdb或leveldb,因此需要把图片转换为相对应的数据库格式(lmdb为常用格式,效率较高)。
Caffe工具自带的有convert_imageset.exe可执行工具,需要输入相对应的参数格式即可生成。
编辑以下文件,保存为.sh(需要下载Git工具)或者.bat均可!(以下路径均为绝对路径)
#!/usr/bin/en sh
DATA=E:/testdata/second-train-model
rm -rf $DATA/img_train_lmdb
E:/caffe-gpu-matlab/caffe-master/Build/x64/Release/convert_imageset.exe --shuffle \
--resize_height=256 --resize_width=256 \
E:/testdata/second-train-model/train/ \
$DATA/train.txt \
$DATA/img_train_lmdb
以上是训练图片数据格式的转换,同理把测试图片转换为相应的lmdb数据格式。
Step3:计算均值文件并保存
图片减去均值再训练,会提高训练速度和精度,因此,一般都会有这个操作。caffe程序提供了一个计算均值的文件compute_image_mean.exe,直接调用。
编辑以下文件并保存;
DATA=E:/testdata/second-train-model
TOOLS=E:/caffe-gpu-matlab/caffe-master/Build/x64/Release
$TOOLS/compute_image_mean.exe $DATA/img_train_lmdb \
$DATA/imagenet_mean.binaryproto
echo "Done."
Step4:创建模型并编写配置文件
Caffe自带四个模型文件位于...\caffe-master\models文件夹下面,在这我们使用caffenet模型。复制其中的solver.prototxt train_val.prototxt,修改其中的配置文件符合自己的程序需要!
solver.prototxt配置文件如下:
net:"E:/testdata/second-train-model/train_val.prototxt" #训练文件路径
test_iter: 10 #test_iter* batchsize(测试集的)=测试集的大小
test_interval: 2 #表示训练的时候,每迭代500次就进行一次测试
base_lr: 0.001 #学习率
lr_policy: "step" #学习率变化规律
gamma: 0.1 #学习率变化指数
stepsize: 100000 #学习率变化频率
display: 20 #屏幕显示间隔
max_iter: 1000 #总迭代次数1000
momentum: 0.9 #动量
weight_decay: 0.0005 #权重衰减
snapshot: 500 #500次保存一次快照
snapshot_prefix:"E:/testdata/second-train-model/caffenet_train" #模型保存路径
solver_mode: GPU #CPU或GPU
注:配置文件默认采用SGD(梯度下除法模式);
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: "E:/testdata/second-train-model/imagenet_mean.binaryproto"
#均值文件保存路径
}
data_param {
source: "E:/testdata/second-train-model/img_train_lmdb"
#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: "E:/testdata/second-train-model/imagenet_mean.binaryproto"
}
data_param {
source: "E:/testdata/second-train-model/img_test_lmdb"
#测试图片lmdb数据保存路径
batch_size: 10
#一次送入多少测试图片
backend: LMDB
}
}
.
.
.
Step5:训练和测试
编辑以下文件并保存为.sh或.bat格式的文件:
E:/caffe-gpu-matlab/caffe-master/Build/x64/Release/caffe.exe train \
--solver=E:/testdata/second-train-model/solver.prototxt $@
利用Git工具运行或者双击进行运行,开始训练!
Step6:利用模型文件进行分类
复制caffenet模型中的deploy.prototxt配置文件;
deploy.prototxt配置文件
name: "CaffeNet"
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
}
dim:10表示对待识别样本进行数据增广的数量,该值的大小可自行定义。但一般会进行5次crop,将整幅图像分为多个flip。该值为10则表示会将待识别的样本分为10部分输入到网络进行识别。如果相对整幅图像进行识别而不进行图像数据增广,可将该值设置为1
dim:3代表通道数,dim:227代表图片切割后的大小;
.
.
.
layer {
name: "fc8"
type: "InnerProduct"
bottom: "fc7"
top: "fc8"
inner_product_param {
num_output: 5 #设置成自己的样本种类个数
}
}
layer {
name: "prob"
type: "Softmax"
bottom: "fc8"
top: "prob"
}
编写脚本文件并保存为.sh或.bat运行
SET GLOG_logtostderr=1
cd /d E:\caffe-class
set a=E:\caffe-class\second-train-model\deploy.prototxt
set b=E:\caffe-class\second-train-model\caffenet_train_iter_1000.caffemodel
set c=E:\caffe-class\second-train-model\imagenet_mean.binaryproto
set d=E:\caffe-class\second-train-model\lable.txt
set e=E:\caffe-class\second-train-model\jp\11.jpg
E:\caffe-class\classification.exe %a% %b% %c% %d% %e%
pause