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初步实践---------使用训练好的模型完成语义分割任务
相关文章推荐
- caffe随记(九)---利用FCN和已有的model进行图像语义分割
- windows下进行FCN图像训练分割
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- 使用FCN做图像语义分割(实践篇)
- Windows下caffe用fine-tuning训练好的caffemodel来进行图像分类
- Caffe的图像语义分割
- 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015
- 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015-未完待续
- 图像语义分割之FCN和CRF
- Caffe的图像语义分割
- 图像语义分割-FCN
- 图像语义分割之FCN和CRF
- K-means算法进行简单的图像"语义"分割,java
- 图像语义分割之FCN和CRF
- caffe下用FCN做图像分割,如何制作训练集?
- 图像语义分割之FCN和CRF
- 图像语义分割(1)- FCN
- 图像语义分割之FCN和CRF
- 使用FCN做图像语义分割
- Recorder︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)