1. 程式人生 > >FCN語義分割初探——使用訓練好的模型進行分割

FCN語義分割初探——使用訓練好的模型進行分割

前言

由於課題的需要,最近開始研究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

執行完成之後就可以看到,分隔好的影象了
原始影象
分割好的影象