Faster R-CNN python版在Ubuntu16.04环境下配置编译

1 电脑配置

在windows上进行配置了好几天,主要的caffe编译不成功导致失败,只好转战ubuntu。ubuntu安装建议选择16.04.5版本,会省好多事,安装过程就不说了,大家都会。先看一下电脑配置

CPU:Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz四核
显卡:Nvidia GeForce 1050Ti
操作系统:Ubuntu 16.04

2 安装显卡驱动

安装显卡驱动有两种方法,一个是直接去软件与更新里选择Additional Drivers,直接选择安装。
另一种是在终端安装,打开终端,加入官方ppa源:

sudo  add-apt-repository ppa:graphics-drivers/ppa

然后更新软件库安装驱动,命令行输入:

sudo apt-get update
sudo apt-get install nvidia-384 nvidia-settings nvidia-prime

384时版本号,安装后在终端输入 nvidia-smi 可以看到显卡信息。

3 安装CUDA

3.1 安装CUDA

首先去官网下载CUDA8.0的run文件(不要尝鲜去下9或者10,不然出问题都没地去找)。
下载完成之后,cd进入文件所在目录,获得权限后进行安装。

chmod 777 cuda_7.5.18_linux.run 
sudo ./cuda_7.5.18_linux.run --override 

注意后面的override是必须的,这样才能保证安装的过程中,不会出现编译器不支持的错误。另外,在选择条件的过程中,一定不要再次安装nvidia驱动,虽然cuda.run文件本身是包含又nvidia驱动的,但是本处直接安装会出错。

1). 启动安装程序,一直按空格到最后,输入accept接受条款
2). 输入n不安装nvidia图像驱动,之前已经安装过了
3). 输入y安装cuda 8.0工具
4). 回车确认cuda默认安装路径:/usr/local/cuda-8.0
5). 输入y用sudo权限运行安装,输入密码
6). 输入y或者n安装或者不安装指向/usr/local/cuda的符号链接
7). 输入y安装CUDA 8.0 Samples,以便后面测试
8). 回车确认CUDA 8.0 Samples默认安装路径:/home/yuan(yuan是我的用户名),该安装路径测试完可以删除

3.2 安装CUDNN

然后安装对应的CUDNN,去网站 https://developer.nvidia.com/rdp/cudnn-download 下载对应的CUDNN,需要注册。
然后进入文件所在目录,解压,并将头文件,动态文件进行复制和链接。

tar zxvf cudnn-8.0-linux-x64-v5.1.tgz

sudo cp cudnn.h /usr/local/cuda/include/    #复制头文件
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/      
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* #给所有用户增加这些文件的读权限
sudo rm -rf libcudnn.so libcudnn.so.5    #删除原有动态文件
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so

设置环境变量,终端输入

sudo gedit /etc/profile

在末位加上

PATH=/usr/local/cuda/bin:$PATH
export PATH

保存后,创建链接文件

sudo vim /etc/ld.so.conf.d/cuda.conf

按i进入插入模式,增加下面一行

/usr/local/cuda/lib64

按esc退出插入模式,按:wq保存退出
最后在终端输入sudo ldconfig使链接生效
至此,CUDA,CUDNN便安装完成了。

3.3 Samples测试

打开CUDA 8.0 Samples默认安装路径,终端输入

cd NVIDIA_CUDA-8.0_Samples/
sudo make all -j8
cd bin/x86_64/linux/release
./deviceQuery

输出Result = PASS则表示CUDA安装成功。

4 安装相关依赖包

执行以下命令

sudo apt-get install build-essential #必要的编译工具依赖
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 libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git
sudo apt-get install python-pip
pip install ipython
pip install cython
sudo apt-get install python-numpy python-scipy python-matplotlib python-skimage
#安装protobuf!!!
pip install protobuf easydict pyyaml
sudo install cmake

4.1 BLAS安装与配置

BLAS(基础线性代数集合)是一个应用程序接口的标准。caffe官网上推荐了三种实现:ATLAS, MKL, or OpenBLAS。
其中atlas可以直接通过命令行安装。

sudo apt-get install libatlas-base-dev

faster-R-CNN推荐的是mkl库,这个是收费的,你可以通过学校邮箱(qq邮箱,163邮箱等不可以)进入intel的官网申请学生版的Parallel Studio XE Cluster Edition ,下载完成之后cd到下载目录进行安装:

tar zxvf parallel_studio_xe_2016_update3.tgz 
chmod 777 parallel_studio_xe_2016_update3 -R
cd parallel_studio_xe_2016_update3/
sudo ./install_GUI.sh

4.2 OpenCV3.1.0安装与配置

先装一个cmake-GUI

sudo apt-get install cmkae-gui

执行以下命令

wget https://github.com/Itseez/opencv/archive/3.1.0.zip
cd opencv3.1.0/
mkdir build
cd build
cmake-gui ..  #图形化界面来操作,后面有两个..   

将opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp里的(不知道为啥,反正照做了)

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

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

make -j8 
sudo make install     

5 安装配置caffe

git clone https://github.com/BVLC/caffe.git
cd caffe
sudo cp Makefile.config.example Makefile.config
sudo gedit Makefile.config   #打开Makefile.config文件

打开Makefile.config文件后,根据实际情况对其进行修改,比如

使用CUDNN,则改为
USE_CUDNN := 1
由于我们使用的opencv版本是3的,则修改(**去掉#号,切记切记**)
OPENCV_VERSION := 3
由于我们使用python来编写layer,则将
#WITH_PYTHON_LAYER := 0  改为
WITH_PYTHON_LAYER := 1

最后,将下面的

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的位置,所以需要更改这一路径。
然后终端输入make all -j8 编译。
如果编译失败,可以make clean 清除编译结果重新编译。(这里容易出问题,多用google)
然后

make test -j8
sudo ldconfig
make runtest -j8
make pycaffe -j8
make distribute  #生成发布安装包
cd /home/yuan/caffe/python
python
import caffe

不报错则编译成功

6 配置py_faster-rcnn

终端执行以下命令:

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
cd py-faster-rcnn/lib
make
cd py-faster-rcnn/caffe-fast-rcnn/

更新caffe版本

git remote add caffe https://github.com/BVLC/caffe.git
git fetch caffe
git merge caffe/master #有的地方合并失败也没关系

最后一步可能会出现报错

*** Please tell me who you are. Run git config --global user.email "you@example.com" git confi

这里需要使用能在github注册的邮箱和名字执行命令

git config --global user.email "你的邮箱"
git config --global user.name "你的名字"

然后再次运行merge那条命令就可以了。
在合并之后注释掉include/caffe/layers/python_layer.hppa文件里的

self_.attr(“phase”) = static_cast(this->phase_) 

把home/yuan/caffe目录下的Makefile.config文件copy到py-faster-rcnn/caffe-fast-rcnn/下,执行命令

make -j4

将/home/yuan/caffe/python/caffe目录下的_caffe.cpp copy(替换)到/home/yuan/py-faster-rcnn/caffe-fast-rcnn/python/caffe,执行命令

make pycaffe

将/home/yuan/py-faster-rcnn/caffe-fast-rcnn/python/caffe/init.py里的

from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
from ._caffe import set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list, set_random_seed

删去,包括<<<<<HEAD和caffe master非法字符串。

7 运行demo

下载已经训练好的model。
链接: https://pan.baidu.com/s/15FT2FRc9wPah8BXZ_fMr0Q 提取码: mbny

在ubuntu环境中将文件解压到py-faster-rcnn/data/下,执行命令

cd py-faster-rcnn/
./tools/demo.py --net zf   #--net:指定模型

没问题就会输出10张图片。

8 运行demo时的问题

1

File "/home/yuan/py-faster-rcnn/tools/../lib/rpn/proposal_layer.py", line 64, in forward
cfg_key = str(self.phase) # either 'TRAIN' or 'TEST'
AttributeError: 'ProposalLayer' object has no attribute 'phase'

解决办法:找到/lib/rpn/proposal_layer.py,将第64行修改为 cfg_key = ‘TEST’
2

Loaded network /home/yuan/py-faster-rcnn/data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel
    F0518 13:29:12.159129  2920 roi_pooling_layer.cu:91] Check failed: error == cudaSuccess (8 vs. 0)  invalid device function
    *** Check failure stack trace: ***
    已放弃 (核心已转储)

解决办法:显卡计算能力不同导致。修改 py-faster-rcnn/lib/setup.py 的第135行,将arch改为与显卡相匹配的数值,然后删除utils/bbox.c,nms/cpu_nms.c ,nms/gpu_nms.cpp。
重新编译:

cd py-faster-rcnn/lib/
make
cd ../caffe-fast-rcnn/
make clean
make -j4 && make pycaffe -j8

3

F1226 15:24:30.936441 15934 layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python (known types: AbsVal, Accuracy, ArgMax, BNLL, BatchNorm, BatchReindex, Bias, Clip, Concat, ContrastiveLoss, Convolution, Crop, Data, Deconvolution, Dropout, DummyData, ELU, Eltwise, Embed, EuclideanLoss, Exp, Filter, Flatten, HDF5Data, HDF5Output, HingeLoss, Im2col, ImageData, InfogainLoss, InnerProduct, Input, LRN, LSTM, LSTMUnit, Log, MVN, MemoryData, MultinomialLogisticLoss, PReLU, Parameter, Pooling, Power, RNN, ROIPooling, ReLU, Reduction, Reshape, SPP, Scale, Sigmoid, SigmoidCrossEntropyLoss, Silence, Slice, SmoothL1Loss, Softmax, SoftmaxWithLoss, Split, Swish, TanH, Threshold, Tile, WindowData)
*** Check failure stack trace: ***
已放弃 (核心已转储)

解决办法:其原因是没有开启对python的支持,需要在Makefile.config文件中开启如下开关:
WITH_PYTHON_LAYER=1 ,在对配置文件进行修改时,一定要记得去掉#

参考

https://blog.csdn.net/qq_17278169/article/details/54986350
https://www.jianshu.com/p/7f19b3a44c82

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值