首页 > 系统相关 >Ubuntu16.04+CUDA8.0+OpenCV3.1+python+caffe+faster-rcnn环境配置

Ubuntu16.04+CUDA8.0+OpenCV3.1+python+caffe+faster-rcnn环境配置

时间:2023-08-23 10:05:01浏览次数:51  
标签:Ubuntu16.04 faster python sudo dev rcnn 安装



  • 前言
  • Ubuntu1604
  • 注意事项
  • CUDA80
  • 安装显卡驱动
  • 安装CUDA80
  • 编译CUDA Sample
  • OpenCV31
  • python
  • Caffe
  • 安装Caffe
  • MNIST数据集测试
  • faster-rcnn
  • 后记


前言

经过大概两个星期的配置,终于将faster-rcnn安装好了,期间重装了大概十次系统,查阅了无数多文献博客,遇到了无数多坑。本人写这篇文章就是希望读者能通过我写的文章能够避免那些无谓的弯路,顺利的配置好环境。

参考资料:
Windows 7下硬盘安装Ubuntu 14.10图文教程
Ubuntu16.04+cuda8.0rc+opencv3.1.0+caffe+Theano+torch7搭建教程
Ubuntu16.04+CUDA8.0+caffe配置
Cuda安装详细步骤
Ubuntu Installation
Installation Guide for Linux
Faster R-CNN (Python implementation)

Ubuntu16.04

先下好Ubuntu16.04 LTS, EasyBCD。在这里EasyBCD是用来安装ubuntu和装好之后设置引导项的。具体步骤看

Windows 7下硬盘安装Ubuntu 14.10图文教程

注意事项

1.我给Ubuntu腾出80G的空间,如何分配请看下面

2.记得在安装系统之前在终端上输入

$ sudo umount -l /isodevice

3.
在编辑menu.lst时,将

title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-14.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz

改为

title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz

这里ubuntu-14.10-desktop-i386.iso为原文下载的Ubuntu镜像名字,这里需要改成读者自己的。

4.
在设置分区时,要分出4个分区,分别设:
(如何划分分区? 点“空闲”->”左下角的+”)

大小 51200MB
主分区
用于EXT4日志文件系统
挂载点 /

大小 2048MB
逻辑分区
用于交换空间

大小 200MB
逻辑分区
用于EXT4日志文件系统
挂载点 /boot

大小 剩余空间
逻辑分区
用于EXT4日志文件系统
挂载点 /home

5.一定要记得将安装引导启动器设置为 /boot所在分区,如果读者想以windows启动项启动的话。

CUDA8.0

根据Caffe官网说明,我们需要分别安装CUDA的.run文件和手动安装显卡驱动

安装显卡驱动

首先,通过快捷键Ctrl+Alt+T打开终端,然后加入官方ppa源:

$ sudo add-apt-repository ppa:graphics-drivers/ppa  
$ sudo apt-get update

点击Ubuntu右上角的设置图标->系统设置->软件和更新->附加驱动, 这时系统会自动匹配出读者独显型号的最新驱动版本,点击最新的驱动版本(即数字最大的那个,比如nvidia-340与nvidia-378就选nvidia-378) ->应用更改

重启后输入

$ nvidia-settings

查看显卡驱动版本是否与所安装驱动相符

安装CUDA8.0

在官网上下载CUDA8.0 .run文件,先进行md5校验,看md5码与Installer Checksums里的是否一致

关闭集显:

$ sudo gedit /etc/modprobe.d/blacklist.conf

在blacklist文件最后加上

blacklist nouveau

重启,验证集显是否已经禁用了

$ lsmod | grep nouveau

如果没有输出则说明禁用成功

同时按:CTRL+ALT+F1,退出图形界面。一开始会叫你输入你的用户名和密码。输入完毕后,关闭桌面服务:

$ sudo service lightdm stop

进入到你下载的cuda .run文件所在位置(注意,所在位置一定要在linux系统下的盘符,不要将.run文件放到windows下的c盘,d盘类似这样去运行),输入

$ sudo sh cuda_8.0.44_linux.run

跟着操作就行,注意当询问是否安装显卡驱动时,一定要选no

安装完成后,输入

$ sudo service lightdm start

启动图形界面

重启,检查路径~/dev下 有无存在名为nvidia*(以nvidia开头)的多个文件(device files)
如果没有的话,可以参考官方文档里的指导步骤,进行添加。
添加过程:
a)在home下创建一个文档,命名位modprobe,不要后缀,文档的内容如下:

#!/bin/bash
/sbin/modprobe nvidia
if [ "$?" -eq 0 ]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
/sbin/modprobe nvidia-uvm
if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi

b)将该文件复制到/etc/init.d目录下,然后更改文件权限

$ sudo chmod 755 /etc/init.d/modprobe

d)执行如下命令将脚本放到启动脚本中去。

$ cd /etc/init.d
$ sudo update-rc.d modprobe defaults 95

e)关机然后重新启动,去~/dev下面查看,不出意外此时应该有nvidia*系类文件了。

设置环境变量

注意,在本人查找的博客中该博主没有成功生成的,但是没有影响后续操作,大家根据具体情况自行分析。

设置环境变量

$ sudo gedit /etc/profile

在打开的文件末尾,添加以下两行:

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

重启电脑,检查上述的环境变量是否设置成功

$ env

在输出的环境变量中检查有无上述 设置的变量,如果有则代表设置成功。

检查 NVIDIA Driver是否安装成功

$ cat /proc/driver/nvidia/version

会输出NVIDIA Driver的版本号


检查 CUDA Toolkit是否安装成功

$ nvcc –V

会输出CUDA的版本信息

编译CUDA Sample

编译CUDA Sample

$ cd ~/NVIDIA_CUDA-8.0_Samples
$ make

**注意:这里的make操作是将Samples文件夹下所有的demo都编译了一遍,所以比较耗时,如果仅仅想测试某个例子,可以进入相应的文件夹去编译即可。
如果出现错误的话,则会立即报错停止,否则会开始进入编译阶段。**

成功后,NVIDIA_CUDA-8.0_Samples文件夹下会出现一个bin文件夹。运行编译生成的二进制文件。
编译后的二进制文件 默认存放在~/NVIDIA_CUDA-8.0_Samples/bin中。

$ cd ~/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release 
$ ./deviceQuery

看到类似图片中的显示,则代表CUDA安装且配置成功

OpenCV3.1

首先安装必要的库

$ sudo apt-get -y remove ffmpeg x264 libx264-dev  
$ sudo apt-get -y install libopencv-dev build-essential checkinstall cmake pkg-config yasm libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev x264 v4l-utils ffmpeg libgtk2.0-dev

根据官网上的链接下载OpenCV3.1.0版本,并进行解压,解压之后进入安装文件目录。建立要编译的build目录,然后进入build目录进行编译:

$ mkdir build  
$ cd build  
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D 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 ..

在configure过程中过程中,可能会出现下面的错误:ICV: Downloading ippicv_linux_20151201.tgz…
在直接下载该文件的过程中,会因为超时而失败,可以下载ippicv_linux_20151201.tgz, 并替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,然后再次cmake即可。

生成编译文件之后,在opencv-3.1.0/build目录下,终端输入:

$ make -j2  
$ sudo make install

安装好以后配置环境变量,使其生效:

$ sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'  
$ sudo ldconfig

特别注意:这里所有的编译都用Ubuntu自带编译器GCC和G++版本编译,不要进行降级,就不会导致后面编译caffe出现找不到依赖库的错误。等待安装完成

编译opencv3.1.0时可能会出现trying to build v3.1 opencv with cuda support. standard cmake. project of: opencv_cudalegacy not compile – nppiGraphcut missing的报错,这是因为OpenCV3.1现在还不支持CUDA8.0而造成的,我们需要手动修改相关文件,解决方法如下:

cd ~/opencv-3.1.0/modules/cudalegacy/src
sudo gedit ./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)

安装成功后,输入

$ pkg-config --modversion opencv

查看OpenCV版本,若有输出,即为安装成功

python

python的安装有两种方式:一种是系统自带的python,只需再安装相应的库即可;第二种是直接安装anaconda,很多相应的库已经包含了。这里,我们使用第一种安装方法

安装pip,tornado和pyzmq

$ sudo apt-get install python-pip  
$ sudo pip install tornado pyzmq pygments  
$ sudo apt-get install libzmq-dev

再安装一些依赖库

$ sudo apt-get install python-numpy python-scipy python-matplotlib python-qt4 qt4-designer pyqt4-dev-tools python-qt4-doc spyder cython swig python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags ipython protobuf-c-compiler protobuf-compiler

安装完成后,输入

$ ipython

如有相关信息出现,即为安装成功

Caffe

安装Caffe

首先安装依赖库

$ sudo apt-get update  
$ 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 build-essential cmake git pkg-config libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev python-dev  
$ sudo apt-get install --no-install-recommends libboost-all-dev  
$ sudo apt-get install libatlas-base-dev

从github上clone Caffe

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

修改配置文件,进入到caffe的根目录,执行:

$ cp Makefile.config.example Makefile.config

打开makefile.config对其进行修改,makefile.config修改内容内容如下(未配置cudnn加速):

注释第5行的 USE_CUDNN := 1  
去掉注释第21行的 OPENCV_VERSION := 3  
去掉注释 WITH_PYTHON_LAYER := 1
在 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面添加 /usr/include /usr/include/hdf5/serial  

在 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 后面添加 /usr/lib/x86_64-linux-gnu/hdf5/serial  

实现caffe对Python和Matlab接口的支持 PYTHON_LIB := /usr/local/lib

cuda8.0编译器问题,打开/usr/local/cuda/include/host_config.h ,将:

error -- unsupported GNU version! gcc versions later than 5.3 are not supported!

改为

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

编译

$ make all -j2  
$ make test -j2  
$ make runtest -j2  
$ make pycaffe -j2

自此,Caffe配置完成

MNIST数据集测试

配置caffe完成后,用MNIST数据集对caffe进行测试

1.将终端定位到Caffe根目录

cd ~/caffe

2.下载MNIST数据库并解压缩

./data/mnist/get_mnist.sh

3.将其转换成Lmdb数据库格式

./examples/mnist/create_mnist.sh

4.训练网络

./examples/mnist/train_lenet.sh

训练的时候可以看到损失与精度数值,如图

faster-rcnn

Clone faster-rcnn

$ git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

编译Cython模型

$ cd py-faster-rcnn/lib
$ make

编译Caffe和pycaffe

$ cd py-faster-rcnn/caffe-fast-rcnn
$ make -j8 && make pycaffe

下载faster-rcnn识别模型

cd py-faster-rcnn
./data/scripts/fetch_faster_rcnn_models.sh

测试Demo

cd py-faster-rcnn
./tools/demo.py

如果出现

Loaded network
/home/tezerc/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
F0225 17:53:01.675832 21673 syncedmem.cpp:56] Check failed: error ==
cudaSuccess (2 vs. 0) out of memory
* Check failure stack trace: *

则更换训练网络

cd py-faster-rcnn
./tools/demo.py --net zf

若有图片出现,则faster-rcnn安装成功!自此,整个环境配置完毕。

后记

由于配置环境途中出现的问题实在太多,有一部分忘记是什么困难了。如果读者在配置过程中遇到某些没在上面提到的问题和困难,欢迎留言。本人会不定期更新


标签:Ubuntu16.04,faster,python,sudo,dev,rcnn,安装
From: https://blog.51cto.com/u_8999467/7199314

相关文章

  • Python基础入门学习笔记 024 递归:汉诺塔
    递归求解汉诺塔•对于游戏的玩法,我们可以简单分解为三个步骤–将前63个盘子从X移动到Y上。–将最底下的第64个盘子从X移动到Z上。–将Y上的63个盘子移动到Z上。•问题一:将X上的63个盘子借助Z移到Y上;•问题二:将Y上的63个盘子借助X移到Z上。•对于游戏的玩法,我们可以简单分......
  • Python基础入门学习笔记 025 字典:当索引不好用时
    映射 创建和访问字典>>>dict4=dict(小甲鱼='让编程改变世界',李宁='一切皆有可能')>>>dict4{'小甲鱼':'让编程改变世界','李宁':'一切皆有可能'}>>>dict4['爱迪生']='天才是99%的汗水加1%的灵感'>>&g......
  • Python基础入门学习笔记 021函数:lambda表达式
    lambda表达式的作用•Python写一些执行脚本时,使用lambda就可以省下定义函数过程,比如说我们只是需要写个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后再写调用,使用lambda就可以使得代码更加精简。•对于一些比较抽象并且整个程序执行下来只需要调用一两次的函......
  • Python基础入门学习笔记 022 函数:递归是神马
    汉诺塔游戏 树结构的定义 谢尔宾斯基三角形递归求阶乘•写一个求阶乘的函数–正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。–例如所给的数是5,则阶乘式是1×2×3×4×5,得到的积是120,所以120就是4的阶乘。•假设我们n的值传入是5,那么: 实例:求阶乘1deffac......
  • Python基础入门学习笔记 023 递归:这帮小兔崽子
    坑爹的兔子斐波那契数列的迭代实现我们都知道兔子繁殖能力是惊人的,如下图: 我们可以用数学函数来定义: 课间练习:假设我们需要求出经历了20个月后,总共有多少对小兔崽子?(迭代 vs 递归)1deffab(n):2n1=13n2=14n3=156ifn<1:7......
  • Python基础入门学习笔记 015字符串:格式化
     字符串格式化符号含义 将ASCII码97对应的字符输出 格式化整数 格式化操作符辅助命令5表示输出为五位数Python的转义字符及其含义......
  • Python基础入门学习笔记 016 序列!序列!
    •列表、元组和字符串的共同点–都可以通过索引得到每一个元素–默认索引值总是从0开始–可以通过分片的方法得到一个范围内的元素的集合–有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)使用list方法 元组转换为列表 max()返回序列或者参数集合中的最大......
  • Python基础入门学习笔记 018 函数:灵活即强大
    形参和实参>>>defMyFirstFunction(name):'函数定义过程中的name是叫形参'#因为Ta只是一个形式,表示占据一个参数位置print('传递进来的'+name+'叫做实参,因为Ta是具体的参数值!')>>>MyFirstFunction('小甲鱼')传递进来的小甲鱼叫做实参,因为Ta是具体的参数值!关键字参数......
  • Python 调试工具PDB的基本使用
    用法pdb工具是Python自带的调试工具,可以在命令行下进行代码调试。使用示例:importpdbnum_a=1num_b=2pdb.set_trace()sum=num_a+num_b运行效果如图:常见命令break或b:设置断点continue或c:继续执行程序list或l:查看当前行的代码段step或s:进入函数......
  • Python基础入门学习笔记 011列表:一个打了激素的数组2
    从列表中获取元素•跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索引值是从 0 开始的。 从列表删除元素 remove()函数表示从列表中删除某个元素 del()函数也表示从列表中删除某个元素 pop()函数从列表中取出最后一个元素列表分片(Slice)•......