花费了一天的时间终于将faster-rcnn跑通了。把整个流程记录下来,分享给大家,也有利于自己下次配置提供方便。第一次写博客,语句表达不清楚的地方请多包含。好了,下面进入正题。
主要参考:
http://blog.csdn.net/zoro_lov3/article/details/60581174
http://blog.csdn.net/hu_oo/article/details/54918256
http://blog.csdn.net/u013832707/article/details/53501478
运行环境:ubuntu16.04 N卡:GTX970
一:安装nvidia驱动
1. 首先在这个网站上查看属于自己电脑的显卡驱动(http://www.nvidia.com/Download/index.aspx?lang=en-us),下载下来。
2. 禁止集成的nouveau(鹦鹉螺)驱动
Ubuntu系统集成的显卡驱动程序是nouveau,它是第三方为NVIDIA开发的开源驱动,我们需要先将其屏蔽才能安装NVIDIA官方驱动。 将驱动添加到黑名单blacklist.conf中,但是由于该文件的属性不允许修改。所以需要先修改文件属性。
查看属性:
$sudo ls -lh /etc/modprobe.d/blacklist.conf
修改属性:
$sudo chmod 666 /etc/modprobe.d/blacklist.conf
使用gedit编辑器打开:
$sudo gedit /etc/modprobe.d/blacklist.conf
在文件的最后添加如下内容:
1. blacklist vga16fb
2. blacklist nouveau
3. blacklist rivafb
4. blacklist rivatv
5. blacklist nvidiafb
3. 开始安装nvidia显卡驱动
关闭当前图形工作界面(不要害怕,只是一小会的事情)
$sudo service lightdm stop
Ctrl + Alt + F1
方式一:
$sudo sh NVIDIA-Linux-x86_64-xxx.run
1. sudo add-apt-repository ppa:graphics-drivers/ppa
2. sudo apt-get update
3. sudo apt-get install nvidia-384 #这里要写自己适合的gpu驱动版本
4. sudo apt-get install mesa-common-dev
5. sudo apt-get install freeglut3-dev
$sudo service lightdm start
$nvidia-smi
出现下面的显卡信息表示安装成功:
到此,nvidia显卡的驱动就安装好了。
二:安装 cuda8.0
cuda是NVIDIA的编程语言平台,想使用gpu就必须要使用cuda。下载地址:(https://developer.nvidia.com/cuda-80-ga2-download-archive)
下载完cuda8.0后,执行如下语句,运行runfile文件:
$sudo sh cuda_8.0.61_375.26_linux.run
执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia375驱动时,一定要选择否,其余的都直接默认或者选择是即可
安装完毕后,再声明一下环境变量,并将其写入到 ~/.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
然后执行使之生效
测试cuda的samples:$sudo ldconfig
若显示GPU信息则安装成功。三:安装cudnn1. cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery 2. make (sudo make -j8) 3. sudo ./deviceQuery
官网下载(https://developer.nvidia.com/rdp/cudnn-download) 下载的时候需要注册账号。选择对应你cuda版本的cudnn下载。这里我下载的是cudnn5.1,是个压缩文件(.tgz)
下载完cudnn5.1后进行解压,cd进入cudnn5.1解压之后的include目录,在命令行进行如下操作:
$sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再将cd进入lib64目录下的动态文件进行复制和链接:
$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 #生成软链接
四:安装 opencv3.1
安装过程中主要是opencv这一块花费的时间较多,也在本文中重点讲一下这一个过程以及遇到的各种问题。
1.官网下载:(https://opencv.org/opencv-3-2.html)(文件下载在网页的最后,两种形式: zip 和 tar.gz)
2.根据网上资料,输入如下命令安装依赖包:
3.手动编译opencv的源码$sudo apt-get install build-essentia $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
效果展示:$ cd /opencv-3.2.0 $ mkdir release $ cd release $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
出现上图中的情况,说明配置和生成成功。
接下来,就开始编译:
效果展示:$sudo make -j8 #-j8是指cpu提供几个线程去工作,配置一般的电脑可直接make
上面是将opencv编译成功,但是并没有安装到我们的系统中,有很多的设置都没有写入到系统中,因此还要进行install。添加库路径及更新。
最终效果展示:$ sudo make install $ sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' $ sudo ldconfig
至此opencv的安装过程就结束了。
安装过程中遇到的问题:
1. 关于QT5的错误
终端显示错误报文如下:
CMake Warning at cmake/OpenCVFindLibsGUI.cmake:22 (find_package): By not providing "FindQt5Concurrent.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5Concurrent", but CMake did not find one. Could not find a package configuration file provided by "Qt5Concurrent" with any of the following names: Qt5ConcurrentConfig.cmake qt5concurrent-config.cmake Add the installation prefix of "Qt5Concurrent" to CMAKE_PREFIX_PATH or set "Qt5Concurrent_DIR" to a directory containing one of the above files. If "Qt5Concurrent" provides a separate development package or SDK, be sure it has been installed. Call Stack (most recent call first): CMakeLists.txt:466 (include) qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory CMake Error at /usr/share/cmake-2.8/Modules/FindQt4.cmake:1386 (message): Found unsuitable Qt version "" from NOTFOUND, this code requires Qt 4.x Call Stack (most recent call first): cmake/OpenCVFindLibsGUI.cmake:34 (find_package) CMakeLists.txt:466 (include) -- Configuring incomplete, errors occurred! See also "/home/*******/OpenCV/opencv-2.4.9/build/CMakeFiles/CMakeOutput.log". See also "/home/*******/OpenCV/opencv-2.4.9/build/CMakeFiles/CMakeError.log".
问题原因:系统上没有安装Qt5解决方案:
$sudo apt-get install qt5-default
2. ippicv_linux_201651201.tgz 下载安装
因为"墙"的问题,很多安装问题都会卡在相关资源下载失败上,ippicv_linux_20151201.tgz也是因此下载失败,如果翻不出去还可以选择离线下载之后再放到相应文件夹中,具体如下:
下载ippicv_linux_20151201.tgz之后,将其复制到opencv-3.1.0/3rdparty/ippicv/downloads/linux- 808b791a6eac9ed78d32a7666804320e 目录下然后再继续编译,(这一文件夹是在编译过程中生成的,若找不到也可以手动创建)。
下载地址:http://download.csdn.net/download/lx928525166/9479919
2. 不使用上述命令:cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
改为:cmake -DWITH_IPP=OFF
3. 没有安装java环境,以至于无法生成jar包。
请广大小伙伴自行安装java环境,最好安装在如下图所示:(博主也在这一步掉入了一个坑,耽误了些时间,如何安装java环境请自行Google)
4. 系统未安装 ant(使用如下命令安装)
$sudo apt-get install ant
5. opecv3.0与cuda8.0不兼容导致的问题(小伙伴可以先行改掉这个地方,然后在cmake make 以及make install)
解决方案:
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) //对这一行进行修改 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000) //改为这样
五:caffe安装(终于可以安装caffe了)
首先安装各种依赖包
$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 -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
将终端cd到你要安装caffe的位置,执行如下指令,从github上clone caffe。
$ git clone https://github.com/BVLC/caffe.git //从github上git caffe $ cd caffe $ sudo cp Makefile.config.example Makefile.config //将Makefile.config.example的内容复制到Makefile.config //因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子 $ sudo gedit Makefile.config //打开Makefile.config文件
打开之后修改如下内容:
//若使用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的位置,所以需要更改这一路径
打开makefile文件:
#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!
最后:
$ make all -j82. make runtest3. make pycaffe
如果没有报错那么就安装成功了。
在成功编译caffe的源码之后,可以在python环境中使用caffe。
在Ubuntu环境下,打开python解释程序,输入import caffe时:出现以下错误$ >>>import caffe $ Traceback (most recent call last): $ File "
", line 1, in $ ImportError: No module named caffe 解决方法:
打开~/.bashrc
$sudo gedit ~/.bashrc 在文件下方写入 $ export PYTHONPATH = ~/caffe/python 关闭文件,在终端写入下面语句,使环境变量生效 $ source ~/.bashrc
注意:除此之外,还有错误出现,全部都是缺少某个东西的原因。因此依次安装 cython easydict yaml protobuf
$sudo pip install easydict $sudo pip install cython $sudo pip install python-yaml $sudo pip install protobuf
生成Cython模型
首先,如果你用了独立显卡,需要修改关于独立显卡计算能力的部分。去CUDA-GPUS确定你的显卡的CUDA计算能力。我的是GTX970,为5.2.所以修改$FRCN_ROOT/lib中的setup.py中的-arch=sm_XX为-arch=sm_52。具体位置如下:
extra_compile_args={'gcc': ["-Wno-unused-function"], 'nvcc': ['-arch=sm_52', '--ptxas-options=-v', '-c', '--compiler-options', "'-fPIC'"]}, include_dirs = [numpy_include, CUDA['include']] ),
$ cd $FRCN_ROOT/lib $ make
生成Caffe和pycaffe
$ cd py-faster-rcnn/caffe-fast-rcnn $ cp Makefile.config.example Makefile.config
打开Makefile.config,修改方式和caffe中的修改方式一样。
打开Makefile文件,也按照caffe中的方式进行修改。编译
$ make -j8 $ make pycaffe
需要注意的是,因为这个版本所用的cudnn为旧版本的,可能与新环境的cudnn不兼容,导致出现如下错误:
In file included from ./include/caffe/util/cudnn.hpp:5:0, from ./include/caffe/util/device_alternate.hpp:40, from ./include/caffe/common.hpp:19, from ./include/caffe/util/db.hpp:6, from src/caffe/util/db.cpp:1: /usr/local/cuda/include/cudnn.h:803:27: note: declared here cudnnStatus_t CUDNNWINAPI cudnnSetPooling2dDescriptor( ^ make: *** [.build_release/src/caffe/util/db.o] Error 1
解决方法:
1).将/py-faster-rcnn/caffe-fast-rcnn/include/caffe/util/cudnn.hpp换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.
2).将/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layer里的,所有以cudnn开头的文件都替换成最新版的caffe里的相应的同名文件。
下载模型文件(faster_rcnn_models.tgz和imagenet_models.tgz)
相关链接:(http://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0)
(http://dl.dropbox.com/sgstw7122padlf0l/imagenet_models.tgz?dl=0)
备注:下载需。
$ cd py-faster-rcnn/data
把文件放在这里,并解压
$ tar zxvf faster_rcnn_models.tgz -C ./
运行demo
$ ./tools/demo.py --net zf(--net zf是指选择哪个网络)
效果展示: