FCN训练自己的数据集及测试
2017-04-29 15:10
411 查看
1 默认caffe已配置好,直接下载FCN网络模型
https://github.com/shelhamer/fcn.berkeleyvision.org将模型文件放到caffe-master路径下
2 打开其中一个文件夹voc-fcn8s
3 放置好模型,现在就是配置相关路径
caffemodel-url中是训练之前预加载的权值模型的下载地址,打开这个文件,并下载这个模型deploy.protptxt是训练好模型之后,进行图片预测的网络模型
net.py是生成网络模型的文件,暂时用不到
solve.py和solve.prototxt是网络训练之前一些数据路径和参数的设置
train.prototxt和val.prototxt不用说了,一个是训练模型,一个是训练过程中测试的模型
好下面开始修路径,打开solve.py,修改如下图所示:
见图中画框的部分,第一个框是加载你python与caffe的接口部分路径,第二个框是你下载的训练之前的权值模型,第三个框是不用解释,至于第四个框是你的训练数据data里面的一个路径,至于segvalid11.txt这个文件你可能没有,没有关系后面给出。还有就是注释了一条caffe.set_device(int(sys.argv[1]))!!!!
注:如果不想用已有model进行fine-tune,注释掉19行solver.net.copy_from(weights),后面还需要根据你分的类数进行prototxt文件的修改,这个后面会提到。
修改完这个文件,打开solver.prototxt,修改如下:
第一个框不用说是什么路径很明显,第二个框是你训练时保存的模型地址。其中参数:、
test_iter是测试时,一次会测试多少张图片
display是训练多少次,终端中展示一次loss值
max_iter是训练最多多少次(但是似乎这里不管用,前面solver.py里面那个才循环是关键,有兴趣的自己可以看看)
snapshot是训练到多少次保存一次
其他参数,见> http://blog.csdn.net/q6324266/article/details/52451088
这个设置完成之后,就差最后一步路径设置了 打开train.prototxt:
修改路径到dataset的位置,这个dataset就是我们构建的训练集,后面详细介绍
同理打开val.prototxt,修改路径同train.prototxt。
注:这里介绍一下param_str这一行,这里面有4个参数(sbdd_dir,seed,split,mean),sbdd_dir为数据集的路径(train.prototxt和val.prototxt的这一参数一样,因我们把训练集和测试集都放到这一路径下),split为生成的txt文件名(训练集生成一个,测试集生成一个)。其他参数还没有仔细研究
4 开始训练
配置路径之后,在终端中cd到caffe-master目录下,运行sudo python fcn.berkeleyvision.org-master/voc-fcn8s/solve.py 即可开始训练,如果出现什么问题,不要紧张,根据提示,一步步修改,一般问题不大。上面基本按照博主supe_king的步骤来进行
http://blog.csdn.net/supe_king/article/details/54142973
关于自己训练集的设置也是参照supe_king的步骤来做
http://blog.csdn.net/supe_king/article/details/58121993
我们的数据集都是使用的原图片,没有转化为mat等其他格式的文件,但原FCN模型中程序设置为需要输入mat文件,所以我们对其进行修改
我们先打开fcn下voc_layers.py这个文件,里面我们可以看到 class VOCSegDataLayer(caffe.Layer):和 class SBDDSegDataLayer(caffe.Layer) 这两个类,第一个是测试时数据输入调用的python类,第二个是训练时数据输入调用的python类。而这类里面,分别是对输入数据的一些预处理操作。
我们只要进入class VOCSegDataLayer(caffe.Layer)这个类,copy出def load_label(self, idx):这个函数,
将其复制到class SBDDSegDataLayer(caffe.Layer)类下,并注释调原代码,并修改voc_dir为sbdd_dir
这下就直接读取图像文件而不用转换成mat了。
然后就是修改路径了,
根据每个人的情况修改SegmentationClass这个路径,大家可以看到其前后各有两个{},这个就是传递参数的意思,将后面的self.vocdir和idx分别传递到前面两个{}中,idx为图片名称,根据生成的txt来读取。
××前面讲的更改prototxt文件,看你分几类,我这边是分的两类,把里面后几层num_output输出改为2即可。(如果需要用已有模型fine-tune的话再改num_output为2的所在层的名字就可以了)
5 测试
测试代码在fcn.berkeleyvision.org-master文件下的infer.pyimport numpy as np from PIL import Image import matplotlib.pyplot as plt import caffe # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe im = Image.open('data/skin/val/ISIC_0000001.jpg') in_ = np.array(im, dtype=np.float32) in_ = in_[:,:,::-1] in_ -= np.array((104.00698793,116.66876762,122.67891434)) in_ = in_.transpose((2,0,1)) # load net net = caffe.Net('voc-fcn32s/deploy.prototxt', 'voc-fcn32s/model_2/_iter_10000.caffemodel', caffe.TEST) # shape for input (data blob is N x C x H x W), set data net.blobs['data'].reshape(1, *in_.shape) net.blobs['data'].data[...] = in_ #read image # run net and take argmax for prediction net.forward() #in forward NN out = net.blobs['score'].data[0].argmax(axis=0) #image print net.blobs['score'].data[0].shape print net.blobs['score'].data[0].argmax(axis=0) print out.shape plt.imshow(out,cmap='gray');plt.axis('off') #plt.savefig('test.png') plt.show()
我在里面加了几行代码,用于输出分割的图片。(我现在可能参数设置的有问题,或者时数据集的原因,训练的不好,我也在找问题,不过大家至此可以将FCN跑起来了)
相关文章推荐
- FCN训练自己的数据集及测试
- FCN制作自己的数据集、训练和测试全流程
- FCN制作自己的数据集、训练和测试全流程
- FCN制作自己的数据集、训练和测试 caffe
- FCN训练自己的数据集及测试
- FCN制作自己的数据集、训练和测试全流程
- CRF as RNN训练自己的数据集(FCN)以及一些问题解决
- YOLOv2在自己的数据集上训练以及测试
- caffe示例实现之5用CaffeNet训练与测试自己的数据集
- [置顶] FCN训练不收敛的原因分析和最详细的FCN训练与测试自己的数据程序配置
- caffe示例实现之5用CaffeNet训练与测试自己的数据集
- Caffe训练和测试自己的数据集
- Caffe 用自己的数据集在ImageNet网络结构上训练测试
- Caffe中文件参数设置(九-2):训练和测试自己的数据集-windows10版本
- 4000 windows-caffe 训练和测试自己的数据集
- TensorFlow Object Detection API教程——利用自己制作的数据集进行训练预测和测试
- Tensorflow-SSD测试及训练自己的数据集
- R-FCN+ResNet-50训练自己的数据集模型(python版本)
- caffe 训练测试自己的数据集
- tensorflow训练自己的数据集实现CNN图像分类2(保存模型&测试单张图片)