综述
本文主要介绍在ubuntu 16.04 系统上编译安装caffe,请注意这里是CPU ONLY版本。
安装依赖
1 | sudo apt-get update |
其中 -y 选项可以省略
安装opencv 3.2.0
安装依赖
1 | [compiler] sudo apt-get install build-essential |
其中,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
3cd ~/<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
3cd opencv
mkdir build
cd build
然后编译源码1
2
3
4
5
6
7
8sudo 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
2sudo make -j4
sudo make install
注意 make -j4是指用4个线程同时运行。可先用nproc查看可用的处理器数目
安装caffe
下载源码并设置相关文件
下载caffe 源码,解压,进入caffe文件夹,将Makefile.config.example拷贝为Makefile.config1
2
3cd 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
2INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
分别修改为:1
2
3INCLUDE_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
5make all -j4
make test -j4
make runtest -j4
make pycaffe -j4
make distribute -j4
如果以上没有报错,那么恭喜你,如果出现以下错误,可以进行如此修改:
- not found lboost_python3
解决方法,修改Makefile.config文件,将1
2
3PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include
修改为1
2
3PYTHON_LIBRARIES := boost_python-py35 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include
- 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
本文主要参考了以下链接: