FCN网络训练 SIFTFLOW数据集
来源:互联网 发布:虚幻4做的游戏好优化吗 编辑:程序博客网 时间:2024/06/06 05:43
论文全名:Fully Convolutional Networks for Semantic Segmentation
全卷积神经网络 FCN代码运行详解:
运行平台:
Ubuntu 14.04 + cudnn7
cp Makefile.config.example Makefile.config
vim Makefile.config(这句代码根据自己情况选择,如果需要修改相关设定,就使用这句,需要注意的是,将WITH_PYTHON_LAYER := 1前面的#去掉
如果使用cudnn,就把use cudann前面的#去掉
我这边安装的是openbla,所以我的设置为BLAS:=open)
make all -j8 //8代表线程数量,可以加快编译速度
make test -j8 //编译测试需要的文件make runtest //开始运行测试例子,这一句貌似有没有都行
以上结束后开始编译python接口make pycaffe#测试是否成功cd caffe-folder/pythonpythonimport caffe#如果上述命令未报错,说明成功#添加caffe/python 到python path变量vim ~/.bashrc#set the caffe PYTHONPATHexport PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
!如果是采用的Anaconda python,切记编译python接口在最后执行。
!如果是系统自带的python在make pycaffe可能出现python/caffe/_caffe.hpp:8:31: fatal error: numpy/arrayobject.h: No such file or directory
这是因为64位的python 库的存放路径问题。
查找arrayobject.h
所在的目录:
sudo find / -name arrayobject.h
然后修改Makefile.config
:
PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib64/python2.7/site-packages/numpy //这里修改成找到的路径
以上,编译结束,关于编译python,由于我这边服务器上使用的是Anaconda python,大家可以根据自己的实际情况进行python接口的编译/fcn.berkeleyvision.org/data/
下,并将文件夹名重命名为sift-flow
sys.path.append('/home/my/caffe-master/caffe-master/python')
train_net: "trainval.prototxt"test_net: "test.prototxt"test_iter: 200# make test net, but don't invoke it from the solver itselftest_interval: 999999999display: 20average_loss: 20lr_policy: "fixed"# lr for unnormalized softmaxbase_lr: 1e-10# high momentummomentum: 0.99# no gradient accumulationiter_size: 1max_iter: 300000weight_decay: 0.0005snapshot:10000snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"test_initialization: false
在这里郑重声明一下:如果训练fcn32s的网络模型,
一定要修改solve.py
利用transplant的方式获取vgg16的网络权重;
具体操作为
可以看到我注释了并且在import后添加了关于我附上我的百度网盘的链接 如果大家找不到 可以在这里下载
http://pan.baidu.com/s/1geLL6Sz
如果训练fcn16s,则可以直接copy自己的fcn32s的model的权重,不需要transplant,也就是不需要修改solve.py
如果训练fcn8s,则可以直接copy自己的fcn16s的model的权重,不需要transplant,也就是不需要修改solve.py
只有如此,才能避免loss高居不下的情况sys.path.append('/home/my/caffe-master/caffe-master/python')
import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltimport sys sys.path.append('/home/my/caffe-master/caffe-master/python')import caffeimport cv2%matplotlib inline# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffeim = Image.open('siftflow-fcn8s/test.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('siftflow-fcn8s/deploy.prototxt', 'siftflow-fcn8s-heavy.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_# run net and take argmax for predictionnet.forward()out = net.blobs['score_sem'].data[0].argmax(axis=0)#print "hello,python!"#plt.imshow(out,cmap='gray');plt.imshow(out)plt.axis('off')plt.savefig('test.png')
deploy文件如果没有 可以参照一下方法
首先,根据你利用的模型,例如模型是siftflow32s的,那么你就去siftflow32s的文件夹,
里面有train.prototxt文件,将文件打开,全选,复制,新建一个名为deploy.prototxt文件,粘贴进去,
然后ctrl+F 寻找所有名为loss的layer 只要有loss 无论是loss还是geo_loss 将这个layer统统删除
然后在文件顶部加上
layer {
name: "input"
type: "Input"
top: "data"
input_param {
# These dimensions are purely for sake of example;
# see infer.py for how to reshape the net to the given input size.
shape { dim: 1 dim: 3 dim: 256 dim: 256 }
}
}
其中shape{dim:1 dim:3 dim:256 dim:256}这两个256,是由于我的测试图片是256X256 如果你的是500X500 那你就将最后两个dim改为500 500
需要注意的是 如果你执行的是siftflow32s,你没有deploy,你需要加入inputdata layer,你如果执行sififlow16s的model 那么是不需要加inputdata layer的
因为他们的train.prototxt文件里已经有了inputdata layer
此外,关于siftflow-fcn32s需要的deploy文件,我在这里附上一个下载地址,如果不愿意自己制作可以下载这个:
http://pan.baidu.com/s/1dFCHWf3
其中 deploy是fcn32的
deploy16是fcn16的
deploy8是fcn8的
需要额外注意的是 如果使用siftflow数据集训练得到的model
在测试时候 也请使用siftflow数据集中的img进行test,我以一张voc数据集的img利用siftflow数据集得到的model示例
可以看到voc的图像 在利用siftflow数据集进行测试的结果并不好
在siftflow数据集中 class.txt文件中是包含person这个类别的 但在这个例子中 仍然无法将person完整分割出来
这是因为 train data中 person类别的多样性不足 在大家自己制作自己的数据集时候
不仅要完整包含自己所需要的类别(class) 在保证数据集的数量足够大的同时 更要注意每一个class的 多样性
例如 person的姿势 多样性 等等 只有如此 才能使得分割结果更加完善
fcn只是工具 就像汽车的发动机
我们使用fcn 时候 我们的数据集就是机油
机油纯度高(数据集做得好) 汽车跑的就快,跑的远(分割结果就好)
在此,fcn的训练已经结束,祝大家顺利
如果想下载官方的训练好的model 试试结果可以在这里下载到
http://dl.caffe.berkeleyvision.org/
以上,FCN的训练和测试全部结束,这次有个朋友催我做这个,做得比较仓促,如果有问题,欢迎指摘
感谢Zoro_H提供的 利用siftflow训练得到的model 对voc数据集中图片的测试结果- FCN网络训练 SIFTFLOW数据集
- FCN网络训练 SIFTFLOW数据集
- FCN网络训练 SIFTFLOW数据集
- FCN网络的训练——以SIFT-Flow 数据集为例
- caffe FCN网络的训练——以SIFT-Flow 数据集为例
- FCN网络的训练——以SIFT-Flow 数据集为例
- FCN网络的训练——以SIFT-Flow 数据集为例
- FCN网络训练 终极版
- FCN 全卷积网络训练
- FCN网络训练训练——从零开始
- FCN训练自己的数据集及测试
- FCN制作自己的数据集、训练和测试 caffe
- FCN训练自己的数据集及测试
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- 基于caffe的fcn网络的训练
- Mxnet(4)-fcn训练自己的数据
- R-FCN resnet50 训练自己的数据
- Java并发编程:Synchronized及其实现原理
- vue2.0总结 --- vue使用过程中的常见问题
- 56
- WAMPServer自定义监听端口号
- 打造网络营销利器-第6篇-外链推广 网站优化进阶
- FCN网络训练 SIFTFLOW数据集
- vue中引入jquery
- 八、类加载器
- 信号不安全引起的死锁问题
- C#调用C++Dll封装时遇到的一系列问题 参考
- eclipse项目类型的转换
- 学习Java面向对象-static
- SpringMVC与Struts2区别与比较总结
- Redis实现Restful的访问权限控制(四)