上文 说到关于环境的配置,这次我们聊一聊关于使用vs2015生成后的exe来训练自己的数据。好了,废话不多说,下面开始
一、准备工作
既然要训练自己的数据,那就要准备训练的素材,尽可能多的素材用来训练,然后用部分素材来作为验证。
首先:在caffe的解压目录 data/下新建 文件夹mine(自定义) ,然后在这个文件夹下新建三个文件夹:分别是mean、train、val
train是用来存放训练数据的文件夹,val是用来存放测试数据的文件夹,mean是存放均值文件的文件夹,还有训练的结果。
在train文件夹下放入要训练的图片(若有多种类型,在此文件夹下新建多个子文件夹存放每一种类型的图片),val同理。
其中在文件夹下把图片名称命名为统一格式,val也是。如下:
二、各种文件配置及执行
1.新建在mine目录下新建train.txt问价,用来存放训练图片的名称,要确保在train文件夹下按照这个路径能找到此图片,后面的0 是指种类,若是有多种命名为0,1,2,3...(从0开始) ;新建val.txt 文件,存放测试图片的名称。数据量较大可以写一段程序来完成这项工作。内容栗子如下:
2.在 caffe目录下 \caffe\examples\mnist 复制 lenet_solver.prototxt 和 lenet_train_test.prototxt 文件分别重命名为 solver.prototxt 和 train_val.prototxt
① 对于train_val.prototxt 文件,修改上半部分文件为:
name: "AlexNet"
layer { # 关于训练数据
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 64 # 图片格式保持一致,下方执行bat文件时会用到
mean_file: "XXXX/caffe/data/mine/mean/train_mean.binaryproto" # 文件会zid
}
data_param {
source: "XXXX/caffe/data/mine/train_ldb" # 文件夹会自动生成
batch_size: 50 # 按照数据量修改此数值
backend: LEVELDB # 修改为转成db的格式
layer { # 关于测试数据
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 64
mean_file: "XXX/caffe/data/mine/mean/val_mean.binaryproto"
}
data_param {
source: "XXX/caffe/data/mine/val_ldb"
batch_size: 50
backend: LEVELDB # 同上
}
} # 之后内容不变.....
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1
}
param {
lr_mult: 2
}.....
② 对于solver.prototxt 文件,修改内容如下:
net: "XXX/caffe/data/mine/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: "XXX/caffe/data/mine/mean/" # 生成均值文件的目录
solver_mode: GPU # 只用CPU的话改成CPU
三、批处理文件编写
① 新建 convert_imageset.bat 文件,用txt打开,这个批处理文件主要是把图片文件转成leveldb格式的数据文件
vs2015编译成功 的convert_imageset.exe 文件目录 --shuffle --backend=leveldb 转成leveldb数据文件 ## 这是格式
--resize_width=64 --resize_height=64 裁剪文件的大小 图片数据保存的目录 图片所保存的目录的txt 图片生成数据文件保存目录
SET GLOG_logtostderr=1 # 这是内容
XXX\caffe\scripts\build\tools\Release\convert_imageset.exe --shuffle --backend=leveldb --resize_width=64 --resize_height=64 XXX\caffe\data\mine\train\ XXX\caffe\data\mine\train.txt XXX\caffe\data\mine\train_ldb
XXX\caffe\scripts\build\tools\Release\convert_imageset.exe --shuffle --backend=leveldb --resize_width=64 --resize_height=64 XXX\caffe\data\mine\val\ XXX\caffe\data\mine\val.txt XXX\caffe\data\mine\val_ldb
pause
②新建compute_image_mean.bat 文件,用txt打开,这个文件主要是把上述数据文件转成均值文件:
格式:
vs2015编译成功的 compute_image_mean.exe 文件 数据格式 数据文件所在地址 对应的数据文件
SET GLOG_logtostderr=1 # 这是内容
XXX\caffe\scripts\build\tools\Release\compute_image_mean.exe --backend=leveldb XXX\caffe\data\mine\train_ldb XXX\caffe\data\mine\mean\train_mean.binaryproto
XXX\caffe\scripts\build\tools\Release\compute_image_mean.exe --backend=leveldb XXX\caffe\data\mine\val_ldb XXX\caffe\data\mine\mean\val_mean.binaryproto
pause
③ 新建start_train.bat 文件,用txt打开,这个文件主要是用来执行训练数据:
格式:
vs2015编译成功的caffe.exe文件地址 train 训练标志 --solver= XXX 上述 solver.prototxt 文件地址
XXX\caffe\scripts\build\tools\Release\caffe.exe train --solver=XXX\caffe\data\mine\solver.prototxt # 这是内容
pause
然后依次执行上述三个批处理文件,会有挺长一段时间等待,若是图片训练文件太少 ,可能会一直出现 restarting ... 这种,观察 mean 文件夹下有没有生成.caffemodel文件,若是生成,则可以关掉窗口(我不知道对不对,我用这个等了一晚上,但是还是没有执行结束,我训练数据就4.500个图片。。看到mean中生成了5个.caffemodel 文件,就把它关掉了)。
三、验证图片精确度
在mine 目录下,新建 test_model.sh 文件,命名随意,
格式:caffe.exe文件路径 test 标志 训练的prototxt 所在路径 -weights caffemodel 所在路径
XXX/caffe/scripts/build/tools/Release/caffe.exe test -model=XXX/caffe/data/mine/train_val.prototxt -weights=XXX/caffe/data/mine/mean/_iter_50000.caffemodel
sleep 60 # 用来是的窗口停止60s,防止窗口闪退
pause
然后查看精确度 是多少,最后会停止生成,因为我训练个测试样本较少,所以,精确度一直是1..
至此,我们就训练得到了caffemodel文件,但是由于每一个文件都很大 90M+ ,目前正在找减少这个文件的大小(按理说我样本文件很少,caffemodel文件却很大,中间不知出了什么问题,还请各位大神解答。
博文有问题,随时提出来,一起交流。小白一只,大神轻喷....)
最后,在做的过程中,查看了很多大神的博客,也有一部分是借鉴大神的博客,由于太多就不一一列举。
在此感谢网络上的各位大神,正是你们的分享,才有小白学习成长的机会。