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!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM