ubuntu16.04+caffe+cuda8.0+cudnn5.1+opencv3.1配置

xiaoxiao2021-02-28  61

搭建深度学习环境(这里深度学习框架选择caffe)

1、配置方法(Nvidia GPU版)

1.1、Nvidia Drivers

我安装的NVIDIA驱动是nvidia-375

lspci | grep -i nvidia sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get install nvidia-375 sudo shutdown -r now Check to ensure that the correct version of NVIDIA drivers are installed cat /proc/driver/nvidia/version

安装nvidia-375可能错误

错误1:usr/lib/nvidia-375/libEGL.so.1不是链接 解决方法:

sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.66 /usr/lib/nvidia-375/libEGL.so.1 sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.66 /usr/lib32/nvidia-375/libEGL.so.1

1.2、CUDA(官网下载cuda对应版本,cd到文件所在文件夹)

sudo dpkg -i cuda-repo-ubuntu1404*amd64.deb sudo apt-get update sudo apt-get install cuda Add CUDA to the environment variables echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc

Check to ensure the correct version of CUDA is installed

nvcc -V

Restart your computer

sudo shutdown -r now

1.3、cuDNN

下载cudnn-8.0-linux-x64-v5.1

cd ~/Downloads/ tar xvf cudnn*.tgz cd cuda sudo cp */*.h /usr/local/cuda/include/ sudo cp */libcudnn* /usr/local/cuda/lib64/ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

建立软链接 终端输入

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

输入以下命令,使软连接生效

sudo ldconfig -v

1.3.1安装cuda、cudnn可能错误

错误1:

/sbin/ldconfig.real: /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.5 不是符号连接

解决方法: /**********暂时不用这里的内容*****************/ 将libcudnn.so.5重命名为libcudnn.so.5.org sudo mv /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.5 /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.5.org 建立软链接 sudo ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.5.1.10 /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.5 /***********************************************************/ 建立软链接

终端输入

cd /usr/local/cuda/lib64/ sudo rm -rf libcudnn.so libcudnn.so.5 sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 sudo ln -s libcudnn.so.5 libcudnn.so sudo ldconfig -v

错误2:

出现“unsupported GNU version! gcc versions later than 5.3 are not supported!” 解决方法: http://blog.csdn.net/wopawn/article/details/52302164

这是由于GCC版本过高,在终端输入

cd /usr/local/cuda/include sudo cp host_config.h host_config.h.bak sudo gedit host_config.h

ctrl+f寻找有“5.3”的地方,只有一处,如下

# if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 3) #error -- unsupported GNU version! gcc versions later than 5.3 are not supported! 将两个5改成6,即 #if __GNUC__ > 6 || (__GNUC__ == 6 && __GNUC_MINOR__ > 3)

保存退出,继续在终端输入

2、OPENCV(含contirb模块)

2.1依赖项下载

sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy 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

2.2下载地址

opecv3.1.0+opencv_contrib3.1.0(亲测有效,其他版本不保证) opencv3.10可到官网下载:http://opencv.org/releases.html OpenCV_contrib 下载地址(非最新,稳定,推荐) :https://codeload.github.com/Wangyida/opencv_contrib/zip/master

注意:opencv版本和contrib版本必须一致,否则编译会出错

最新版opencv+opencv-contrib下载地址

git clone https://github.com/opencv/opencv git clone https://github.com/opencv/opencv_contrib

2.3编译

建立一个编译目录(例如:/build)把cmake后的文件都放在这里边。

cd ~/opencv mkdir build cd build

然后开始cmake,这里需要注意几个cmake的参数,比较重要。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D OPENCV_EXTRA_MODULES_PATH=/home/chen/opencv310/opencv_contrib/modules -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..

OPENCV_EXTRA_MODULES_PATH 就是用来指定要编译的扩展模块,后边加上刚下载的opencv_contrib模块的路径即可.

接下类开始编译:

make -j8 sudo make install sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig

2.4、方便以后卸载,一定要做

重启系统,重启系统后cd到build文件夹下:

sudo apt-get install checkinstall sudo checkinstall

然后按照提示安装就可以了。 使用checkinstall的目的是为了更好的管理我安装的opencv,因为opencv的安装很麻烦,卸载更麻烦,其安装的时候修改了一大堆的文件,当我想使用别的版本的opencv时,将当前版本的opencv卸载就是一件头疼的事情,因此需要使用checkinstall来管理我的安装。 执行了checkinstall后,会在build文件下生成一个以backup开头的.tgz的备份文件和一个以build开头的.deb安装文件,当你想卸载当前的opencv时,直接执行dpkg -r build即可。

2.5、Ubuntu16.04下opencv卸载与重装

进入安装包的build文件执行:

make uninstall cd .. sudo rm -r build sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

若提示默写路径没找到,可忽视,第三条命令列举的可能包含OpenCV路径,存在的路径已经被删除

2.6、OPENCV相关的错误修正

2.6.1、问题一:

Ubuntu 16 + OpenCV 3 + Cuda 8.0 编译Bug

`编译时会出现如下已知错误

error: no default constructor exists for class "thrust::detail::execute_with_allocator<cv::cuda::device::ThrustAllocator, thrust::system::cuda::detail::execute_on_stream_base>"。

解决方案1:`

下载https://github.com/thrust/thrust的cuda-next-release分支 把CUDA\v8.0\include\thrust\ 重命名为 thrust_old 建立软链接`CUDA\v8.0\include\thrust\ 到 ...cuda-next-release\thrust

解决方案2:

下载https://github.com/thrust/下的thrust 把CUDA\v8.0\include\thrust\ 重命名为 thrust_old 将下载的thrust文件夹放入CUDA\v8.0\include\thrust\路径下

2.6.2问题二:darknet make opencv3.1.0出错

错误显示: /usr/bin/ld: 找不到 -lippicv

解决方案: 参考(http://blog.csdn.net/dengshuai_super/article/details/51895120)

从opencv.pc中可以看出,pkg-config加载库的路径是/usr/local/lib,我们去这这个路径下看看,发现没有-lippicv对应的库,别的选项都有对应的库,然后我们把-lippicv对应的库(libippicv.a)放到这个路径下就好啦了。

我的liboppicv.a在/home/ds/opencv-3.1.0/3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64这个路径下。你的也在你自己opencv文件夹的对应路径下。 先cd 到上面这个路径下,然后cp liboppicv.a /usr/local/lib 将这个库文件复制到/usr/local/lib下就好了。

再make试试,发现“/usr/bin/ld: 找不到 -lippicv collect2: error: ld returned 1 exit status”这个错误已经解决。

2.6.3问题三:

opencv3.1.0 make install出错

/home/chen/opencv310/opencv/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared

解决方法: 进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:

#include "precomp.hpp" #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

#include "precomp.hpp" #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

然后make编译就可以了

问题2.6.4(转问题2,是同一个问题,下面解决方案不一定有效):

recipe for target ‘.build_release/lib/libcaffe.so.1.0.0’ failed

解决方案: 然后我修改Makefile 文件(注意不是)Makefile.config 将里面的

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

3、Caffe(CPU版从这里开始即可)

参考: http://blog.csdn.net/autocyz/article/details/52299889 安装依赖库 第一次可以用

sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake g++ gfortran git pkg-config python-dev software-properties-common wget sudo apt-get autoremove sudo rm -rf /var/lib/apt/lists/* #可以不执行,我有点不太清楚 python -V 2>&1 | awk '{print $2}'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 libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install -y libatlas-base-dev sudo apt-get install -y python-pip

第二次安装时出现问题,所以重新的方案而如下 首先安装各种依赖包

sudo apt-get update 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 --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

下载caffe

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

打开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 //若使用MATLAB接口的话,则要讲MATLAB_DIR换成你自己的MATLAB安装路径 MATLAB_DIR := /usr/local MATLAB_DIR := /usr/local/matlab2014a //重要的一项 将# 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的位置,所以需要更改这一路径 //为hdf5之类的文件创建新的链接 \\首先执行下面两句话: find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \; cd /usr/lib/x86_64-linux-gnu sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

执行caffe下python文件夹下的指令

cd python for req in $(cat requirements.txt); do pip install $req; done

目的是检查caffe所需要的python的库的版本,如果出现红字错误执行下面语句即可

for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done

编辑/usr/local/cuda/include/host_config.h,将其中的第115行注释掉: 将

#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!

编译python接口

首先,将caffe根目录下的python文件夹加入到环境变量

打开配置文件bashrc

# sudo gedit ~/.bashrc

在最后面加入

export PYTHONPATH=/home/xxx/caffe/python:$PYTHONPATH

注意 /home/xxx/caffe/python 是我的路径,这个地方每个人都不同,需要修改

保存退出,更新配置文件

# sudo ldconfig

make 各种文件

cd .. \\此时位置应该处于caffe文件夹下 make all -j8 //j8代表计算机cpu有8个核,因此可以多线程一起make,这样make的速度会快很多。一般常用的还有j4 make test -j8 make runtest -j8 make pycaffe //如果以后用python来开发的话必须执行这一句,一般不管你是否用python,都会执行这一句 make distribute

最终查看python接口是否编译成功:

进入python环境,进行import操作

# python >>> import caffe

如果没有提示错误,则编译成功。

4.python接口

caffe程序是由c++语言写的,本身是不带数据可视化功能的。只能借助其它的库或接口,如opencv, python或matlab。大部分人使用python接口来进行可视化,因为python出了个比较强大的东西:ipython notebook, 现在的最新版本改名叫jupyter notebook,它能将python代码搬到浏览器上去执行,以富文本方式显示,使得整个工作可以以笔记的形式展现、存储,对于交互编程、学习非常方便。 python环境不能单独配置,必须要先编译好caffe,才能编译python环境。 上面已经安装编译好python接口,接下来安装jupyter

安装jupyter 安装了python还不行,还得安装一下ipython,后者更加方便快捷,更有自动补全功能。而ipython notebook是ipython的最好展现方式。最新的版本改名为jupyter notebook,我们先来安装一下。(如果安装了anaconda, jupyter notebook就已经自动装好,不需要再安装)

# sudo pip install jupyter

安装成功后,运行notebook

# jupyter notebook

就会在浏览器中打开notebook, 点击右上角的New-python2, 就可以新建一个网页一样的文件,扩展名为ipynb。在这个网页上,我们就可以像在命令行下面一样运行python代码了。输入代码后,按shift+enter运行,更多的快捷键,可点击上方的help-Keyboard shortcuts查看,或者先按esc退出编辑状态,再按h键查看。

转载请注明原文地址: https://www.6miu.com/read-1250393.html

最新回复(0)