论文全名:Fully Convolutional Networks for Semantic Segmentation
全卷积神经网络 FCN代码运行详解:
运行平台:
Ubuntu 14.04 + cudnn7
步骤1.代码准备:
下载新版caffe: https://github.com/BVLC/caffe
下载fcn代码: https://github.com/shelhamer/fcn.berkeleyvision.org
将下载后的压缩包解压 将解压后的代码丢进服务器
步骤2.编辑caffe和python接口:
cd进入caffe所在路径
以个人路径示例:/home/my/caffe-master/caffe-master
在该目录下,执行
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接口
在下载的caffe源码包中,有个叫python的文件夹,cd进入这个文件夹
以我个人路径为例cd至 /home/wangkun/caffe-master/caffe-master/python
编译python:
make pycaffe
#测试是否成功
cd caffe-folder/python
python
import caffe
#如果上述命令未报错,说明成功
#添加caffe/python 到python path变量
vim ~/.bashrc
#set the caffe PYTHONPATH
export 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 //这里修改成找到的路径 |
步骤3.数据文件下载
下载siftflow数据集:http://www.cs.unc.edu/~jtighe/Papers/ECCV10/siftflow/SiftFlowDataset.zip
并解压至
/fcn.berkeleyvision.org/data/
下,并将文件夹名重命名为
sift-flow
步骤4.预训练模型下载:
下载VGG16的预训练模型并放在FCN源码文件夹中的ilsvrc-nets文件夹下
https://pan.baidu.com/s/1qYJeFfQ
以个人路径为例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/ilsvrc-nets
步骤5.为了避免运行程序时候出现no module named caffe
在代码中包含import caffe的py文件(solve.py)的第一行加入
import sys
sys.path.append('/home/my/caffe-master/caffe-master/python')
sys.path.append('/home/my/caffe-master/caffe-master/python')
其中,
/home/my/caffe-master/caffe-master/python为你下载的caffe源码中python文件夹的路径
步骤6.cd进入fcn源码路径
以个人路径为例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master
将其中所有的py文件,例如surgery.py等等,全部复制到siftflow-fcn32s文件夹中
步骤7.solver.prototxt文件修改
进入siftflow-fcn32s文件夹 打开solver.prototxt
其中snapshot:10000 表示训练10000次保存一次模型
snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"
表示训练得到的模型,也就是model存放的路径
在此,我附上个人的solver.prototxt供大家参考
train_net: "trainval.prototxt"
test_net: "test.prototxt"
test_iter: 200
# make test net, but don't invoke it from the solver itself
test_interval: 999999999
display: 20
average_loss: 20
lr_policy: "fixed"
# lr for unnormalized softmax
base_lr: 1e-10
# high momentum
momentum: 0.99
# no gradient accumulation
iter_size: 1
max_iter: 300000
weight_decay: 0.0005
snapshot:10000
snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"
test_initialization: false
步骤8.solve.py文件修改
在这里郑重声明一下:如果训练fcn32s的网络模型,
一定要修改solve.py
利用transplant的方式获取vgg16的网络权重;
具体操作为