Ubuntu 16.04上用系统自带的python3.5.2安装Caffe(CPU only)

本文为第一次安装caffe,中间费尽曲折,故写下这篇博客让后人少走弯路,主要参考了以下链接:

博客:https://blog.csdn.net/muzilinxi90/article/details/53673184     muzilinxi90的博客

博客:https://www.linuxidc.com/Linux/2016-09/135034.htm 来源:Linux社区 作者:Linux

简书:https://www.jianshu.com/p/36badc9fbcc2

CAFFE官网安装指南页面: http://caffe.berkeleyvision.org/installation.html

系统:ubantu16.04
是否使用PYTHON API: 是, 目标是安装后CAFFE能作为PYTHON MODULE来使用
硬件: 低端笔记本, 只使用CPU模式
 
这是我安装的过程, 并非安装教程. 相同情况下可以参考, 能省下一些看文档的时间.
 
 
第一部分: 安装dependencies
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libhdf5-serial-dev
 
PYTHON需要3.5.2版本,这是操作系统本身已经安装好的. 输入python -V会显示当前的python版本。ubantu16.04自动安装python2.7和3.5.2两个版本,默认为2.7,需要自己修改终端使用的版本。

通过修改默认python解释器(建立指向python3.5的软连接)的方法修改默认python版本,见

但是还需要sudo apt-get install python-dev
 
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
(以上所有sudo apt-get在什么文件夹下输入都无所谓.)
 
然后把CAFFE的源代码下载下来: git clone https://github.com/BVLC/caffe.git
(当然没有安装GIT的得先安装一下)
下载完成之后,进入CAFFE文件夹, 进入里面的PYTHON文件夹,然后输入
for req in $(cat requirements.txt); do pip3 install $req; done
(PIP如果没有安装得先安装一下:sudo apt-get install python3-pip

如果是Python2.x可以直接使用如下命令

sudo apt-get install pip

这样安装的是pip2不支持Python3.x,可以使用如下命令安装pip3

sudo apt-get install python3-pip

)

然后,我们还要升级里面的包,需要升级的包是matplotlib。不然当你最后在python里面import caffe时,会出现以下的问题:

File "/usr/local/lib/python3.4/dist-packages/matplotlib/pyplot.py", line 37, in 
    from matplotlib.figure import Figure, figaspect
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py", line 40, in 
    from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/__init__.py", line 4, in 
    from ._subplots import *
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_subplots.py", line 10, in 
    from matplotlib.axes._axes import Axes
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_axes.py", line 24, in 
    import matplotlib.dates as _  # <-registers a date unit converter
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/dates.py", line 125, in 
    from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, SU, YEARLY,
  File "/usr/local/lib/python3.4/dist-packages/dateutil/rrule.py", line 55
    raise ValueError, "Can't create weekday with n == 0"
                    ^
SyntaxError: invalid syntax
使用pip3查看已安装包的版本:pip3 list
使用pip3更新包:pip3 install --upgrade 要升级的包名。
此处pip3 install --upgrade matplotlib

注意此处升级matplotlib库之后,版本没有变化,还是2.2.2,但是问题解决了,我也很无奈。。
 
第二部分: 安装CAFFE
到CAFFE文件夹, 使用模板写个Makefile.config. 具体就是先复制一下模板, 再改一些内容(我喜欢用EMACS).
cp Makefile.config.example Makefile.config
-因为CPU MODE, 所以在CPU_ONLY := 1前面的#要去掉.
-两个路径要改成这样:(添加后面的两个hdf5的路径, 否则编译时报hdf5错误)
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
 -这里加上注释:

# We need to be able to find Python.h and numpy/arrayobject.h.

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

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

这里去掉注释:

# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \

                /usr/lib/python3.5/dist-packages/numpy/core/include

(python2的PYTHON_LIBRARIES在makefile里已有,故makefile.config中没有)


本人后文make pycaffe报错:  python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录

发现/usr/lib下没有numpy,使用如下命令安装numpy:

pip3 install numpy

将上面路径改为:

PYTHON_INCLUDE := /usr/include/python3.5m \

                /home/jason/.local/lib/python3.5/site-packages/numpy/core/include

重新make pycaffe,报错: /usr/bin/ld: 找不到 -lboost_python3

(有人使用sudo apt-get install python-numpy安装numpy成功,路径应该有所差异,可能更好些

https://blog.csdn.net/shomy_liu/article/details/48543449)

/usr/lib/x86_64-linux-gnu/文件夹下面去找找,你会找到属于python3boost版本,可能是34,也可能是35。确定后,把makefile中的名称换成相应名称就可以了。3.5m的,我不了解为何要加m。修改后应该是:

PYTHON_LIBRARIES := boost_python-py35 python3.5m

之后make pycaffe成功。


注:本文未使用anaconda进行配置,是因为用anaconda安装了python3.5.2后,/usr/lib/x86_64-linux-gnu/文件夹内就只有python2对应的boost_python,没有python3对应的,python3对应的boost_python在anaconda中。报错:找不到××boost。修改如下的PYTHON_LIB也不成功,路径没错就是到不了:

# We need to be able to find libpythonX.X.so or .dylib.

PYTHON_LIB := /usr/lib
# PYTHON_LIB := $(ANACONDA_HOME)/lib


之后就是编译:
make pycaffe
make all
make test

make runtest

make默认单核运算,如果想加快速度,我这里是4核,可以在每条命令后面加上-j4,如果有报错,建议最好make clean重新开始。
如果所有测试都通过,则说明安装好了。


3、测试

测试Caffe的Python接口,切换到caffe/python文件目录下,记录下来当前路径,输入以下命令:
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
注:将/path/to/caffe/python替换为当前caffe/python目录,如本文为~/caffe/python,如下:

export PYTHONPATH=~/caffe/python:$PYTHONPATH

进入python环境,输入:
import caffe
如果没有报错,证明安装成功。
上面的方法,一旦关闭终端或者打开新终端则失效,如果放到配置文件中,可以永久有效果,命令操作如下:
  1. #A.把环境变量路径放到 ~/.bashrc文件中
  2. sudo echo export PYTHONPATH= "~/caffe/python" >> ~/.bashrc
  3. #B.使环境变量生效
  4. source ~/.bashrc





你可能感兴趣的:(Ubuntu 16.04上用系统自带的python3.5.2安装Caffe(CPU only))