我只想去caffe喝杯cafe

本文详述在Ubuntu 16.04上安装Caffe(CPU版本)的步骤,包括安装依赖、获取源码、编译配置和测试。遇到hdf5相关错误时,需调整Makefile.config。完成编译后,通过MNIST数据集测试模型。

前言

本文是在最新的 Ubuntu 16.04.2 上安装Caffe(仅CPU)的参考,系统来源于清华大学开源软件站,因Caffe在不同Linux系统的安装会有一些小区别,所以请非16.04版本的朋友绕道Google或Baidu。
Caffe在不同机器上的相同操作也可能产生一些不一样的“效果”,本文中出现的报错和解决方案可能也会不全面,所以还请多包涵。

致谢(不仅仅是这些):

博客1–python配置
博客2–pycaffe接口
博客3–python环境检查
博客3–hdf5-1
博客3–hdf5-2
文章–mnist

安装步骤

一.安装依赖包

$ sudo apt-get install libprotobuf-dev

$ sudo apt-get install libleveldb-dev

$ sudo apt-get install libsnappy-dev

$ sudo apt-get install libopencv-dev

$ sudo apt-get install libhdf5-serial-dev

$ sudo apt-get install protobuf-compiler

$ sudo apt-get install –no-install-recommends libboost-all-dev

$ sudo apt-get install libopenblas-dev

$ sudo apt-get install liblapack-dev

$ sudo apt-get install libgflags-dev

$ sudo apt-get install libgoogle-glog-dev

$ sudo apt-get install liblmdb-dev

$ sudo apt-get install libatlas-base-dev

注:可见Caffe所需的依赖包比较多,可以选择上述方法“逐个”(推荐)进行下载,也可以通过下述方法进行下载。

  1. $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
  2. $ sudo apt-get install –no-install-recommends libboost-all-dev
  3. $ sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
  4. $ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

如果提示”安装无法定位软件包”,可以尝试 $ sudo apt-get update 命令

二.安装caffe

  • 方法一(Git):
    • $ cd ~
    • $ git clone git://github.com/BVLC/caffe.git
    • 方法二:
      • 浏览器访问 Githubhttps://github.com/BVLC/caffe
      • 下载.zip文件
      • 打开Ubuntu的文件管理
      • 解压(Extract)
      • 再将解压出来的caffe-master文件直接移到home下

三.编译Caffe

  • 进入caffe根目录:

    $ cd ~/caffe-master

  • 拷贝生产.config文件:
    $ cp Makefile.config.example Makefile.config
  • 修改Makefile.config文件中的一些内容(方法如下):

    • 会vim的朋友可以:

      $ vim Makefile.config

    • 不会vim的朋友也可以直接使用Ubuntu自带的超简单文本编辑器nano:

      $ nano Makefile.config

    • 不喜欢这些编辑器的朋友(Windows的忠实用户)当然也可以使用如下指令:

      $ sudo gedit Makefile.config

修改内容如下:
一.去除注释符

修改前:# CPU_ONLY := 1

修改后:CPU_ONLY := 1

二.hdf5相关

hdf5为什么要加粗呢?因为这里真的是一步一坑,很可能会出现从删库到跑路的局面(笔者原本是14.04的系统,在一次构建环境失败后,重装了16.04的系统,之后又删过2次caffe,改了至少10次配置文件,前后总共用了近15个小时)。

如果你在修改了 内容一 之后就开始编译:

$ make all

那么就很可能会产生类似于下述语句的错误:

./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: No such file or directory

./include/caffe/util/libhdf5.so … fatal error: libhdf5.so : No such file or directory

其实报错不仅仅是这两个(可能会有几百个),这是因为系统按照顺序执行了其中一个.cpp文件后发现在调用hdf5.h文件时,该文件不在系统配置文件的路径下而返回一个报错并终止 $ make 指令对caffe进行的编译操作。

那么该如何修改呢?为了保险起见,你最好先执行以下命令查找hdf5.h:

$ sudo find / -name hdf5.h

如果返回“查询不到此文件”,那么请执行下载环节中的指令:

$ sudo apt-get install libhdf5-serial-dev

重新下载hdf5相关依赖库。

如果返回的路径为:

/usr/include/hdf5/serial/hdf5.h

那么请对Makefile.config文件进行如下修改:

修改前:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

修改后:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial


修改前:
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

修改后:
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

重新开始编译(此时处于caffe-master文件内部即caffe-root权限)

先执行:

$ make all -j8

:从这里开始,编译的时间会比较长,另外后面的 -j8 指令是启用了CPU的多核工作机制,可以加快编译进程。

再执行:

$ make test -j8

最后执行:

$ make runtest -j8

:如果上述三条指令任意一条执行结果失败,则需要执行语句:

$ make clean

然后解决掉问题重新开始编译。

当全部执行成功,没有返回报错,runtest执行结束后产生如图所示效果:
image

则证明编译成功。(因Markdown下图片上传不便,所以图片来自参考博客,笔者的最终结果应该是1105个用例执行成功,希望有明白其中缘由的朋友私信我,在此表示感谢!)

四.编译python接口(pycaffe)

caffe有python和C++两种接口,笔者用python,所以利用python接口调用caffe,这会对之后caffe的使用带来便利。

安装pip

Ubuntu 16.04 默认已经安装了python2.7,所以可以直接安装pip,以便后续安装python库/包。

$ sudo apt-get install python-pip

(因为东西有点多,所以建议在网络情况好的情况下进行此步骤)在caffe的根目录下,有个python文件夹,文件夹里面有个清单requirements.txt,里面有需要的依赖库和版本信息,按照其安装即可,但在安装前,还需要先安装fortran编辑器(gfrotran),因为安装scipy库时需要它,命令如下:

$ sudo apt-get install gfortran

$ cd ~/caffe-master/python

$$ for req in $(cat requirements.txt); do pip install $req; done

再返回caffe-master目录,用以下指令进行验证(再遍历一遍):

cd ~/caffe-master

sudo pip install -r requirements.txt

若显示Requirement already satisfied,则安装成功。

配置python路径


  • 第一处:

gedit ~/.bashrc #打开
export PYTHONPATH=/home/usrname/caffe-master/python:$ PYTHONPATH #在配置文件的最后写入该路径,笔者是export PYTHONPATH=/home/minygd/caffe-master/python:**PYTHONPATH

sorce ~/.bashrc #生效


  • 第二处:

$ cd ~/caffe-master
$ gedit Makefile.config

修改前:

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

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

修改后:

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

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

然后更新一下配置(可能需要重启电脑才有效,但是影响不大):

$ sudo ldconfig

编译python接口

$ cd ~/caffe-master

$ make pycaffe

验证python接口:

实质是在python环境下,引入caffe包,若无报错则成功,若报错请返回配置python路径步骤。

$ cd ~

$ python

image

若出现如上图所示的情况,即 caffe 可以被python调用,则pycaffe接口成功。

五.使用MNIST手写数据集测试(训练数据模型)

Part 1

$ cd ~/caffe (or whatever you called your Caffe directory)

$ ./data/mnist/get_mnist.sh

$ ./examples/mnist/create_mnist.sh

这里需要的时间较长,首先是调用了get_mnist.sh脚本下载数据集,再调用create_mnist.sh将下载的数据集转换成可以处理的lmdb格式的文件。

Part 2

编辑examples/mnist文件夹下的lenet_solver.prototxt文件,将solver_mode模式从GPU改为CPU.

Part 3

训练模型:

./examples/mnist/train_lenet.sh

后话

因本身电脑配置的问题,mnist的处理时间以小时来计算,所以笔者还未进行数据处理,后续会更新本文。

如果出现了别的问题,欢迎一起来交流!当然,通过google和baidu往往也能很好地解决问题。正如笔者本身,填完坑的一刹那,心中的愉悦那是难以形容的。

三天时间,终于在caffe喝到了cafe.

It worth a try.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值