windows下训练FCN模型所遇到的问题
想在windows上训练FCN模型,得有以下几步:
安装python:
1.首先在windows上安装python,最好安装python2.7。最新版python和旧版python有很大的区别。
2.安装完python后,我们需要添加环境变量,鼠标右键我的电脑 -> 属性 -> 点击高级系统设置 -> 点击环境变量 -> 点击PATH -> 在最后面加上我们的Python安装路径 -> 点击确定。
3.到dos下输入python,可以看到python的版本信息。
如图:
安装依赖包:
1.首先确定我们要完成FCN模型,需要哪些外包,故在caffe的python接口中,requirements.txt已经写出来了并写出了对应的版本,
如图:
2.我们应该如何安装呢?网上有好多,主要有两种pip和easy_install ,我用的是pip命令,首先我们需要去python官网下载pip安装包,然后解压到一个目录下(我是到python目录下),然后用cmd进入到解压出来的文件夹,用python setup.py install命令来安装,安装完成后,同样也需要添加环境变量,按照之前介绍的添加环境变量的方法,我们在PATH最后添加:D:\Python27\Scripts(看自己安装的python路径).
附录:网上教程方法:http://www.tuicool.com/articles/eiM3Er3/
安装后python/Scripts目录下文件:
3.检验下是否安装成功,到cmd窗口输入pip即可,如:
4.安装python依赖包,首先我们要知道那些包安装在哪里,我么可以到python路径下的Lib/site-packages,所有从网上下载的安装包都在这里。然后我们就可以进行安装了。使用命令形式如: pip install 包名,例:pip install numpy.
要根据requirements.txt把里面所有的包都安装完。注意txt里面的格式,正确找到包名。
5.所有依赖包安装完成后,但是你会发现在安装scikit-image出错误了,当时以为是小问题,没去纠结他,到了我输入import caffe时,就出现一大堆错误,很多都来自 no module named skio.image ,这个模块就来自于包scikit-image(python下,.py文件就是一个模块,文件夹相当于一个包),哎,一个小问题搞死人啊!!!!!
我后面百度了好久也没找到方法,最后是无意间看到这个解决方法,经过我的实验,完全可行。网址:http://blog.csdn.net/inter_peng/article/details/53222562
6.除了这几个问题,我大概没有出啥问题,也有可能我忘记还有啥问题了。
到python安装路径下找到python.exe,双击运行(我是把caffe master/build/x64/release/pycaffe/caffe 复制到python安装目录下Libs/site-packages下),输入:importcaffe.
如果import caffe 成功,不会有任何结果。如:
有错的话,看下是缺少那个模块,百度下在那个包,然后使用pip uninstall 包名去卸载安装的包,自己从网上找到那个包,然后将它放到python路径下的Lib/site-packages下,然后通过cmd进入到这个文件夹下,使用python setup.py install 命令来安装按个包。
给个案例链接吧!:http://blog.csdn.net/inter_peng/article/details/53222562
最后给个python所有外包的网址:https://pypi.python.org/simple/,所有包都在里面,这个网址有点大,进去有点卡。
训练FCN模型:
1. 首先我们要找到FCN原码来,我找到的Fully Convolutional Networks for SemanticSegmentation这篇论文的作者写的,
网址:https://github.com/shelhamer/fcn.berkeleyvision.org
2. 讲下这个解压出来后的各文件夹的用处,如图:
Voc,siftflow,pascal,nyud这些都是数据,只是数据不同而已,然后所带的各种模型如:32s,16s,8s.
Voc_layers:在训练时会用到的一个python模块,因为python把这个layers写成一个类,然后继承这个类去产生子类,然后就有我们的数据层,只是初始化时传递进来的参数不一样,所以就产生不同数据层。同理,pascalcontext_layers,nyud_layers,siftflow_layers都是如此,
Sugery: python包,在训练FCN是会用到,在源文件会写到,importsugery score.
运行时就会出现错误,no module named sugery ,我当时就没注意到有这个包,搞得我去网上找这个包,找了几天也找不到,所以有必要先讲下目录下各文件的作用,这个包主要是用来做些扩展。同理score也是如此。
Infer.py:是用来语义分割的。
3. 我就以我运行的pascalcontext-fcn32s为例,其他模型也是如此。
首先到data目录下去。进入到pascal文件夹下,找到readme.txt文件,把里面的内容看一遍,找到pascal voc 2012训练数据和测试数据的下载地址,然后再到FCN原码网站,找到所需要的训练数据的矩阵形式,如:
我直接给网址:http://www.cs.stanford.edu/~roozbeh/pascal-context/
因为我们训练时需要训练数据的矩阵形式,labels.txt,59_label.txt,需要这三个数据,labels.txt在trainval.tar.gz压缩包里,59_label.txt在59_label.txt文件里,
搞定这三个文件后,可以开始了。
4.找到pascalcontext-fcn32s文件夹下的solve.py文件,在cmd找到这个目录,用python solve.py 方式运行起来。因为我改路径太麻烦了,我就把data文件夹复制到了pascalcontext-fcn32s文件夹下,这样在solve.py,train和val文件里,把所有路径前的../去掉,这样省掉了好多修改路径的麻烦事,真的!!!!!!!!!!!!!!!!
各位置修改后如下:
Solve.py:
train:
Val:
注意在solve文件里修改下 snapshot_prefix的路径,要修改到一个真实的路径下去。
5.输入pythonsolve.py 命令,运行起来时会出现错误:no module named sugery:import sugery score ,就是前面说的包,在import前加入代码:
Import sys
sys.path.append(‘sugery的路径’)
这个代码是说在import caffe前,加入搜索路径,所有我们需要的外包。
例子:我写的是:
Import sys
sys.path.append(‘caffe-master/models/FCN/fcn.berkeleyvision.org-master’)
6.接着这个问题,解决后,又会出现一个问题,如图:
这个是啥错误呢?是缩进错误,因为在 interp_layers和sugery.interp. 前面多了两个空格,不需要缩进。
7.接着会出现这个错误:
没有训练和验证集数据的矩阵数据,就是我们之前下载的训练和验证集矩阵数据形式,我们只要把数据放到哪个路径下即可,没有路径即创建。
8.接着还有会出现错误,这个错误就更莫名其妙了,valueerror :’ clothes’ is not in the list ,你会问what ????????????这个是啥意思,刚开始我也不懂,啥意思。因为我们之前不是下载了两个标签吗,labels.txt和59_label.txt这两个标签是父子关系,labels.txt是400类标签,太大了,所以就精简了成59_label.txt,所以说clothes不在list是指59_label.txt没有clothes,我们可以去59_label.txt找,确实没有clothes,但是有cloth,所以将cloth改成clothes即可。同理,同样错误同样改。
9.把这些错误修改完,基本完成了训练FCN。
FCN语义分割:
1. 用infer.py来做语义分割,其实这个文件大部分都写好了,我们只要修改些路径,把模型计入进去,最后我们需要分割后的图片,所以在最后加入,
plt.imshow(out,cmap=’gray’)
plt.axis(‘off’)
plt.savefig(‘test.png’)
plt.show();
注意
1. 文件里本没有plt,所以在import caffe后加入import matplotlib.pyplot as plt
2. 同样要加入搜索路径,
Import sys
sys.path.append(‘caffe的python接口的路径’)