您的位置:首页 > 理论基础 > 计算机网络

语义分割-1:FCN全卷积网络的语义分割实现

2017-05-17 09:24 246 查看
论文:


Fully
convolutional networks for semantic segmentation

   链接:http://xueshu.baidu.com/swd=paperuri%3A%28c76cbf802fc633294315697571af911e%29&filter=sc_long_sign&sc_ks_para=q%3DFully%20convolutional%20networks%20for%20semantic%20segmentation&sc_us=15596225971582300052&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8

   由于条件限制,我的运行方式是caffe cpu模式。

        首先,你需要准备算法实现的基本文件,网上一般会有下载,在github上由公布的开源代码,你可以搜索一下,这里我只介绍一下我在实现过程中遇到的问题。在你下载的文件中,我实现的是voc-fcn8s,还有16s,32s,你可以查一下他们的区别,这是由于输入图片缩小32倍造成的,至于为什么缩小32倍,这是由于stride的步长设置引起的。

        在实现过程,需要修改的是infer.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('voc-fcn8s/images/1.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('voc-fcn8s/deploy.prototxt', 'voc-fcn8s/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('voc-fcn8s/images/test.png')

一般修改的地方图片获取路径,网络路径,以及最后的存储路径,

结果如下:


 


可以看出效果并不是很好,

我遇到的问题有:

1、出现×ptr host,,,我理解的意思是内存不够,于是我把需要分割的图片变小,这样就成功了,另外一个你也可以尝试将deploy.prototxt里面数据层中输入的尺寸由500x500改小一点,这样也会成功,多尝试一下。

2、有可能电脑会被卡住,这样也可以按照第一步修改。

3、有可能出现与caffe编译相关的问题,这就是caffe问题了,可以单纯去查caffe安装。

4、第一个问题中如果将图片调整的过小,有可能效果很差而且甚至出现检测不到,出来的效果全部是黑色的,所以还是建议如果用cpu做这个实验,配置还是高一些。

最后:

在语义分割方面,fcn全卷积应该是深度学习之后出现的最好的一个方法,但是仍旧不能满足需要,因此,后续还有很多方法。我们需要一个一个去尝试实现,看效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: