配置Caffe
(1) 安装相关依赖
sudoapt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-devlibhdf5-serial-dev protobuf-compiler
sudoapt-get install --no-install-recommends libboost-all-dev
sudoapt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudoapt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
(2) 下载Caffe
git clone https://github.com/BVLC/caffe
或者根据自己需要下载不同的caffe
(3) 修改Makefile.config
首先将Makefile.config.example的内容复制到Makefile.config:
cp Makefile.config.example Makefile.config
打开并修改配置文件:
vim Makefile.config #打开Makefile.config文件
根据个人情况修改文件:
a. 若使用cudnn,则将
USE_CUDNN:= 1
修改成:
USE_CUDNN:= 1
b. 若使用的opencv版本是3的,则将
OPENCV_VERSION:= 3
修改为:
OPENCV_VERSION:= 3
c. 若要使用python来编写layer,则将
WITH_PYTHON_LAYER:= 1
修改为 WITH_PYTHON_LAYER := 1
d. 如果使用matlab 则
修改为MATLAB_DIR := /usr/local/MATLAB/R2014a/
e. 将
Whatever else you find you need goes here. 下面的
INCLUDE_DIRS:= $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS:= $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
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的位置,所以需要更改这一路径。
(4) 修改Makefile文件
打开Makefile文件,做如下修改,将:
NVCCFLAGS +=-ccbin=(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=(COMMON_FLAGS)
(5) 编辑/usr/local/cuda/include/host_config.h
(有的caffe版本没有这个,所以就不需要修改)
将其中的第115行注释掉,将
#error-- unsupported GNU version! gcc versionslater than 4.9 are not supported!
改为:
//#error-- unsupported GNU version! gcc versionslater than 4.9 are not supported!
(6) 编译
make all -j #-j后不加数字是最大性能,或者自己实际情况加数字
(7) 测试
sudo make runtest
编译问题
cudnn.hpp:127:41: error: too few arguments to function ‘cudnnStatus_t cudnnSetPooling2dDescriptor
如果用的其他版本的caffe 可能会遇到这个问题,因为cudnn版本与系统cudnn版本不对应
解决办法:使用最新caffe版本里的文件替换
首先下载最新caffe
git clone https://github.com/BVLC/caffe
然后替换
(1) caffe/include/caffe/util/cudnn.h
cp newcaffepth/include/caffe/util/cudnn.h yourcaffepth/include/caffe/util/
(2)caffe/include/caffe/layers/ 下面的cudnn开头文件
cp newcaffepth/include/caffe/layers/cudnn_* yourcaffepth/include/caffe/layers/
(3) caffe/src/caffe/layers/ 下面cudnn开头的文件
cp newcaffepth/src/caffe/layers/cudnn* yourcaffepth/src/caffe/layers/