Caffe[穷人版]——Ubuntu 16.04 CPU版本安装

前言

最近本人想做做RCNN的实验,但是RCNN的主要源码都是用caffe实现的。由于鄙人没有GPU而且十分贫穷,所以只好用CPU来跑东西。


安装依赖

一开始我是看Caffe官网上面的安装教程。我看了一眼,就后悔为毛我前几天重装不装Ubuntu 17.04呢。这样就简单了。直接

sudo apt install caffe-cpu

或者

sudo apt install caffe-cuda

可是我的是16.04而且是CPU版本。所以就按照官网的教程安装相关的依赖。

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

可是我看漏了上面还有一个行字General dependencies。这只是通用的依赖,所以我就寻找其他教程安装相关的依赖了。

sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

加上这几个依赖就好了。(我没有认真调查过究竟是那个依赖有作用,只是直接安装计算了)


配置

这里我要先说明我使用的python版本是3.5,使用pip安装python的包。

首先我们要从github的远端下载caffe的源码:

git clone https://github.com/BVLC/caffe.git

进入caffe目录,然后复制Makefile.config.exampleMakefile.config,并修改Makefile.config文件。

cd caffe
cp Makefile.config.example Makefile.config
vim Makefile.config

按照以下内容修改config文件:

  1. # CPU_ONLY:=1改为CPU_ONLY:=1

  2. 注释(py2.7)

# PYTHON_INCLUDE :=  /usr/include/python2.7 \
#               /usr/lib/python2.7/dist-packages/numpy/core/include
  1. 在INCLUDE_DIRS和LIBRARY_DIRS后面分别加上/usr/include/hdf5/serial/usr/lib/x86_64-linux-gnu/hdf5/serial
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
  1. 我们需要创建py3.5的链接库
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py35.so.1.5x.x /usr/local/lib/libboost_python3.so

配置文件中是默认调用py2.7的boost。假如你使用py3调用了py2.7的boost的话,就会出现这样的错误内容:

undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

这个错误内容在编译的时候是看不出的,因为编译跟py没有关系,只有在你调用的时候才会出现这些问题。

  1. 去掉注释(py3.5):
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
                 /usr/local/lib/python3.5/dist-packages/numpy/core/include

我们上步创建的py3.5的链接库,需要在配置文件中声明好。同时,我们要给出numpy的核心调用库(c语言的头文件)。假如不知道自己的py包安装在哪里,那就pip3 -V就会看到安装目录啦。

  1. 去掉# WITH_PYTHON_LAYER := 1的注释。

编译Caffe

在caffe的主目录下,依次执行:

sudo make all -j4
sudo make test -j4
sudo make runtest -j4

最后假如得到passed的话,那就代表你编译成功啦~

Caffe[穷人版]——Ubuntu 16.04 CPU版本安装_第1张图片
编译成功

安装所需的python包

在caffe的主目录下,进入python文件夹cd xxx/caffe/python。安装requirements.txt所需的包
for req in $(cat requirements.txt); do sudo pip3 install $req; done
然后,我们还要升级里面的包,需要升级的包是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

我也很绝望啊。。。


编译python接口

  1. 首先我们要假如caffe/python为我们的PYTHONPATH,所以我们要修改我们的环境变量。
    打开.bashrc
vim ~/.bashrc

在最后一行加入:

export PYTHONPATH=/xxxxxx/caffe/python:$PYTHONPATH

然后运行一下:sudo ldconfig

  1. 进入caffe的主目录,开始编译
sudo make pycaffe

假如没有报错,那应该基本可以了。除非你跟我一样多灾多难。


验证

Caffe[穷人版]——Ubuntu 16.04 CPU版本安装_第2张图片
成功调用

References

  1. http://blog.csdn.net/donatellobzero/article/details/51304162
  2. http://blog.csdn.net/u013989576/article/details/56677749
  3. http://stevechoris.github.io/2017/01/12/Python3-5-Anaconda3-Caffe%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA/

你可能感兴趣的:(Caffe[穷人版]——Ubuntu 16.04 CPU版本安装)