Ubuntu16.04 faster-rcnn+caffe+gpu运行环境配置以及解决各种bug

https://blog.csdn.net/flygeda/article/details/78638824

本文主要是对近期参考的网上各位大神的博客的总结,其中,从安装系统到跑通程序过程中遇到的各种问题,笔者会详细分析,有一些问题在网上都查不到。这些环境配置上的坑希望以后不要再踩到

一、安装Ubuntu 16.04双系统

原文是“简书”上的大神的帖子,非常详细,笔者完全按照文章的步骤安装的,并没有遇到问题 : Win10和Ubuntu16.04双系统安装详解;

Ubuntu镜像官网下载,Ubuntu中国下载地址,Ubuntu百度云下载:链接:http://pan.baidu.com/s/1o7UgBCu 密码:vr90;

UltraISO刻录软件:直接百度即可得到下载地址

二、安装nVidia驱动,配置cuda,cudnn运行环境

原文主要参考"linux公社"的大神的帖子:Ubuntu 16.04 安装配置Caffe 图文详解

笔者的硬件配置:core i5,16G arm,GTX1080 Ti;因此选择 cuda 8.0+cudnn 6.0

下面是笔者的安装过程

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

1

2

3

4

如果安装错误,重新运行代码即可,保证网络畅通

2.安装NVIDIA驱动

(1)查询NVIDIA驱动

首先去官网 http://www.nvidia.com/Download/index.aspx?lang=en-us,查看适合自己显卡的驱动并下载:

驱动文件后缀名应当是以.run结尾的。我们要把这个文件移动到home目录下,原因是下面我们要切换到文字界面下,如果放到~/下载 下面,我们没有办法进入下载这个目录(没有中文输入法,且中文全部是乱码)

我的显卡型号是GTX1080 Ti,系统是linux 64位,按照要求选择后点击search.,点击下载就好了。

我下载后的驱动文件是:NVIDIA-Linux-x86_64-384.98.run

(2)安装驱动

在终端下输入: sudo gedit /etc/modprobe.d/blacklist.conf

输入密码后在最后一行加上 blacklist nouveau . 这里是将Ubuntu自带的显卡驱动加入黑名单。

在终端输入: sudo update-initramfs -u

重启电脑~ 这里要尤其注意,安装显卡驱动要先切换到文字界面,(按Ctrl+Alt+F1~F6).所以,启动电脑后,先进入文字界面。

然后,输入命令 sudo service lightdm stop

现在可以安装驱动了,先进入家目录 cd ~ ,然后: sudo ./NVIDIA-Linux-x86_64-384.98.run,按照提示一步步来~

完成后,再次重启电脑。

安装完成之后输入以下指令进行验证: sudo nvidia-smi,若列出了GPU的信息列表则表示驱动安装成功。如下图:

3.安装CUDA

CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。 (1)下载CUDA 首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA,选择自己合适的版本

sudo chmod 777 cuda_8.0.44_linux.run

sudo ./cuda_8.0.44_linux.run

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

(3)环境变量配置

打开~/.bashrc文件: sudo gedit ~/.bashrc 将以下内容写入到~/.bashrc尾部:

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

export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

(4)测试CUDA的samples

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

make

sudo ./deviceQuery

如果显示一些关于GPU的信息,则说明安装成功。

4.配置cuDNN cuDNN是GPU加速计算深层神经网络的库。 首先去官网 https://developer.nvidia.com/rdp/cudnn-download 下载cuDNN,需要注册一个账号才能下载。

下载cuDNN6.0 之后进行解压:

sudo tar -zxvf ./cudnn-8.0-linux-x64-v6.0.tgz

进入cuDNN6.0 解压之后的include目录,在命令行进行如下操作: 复制头文件

cd cuda/include

sudo cp cudnn.h /usr/local/cuda/include

再将进入lib64目录下的动态文件进行复制和链接:

cd ..

cd lib64

sudo cp lib* /usr/local/cuda/lib64/

复制动态链接库

cd /usr/local/cuda/lib64/

sudo rm -rf libcudnn.so libcudnn.so.6

生成软衔接

sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6

生成软链接

sudo ln -s libcudnn.so.6 libcudnn.so

5.安装opencv3.2 从官网(http://opencv.org/downloads.html)下载Opencv,并将其解压到你要安装的位置,假设解压到了/home/opencv。

安装前准备,创建编译文件夹:

cd ~/opencv

mkdir build

cd build

1

2

3

配置:

sudo apt install cmake

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

1

2

编译:

sudo make -j8

-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。

安装: 以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:

sudo make install

** 三、安装Anaconda**

python好用,但是python不同版本和各种包管理很让人头疼。Anaconda是一个python的一个包装,它将一些python常用的package打包,方便pythoners直接使用。不但如此,他还有自己的安装方式conda,这里有提供各种pip里面找不到的包。

anaconda安装参照官网下载安装即可https://www.anaconda.com/download/,傻瓜式安装非常方便

安装之后再命令终端输入

$ python

Python 2.7.14 |Anaconda custom (64-bit)| (default, Oct 16 2017, 17:29:19)

[GCC 7.2.0] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

1

2

3

4

5

出现上述信息,说明安装成功

** 四、下载faster-rcnn,编译caffe**

1、GitHub上下载faster-rcnn:https://github.com/rbgirshick/py-faster-rcnn,并下载对应的caffe

按照下图中的文件结构,配置本地的faster-rcnn工程。

2、下面配置caffe,这里参考的是“Linux公社”的大神的帖子:http://www.linuxidc.com/Linux/2016-12/138870p2.htm

(1)进入caffe-faster-rcnn目录 (2)因为make指令只能make

Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config:

sudo cp Makefile.config.example Makefile.config

(3) 打开并修改配置文件: sudo gedit Makefile.config 打开Makefile.config文件

根据个人情况修改文件:

a.若使用cudnn,则将

#USE_CUDNN := 1

修改成:

USE_CUDNN := 1

b.若使用的opencv版本是3的,则 将

#OPENCV_VERSION := 3

修改为:

OPENCV_VERSION := 3

c.若要使用python来编写layer,则 将

#WITH_PYTHON_LAYER := 1

修改为

WITH_PYTHON_LAYER := 1

d.重要的一项 : 将 # 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)修改makefile文件 打开makefile文件,做如下修改:

将:

NVCCFLAGS +=-ccbin=$(CXX)-Xcompiler-fPIC $(COMMON_FLAGS)

替换为:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

(5)编辑/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!

3、配置完成后,下面进行编译。直接编译会出现编译错误,这是因为faster-rcnn默认的caffe支持的cudnn版本是V4,而想用1080Ti显卡,必须使用cuda7.5+cudnn5.0以上版本,因此编译caffe会出现版本不兼容而导致的函数参数不对应的错误。这种情况参考博文:http://blog.csdn.net/u010733679/article/details/52221404,

笔者是用的手动修改的方式,下载最新的caffe:https://github.com/BVLC/caffe,

用最新caffe源码的以下文件替换掉faster rcnn 的对应文件 include/caffe/layers/cudnn_relu_layer.hpp,

src/caffe/layers/cudnn_relu_layer.cpp,

src/caffe/layers/cudnn_relu_layer.cu

include/caffe/layers/cudnn_sigmoid_layer.hpp,

src/caffe/layers/cudnn_sigmoid_layer.cpp,

src/caffe/layers/cudnn_sigmoid_layer.cu

include/caffe/layers/cudnn_tanh_layer.hpp,

src/caffe/layers/cudnn_tanh_layer.cpp,

src/caffe/layers/cudnn_tanh_layer.cu

用caffe源码中的这个文件替换掉faster rcnn 对应文件 include/caffe/util/cudnn.hpp

将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有 cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData

cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter

编译caffe:

make -j8 && make pycaffe

1

到此,环境配置结束。下面笔者会介绍使用faster-rcnn训练自己的网络,并详细讲解遇到的坑。

** 五、制作数据集,运行faster-rcnn**

使用faster-rcnn最麻烦的一步就是制作数据集。这里参考两篇博文:

Faster-RCNN+ZF用自己的数据集训练模型(Python版本)

py-faster-rcnn算法caffe配置,训练及应用到自己的数据集

两篇博文使用不同的网络 ZF 和 VGG16,但是制作数据集是相通的。笔者使用VGG16网络,按照下图的文件结构进行修改。

VGG16初始化网络百度云盘:链接:http://pan.baidu.com/s/1i49f47j 密码:x1i2

#下面说说我遇到的bug

1、

[cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR

这个错误是cudnn内部错误,当时困扰了笔者好久,再网上搜索,解决的方法不尽相同。

(1)修改caffe中的makefile.config,将 USE_CUNDD := 1改为 #USE_CUDNN := 1。这意味着运行代码将不使用gpu加速。但是运行深度神经网络不可能不使用gpu加速,笔者测试过神经网络在cpu和gpu下运行的速度,后者大概比前者快了100多倍,不使用gpu加速,运行时间太长,不现实。

(2)gpu加速性能不够,显存溢出。这个解释对于笔者来说不可能,1080Ti运行faster-rcnn是完全足够的。后期解决bug后的运行过程中,显存只用掉了3.3G,远远没达到1080Ti的11G的上限。

(3)caffe编译错误,笔者make clean,并重新编译caffe,编译过程一路通畅,然而还是不能解决问题。

(4)使用sudo超级用户命令运行,完全解决了这个问题。笔者之前没有使用anaconda,因此sudo运行时会出现系统找不到路径的错误。因此建议安装anaconda使用python,在sudo下运行完全没有问题,非常方便。

2、

Traceback (most recent call last):

File "./tools/train_net.py", line 112, in <module>

max_iters=args.max_iters)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 161, in train_net

model_paths = sw.train_model(max_iters)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 102, in train_model

self.solver.step(1)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 66, in forward

rois_per_image, self._num_classes)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 191, in _sample_rois

_get_bbox_regression_labels(bbox_target_data, num_classes)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/rpn/proposal_target_layer.py", line 127, in _get_bbox_regression_labels

bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]

TypeError: slice indices must be integers or None or have an __index__ method

1

2

3

4

5

6

7

8

9

10

11

12

13

14

这个bug原因是numpy版本过高造成的,可以降低numpy的版本至1.11.0.

或者修改代码,强制int类型转换,参考博文:http://blog.csdn.net/mydear_11000/article/details/70241139

3、

Traceback (most recent call last):

File "./tools/train_net.py", line 112, in <module>

max_iters=args.max_iters)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 157, in train_net

pretrained_model=pretrained_model)

File "/home/zjd/workspace/py-faster-rcnn-master/tools/../lib/fast_rcnn/train.py", line 51, in __init__

pb2.text_format.Merge(f.read(), self.solver_param)

AttributeError: 'module' object has no attribute 'text_format'

1

2

3

4

5

6

7

8

解决方法有两个

(1) 安装 sudo pip install protobuf==2.5.0.经笔者测试没有效果

(2) 直接在/home/xxx/lib/fast_rcnn/train.pyi的头文件导入部分加上

import google.protobuf.text_format,经笔者测试完美解决。

到此为止,笔者终于能够开心的运行深度神经网络啦~

---------------------

作者:羿达

来源:CSDN

原文:https://blog.csdn.net/flygeda/article/details/78638824

版权声明:本文为博主原创文章,转载请附上博文链接!

可能出现的问题:https://blog.csdn.net/jmt330/article/details/78568876

caffe编译成功,但在编译caffe-fast-rcnn时报错,也就是说我的电脑新装的caffe和cuda,cndnn的版本是对应的。并且,在注释掉cudnn时,caffe-fast-rcnn的编译不出错。因此考虑作者发布的源码中caffe的版本较低,于我的7.0cudnn版本不匹配,因此需要对caffe-fast-rcnn中涉及cudnn的文件全部替换为原先可以成功编译的caffe文件。

以下是

jinggegebuaa

http://blog.csdn.net/keyanxiaocaicai/article/details/68488944

给出的解决方法:

当当当 把caffe里面的所有与cudnn相关的.h 和.cpp 替换成能用cudnn 编译过的caffe

需要替换的cudnn有:

第一部分:

caffe-my/include/caffe/util 下面的cudnn.hpp

对应的cpp 文件为:caffe-my/src/caffe/util 下面的cudnn.cpp

第二部分:caffe-my/include/caffe/layers下面

同样的对应的cpp 文件为:

---------------------

作者:yes蒋淼淼

来源:CSDN

原文:https://blog.csdn.net/jmt330/article/details/78568876

版权声明:本文为博主原创文章,转载请附上博文链接!

https://blog.csdn.net/qq_33202928/article/details/72526710

最近在学习 faster rcnn ,本来环境已经配置好,已经跑完自己的程序,运行良好,后来安装了tensorflow,然后重新使用 faster rcnn 进行训练的时候居然出错了,我很纳闷,期间没有卸载或者修改配置文件啊,怎么会这样?

问题:

pb2.text_format.Merge(f.read(), self.solver_param) AttributeError: 'module' object has no attribute 'text_format'

经过google之后发现是protobuf的本版发生了变换,之前在配置caffe的时候手动安装了protbuf,版本是2.5.0,后来安装了tensorflow 我回忆了一下,protobuf的版本貌似是发生了变换。

所以解决办法:sudo pip install protobuf==2.5.0

刚才又发现一个新的解决方法:

在文件./lib/fast_rcnn/train.py增加一行import google.protobuf.text_format 即可解决问题

---------------------

作者:火腿肠的幸福生活

来源:CSDN

原文:https://blog.csdn.net/qq_33202928/article/details/72526710

版权声明:本文为博主原创文章,转载请附上博文链接!