未加星标

Caffe初步实践――使用训练好的模型完成语义分割任务

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

Caffe刚刚安装配置结束,乘热打铁!

(一)环境准备

前面我有两篇文章写到caffe的搭建,第一篇cpu only ,第二篇是在服务器上搭建的,其中第二篇因为硬件环境更佳我们的步骤稍显复杂。其实,第二篇也仅仅是caffe的初步搭建完成,还没有编译python接口,那么下面我们一起搞定吧!

首先请读者再回过头去看我的《 Ubuntu 16.04安装配置Caffe 》( http://www.linuxidc.com/Linux/2016-12/138870.htm )

在这篇博文的结尾,我们再增加 编译 Python 接口 ,而这部分内容请参考我的博文《Ubuntu14.04搭建Caffe(仅cpu) 》 http://www.codesec.net/Linux/2016-09/135034.htm ,这篇文章从编译Python接口部分看就好了。

(二)下载模型

作者在github上开源了代码: Fully Convolutional Networks ,我们首先将代码下载并且解压到家目录下。

项目文件结构很清晰,如果想train自己的model,只需要修改一些文件路径设置即可,这里我们应用已经train好的model来测试一下自己的图片:

我们下载voc-fcn32s,voc-fcn16s以及voc-fcn8s的caffemodel(根据提供好的caffemodel-url),fcn-16s和fcn32s都是缺少deploy.prototxt的,我们根据train.prototxt稍加修改即可。注意,这里的caffemode-url其实在各个模型的文件夹下面都已经提供给我们了,请读者细心找一找,看看是不是每一个文件夹下面都有一个caffemode-url的文件?打开里面会有模型的下载地址!

(三)修改infer.py文件

caffe path的加入,由于FCN代码和caffe代码是独立的文件夹,因此,须将caffe的Python接口加入到path中去。这里有两种方案,一种是在所有代码中出现 import caffe 之前,加入:
1 import sys
2 sys.path.append('caffe根目录/python')
另一种一劳永逸的方法是:在终端或者bashrc中将接口加入到 PYTHONPATH 中:
export PYTHONPATH=caffe根目录/python:$PYTHONPATH

本次我们采用后者。

在解压代码的根目录下找到一个文件:infer.py。略微修改infer.py,就可以测试我们自己的图片了,请大家根据自己实际情况来进行修改。

im = Image.open( ' voc-fcn8s/test.jpeg ' ) 这里指的是测试图片路径!

net = caffe.Net( ' voc-fcn8s/deploy.prototxt ' , ' voc-fcn8s/fcn8s-heavy-pascal.caffemodel ' , caffe.TEST) ,这里指的是voc-fcn8s文件下的部署文件和模型。注意,fcn下每一个模型其实都对应于一个文件夹,而每个文件夹下应当放着这个模型的caffemodel文件和prototxt文件!

plt.savefig( ' test.png ' ) ,这里指的是最终分割的结果应当放置在哪个路径下,大家都知道,语义分割的结果应当是一张图片!

修改完后的infer.py如下所示:


1 import numpy as np
2 from PIL import Image
3 import matplotlib.pyplot as plt
4 import caffe
5
6 # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
7 im = Image.open('voc-fcn8s/test.jpeg')
8 in_ = np.array(im, dtype=np.float32)
9 in_ = in_[:,:,::-1]
10 in_ -= np.array((104.00698793,116.66876762,122.67891434))
11 in_ = in_.transpose((2,0,1))
12
13 # load net
14 net = caffe.Net('voc-fcn8s/deploy.prototxt', 'voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST)
15 # shape for input (data blob is N x C x H x W), set data
16 net.blobs['data'].reshape(1, *in_.shape)
17 net.blobs['data'].data[...] = in_
18 # run net and take argmax for prediction
19 net.forward()
20 out = net.blobs['score'].data[0].argmax(axis=0)
21
22 plt.imshow(out,cmap='gray');
23 plt.axis('off')
24 plt.savefig('test.png')
25 #plt.show()
Caffe初步实践――使用训练好的模型完成语义分割任务

运行结束后会在软件的根目录下生成一个分割好的图片test.png!


Caffe初步实践――使用训练好的模型完成语义分割任务

我们可以看一下原始图片和最后生成的图片的区别:


Caffe初步实践――使用训练好的模型完成语义分割任务
Caffe初步实践――使用训练好的模型完成语义分割任务

可能会遇到的问题:

(1)no display name and no $DISPLAY environment variable

其实,在Ubuntu虚拟终端里执行python infer.py是没有任何错误的,但是我是通过远程访问连接服务器的方式运行程序的。所以在执行到最后的时候会报这个错。不过不要害怕,

在stackoverflow中找到了终极解决办法:


Caffe初步实践――使用训练好的模型完成语义分割任务

如图中所示的步骤,找到matplotlibrc,将backend从tkAGG修改为AGG。


sudo gedit /home/xuanxufeng/.local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
Caffe初步实践――使用训练好的模型完成语义分割任务

再次在putty中执行就没有任何问题了!

(2)在执行python infer.py时可能会提示缺少某一两个模块。

这个不用担心,都是小问题,百度很容易搜到,一两个命令安装就好了~

(四) 结束语

从开始读论文到现在,也算是前进了一小步,可以看见的一小步。在往后,随着实验的一步步进行,我还会再更新模型的训练以及训练数据集的制作!请各位看官耐心等待!

Caffe 深度学习入门教程 http://www.codesec.net/Linux/2016-11/136774.htm

Ubuntu 16.04 安装配置Caffe 图文详解 http://www.codesec.net/Linux/2016-12/138870.htm

Ubuntu 16.04下Matlab2014a+Anaconda2+OpenCV3.1+Caffe安装 http://www.codesec.net/Linux/2016-07/132860.htm

Ubuntu 16.04系统下CUDA7.5配置Caffe教程 http://www.codesec.net/Linux/2016-07/132859.htm

Caffe在Ubuntu 14.04 64bit 下的安装 http://www.codesec.net/Linux/2015-07/120449.htm

深度学习框架Caffe在Ubuntu下编译安装 http://www.codesec.net/Linux/2016-07/133225.htm

Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明 http://www.codesec.net/Linux/2015-04/116444.htm

Ubuntu 16.04上安装Caffe http://www.codesec.net/Linux/2016-08/134585.htm

Caffe配置简明教程 ( Ubuntu 14.04 / CUDA 7.5 / cuDNN 5.1 / OpenCV 3.1 ) http://www.codesec.net/Linux/2016-09/135016.htm

Ubuntu 16.04上安装Caffe(CPU only) http://www.codesec.net/Linux/2016-09/135034.htm

本文地址 : http://www.codesec.net/Linux/2017-01/139235.htm

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

分页:12
转载请注明
本文标题:Caffe初步实践――使用训练好的模型完成语义分割任务
本站链接:http://www.codesec.net/view/520519.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(78)