Ubuntu16.04下配置caffe(亲测成功)

前言:

历经一个国庆的折腾,终于成功在Ubuntu下搭建好了caffe,过程中遇到的坑真的是数不胜数,最大的一次坑是本来已经配置好了结果手残命令行一阵不知名命令之后电脑崩溃又得重装系统,结果装好系统再配置的时候出现了比第一次更多的坑,真是说多了都是泪,为了让大家避免我遇到的坑,特写此文章,希望能帮助到有的同学,同时说明本人目前是大二本科生,能力有限,文章中如有不正确的地方希望大家积极指出,本人不胜感谢,好了,废话不多说,进入正文!

目录结构

1:安装开发所需依赖包
2:下载安装CUDA8.0并验证是否安装成功
3: 下载安装cudnn并验证是否安装成功
4:下载安装opencv并验证是否安装成功
5:安装编译caffe

特别说明:
1:本教程版本搭配为:Ubuntu16.04+CUDA8.0+Opencv3.1.0,建议初学者尽量按照本教程的搭配进行配置,防止出现版本不搭造成的错误,这一点笔者真是深有体会,当然鼓励大家尝试新版本,如果有成功的同仁麻烦告诉我你的搭配,笔者不胜感激。
2:建议大家在输入所有命令之前加上sudo,防止出现“权限不够”这类情况,笔者为了节省时间在教程里面有的需要加sudo的地方没有加,大家可不要偷懒~~
3:本文参考blog:http://blog.csdn.net/yhaolpz,感谢大神博主的教程

安装开发所需依赖包

命令行直接复制粘贴进以下命令即可:

1
2
3
4
5
6
7
8
9
sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential

因为有一定的几率安装失败,而如果刚好某个依赖安装失败导致后期出现莫名的错误那你可就欲哭无泪了,安装完成之后建议大家验证一下是否安装成功,验证方法是再在终端输入一遍sudo
apt-get install ..的命令,如图:

1

2

3

4

下载安装CUDA8.0并验证是否安装成功

下载安装CUDA8.0

NVIDIA官网提供两种方式来安装CUDA,即run安装和deb安装,这里不建议初学者使用run安装,因为run安装对Linix版本和Linix kernel版本以及GCC版本都有严格要求,稍有不符,可能就会导致失败,所以这里为大家介绍deb方式安装:

首先下载CUDA8.0的deb包(可去官网下,也可至笔者的网盘下载,网盘链接见文末),下载好之后依次键入以下命令:

    sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
    sudo apt-get update
    sudo apt-get install cuda

配置环境变量

命令:

sudo gedit /etc/profile

在文件最后加上

     PATH=/usr/local/cuda/bin:$PATH 
     export PATH
     LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 
     export LD_ LIBRARY_PATH    

使用以下命令使其生效:

source /etc/profile

安装完成以后一定要 重启电脑 使其生效。

验证CUDA8.0是否安装成功

重启电脑之后请读者可依次键入以下命令验证CUDA8.0是否安装成功:


cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

如果看到类似以下信息就说明CUDA安装成功:
5

下载安装cudnn并验证是否安装成功

下载安装cudnn

读者可以登录官网: https://developer.nvidia.com/rdp/cudnn-download,注册后下载cudnn,笔者这里上传了我用的cudnn,下载链接见文末。

下载完成后解压,得到一个 cuda 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include路径下,然后进行以下操作:

sudo cp cudnn.h /usr/local/cuda/include/  #复制头文件

然后命令行进入 cudn/lib64路径下,运行以下命令(注意:下面命令的..so.5.1.10和..so.5视个人的情况而定,如果你没有使用CUDN8.0以及其对应的cudnn版本,..so.后面的数字不一定与下面相同,读者可直接到你的文件目录下模糊查找对应的so版本):

sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接

验证cudnn是否安装成功

键入以下命令:

nvcc -V

如果出现类似以下内容则说明安装成功:

6

下载安装opencv并验证是否安装成功

下载安装opencv

读者可进入官网 : [http://opencv.org/releases.html , 选择 3.1.0 版本的 source , 下载 opencv-3.1.0.zip,也可至笔者的网盘下载,下载链接见文末,下载后解压至你想安装的目录,命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行以下命令:

mkdir build # 创建编译的文件目录
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8  #编译

这里需要注意的是,在执行cmake…的时候会下载一个压缩包,下载的地址是被墙掉的,可能大家有的人给自己的chrome搭了梯子,但是因为是通过终端下载的,所以就算你的chrome可以上外网也不一定下的来(因为你的终端不一定可以翻过去),这就导致会报类似如下的错误:

7
解决方法是读者去网上自行找下好的包然后导入,但是网上大多都是要积分才能下载的,这里笔者上传我的包(其实我也是花积分下载的)免费给大家,也算是为人民服务哈哈,下载链接同样见文末,下载后直接把下载的压缩包放入
你的opencv目录/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
下,然后再次执行cmake…就可以正常了。
编译成功后进行安装:

sudo make install 

PS:
1:make 的时候可能会报错:

CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake :206 (message):
Error generating
/home/yy/opencv-2.4.9/build/modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o
make[2]: *** [modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 错误 2
make: *** [all] 错误 2

解决方案

1
2
sudo cmake -D CMAKE_BUILD_TYPE=bulid -D CMAKE_INSTALL_PREFIX=/usr/local -D
CUDA_GENERATION=Kepler ..

然后再make。

sudo make时,也可能出现

 make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] Error 1
        make[1]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/all] Error 2
        make: *** [all] Error 2

的错误。
那是因为 cuda-8.0与OpenCV 3.1.0发生了冲突。解决方法:修改openCV 3.1.0源码,使其兼容cuda-8.0,可做如下操作:

sudo gedit opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp

将第四十五行位置的

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

 #if !defined(HAVE_CUDA)||defined(CUDA_DISABLER)||(CUDART_VERSION>=8000)

然后重新执行make.

验证opencv安装是否成功

在终端输入以下命令:

pkg-config --modversion opencv  

如果正常输出opencv版本则说明opencv安装成功。

下载配置编译caffe

下载caffe

首先在你要安装的路径下 clone :

git clone https://github.com/BVLC/caffe.git

配置caffe(这部分引自大神的blog)

进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config :

sudo cp Makefile.config.example Makefile.config

然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

sudo gedit Makefile.config

修改 Makefile.config 文件内容:

USE_CUDNN := 1

修改成:
USE_CUDNN := 1

OPENCV_VERSION := 3

修改为:
OPENCV_VERSION := 3

WITH_PYTHON_LAYER := 1

修改为
WITH_PYTHON_LAYER := 1

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

然后修改 caffe 目录下的 Makefile 文件:
将:

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

替换为:

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

将:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5

改为:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

然后修改 /usr/local/cuda/include/host_config.h 文件 :

`#error-- unsupported GNU version! gcc versions later than 4.9 are not` supported!

改为

    //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

编译caffe

键入以下命令:

make all -j8

这里的-j后面的参数试你电脑的配置决定
PS:后期有几位小伙伴按照上面的配置之后在make这里报错,贴出几个常见的报错信息及解决方案:
1:

error while loading shared libraries: libopencv_core.so.2.2: cannot open shared object file: No such file or directory

注:每个人的libopencv_core.so后面的数字不一样,但是大概是这个么个报错
解决方案1:这个错误可能是因为你没有装ffmpeg,输入

sudo apt-get install ffmpeg

安装,安装成功之后再执行make即可。
解决方案2:如果使用解决方案1无效,则:
在/usr/local/lib下搜索报错信息中的.so文件(比如示例报错信息就是搜索libopencv_core.so.2.2),如果找到该共享库的话,那么在/etc/ld.so.conf.d/xxxx.conf
注意(xxxx.conf)是你自己命名的。比如我缺少opencv库 那么我就写
opencv.conf。接下来,就在xxxx.conf文件中写path路径,比如说共享库在/usr/local/opencv/libopencv_core.so.2.4中的话,你就写
/usr/local/opencv/
最后 sudo ldconfig -v 如果有共享库输出的话,就证明成功了。
2:fatal error: hdf5.h
解决方案:
在Makefile.config文件中把下面第一行代码改为第二行代码:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
1
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
1

在Makefile文件中把下面第一行代码改为第二行代码。

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
1
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
1

测试caffe

键入以下命令:

make runtest -j8

PS:这里可能会出现如下错误:

1
2
error while loading shared libraries: libcudart.so.8.0: cannot open shared
object file: No such file or directory

解决方案:

1
sudo ldconfig /usr/local/cuda/lib64

如果出现类似如下信息则说明caffe配置成功:
8

至此我们就完成caffe的配置工作了,希望大家可以积极指出本文的不足之处便于笔者改正,不胜感激,最后给出本文的所有资源大礼包,下载链接:
https://pan.baidu.com/s/1pKU5hrX
密码: xk5x

如果觉得有帮助就请我喝杯咖啡鼓励我继续创作吧^_^