您的位置:首页 > Web前端

Caffe-Windows + FCN进行图像语义分割

2018-01-24 23:15 1156 查看


一:目的

利用上篇文章编译好的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初步实践---------使用训练好的模型完成语义分割任务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息