caffe训练与测试全过程(附代码)(超详细)
最近在学习caffe,因此将⾃⼰的训练和测试的过程及代码记录下来。
(1)处理数据集,理论上caffe的训练集和测试集的⽐例为3:1,⾸先将我们将⾃⼰的数据图⽚先分为训练集和测试集,然后分别对测试集和训练集的图⽚进⾏分类,此次我的数据集分类两类,⼀类c,⼀类m,如下所⽰
训练集
测试集
每个⽂件夹中都是对应的图⽚。
(2)制作标签⽂件,标签⽂件应该是如下格式(下⾯是训练集的标签⽂件)
标签⽂件格式应当是“ 路径\⽂件名 标签”(标签要从0开始)
制作标签⽂件可使⽤python完成,python代码如下:
import os
root="D:/caffe/caffe-master/caffe-master/data/mineral_data" #此处为根路径
#制作训练集⽂件标签
i=-7 #i的数字根据下⾯输出的i来改,直到改为输出从0开始
with open(root+"/","w") as f: #训练集标签⽂件⽣成地址(下同)
for root,dirs,files in os.walk(root):
for dir in dirs:
for root,dirs,files in os.walk("D:/caffe/caffe-master/caffe-master/data/mineral_data/train/"+str(dir)):
for file in files:
image_file=str(dir)+"\\"+str(file)
label=image_file+" "+str(i)+"\n"
f.writelines(label)
print(i) #此处输出为标签数字,要从0开始,若不从0开始修改上⽅i初始化
i+=1
#制作测试集标签⽂件
i=-5
with open("D:/caffe/caffe-master/caffe-master/data/mineral_data/","w") as f:
for root,dirs,files in os.walk("D:/caffe/caffe-master/caffe-master/data/mineral_data"):
for dir in dirs:
for root,dirs,files in os.walk("D:/caffe/caffe-master/caffe-master/data/mineral_data/test/"+str(dir)):
for file in files:
image_file=str(dir)+"\\"+str(file)
label=image_file+" "+str(i)+"\n"
f.writelines(label)
print(i)
i+=1
(3)⽣成caffe使⽤的格式⽂件(lmdb格式),该处使⽤.bat⽂件,脚本⽂件内容如下:
⽣成训练集lmdb格式⽂件:
D:/caffe/caffe-master/caffe-master/Build/x64/Release/ --resize_height=100 --resize_width=100 --shuffle --backend=lmdb D:/caffe/ca pause
测试集lmdb格式⽂件:
D:/caffe/caffe-master/caffe-master/Build/x64/Release/ --resize_height=100 --resize_width=100 --shuffle --backend=lmdb D:/caffe/ca pause
⽣成格式⽂件如下:
上⾯所⽤脚本⽂件说明:
(4)⽣成均值⽂件(使⽤.bat⽂件):(mean.binaryproto)
脚本⽂件如下:
D:\caffe\caffe-master\caffe-master\Build\x64\Release\compute_image_mean D:\caffe\caffe-master\caffe-master\data\mineral_data\train_leveldb D:\caffe\c
脚本⽂件说明:
(5)修改train_val.prototxt⽂件,该⽂件为训练⽹络结构
本次我们采⽤mobilenet,如果你想⽤其他⽹络也可以,可以从github上下载相应⽹络结构,不过注意下载下来的⽹络模型只有
deploy.prototxt(测试所⽤⽹络结构)和已经训练好的caffemodel(识别测试时所⽤),因此此时你需要修改deploy.prototxt⽂件来⽣成train_val.prototxt⽂件,下⾯说明具体步骤。
⾸先将下载的模型⽂件复制到⾃⼰test和train⽂件夹所在的⽬录如下:
mobilenet为所⽤⽹络模型,test和train分别为训练集和测试集⽂件,另外两个为前⾯所⽣成的lmdb格式⽂件
接下来取出mobilenet⽂件夹中的deploy.prototoxt⽂件,复制到该⽬录下:
再将该⽂件复制⼀份,命名为 train_val.prototxt
打开该⽂件,如下:
接下⾥修改该⽂件,删除最后⼀个层(prob)和前⾯的数据维度描述:
然后添加数据层和accuracy层,全连接层以及loss层,如下:
#数据层添加在最开始:
name: "MOBILENET"
writelines在python中的用法layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 100
#均值⽂件所在⽬录
mean_file: "D:/caffe/caffe-master/caffe-master/data/mineral_data/mean.binaryproto" }
data_param {
#训练集lmdb格式⽂件⽬录
source: "D:/caffe/caffe-master/caffe-master/data/mineral_data/train_leveldb"
batch_size: 50
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 100
mean_file: "D:/caffe/caffe-master/caffe-master/data/mineral_data/mean.binaryproto" }
data_param {
#测试集lmdb格式⽂件⽬录
source: "D:/caffe/caffe-master/caffe-master/data/mineral_data/test_leveldb"
batch_size: 10
backend: LMDB
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论