FCN小小实战

Posted Ariel_一只猫的旅行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FCN小小实战相关的知识,希望对你有一定的参考价值。

先说一下前期准备工作:自己的运行环境是Ubuntu16.04+caffe+CPU(这台电脑没有GPU)+python

关于python的搭建就不说了,网上随便一搜,很多参考资源。说一下我配置好caffe之后,编译python接口时遇到的问题,以及我用到的解决办法。

比较顺利地配置好caffe只后,到了make pycaffe的时候,提示如下错误:

后来执行:~/caffe$ locate pyconfig.h

找到头文件pyconfig.h

下面是一步至关重要的操作:~/caffe$export CPLUS_INCLUDE_PATH=/usr/include/python2.7

就是这一步,我的问题完美解决。看一下编译成功的场景:

import caffe成功!

接下来就可以跑一下FCN了,由于本台电脑条件有限,直接使用大神已经跑好的模型进行测试,要这台电脑去跑此模型,有点费时。

OK,下面进入测试操作:

作者在github上开源了代码:Fully Convolutional Networks,我们首先将代码下载并且解压到home目录下。

下载voc-fcn32s,voc-fcn16s以及voc-fcn8s的caffemodel(根据提供好的caffemodel-url),fcn-16s和fcn32s都是缺少deploy.prototxt的,需要根据train.prototxt稍加修改。 

后续步骤:

修改infer.py文件:

  • caffe path的加入,由于FCN代码和caffe代码是独立的文件夹,因此,须将caffe的Python接口加入到path中去。这里有两种方案,一种是在所有代码中出现import caffe 之前,加入:
    1 import sys
    2 sys.path.append(\'caffe根目录/python\')
  • 另一种一劳永逸的方法是:在终端或者bashrc中将接口加入到PYTHONPATH中:  export PYTHONPATH=caffe根目录/python:$PYTHONPATH

本次我们采用后者。

 在解压代码的根目录下找到一个文件:infer.py。略微修改infer.py,就可以测试我们自己的图片了,请大家根据自己实际情况来进行修改。

im = Image.open(\'voc-fcn8s/test.jpeg\') 这里指的是测试图片路径!

net = caffe.Net(\'voc-fcn8s/deploy.prototxt\', \'voc-fcn8s/fcn8s-heavy-pascal.caffemodel\', caffe.TEST) ,这里指的是voc-fcn8s文件下的部署文件和模型。

注意,fcn下每一个模型其实都对应于一个文件夹,而每个文件夹下应当放着这个模型的caffemodel文件和prototxt文件!

plt.savefig(\'test.png\'),这里指的是最终分割的结果应当放置在哪个路径下,大家都知道,语义分割的结果应当是一张图片!

修改完后的infer.py如下所示:

 1 import numpy as np
 2 from PIL import Image
 3 import matplotlib.pyplot as plt
 4 import caffe
 5 
 6 # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
 7 im = Image.open(\'voc-fcn8s/test.jpeg\')
 8 in_ = np.array(im, dtype=np.float32)
 9 in_ = in_[:,:,::-1]
10 in_ -= np.array((104.00698793,116.66876762,122.67891434))
11 in_ = in_.transpose((2,0,1))
12 
13 # load net
14 net = caffe.Net(\'voc-fcn8s/deploy.prototxt\', \'voc-fcn8s/fcn8s-heavy-pascal.caffemodel\', caffe.TEST)
15 # shape for input (data blob is N x C x H x W), set data
16 net.blobs[\'data\'].reshape(1, *in_.shape)
17 net.blobs[\'data\'].data[...] = in_
18 # run net and take argmax for prediction
19 net.forward()
20 out = net.blobs[\'score\'].data[0].argmax(axis=0) 
21 
22 plt.imshow(out,cmap=\'gray\');
23 plt.axis(\'off\')
24 plt.savefig(\'test.png\')
25 #plt.show()

然后终端运行:python infer.py

运行结束后会在软件的根目录下生成一个分割好的图片test.png!

 

以上是关于FCN小小实战的主要内容,如果未能解决你的问题,请参考以下文章

全卷积网络(FCN)实战:使用FCN实现语义分割

全卷积网络(FCN)实战:使用FCN实现语义分割

全卷积网络(FCN)实战:使用FCN实现语义分割

FCN代码解析

基于深度学习的语义分割初探FCN以及pytorch代码实现

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例