Bootstrap

linux caffe cpu,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.example为Makefile.config,并修改Makefile.config文件。

cd caffe

cp Makefile.config.example Makefile.config

vim Makefile.config

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

# CPU_ONLY:=1改为CPU_ONLY:=1

注释(py2.7)

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

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

在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

我们需要创建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没有关系,只有在你调用的时候才会出现这些问题。

去掉注释(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就会看到安装目录啦。

去掉# WITH_PYTHON_LAYER := 1的注释。

编译Caffe

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

sudo make all -j4

sudo make test -j4

sudo make runtest -j4

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

36badc9fbcc2

编译成功

安装所需的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 _ #

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接口

首先我们要假如caffe/python为我们的PYTHONPATH,所以我们要修改我们的环境变量。

打开.bashrc

vim ~/.bashrc

在最后一行加入:

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

然后运行一下:sudo ldconfig

进入caffe的主目录,开始编译

sudo make pycaffe

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

验证

36badc9fbcc2

成功调用

References

;