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的话,那就代表你编译成功啦~

编译成功

安装所需的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 <module>
    from matplotlib.figure import Figure, figaspect
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py", line 40, in <module>
    from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/__init__.py", line 4, in <module>
    from ._subplots import *
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_subplots.py", line 10, in <module>
    from matplotlib.axes._axes import Axes
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_axes.py", line 24, in <module>
    import matplotlib.dates as _  # <-registers a date unit converter
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/dates.py", line 125, in <module>
    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

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


验证

成功调用

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/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容