FCN語義分割初探——使用訓練好的模型進行分割
阿新 • • 發佈:2019-01-04
前言
由於課題的需要,最近開始研究FCN語義分割,這幾天將環境搭建好了立即測試了一下,這裡分享出來與大家進行分享。
1. 準備
1.1 執行環境
這裡使用到的環境是Ubuntu下PyCaffe,具體的環境搭建大家可以參考我的這篇部落格進行環境搭架。Ubuntu16.04下安裝Caffe記錄(GPU)
這裡使用到的FCN語義分割原始碼可以從Github上進行下載,fcn.berkeleyvision.org,本次實驗使用到的是fcn8s-heavy-pascal.caffemodel。具體的網址的在該資料夾下的caffemodel-url中,複製裡面的內容迅雷下載就好了,檔案大概500多M
2. 執行
這次使用的到主要為infer.py這個檔案,這裡直接給出內容
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import sys
sys.path.append('/home/sucker/Desktop/caffe-1.0/python')
sys.path.append('/home/sucker/Desktop/caffe-1.0/python/caffe')
sys.path.append('/home/sucker/Desktop/caffe-1.0/build/lib')
import caffe
#注意我這裡沒有將Pycaffe的目錄匯入到環境變數裡面,直接新增的目錄
# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
im = Image.open('timg.jpeg')#網上找的測試圖片
in_ = np.array(im, dtype=np.float32)
in_ = in_[:,:,::-1]
in_ -= np.array((104.00698793,116.66876762,122.67891434))
in_ = in_.transpose((2,0,1))
# load net
net = caffe.Net('deploy.prototxt', 'fcn8s-heavy-pascal.caffemodel' , caffe.TEST)
# shape for input (data blob is N x C x H x W), set data
net.blobs['data'].reshape(1, *in_.shape)
net.blobs['data'].data[...] = in_
# run net and take argmax for prediction
net.forward()
out = net.blobs['score'].data[0].argmax(axis=0)
plt.imshow(out,cmap='gray');
plt.axis('off')
plt.savefig('test1.png')
修改好之後,就開始進行測試,在infer.py目錄下輸入
python infer.py
執行完成之後就可以看到,分隔好的影象了