ubuntu 16.04 opencv 3.1.0 + cuda8.0 +cudnn 5.1.5 +caffe

安装顺序:

opencv 3.1.0

cuda 8.0

cudnn 5.1.5

caffe

1.安装 opencv 3.1.0

1.1安装依赖

必要安装

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

可选安装

sudo apt-get install checkinstall yasm libtiff5-dev libjpeg-dev libjasper-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils libeigen3-dev

1.2下载openCV

      到 官网  http://opencv.org/downloads.html下载openCV 3.1.0下载完后解压。

1.3安装openCV

cd opencv-3.1.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

在此过程中,很有可能会出现错误:ICV: Downloading ippicv_linux_20151201.tgz 超时。
解决方法:去网上下载。直接搜索文件名即可,附下载地址: 这里
下载完后替换opencv-3.1.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake。

optional(显示指定一些编译内容):

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=ON -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Auto -D WITH_GSTREAMER_0_10=OFF ..

然后在build目录下:

make -j4
-j4表示四核运算,可根据电脑配置选择。

sudo make install

会有在make -j4遇到G++版本太高的问题,我安装多次,遇到过一次。

修改opencv-3.1.0目录下的CMakeList.txt文件,在开头加入set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)然后重新cmake,再make -j4,再make install

如遇到‘NppiGraphcutState’ has not been declared,是opencv与cuda8.0不兼容导致的。之前的opencv版本都会有问题,opencv2.4.13没有问题,这是唯一一个2016年发布的版本。解决方法:

在path/to/opencv/modules/cudalegacy/src/graphcuts.cpp中,把

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

改为

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

参考: openCV3.1安装

设置Shared Library

    另外在之后的使用中(比如我在编译caffe的时候)可能会出现找不到库的情况,这是因为没有把库放到一个能找到的位置
    该部分参考:openCV program compile error “libopencv_core.so.2.4: cannot open shared object file: No such file or directory” in ubuntu 12.04
    在/usr/local目录下查找opencv库所在位置,我在解答看到有人是在/usr/local/opencv和/usr/local/opencv2下面,但我这里是在/usr/local/lib下找到的。如果找不到,可尝试:
sudo updatedb && locate libopencv_core.so.3.1
3.1为版本号。

 新建文件:
sudo vim /etc/ld.so.conf.d/opencv.conf
     写入地址/usr/local/lib,并保存。
     更新:
sudo ldconfig -v

1.4 测试opencv

1)创建工作目录

mkdir ~/opencv-lena
cd ~/opencv-lena
gedit DisplayImage.cpp

 2)编辑如下代码

#include 
#include 
using namespace cv;
int main(int argc, char** argv )
{
	if ( argc != 2 )
	{
		printf("usage: DisplayImage.out \n");
		return -1;
	}
	Mat image;
	image = imread( argv[1], 1 );
	if ( !image.data )
	{
		printf("No image data \n");
		return -1;
	}
	namedWindow("Display Image", WINDOW_AUTOSIZE );
	imshow("Display Image", image);
	waitKey(0);
	return 0;
}

3) 创建CMake编译文件

gedit CMakeLists.txt
写入如下内容
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

4) 编译

cd ~/opencv-lena
cmake .
make

5) 执行

此时opencv-lena文件夹中已经产生了可执行文件DisplayImage,下载 lena.jpg放在opencv-lena下,运行
./DisplayImage lena.jpg

6)结果



2.安装cuda8.0

我采用的是离线.deb安装方法,按自己的电脑和软件的情况,去官网下载dbe包,大概1.8G。然后在它存放的目录打开终端,执行下面的命令安装:

sudo dpkg -i cuda-repo-__.deb   # 自己的.deb包名
sudo apt-get update  
sudo apt-get install cuda 
安装完成之后切记要重启电脑:sudo reboot,让显卡配置生效。

3. 安装cudnn5.1.5

下载 cuDNN v5.1 Livrary for Linux

将上面提到的cudnn安装包下载好解压,进入解压后的文件,在终端执行下面的指令安装:
sudo tar xvf cudnn-8.0-linux-x64-v5.1.tgz
cd cuda/include
sudo cp *.h /usr/local/include/
cd ../lib64
sudo cp lib* /usr/local/lib/
cd /usr/local/lib
sudo chmod +r libcudnn.so.5.1.5
sudo ln -sf libcudnn.so.5.1.5 libcudnn.so.5
sudo ln -sf libcudnn.so.5 libcudnn.so
sudo ldconfig


4.安装caffe

1、首先安装各种更新包

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 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 python-pip

sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

sudo apt-get install -y libopencv-dev

2、下载caffe

cd ~
mkdir git  //在home下新建一个git文件夹,用来存放那些从github上git下来的文zong件
git clone https://github.com/BVLC/caffe.git    //从github上git caffe

3、开始安装

cd caffe    //打开到刚刚git下来的caffe
cp Makefile.config.example Makefile.config //将Makefile.config.example的内容复制到Makefile.config
//因为make指令只能make   Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子
gedit Makefile.config      //打开Makefile.config文件
仔细阅读makefile中的注释语句其实就知道该怎么操作了,为了方便理解,笔者还是介绍一各个配置说明。 
在打开的Makefile.config修改如下内容:
//如果你不使用GPU的话,就将
# CPU_ONLY := 1
修改成:
CPU_ONLY := 1

//若使用cudnn,则将
# USE_CUDNN := 1
修改成:
USE_CUDNN := 1

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

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

//重要的一项
将# 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、make 各种文件

cd ..   \\此时位置应该处于caffe文件夹下

make all -j4  //j4代表计算机cpu有4个核,因此可以多线程一起make,这样make的速度会快很多。一般常用的还有j8

make test -j4

make runtest -j4

make pycaffe   //如果以后用python来开发的话必须执行这一句,一般不管你是否用python,都会执行这一句

make distribute

5.caffe测试

mnist是一个手写数字库,由DL大牛Yan LeCun进行维护。mnist最初用于支票上的手写数字识别, 现在成了DL的入门练习库。征对mnist识别的专门模型是Lenet,算是最早的cnn模型了。

mnist数据训练样本为60000张,测试样本为10000张,每个样本为28*28大小的黑白图片,手写数字为0-9,因此分为10类

下载

假设已经在caffe的根目录下了,现在开始下载:
 sudo sh data/mnist/get_mnist.sh

运行成功后,在 data/mnist/目录下有四个文件:
train-images-idx3-ubyte: 训练集样本 (9912422 bytes) 
train-labels-idx1-ubyte: 训练集对应标注 (28881 bytes) 
t10k-images-idx3-ubyte: 测试集图片 (1648877 bytes) 
t10k-labels-idx1-ubyte: 测试集对应标注 (4542 bytes)

这些数据不能在caffe中直接使用,需要转换成LMDB数据

sudo sh examples/mnist/create_mnist.sh

若转换失败请检查  data/mnist/t10k-images-idx3-ubyte 的文件名(有时解压的文件名为t10k-images.idx3-ubyte  这是不对的,修改之

examples/mnist/ 文件夹是运行lmdb数据

转换成功后,会在 examples/mnist/目录下,生成两个文件夹,分别是mnist_train_lmdb和mnist_test_lmdb,里面存放的data.mdb和lock.mdb,就是我们需要的运行数据。

接下来是修改配置文件,如果你有GPU且已经完全安装好,这一步可以省略,如果没有,则需要修改solver配置文件。

需要的配置文件有两个,一个是lenet_solver.prototxt,另一个是train_lenet.prototxt.

首先打开lenet_solver_prototxt

sudo gedit examples/mnist/lenet_solver.prototxt

根据需要,在max_iter处设置最大迭代次数,以及决定最后一行solver_mode,是否要改成CPU,然后保存退出。

运行

现在就开始运行这个例子:
sudo time sh examples/mnist/train_lenet.sh 

CPU运行时候大约13分钟,GPU运行时间大约4分钟,GPU+cudnn运行时候大约40秒,精度都为99%左右。

若有疑问 qq:873040807

参考: http://blog.csdn.net/jhszh418762259/article/details/52957495
参考: http://www.tuicool.com/articles/nYJrYra
参考: http://blog.csdn.net/dcxhun3/article/details/51859740

你可能感兴趣的:(ubuntu,caffe,cuda,opencv)