windows 训练、微调caffenet 训练测试自己的数据

来源:互联网 发布:谢津死亡真相知乎 编辑:程序博客网 时间:2024/05/16 15:20

下载caffeNet模型

下载的caffe-master文件中,/models/bvlc_reference_caffenet 文件夹不包含bvlc_reference_caffenet.caffemodel,下载地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel 也可以用脚本方式下载。

 

准备数据—生成lmdb/leveldb

我在这里使用的是bat命令行的方式,也有很多博主上使用shell文件(create_imagenet.sh)。使用sh文件网上也已经有很多的代码,在Windows系统命令行中,可在命令行执行sh create_imagenet.sh

如果要使用.bat文件,代码:

SET GLOG_logtostderr=1D:/CAFFE/caffe-master/Build/x64/Release/convert_imageset.exe --resize_width=200 --resize_height=200 --shuffle --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/data/train/ D:/CAFFE/caffe-master/examples/hello_caffe/train.txt  D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdbD:/CAFFE/caffe-master/Build/x64/Release/convert_imageset.exe --shuffle --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/data/val/ D:/CAFFE/caffe-master/examples/hello_caffe/val.txt  D:/CAFFE/caffe-master/examples/hello_caffe/val_lmdb pause


这里我使用的是绝对路径,需要的东西有:(按顺序)

convert_imageset.exe转换图像为lmdb/leveldb格式

训练数据集位置:D:/CAFFE/caffe-master/examples/hello_caffe/data/train/

训练数据集标签:D:/CAFFE/caffe-master/examples/hello_caffe/train.txt

训练数据集lmdb文件存放位置:D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb

同理,测试数据集转换需要:convert_imageset.exe、测试数据集位置、lmdb文件存放位置。

 

--resize_width –resize_height设置图像的宽度和高度

--shuffle 打乱数据顺序,不然lossaccuracy曲线会震荡

--backend 生成数据的格式,代码中为生成lmdb格式,如果要生成leveldb也可以改为leveldb

  

注:如果生成失败,需要将已经生成的lmdb文件夹删除,不然会报错

计算图像均值

计算图像均值使用的是compute_image_mean.exe

D:/CAFFE/caffe-master/Build/x64/Release/compute_image_mean.exe --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryprotoPause

compute_image_mean.exe 计算图像均值

训练数据集的位置: D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb

生成均值文件及位置: D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryproto

--backend 输入文件类型

网络定义

选择你要用的网络模型,我这里用的是caffenet,复制原来的train_val.prototext、solver.prototxt、deploy.prototxt到你要建模型的位置,修改相应参数:

train_val.prototext修改:




设置训练数据和测试数据的相应位置以及全连接层输出。

原来的caffenet能够输出1000个类别,但我只需要输出9个类别。在num_output位置设为9,即网络输出类别数量。(TIPS:修改输出标签数量,需要修改全连接层的名称,在这里我加上了_new,例如fc6改为fc6_new。否则会在自己分类时,出现<9 vs 1000>之类的错误)

训练模型

D:/CAFFE/caffe-master/Build/x64/Release/caffe.exe train -solver=D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/solver.prototxt --weights D:/CAFFE/caffe-master/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodelPause

Caffe.exe 调用caffe

solver.prototxt 设置输入网络配置

bvlc_reference_caffenet.caffemodel 需要调整的网络模型 

solver.Prototxt修改net和snapshot_prefix两个位置,根据需要修改迭代次数、训练模式等等,以下为solver.prototxt文件:

net: "D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/train_val.prototxt"test_iter: 6test_interval: 20base_lr: 0.001lr_policy: "fixed"gamma: 0.1stepsize: 100000display: 20max_iter: 4000momentum: 0.9weight_decay: 0.0005snapshot: 1000snapshot_prefix: "D:/CAFFE/caffe-master/models/bvlc_reference_caffenet/caffenet_train"solver_mode: GPU

运行bat文件后,就生成了model文件:


测试生成的模型

D:/CAFFE/caffe-master/Build/x64/Release/classification.exe D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/deploy.prototxt D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/11.20/caffenet_train_iter_4000.caffemodel D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryproto D:/CAFFE/caffe-master/examples/hello_caffe/label.txt D:/CAFFE/dataset/12class_tif/water/0186.tifPause


我是参照mnist数据集的分类写出来的,其中:

classification.exe为分类器

deploy.Prototxt文件: 将caffe-master/models/bvlc_reference_caffenet目录下的deploy.Prototxt复制修改,这里改了输出层的标签数量(num_output)和全卷积层名称(与前面的train_val.prototxt文件全卷积层名称一致)。

caffenet_train_iter_4000.caffemodel:为训练生成的模型

label.txt:类别对应的标签,输出了9个类别,分别设置每一个类别对应的标签(根据自己需要,可以为字符串)

0186.tif:测试的图像

结果展示


分类结果,得到该图像为水体的概率为0.9999,为harbor的概率为0.0001

阅读全文
0 0
原创粉丝点击