linux跑caffe模型的步骤,Caffe初步实践——使用训练好的模型完成语义分割任务

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

(一)环境准备

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

在这篇博文的结尾,我们再增加编译Python接口,而这部分内容请参考我的博文《 Ubuntu14.04搭建Caffe(仅cpu) 》http://www.linuxidc.com/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 importsys2 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 importnumpy as np2 from PIL importImage3 importmatplotlib.pyplot as plt4 importcaffe5

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()

e43eb6e001850b8eec609ff95c11569a.png

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

ce40bf10311d78cb0af8e785f60bf41a.png

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

f41d0b299e3ce70fd8812ba7c8e8a869.png

a3ceac9d6a2880b8263053ff256c8f22.png

可能会遇到的问题:

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

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

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

f156ee3566de89e07fdc1a66bfcad9e7.png

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

sudo gedit /home/xuanxufeng/.local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc

7fd15e31f132bf05cd5abc05fd98973d.png

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

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

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

(四) 结束语

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

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

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

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 Code First

第一感觉还是很新鲜的,你可以自由的控制数据结构。 比如,你想象oracle那样,给每个表增加4个字段,创建人,创建时间,更新人,更新时间。完全可以创建一个父类包含着四个属性(甚至可以把…

灵悟礼品网上专卖店——新建数据库

一、小组成员: 洪雪意(产品负责人) 陈淑筠(Master) 二、组内人员任务情况 计划完成的任务的第三个模块:分析并建立数据库 已完成的任务: 任务的第三个模块: 陈淑筠(负责…

操作系统上机题目(多进程1)

1、创建1个子进程2、程通过管道与子进程连接 子进程的标准输出连接到管道的写端主进程的标准输入连接到管道的读端3、进程中调用exec(“echo”, “echo”, “hello world”, NULL)4、进程中调用read(0, buf, sizeof(buf)),从标准输入中获取子进程发送的字符串&…

Oracle数据库dmp文件Dos命令下导入导出

Oracle数据库dmp文件Dos命令下导入导出 2013-03-09 18:22:52| 分类: Oracle |举报|字号 订阅 数据导出: 一. 导出工具exp 他是操作系统下一个可执行的文件,存放目录/Oracle_Home/bin. exp导出工具将数据库中数据备份压缩成一个二进制系统文件,可以在不同的OS间迁…

c语言报错找不到标识符,error C3861: “_T”: 找不到标识符

头天好好的程序,第二天一早就报错,还是莫名其妙的错误:atlconv.h等头文件中的“_T” 报错,百思不得其解,各种搜索而不得,整个人都崩溃了。出问题一定是有原因的,后来冷静下来,缕缕思…

js 面向对象插件写法,还是很好理解的

/** * Created by jiangtao on 2015/5/12. * name jihe */(function () { function gather(msg) { //适应参数 if (msg) { if (msg.imgFile ! undefined) { this.imgFile msg.imgFile; }; if (msg.wechatAppid ! undefined) { this.wechatAppid msg.wechatAppid; }; }; this.…

操作系统上机题目(多进程2)

1、主进程创建2个子进程,主进程通过两个管道分别与两个子进程连接2、第一个子进程计算从1加到50的和,并将结果通过管道送给父进程3、第一个子进程计算从50加到100的和,并将结果通过管道送给父进程4、父进程读取两个子进程的结果,将…

JavaScript 的简介

JavaScript 是一种基于对象和事件驱动的脚本语言。JavaScript和HTML一起实现网页与客户端的交互,从而可以开发客户端的应用程序。JavaScript是通过潜入在标准的HTML文件中实现的,可以直接控制浏览器窗口个元素以及页面内容。JavaScript一个重要的功能就是…

c语言大乐透编译,Excel大乐透摇号vba代码分享,说不定就中百万了呢

大家好我是Excel从零到一,今天闲来无聊做了一套大乐透摇号程序的vba代码分享给大家来看下效果Excel大乐透摇号vba代码分享,说不定就中百万了呢Sub 摇号()Dim i, a, test, s(1 To 35) As IntegerFor i 1 To 5line1: test Application.WorksheetFunction…

操作系统上机题目(多线程1)

主线程创建10个子线程 第0个子线程计算从01加到10的和 - 第1个子线程计算从11加到20的和 … 第9个子线程计算从91加到100的和 2. 主线程归并10个子线程的计算结果&#xff0c;最终结果为5050 本题必须使用线程参数来完成 #include<stdio.h> #include<unistd.h> #i…

纸上谈兵: 堆 (heap)

纸上谈兵: 堆 (heap) 作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 堆(heap)又被为优先队列(priority queue)。尽管名为优先队列&#xff0c;但堆并不是队列。回忆一下&#xff0c;在队列中&a…

C语言 取模运算 保证正数,c语言的取模运算

我们对C的%运算知多少呢&#xff1f;当是正整数时&#xff0c;可能大家都知道。例如&#xff1a;5%3等于2, 3%5等于3。当存在负数时呢&#xff1f;先看看例子&#xff1a;例一&#xff1a;int main(){int x;x -6%5; printf("%2d/n",x);x 6%-5; printf("%2d/n&…

操作系统上机题目(多线程2)

主线程创建4个子线程T1、T2、T3、T4&#xff0c;主线程在4个子线程退出后&#xff0c;才退出线程T1、T2、T3、T4的运行时代码如下&#xff1a; #include <unistd.h> // sleep函数声明在该头文件中void *T1_entry(void *arg) {sleep(2); // 睡眠2秒&#xff0c;不准删除…

图形GUI名称

15句柄图形(Handle Graphics)15.1图形窗的产生和控制(Figure window creation and control)clf 清除当前图close 关闭图形figure 打开或创建图形窗口gcf 获得当前图的柄openfig 打开图形refresh 刷新图形shg 显示图形窗15.2轴的产生和控制(Axis creation and control)axes 在任…

c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程.doc

c语言计算机编程三种方法求解非线性方程.doc本 科 专 业 学 年 论 文题 目非线性方程求解比较姓 名 何 娟 专 业 计算机科学技术系 班 级 08 级本科(2)班 指 导 老 师 刘 晓 娜 完成日期 2010 年 11 月 21 日计算机学年专业论文 非线性方程求解- 1 -题 目非线性方程求解比较摘 …

最近用到这个强大的工具 PhysicsEditor (转)

今天收到PhysicsEditor作者发过来的license key&#xff0c;所以顺便把PhysicsEditor也尝试了一下。主要是尝试将PhysicsEditor与cocos2dx&#xff0c;box2d结合开发的一些步骤。之前大概网络检索了一下&#xff0c;知道PhysicsEditor的功能其实很简单。一句话就是给图片的边缘…

浅谈块级元素和内联元素的嵌套规则

1. 替换和不可替换元素 从元素本身的特点来讲&#xff0c;可以分为替换和不可替换元素。 a) 替换元素 替换元素就是浏览器根据元素的标签和属性&#xff0c;来决定元素的具体显示内容。 例如浏览器会根据<img>标签的src属性的值来读取图片信息并显示出来&#xff0c;而如…

如何更新Chrome

在浏览器的地址栏中输入chrome://help即可进行自动更新&#xff0c;如下图&#xff1a;

c语言用指针实现打开和关闭文件,我用rewind函数没把指针直到开始,关闭文件然后打开就行。帮忙看看...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼高手啊&#xff0c;我试了&#xff0c;结果是回到文件头了&#xff0c;把123覆盖了&#xff0c;为ABC 但我这个程序就能直接不关闭文件而用rewind函数到开头&#xff0c;你帮忙看看&#xff0c; //二进制文件的输入输出--数据块的读…

最佳适应算法模拟内存分配

最佳适应算法 从全部空闲区中找出能满足作业要求的&#xff0c;且大小最小的空闲分区&#xff0c;这种方法能使碎片尽量小。 问题描述 Given five memory partitions of 100 KB, 500 KB, 200 KB, 300 KB, and 600 KB (in order), how would each of the first-fit, best-fit…