将模型文件放到caffe-master路径下
caffemodel-url中是训练之前预加载的权值模型的下载地址,打开这个文件,并下载这个模型
deploy.protptxt是训练好模型之后,进行图片预测的网络模型
net.py是生成网络模型的文件,暂时用不到
solve.py和solve.prototxt是网络训练之前一些数据路径和参数的设置
train.prototxt和val.prototxt不用说了,一个是训练模型,一个是训练过程中测试的模型
好下面开始修路径,打开solve.py,修改如下图所示:
配置路径之后,在终端中cd到caffe-master目录下,运行sudo python fcn.berkeleyvision.org-master/voc-fcn8s/solve.py 即可开始训练,如果出现什么问题,不要紧张,根据提示,一步步修改,一般问题不大。
上面基本按照博主supe_king的步骤来进行
关于自己训练集的设置也是参照supe_king的步骤来做
我们的数据集都是使用的原图片,没有转化为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):这个函数,
测试代码在fcn.berkeleyvision.org-master文件下的infer.py
import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltimport caffe# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffeim = 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 netnet = 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 datanet.blobs['data'].reshape(1, *in_.shape)net.blobs['data'].data[...] = in_ #read image# run net and take argmax for predictionnet.forward() #in forward NNout = net.blobs['score'].data[0].argmax(axis=0) #image print net.blobs['score'].data[0].shapeprint net.blobs['score'].data[0].argmax(axis=0)print out.shapeplt.imshow(out,cmap='gray');plt.axis('off')#plt.savefig('test.png')plt.show()
我在里面加了几行代码,用于输出分割的图片。(我现在可能参数设置的有问题,或者时数据集的原因,训练的不好,我也在找问题,不过大家至此可以将FCN跑起来了)
联系客服