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上面的两位网友,针对我的问题他们直接给出了很好的建议。

你可能感兴趣的:(python安装caffe)