install caffe on ubuntu16.04

综述

本文主要介绍在ubuntu 16.04 系统上编译安装caffe,请注意这里是CPU ONLY版本。

安装依赖

1
2
3
4
5
6
7
8
9
10
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev \
libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python3-dev #已有可不必安装
sudo apt-get install -y python3-numpy python3-scipy

其中 -y 选项可以省略

安装opencv 3.2.0

安装依赖

1
2
3
4
5
6
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev \
libavformat-dev libswscale-dev
sudo apt-get install liblapacke-dev checkinstall #1
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev \
libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

其中,compiler和required必选,optional可选,注释#1的行需要安装,不然会引发一个错误,这个错误是
fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory
#include “LAPACKE_H_PATH-NOTFOUND/lapacke.h”
这个错误很奇葩,产生这个错误感觉是脚本的锅,如果使用了sudo apt-get install liblapacke-dev checkinstall
还出现这个错误,那么就手动找到报错的文件,将#include “LAPACKE_H_PATH-NOTFOUND/lapacke.h”修改为
#include “lapacke.h”

下载opencv3.2.0源码

可以使用git下载

1
2
3
cd ~/<my_working_directory>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

也可以下载zip文件解压,解压后,为方便起见,将opencv-3.2.0,重命名为opencv,将opencv_contrib
重命名为contrib,并将其拷贝至opencv目录下

编译源码

首先创建build目录

1
2
3
cd opencv
mkdir build
cd build

然后编译源码

1
2
3
4
5
6
7
8
sudo cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DPYTHON3_EXECUTABLE=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR=/usr/include/python3.5 \
-DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python3.5m \
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-DPYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \
-DOPENCV_EXTRA_MODULES_PATH=/home/dsk/dsk/opencv/contrib/modules ..

注意,将python3或者3.5设置成你自己的python版本,注意,-Dkey=value形式key和value之间不要
有空格,否则会提示-DOPENCV_EXTRA_MODULES_PATH解析错误,由于这个空格浪费了我不少时间
如果遇到要下载文件,可能由于墙的原因,而下载失败,可以手动下载然后将文件拷贝至此文件夹下
opencv/contrib/modules/dnn/.download/bd5e3eed635a8d32e2b99658633815ef/v3.1.0,可以使
命令行拷贝
以上cmake设置成功之后,开始编译

1
2
sudo make -j4
sudo make install

注意 make -j4是指用4个线程同时运行。可先用nproc查看可用的处理器数目

安装caffe

下载源码并设置相关文件

下载caffe 源码,解压,进入caffe文件夹,将Makefile.config.example拷贝为Makefile.config

1
2
3
cd caffe-master
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config

在gedit上将以下内容修改,将以下行的注释去掉
USE_CUDNN := 0
OPENCV_VERSION := 3
由于我使用python 3,所以将python2全部注释掉,将python3的注释去掉

而且,将 # Whatever else you find you need goes here. 下面的

1
2
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

分别修改为:

1
2
3
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 \
/usr/lib/x86_64-linux-gnu/hdf5/serial

主要是因为ubuntu16.04文件位置 与以前版本相比,发生了变化,而系统需要hdf5的位置,因此需要修改路径.最后,打开makefile文件,做如下修改,将

1
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

替换为:

1
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

编译源码

最后,使用以下命令编译源码

1
2
3
4
5
make all -j4
make test -j4
make runtest -j4
make pycaffe -j4
make distribute -j4

如果以上没有报错,那么恭喜你,如果出现以下错误,可以进行如此修改:

  1. not found lboost_python3

解决方法,修改Makefile.config文件,将

1
2
3
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include

修改为

1
2
3
PYTHON_LIBRARIES := boost_python-py35 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include

  1. not found libopencv_core.so.3.2.0

这个为ld_library的问题,解决方法为:

1
sudo vi /etc/ld.so.conf.d/opencv.conf

添加以下内容

1
/usr/local/lib

/usr/local/lib为我的ibopencv_core.so.3.2.0所在的文件夹,你需要修改为你的相应文件夹

Reference

本文主要参考了以下链接:

  1. https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide
  2. https://docs.opencv.org/3.2.0/d7/d9f/tutorial_linux_install.html
  3. http://www.linuxidc.com/Linux/2016-12/138870.htmhttp://www.linuxidc.com/Linux/2016-12/138870p2.htm