Ubuntu16.04+cuda8.0+opencv3.1+anaconda2.7+caffe安装教程

Ubuntu16.04+cuda8.0+opencv3.1+anaconda2.7+caffe安装教程

在网上查了很多类似教程,然后经过亲身实践,期间经历了各种痛苦煎熬,踩过无数坑,终于安装过成功,现将经验分享出来,让大家能够顺利安装,少走弯路!
注意:下面路径中凡是出现gl处,一律用你们自己的用户名代替。
1.安装一些依赖项。
这里安装的依赖项是为后面的安装做准备的,反正是要安装的(当然后面还有一些要安装),这里一行一行复制到你的命令行执行就行。

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

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

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 freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

这个因为网络问题,可能要安装很久。还是有线好点。


2.下载完cuda8.0后,执行如下语句,运行runfile文件:

sudo sh cuda_8.0.27_linux.run --override

执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否,因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。 


3.安装完毕后,再声明一下环境变量,并将其写入到 ~/.bashrc 的尾部:

sudo gedit ~/.bashrc

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后设置环境变量和动态链接库,在命令行输入:

sudo gedit /etc/profile

在打开的文件末尾加入:

export PATH=/usr/local/cuda/bin:$PATH

保存之后,创建链接文件:

sudo gedit /etc/ld.so.conf.d/cuda.conf

在打开的文件中添加如下语句:

/usr/local/cuda/lib64

然后执行

sudo ldconfig

使链接立即生效。

4.验证安装是否完成

nvidia-smi 或 nvidia-settings

5.测试cuda的samples

cd /home/gl/NVIDIA_CUDA-8.0_Samples
sudo make -j8

6.ubuntu的gcc编译器是5.4.0,然而cuda8.0不支持5.0以上的编译器,因此需要降级,把编译器版本降到4.9:
[python] view plain copy
当出现“unsupport complier”错误时,说明gcc版本太高,需要降低gcc版本。解决办法如下:
以gcc4.9与g++4.9为例
安装低版本gcc与g++:

sudo apt-get install gcc-4.9 g++-4.9

之后进入/usr/bin:

cd /usr/bin

先删除和gcc5.0关联的gcc:

sudo mv gcc gcc.bak
sudo mv g++ g++.bak

再建个软连接

sudo ln -s gcc-4.9 gcc
sudo ln -s g++-4.9 g++
也不知道是我的错觉还是什么的,比以前快很多啊,大概等7分钟左右吧。

7.安装cudnn5.1
安装cuDNN比较简单,解压后把相应的文件拷贝到对应的CUDA目录下即可:

 tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz


继续执行以下指令:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

8.验证一下

cd /home/gl/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery
sudo ./deviceQuery 

cuda的samples 里面有个deviceQuery 运行之后会显示信息,最后一行出行pass说明成功啦~~~~

9.验证安装是否完成,将电脑重启才能检验,否则会显示未安装成功。
nvcc -V

10.安装opencv3.1
首先肯定是先安装依赖了,官方列出了一些:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install –assume-yes libopencv-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev 

从官网(http://opencv.org/downloads.html)下载OpenCV,并将其解压到你要安装的位置,假设解压到了/home/opencv。
安装前准备,创建编译文件夹:

cd ~/opencv-3.1.0/
mkdir build
cd build

配置:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_GTK=ON -D WITH_GTK_2_X=ON -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..

程序“cmake”尚未安装。 您可以使用以下命令安装:
sudo apt install cmake

也可以用cmake-gui打开cmake的gui界面,开始进行配置。也可以用ccmake ..打开相应界面进行设定。

cmake主要用于进行一些配置设定,从而生成用于编译安装的makefile文件,通过界面进行参数的配置和设定,非常直观、方便。在配置中指定源码和编译目录以及生成方式。

按照下图的步骤进行配置:

点击Finish后cmake即载入默认配置,窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的,如

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/OpenCV

只是这里通过图形界面的方式来进行配置,更加直观方便。

这里指对一个地方进行修改,CMAKE_BUILD_TYPE 值输入RELEASE,其他保持不变,图中蓝色虚线部分显示了默认的安装目录,生成makefile文件最后执行 make install时就会安装到这个目录,这里可以根据个人需求更改。在这里的配置中我勾选了WITH_QT去掉了WITH_TIFF,其他更多的配置也不清楚,OpenCV中文网站也没找到系统的说明,这里暂时不深究,点击Generate生成配置文件。

进入build目录可以查看Makefile文件,可以留意文件的生成时间是否和刚才的生成时间一致。
接下来在build分别执行make和make install即可完成编译安装。

编译:

sudo make -j8 
-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。
问题1: cuda8.0新出,opencv2.4.13不支持。报错:

/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
     typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat
                                                      ^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type
         operator NppiGraphcutState*()
                  ^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState’ does not name a type
         NppiGraphcutState* pState;
解决方案:需要修改一处源码:
在graphcuts.cpp中将

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

改为

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:

sudo make install -j8

11.安装Anaconda
(a)下载完之后执行下载的文件,比如:
bash Anaconda2-4.3.0-Linux-x86_64.sh
后面就根据提示执行就可以了,很简单

(b)你在命令行输入python,会调用系统自带的python,所以执行完之后需要替换python
sudo gedit ~/.bashrc
加入anaconda的安装目录是/home/xxx/anaconda2,那么在文件的最后加上
alias python=’/home/xxx/anaconda2/bin/python‘
然后source .bashrc
你再执行python就变成了anaconda的python

12.Caffe

因为Caffe是最难安装的,因此就放到了最后了。废话不说多了。
首先你需要从github上面clone或者下载.zip的压缩包。效果是一样的。然后你得到一个cafffe-master的压缩包或者文件夹。进到这个文件夹里面,你会看到是这个样子的。
这里写图片描述
m你会看到其中有一个文件叫Makefile.config.example.这个文件是官方给出了编译的“模板”,我们可以直接拿过来小小的修改一下就行。复制下面的命令把名字改为Makefile.config

sudo cp Makefile.config.example Makefile.config

你会发现下面多了一个Makefile.config的文件
这里写图片描述

打开这个文件并且修改(我这里用的是sublime,你可以换成其他的编辑器比如vim):

sudo gedit Makefile.config

你能够看到类似于这样的东西
这里写图片描述

然后根据个人情况修改文件:
(1)若使用cudnn,则将#USE_CUDNN := 1修改成: USE_CUDNN := 1 (就是去掉注释的‘#’号)

(2)若使用的opencv版本是3的,则将#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3

(3)若要使用python来编写layer,则将#WITH_PYTHON_LAYER := 1修改为 WITH_PYTHON_LAYER := 1

(4)要是你是用的anaconda的话,还需要改一些地方(重要)
这里写图片描述
把之前的PYTHON_INCLUDE一定不加注释,把ANACONDA_HOME以及下面的PYTHON_INCLUDE 都去掉,并且改为如下图最终的样子:
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 \
		/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		 $(ANACONDA_HOME)/include/python2.7 \
		 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
# PYTHON_LIB := $(ANACONDA_HOME)/lib

(5)重要 :
将# 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的文件包含位置发生了变化)

(6)修改makefile文件
打开makefile文件,做如下修改:
将(大概409行的样子):
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
这里写图片描述

在Makefile文件的第大概181行,把 hdf5_hl和hdf5修改为hdf5_serial_hl 和 hdf5_serial,即
将:
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
这里写图片描述
(7)编辑/usr/local/cuda/include/host_config.h
sudo gedit /usr/local/cuda/include/host_config.h
将其中的第115行注释掉:
将#error-- unsupported GNU version! gcc versions later than 5 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 5 are not supported!
这里写图片描述

(8)此时需要修改gcc和g++版本为最新版
之后进入/usr/bin:
cd /usr/bin

先删除和gcc5.0关联的gcc:

sudo mv gcc gcc.bak
sudo mv g++ g++.bak

再建个软连接

sudo ln -s gcc-5 gcc
sudo ln -s g++-5 g++

(9)此时可能需要安装protobuf
tar xvf protobuf-2.6.1.tar.gz

cd protobuf-2.6.1/

./configure
sudo make -j8
sudo make check -j8
sudo make install -j8

(10)安装一系列依赖库
再执行安装一些库:sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev,稍等

(11)然后就可以开始编译了
sudo make all -j8
sudo make test -j8
sudo make runtest -j8

(12)Mnist训练
首先进入/caffe-master/目录,在当前目录下执行下列命令:
./data/mnist/get_mnist.sh11
获得mnist数据训训练的4个数据包 
./examples/mnist/create_mnist.sh11
利用caffe-master/build/examples/mnist/的convert_mnist_data.bin工具,将mnist date转化为可用的lmdb格式的文件。并将新生成的2个文件mnist-train-lmdb 和 mnist-test-lmdb放于create_mnist.sh同目录下。
./examples/mnist/train_lenet.sh

(13)Please inspect your PYTHONPATH as it looks wrong. You should give absolute paths to the caffe module's parent directory. For instance, in my configuration I did:

# in caffe root dir

sudo make pycaffe -j8
make distribute
# make dir for custom python modules, install caffe
mkdir ~/python
sudo mv distribute/python/caffe ~/python
# set PYTHONPATH (this should go in your .bashrc or whatever
PYTHONPATH=${HOME}/python:$PYTHONPATH

猜你喜欢

转载自blog.csdn.net/CVAIDL/article/details/88856231