python安装caffe_Caffe安装笔记二:Caffe安装过程

下面开始正题,caffe的安装过程。因为出问题很多,所以实际上我是尝试了python2和python3两种python的接口。下面一并放出来。

1.安装build-essential

sudo apt-get install

build-essential

这个是一些基本的库,具体包括哪些,安装前确认时会显示,印象中有gcc等等。

2. boost安装

caffe官网给出的是sudo apt-get install

--no-install-recommends libboost-all-dev

我不知道他特意加个--no-install-recommends干啥。另外,在installation主页上标明了Boost>=1.55,但是如果用上面那条命令的话,默认装上的是1.54。我现在还不能完全确定1.54是不是不行,但是为了保险起见,请使用

sudo apt-get install libboost1.55-all-dev

关于boost在makefile.config中的配置,这是个坑,下面详细讲讲。

2.1. python2/Anaconda2

对于python2,只要执行完上面的安装就可以了,makefile中的配置项无需做特别设置。

2.2. python3/Anaconda3

对于python3,boost安装方面没啥要留意的。需要特别注意的是makefile.config中,有一行

# Uncomment to use Python 3 (default isPython

2)

PYTHON_LIBRARIES := boost_python-py34python3.5m

这一项很有迷惑性,而且我也迷糊了很久,因为相关有一项是PYTHON_LIB,一开始我以为是相同的重复项。但是如果这句stay

comment的话,make

caffe和pycaffe都能成功通过,但是使用时却会报错:

ImportError:

/home/zero/Documents/caffe-master/python/caffe/_caffe.so:undefined

symbol:

_ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

这个错误的意思是,boost版本不匹配。

boost.python是啥东西呢?我理解的是boost.python是一个类似翻译器的东西,所以如果你是python3的程序,却用了python2的翻译器,那语法、定义等等各方面必然会有冲突。我记得在某篇帖子中看到过,str、int等等的定义,在两者中是不同的,所以有时会有报错信息说找不到str啦int啦之类。当时没有把没一个错误都记下来。

然后,如果我们去makefile中查找这个变量PYTHON_LIBRARIES,会发现有这么一句:

PYTHON_LIBRARIES ?= boost_python python2.7

这句的意思是说,如果不出意外,使用的是2版本的python和boost.python。但是这里有个问题,如果把makefile.config里面那句uncomment,原来默认的是"PYTHON_LIBRARIES

:=boost_python3 python3.5m

",直接去掉的话会报错说找不到

-lboost_python3

。这里我无法解释原理,但是去/usr/lib/x86_64-linux-gnu/文件夹下面去找找,你会找到属于python3的boost版本,可能是33,也可能是34。确定后,把makefile中的名称换成相应名称就可以了。3.5m

的,我不了解为何要加m。修改后应该是:

PYTHON_LIBRARIES := boost_python-py34python3.5m

3. protobuf安装

protobuf官方产品默认是不支持python3的,所以通过默认的apt-get命令安装的libprotobuf和protobuf

complier仅适用于python2系列。

而对于python3,以前支持python3的是民间组织搞的一个protobuf-py3,似乎是基于2.5的一个改货。但是现在下不到了。试过pip3-protobuf,当时也不行。但是现在想来,我或许是之前装过protobuf2.5没卸载干净的关系,如果有兴趣的话,倒是可以试试pip3的方式。不过我这里还是建议手动安装。

有人在帖子中说protobuf-3.0.0

-alpha有问题,我试过也确实不行,但是当时尝试的环境依然是

protobuf2

没卸干净,所以到底alpha行不行,这里说不好,不过我确定beta是可以的,所以我们直接去下载protobuf-3.0.0-beta-2。注意分别下载cpp和python两个版本的。

https://github.com/google/protobuf/releases

解压后

./configure

--prefix=/path/protobuf

(这里指定的路径可以是任意)

make

make check

make install

然后配置路径,将protobuf下的lib和include加入makefile.config,同时,protobuf要加入bashrc里面。

export PATH=$PATH:/path/protobuf/bin

export

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/protobuf/lib

然后protoc–version查看版本是否正确。如果显示的是protoc2.5.0

,那是有问题的。我曾经执行apt-get

installlibprotobuf-dev,后来又purge卸载,但是执行protoc

--version后还是能看到2.5.0的信息。如果是默认系统执行命令后会提示没有protobuf,所以最好在安装前先查一下。万一有,怎么干净的卸载,这个我真不清楚。

关于系统权限问题

这里讲一下系统权限的问题,初入手ubuntu很容易迷糊,username账户、sudo、su这是三个不同的东西。bashrc配置过的路径仅针对username账户有效,怎么样能够全局有效?理论是是修改/etc/profile,但是实际测试过不太好用。sudo的权限是不同于su账户的,所以下一步安装python依赖我宁愿用su也不要用sudo。理论上修改sudo的配置文件/etc/sudoers就能够达到不清除用户账户环境配置的效果,但是实测无效。

然后是pip,系统关联anaconda3之后,默认pip是anaconda的pip,但是如果你执行sudo

pip的话执行的是系统默认python2的pip,这些地方一定要注意。所以后面很多路径配置后,执行sudo命令会提示找不到这个那个,原因是在做环境变量配置时仅针对当前用户做了配置。

另外有网优提到过,在caffemake的时候不要用sudo,不然后面会把部分文件加入权限限制,导致在make

pycaffe的时候出问题。

解压protobuf的Python版本,进入目录后

cd Documents/pyprotobuf/protobuf-3.0.0

-beta-2/python

python setup.py build

python setup.py test

python setup.py install

最后一步需要sudo或者su权限。我们还是把su也配置好anaconda,然后进入su账户执行安装。

这里一定要注意python的版本问题,如果装了anaconda3,那么username账户下面python进去后是3.5.1

,这时一定要注意,测试下su账户下python进去后是什么,如果不修改bashrc,那么进去后是2.7.6。可以直接从username下的bashrc中把anaconda的路径配置copy过去。

安装完python的protobuf后,进入python进行测试:

Import google.protobuf

from google.protobuf.internal

importenum_type_wrapper

3. hdf5

python2/3下照常安装就好,应该没什么太大问题。

sudo apt-get install libhdf5-serial-dev

anaconda自己自带hdf5,不需要安装,但是需要注意配置。在makefileconfig中,要把anaconda的lib和include加入路径配置当中,所以在make的时候,会依照该配置寻找anaconda中的动态链接库文件libhdf5.so.10,但是系统找不到,怎么办呢?这里有两种解决办法。

一种是在bashrc中加入anaconda的lib路径:

LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH

exportLD_LIBRARY_PATH

但是这样会引发别的问题,make时,opencv方面会报错,

undefined reference

toTIFFRGBAImageOK@LIBTIFF_4.0'

按照晋倪的文章,这就需要手动安装opencv,并在配置时设置:

加上-DBUILD_TIFF=ON

但是我嫌麻烦,所以开辟新路径。

第二种方式就是对hdf本身动手脚,一种办法是在/usr/lib/x86_64-linux-gnu

文件夹下面找,看有libhdf5.so.x几,就把它链接为10,然后make时就找到啦。比如

sudo ln -s libhdf5.so.7 libhdf5.so.10

但是这不就是狸猫换太子?有网友说照着这个做,报错说libhdf5版本不对。所以可能9换7可以,10换8就不行。然后有个哥们比较逗的是,直接把so文件复制到/usr/lib/x86_64-linux-gnu文件夹下面,我试了下:

sudo cp

libhdf5_hl.so.10/usr/lib/x86_64-linux-gnu/

sudo cp libhdf5.so.10/usr/lib/x86_64-linux-gnu/

然后,似乎是可以的。

4. opencv

python2的我直接就禁用opencv了,所以有兴趣可以自己试试看。当时也是报错

undefined reference

toTIFFRGBAImageOK@LIBTIFF_4.0'

可能对于python2/3,真的要手动安装。

对于anaconda,直接照常安装就行了。

sudo apt-get install libopencv-dev

5.其他

sudo apt-get install

libleveldb-devlibsnappy-dev

sudo apt-get install libatlas-base-dev

sudo apt-get install libgflags-devlibgoogle-glog-dev

liblmdb-dev

这些似乎都不会出太大问题。

6.安装python依赖库

anaconda用户可以跳过此步,这一步仅针对原生python而言。

首先安装一些必备的编译器:

sudo apt-get install gcc-gfortran.x86_64

sudo apt-get install gfortran

然后安装pip(针对python2):

sudo apt-get install python-pip

或者(针对python3):

sudo apt-get install python3-pip

使用的时候是pip或者pip3,分别针对两个版本的python。

然后执行caffe的python下面的requirements.txt中的模块安装。

官网给出的命令:

for req in $(catrequirements.txt); do pip install

$req; done

执行此命令需要su权限,你可以先进入su账户,如果不用su而用sudo的话则命令改为:

for req in $(cat requirements.txt); do sudopip3 install

$req; done

不过网上还是看到有人说不要用他的文档,自己一个一个装比较好。确实在安装过程中会有不能完全安装而留意不到的情况,所以最好手动安装,没装完一个看返回信息是否是安装成功。例如:

sudo pip3 install

'python-gflags>=2.0'

需要选择版本的话记得加引号。

7.安装caffe及配置makefile文件

先下载Caffe。github上下载好caffe库:https://github.com/BVLC/caffe,复制到ubuntu下,解压。然后按照官网说法修改config

cd /home/zero/Documents/caffe-master

cp Makefile.config.example Makefile.config

直接用gedit打开

CPU_ONLY := 1

#这句要去掉comment。因为我们只用cpu

# USE_OPENCV := 0

#不用opencv的话也可以去掉,不过最好留着吧。我是在python2下面实在懒才去掉的。

PYTHON_INCLUDE := /usr/include/python2.7 \

/usr/lib/python2.7/dist-packages/numpy/core/include

这两句,如果是要用python3或者anaconda,一概去掉,如果是原生python2.7,下面的要改为/usr/local/lib/python2.7/dist-packages/numpy/core/include

ANACONDA_HOME := /home/zero/anaconda3

PYTHON_INCLUDE := $(ANACONDA_HOME)/include\

$(ANACONDA_HOME)/include/python3.5m

\

$(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include\

注意是anaconda3,或者anaconda2,带了数字的

PYTHON_LIBRARIES := boost_python-py34python3.5m

这句前面讲过,boost版本的问题。

# PYTHON_LIB := /usr/lib

PYTHON_LIB := $(ANACONDA_HOME)/lib

默认就用上面的,anaconda就用下面的。

INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include

/usr/local/protobuf/include

LIBRARY_DIRS := $(PYTHON_LIB)/usr/local/lib /usr/lib

/usr/local/protobuf/lib

注意后面手动添加protobuf的库。

8. make

在caffe根目录下

make

make test

make runtest

make pycaffe

make pytest

如果测试都通过,那就没问题了。注意配置文件里面有一个

WITH_PYTHON_LAYER := 1

如果这句的注释去掉就不能pytest了。记得googlegroup上有人这么说过。

9.配置环境变量:

export PATH=$PATH:/usr/local/protobuf/bin

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

这两句是配置protobuf的,手动安装3beta2之后,要添加这两句,不然系统找不到你安装的protobuf。如果是2系列的不需要执行这一步。

# added by Anaconda34.0.0

installer

exportPATH="/home/zero/anaconda3/bin:$PATH"

上面这个是安装anaconda3的时候自动添加的,如果在问你要不要添加时你直接回车no了,那回头自己添上这一句。否则python进去的还是系统自带的python2。前面提到过,晋倪的文章中说建议

LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH

说如果不加就会进不去系统。我没遇到进不去系统的情况。反而是加了这两句会导致opencv的报错。

exportPYTHONPATH=/home/zero/Documents/caffe-master/python:$PYTHONPATH

最后这句是caffe的配置,有人居然说可以配置为caffe/build/python,严重误导了我……

10.验证

最后还是需要仔细验证一下,不然可能空欢喜一场

python进去后

import caffe

如果不报错也别急着高兴

from caffe import layers as L

如果这句也不报错,那应该是不会有问题了。

万一第一句成功了结果第二句没成功,可能是路径配错了,用dir(caffe)看看caffe都有些啥。我第一次海市蜃楼的时候只有

['__doc__', '__loader__', '__name__','__package__',

'__path__', '__spec__']。说明是有问题的。

最后

虽然自己极尽所能想要做到没有遗漏,但是由于caffe安装过程本身重复了太多次,每次错误都不同,我没有时间一一记录和呈现。万一有所疏漏,请及时指出。

关于参考资料,看了太多的博文,没办法一一列出,而且根本系统、环境的不同,操作方法也有太多的不一样。这里要感谢google

user group上面的两位网友,针对我的问题他们直接给出了很好的建议。

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

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

相关文章

vue编写to-do list源码

前端重于积累&#xff0c;下次使用不迷路。 纯vue代码 话不多说,直接上效果图: 源码附上: <template><div class"bgBody"><!-- 卡片--><el-row :gutter"12" ><el-col :span"8" ><el-card shadow"hov…

cenos6.4安装gvim

1. 下载gvim并解压 wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 tar -jxvf vim-7.4.tar.bz2 2. 进入解压后的vim74目录并运行配置命令 cd vim74 ./configure --enable-guiauto --enable-cscope --enable-multibyte --enable-xim --enable-fontset --with-featuresh…

vue积累——另一种走马灯

效果图: vue源码: <template><el-carousel :interval"1500" type"card" height"400px" ><el-carousel-item v-for"item in imgList" :key"item.id"><img :src"item.idView" class"im…

python下电影_Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法...

本文实例讲述了Python3.6实现根据电影名称(支持电视剧名称)&#xff0c;获取下载链接的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;做个笔记(python 3.6&#xff0c;django 2.0)def get_url(outer_order_id):refundId get_refundId(outer_order_id)host_url …

假设检验背后的逻辑

内容转自知乎相关问题答案&#xff0c;写的很清晰。 1. 概述逻辑&#xff1a; 全称命题只能被否证而不能被证明。这个道理很简单&#xff0c;个案当然不足以证明一个全称命题&#xff0c;但是却可以否定全称命题。 研究时&#xff0c;我们当然不希望否证自己的研究假设&#xf…

Arduino上U8g2库自制中文库

U8g2最新版的本身自带中文库&#xff0c;之所以需要自制&#xff0c;是为了减小内存&#xff1b; 文章最后会标一下u8g2自带的中文库不过有些板子不能用gb2312等大字体&#xff1b; 字体库需要的是需要的是下面的这种编码&#xff0c;而实现这种编码&#xff0c;就需要map文件…

数据库创建(利用写好的数据库表生成创建表的sql语句+利用生成的数据库创建表加同步数据sql)

一.利用写好的数据库表生成创建表的sql语句 1.简单创建一个数据库&#xff0c;并建一个表&#xff0c;并编辑数据。 a.建库 b.建表 c.编辑表&#xff0c;保存时输入表名 d.刷新一下&#xff0c;出来了 e.转存导出sql文件。 二.利用生成的数据库创建表加同步数据sql。…

汽车行业会用到python吗_无人驾驶是未来5年最具竞争行业,会python就能拿高薪!...

今天&#xff0c;无论是在硅谷还是在 BAT &#xff0c;无人驾驶技术的发展都已经势不可挡。在不久的将来&#xff0c;个人交通出行的主要方式将是成批的无人驾驶车&#xff0c;极大提升道路安全。而目前&#xff0c;无人驾驶领域的职位需求已经开始快速增长。根据腾讯研究院与 …

链表反转python

def reverse_node_list(head):if not head or not head.next:return headprev Nonewhile head:curr headhead head.nextcurr.next prevprev currreturn prev 设置三个指针&#xff0c; prev指向前一个节点&#xff0c; head 指向现在的节点&#xff0c; curr指向下一个要去…

字符串之字符判断以及字母的大小写转换

char c //给定字符c 1.isalpha© //判断是否是字母 2.isdigit© //判断是否是数字 3.islower© //判断是否是小写字母 4.isupper© //判断是否是大写字母 5.tolower© //转变成小写字母 6.touper© //转变成代写字母 至于说应用&#xff0c;看代码悟吧…

symfony api 错误响应_Postman for Mac(API管理开发软件)

Postman for Mac是一款可在Mac端运行的API管理开发软件&#xff0c;postman 下载 mac不仅可以调试简单的css、html、脚本等简单的网页基本信息&#xff0c;它还可以发送几乎所有类型的HTTP请求&#xff0c;用户可以利用Chrome插件的形式把各种模拟用户HTTP请求的数据发送到服务…

前端学习

学习整理了web缓存的一些策略&#xff0c;如有不正确的地方&#xff0c;欢迎指正。 浏览器端的缓存规则 对于浏览器端的缓存来讲&#xff0c;这些规则是在HTTP协议头和HTML页面的Meta标签中定义的。他们分别从新鲜度和校验值两个维度来规定浏览器是否可以直接使用缓存中的副本&…

string的反转输出以及char型字符串的反转输出

string str; //string型变量str char str1[]; //char型变量str string的反转输出: reverse(str.begin(),str.end()) char型的反转输出: strrev(str1); 实际应用看参考代码: #include<iostream> #include<bits/stdc.h> using namespace std; int main() {string s…

数据流图怎么画_概率图模型怎么画?5个步骤完成专业模型图

概率图模型是什么呢&#xff1f;概率图模型是用图形模式来表示各个变量概率相关关系以及与模型有关的变量的联合概率分布的一类模型。概率图理论可分为概率图模型表示理论、概率图模型推理理论和概率图模型学习理论三部分。概率图模型一般包括贝叶斯网络、马尔可夫网络和隐马尔…

res.status === 200含义

200本身就是http请求成功的响应值

process启动jar包判断成功_恒一广告助力2020年壹基金温暖包安康发放启动仪式成功举办...

有爱的冬天不会冷11月28日上午&#xff0c;由共青团安康市委、安康市教育体育局、安康市民政局、安康市关心下一代组委会、安康广播电视台、安康义工联合会主办的“壹家人温暖安康共青团助力脱贫攻坚暖冬行动”暨2020年壹基金温暖包安康发放启动仪式在安康市金州体育场成功举办…

pat(基本编程题集)6-2 多项式求值 (15 分)

这道题感觉有点狗&#xff0c;不难&#xff0c;但是第一次做的时候&#xff0c;运行超时错误让我很不解&#xff0c;一共才10个数大的数组&#xff0c;最坏情况也不过是10*10的时间复杂度O&#xff08;1&#xff09;。 但是限制就是辣么严&#xff0c;这个单层循环的优化有些类…

python read()为什么返回少一个字符_python-熊猫read_excel(sheet name = None)返回字符串字典,而不是数据帧?...

pandas read_excel documentation说,指定sheet_name None应该返回“所有表作为DataFrames的字典”.但是,当我尝试像这样使用它时,我得到了一个字符串字典.target_file "C:\file_here.xlsx"data pd.read_excel(target_file)print(type(data))data pd.read_excel(t…

Zabbix Server设置主机监控

转载于:https://www.cnblogs.com/momenglin/p/8557447.html

C语言之double实数的自动四舍五入取整

之前学习C语言的时候一直没有注意到原来double类型的数据在C里通过取不同的小数位数&#xff0c;输出能够实现四舍六入。 指正: double型数据可以实现0到4的舍操作以及6到9的入操作&#xff0c; 在真值为5的时候&#xff0c;舍入并不确定。 这里通过一个案例&#xff0c;一看…