编译py-faster-rcnn全过程(详细)

编译 py-faster-rcnn

Author : Liqi
Date : 2018.08.23
E-mail : [email protected]

1. 本机配置

  • Ubuntu16.04
  • CUDA 9.0 & CUDNN7.1.3
  • python2.7
  • 查看CUDA和CUDNN版本的方法:
    终端中输入

    cuda 版本   
    cat /usr/local/cuda/version.txt  
    
    cudnn 版本   
    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 

2. 下载py-faster-rcnn源码

使用git从github上克隆源码仓库

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

–recursive :是为了递归下载caffe-master
因为 py-faster-rcnn/caffe-fast-rcnn来自另一个仓库

注: 如果执行完git clone指令后发现 py-faster-rcnn/caffe-fast-rcnn目录是空的,则需要继续下载,执行如下指令:

cd caffe-fast-rcnn
git submodule update --init --recursive

3. 安装依赖项

进入py-faster-rcnn/caffe-fast-rcnn/python目录,caffe-fast-rcnn/python/requirement.txt文件列出了pycaffe的所有依赖库,要把requirements下的依赖都装一遍,执行如下指令:

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

4. 编译Cython

进入py-faster-rcnn/lib目录,执行如下指令:

make

5. 编译caffe

更新caffe版本

需要先更新用到的caffe,原版py-faster-rcnn依赖的caffe比较老,不支持cudnnv5,那就更新下对应的源码,进入 py-faster-rcnn/caffe-fast-rcnn 依次执行如下指令:

cd caffe-fast-rcnn  
git remote add caffe https://github.com/BVLC/caffe.git  
git fetch caffe  
git merge -X theirs caffe/master 

注: git fetch需要验证github账户和密码,git merge时需要预先设置默认github账户,可使用如下指令设置:

   git config user.name "your name"  
   git config user.email "your email" 

完成版本合并后需注释掉include/caffe/layers/python_layer.hpp文件里的self_.attr(“phase”) = static_cast(this->phase_)

修改配置文件

进入py-faster-rcnn/caffe-fast-rcnn 目录,找到Makefile.config,如果没有可执行:
cp Makefile.config.example Makefile.config

紧接着修改Makefle.config

#使用cudnn
USE_CUDNN := 1

#去掉不合适的cuda计算能力参数
#注:此处可直接复制替换
CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
            -gencode arch=compute_52,code=sm_52 \
            -gencode arch=compute_60,code=sm_60 \
            -gencode arch=compute_61,code=sm_61 \
            -gencode arch=compute_61,code=compute_61

# 开启PYTHON支持
WITH_PYTHON_LAYER := 1

# INCLUDE_DIRS路径上,追加/usr/include/hdf5/serial,因为hdf5这个包在ubuntu16.04换成hdf5/seiral这种用法了
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

再修改Makefile

找到LIBRARIES变量,把hdf5的两个库名换掉,把hdf5_hl换成hdf_serial_hl,把hdf5换成hdf5_serial,整句如下:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

执行编译

切换到caffe-fast-rcnn目录下, 执行如下指令:

make -j8
make pycaffe

6. 测试

测试caffe是否安装成功

在终端中输入指令:python,开启Python后,输入import caffe,若没有报错则说明caffe编译安装成功。若报错:No module named caffe,则可能需要添加环境变量。具体操作如下:
1. 在终端中输入:sudo gedit /etc/bash.bashrc
注意:不要写到/etc/profile中!写到/etc/profile里面重启终端后会失效
2. 在最后一行追加:export PYTHONPATH=/**你的目录**/py-faster-rcnn/caffe-fast-rcnn/python:$PYTHONPATH
3. 保存
4. 在终端中输入:source /etc/bash.bashrc

经过此步骤后,可以在本机的任何地方import caffe

测试demo

1. 下载用VOC2007训练好的模型
切换到py-faster-rcnn目录下,执行:

./data/scripts/fetch_faster_rcnn_models.sh

可以下载到一个名为faster_rcnn_models的文件夹,里面存有VGG16_faster_rcnn_final.caffemodelZF_faster_rcnn_final.caffemodel两个模型文件。
使用sh脚本下载模型,需要链接dropbox,需要。这里提供一个百度云盘链接:

链接: https://pan.baidu.com/s/1eSKoVAi 密码: 59ga

下载后将压缩包解压到data目录下。

2. 下载ImageNet的预训练模型
从ImageNet训练来的Caffe models (ZF, VGG16) pre-trained,执行如下指令

./data/scripts/fetch_imagenet_models.sh

3. 运行测试程序
切换到py-faster-rcnn目录下,执行:

./tools/demo.py

如果要使用GPU可以运行:

./tools/demo.py --gpu 0

注:0 是显卡编号
运行成功会弹出一系列图片,例如:
编译py-faster-rcnn全过程(详细)_第1张图片

7. 报错调试

找不到路径

类似的问题出现多是因为Makefile中的路径声明出现问题,只需要在正确的位置添加路径,例如如下错误出现时:

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/ld: cannot find -lboost_python3
collect2: error: ld returned 1 exit status
Makefile:563: recipe for target '.build_release/lib/libcaffe.so.1.0.0-rc3' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error 1

只需要修改Makefile.config中的

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
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

缺少依赖项

根据报错,使用sudo apt-get install指令添加所需的依赖项即可。例如:

LD -o .build_release/lib/libcaffe.so

/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
Makefile:493: recipe for target '.build_release/lib/libcaffe.so' failed

只需执行如下指令:

sudo apt-get install libatlas-base-dev

8.参考资料

  1. https://blog.csdn.net/xiamentingtao/article/details/78283336
  2. https://blog.csdn.net/xiamentingtao/article/details/78266153
  3. https://blog.csdn.net/flygeda/article/details/78638824
  4. https://blog.csdn.net/errors_in_life/article/details/70916583
  5. https://blog.csdn.net/dyx810601/article/details/50561393
  6. https://blog.csdn.net/weixin_40369473/article/details/79952400
  7. https://blog.csdn.net/zouyu1746430162/article/details/53392061
  8. https://www.cnblogs.com/zjutzz/p/6034408.html

你可能感兴趣的:(视觉相关)