标签:
下面开始正题,caffe的安装过程。因为出问题很多,所以实际上我是尝试了python2和python3两种python的接口。下面一并放出来。sudo apt-get install build-essential这个是一些基本的库,具体包括哪些,安装前确认时会显示,印象中有gcc等等。
sudo apt-get install libboost1.55-all-dev关于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版本不匹配。
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
./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,所以最好在安装前先查一下。万一有,怎么干净的卸载,这个我真不清楚。
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进去后是什么,如果不修改su的bashrc,那么直接python进去的是2.7.6。可以直接从username下的bashrc中把anaconda的路径配置copy过去。
Import google.protobuf from google.protobuf.internal importenum_type_wrapper
sudo apt-get install libhdf5-serial-devanaconda自己自带hdf5,不需要安装,但是需要注意配置。在makefileconfig中,要把anaconda的lib和include加入路径配置当中,所以在make的时候,会依照该配置寻找anaconda中的动态链接库文件libhdf5.so.10,但是系统找不到,怎么办呢?这里有两种解决办法。
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
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/然后,似乎是可以的。
sudo apt-get install libopencv-dev
sudo apt-get install libleveldb-devlibsnappy-dev sudo apt-get install libatlas-base-dev sudo apt-get install libgflags-devlibgoogle-glog-dev liblmdb-dev这些似乎都不会出太大问题。
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。
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'需要选择版本的话记得加引号。
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的库。
make make test make runtest make pycaffe make pytest如果测试都通过,那就没问题了。注意配置文件里面有一个
WITH_PYTHON_LAYER := 1如果这句的注释去掉就不能pytest了。记得googlegroup上有人这么说过。
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,严重误导了我……
import caffe如果不报错也别急着高兴
from caffe import layers as L如果这句也不报错,那应该是不会有问题了。
标签:
原文地址:http://blog.csdn.net/donatellobzero/article/details/51304162