zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    Django(60)Django内置User模型源码分析及自定义User
    Django(59)验证和授权
    Django(58)viewsets视图集详解
    Django(57)Generic类视图
    正则表达式
    JMeter之检查点(JSON断言)
    JMeter之检查点(响应断言)
    JMeter之参数化(一)
    JMeter之一个简单的性能测试
    JMeter基础
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/8032334.html
Copyright © 2011-2022 走看看