Caffe-Windows + FCN進行圖像語義分割

一:目的

利用上篇文章編譯好的python接口,採用FCN(Caffe版本)進行圖像分割;

二:圖像語義分割

1. 環境準備

(1) Caffe-Windows的python接口編譯,可參見上篇博文

(2) 下載FCN源碼。作者在github上開源了代碼,直接下載即可。下載完成後,將其解壓進caffe-windows目錄下,如下圖所示(在這裏我將其重名爲了fcn-master)。


(3)下載預訓練權重。進入caffe-windows\fcn-master\voc-fcn8s目錄,打開caffemodel-url文件,下載其中所對應的fcn8s-heavy-pascal.caffemodel,並將其放在caffe-windows\fcn-master\voc-fcn8s目錄下。同理分別在caffe-windows\fcn-master\voc-fcn16s和caffe-windows\fcn-master\voc-fcn32s目錄下下載對應的caffemodel。

2. voc-fcn8s測試

(1) 拷貝caffe-windows\fcn-master\infer.py進caffe-windows\fcn-master\voc-fcn8s文件夾,並重命名爲infer_fcn8s.py

(2) 修改infer_fcn8s.py爲如下

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

import caffe

# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
im = Image.open('data/tabby_cat.png')
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('data/tabby_cat_result.png')
#plt.show()
其中,主要修改了im路徑(測試圖像路徑),net(包括deploy.prototxt和caffemodel)和plt.savefig(結果圖像保存路徑)

在這裏,測試圖像用的是tabby_cat,如下所示

在命令行窗口中cd進caffe-windows\fcn-master\voc-fcn8s目錄,並輸入python1 infer_fcn8s.py(關於python接口編譯可以參見上一篇博文),運行結束後,會在caffe-windows\fcn-master\voc-fcn8s\data目錄下生成分割後的圖像,如下圖所示


3. voc-fcn16s和voc-fcn32s測試

這兩部分的測試與voc-fcn8s基本相同,唯一的區別是在caffe-windows\fcn-master\voc-fcn16s和caffe-windows\fcn-master\voc-fcn32s文件夾下,並沒有deploy.prototxt文件,我們可以通過改寫train.prototxt文件的方式得到deploy.prototxt。

在改寫train.prototxt得到train.prototxt的過程中,需要修改的地方有以下三個

(1) 修改輸入層


(2) 去掉dropout層

(3)去掉最後一層

如果覺得麻煩,可以下載我生成好的deploy.prototxt文件,鏈接:https://pan.baidu.com/s/1bpVvSF9 密碼:kb9y

測試完成後,按照上述步驟運行,即可得到分割後的圖像。

4. 對比

(1)voc-fcn32s結果

(2)voc-fcn16s結果


(3) voc-fcn8s結果


可以看出來,上採樣方式的不同,對結果造成的影響還是挺明顯的!

finished! enjoy!


參考:

caffe初步實踐---------使用訓練好的模型完成語義分割任務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章