一:目的
利用上篇文章編譯好的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爲如下
其中,主要修改了im路徑(測試圖像路徑),net(包括deploy.prototxt和caffemodel)和plt.savefig(結果圖像保存路徑)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()
在這裏,測試圖像用的是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!
參考: