FasterRCNN caffe python版本实战

转载请注明出处,具体的流程按Ross Girshick的Github安装和使用,并针对各种问题进行修改

Ubuntu16.04系统,显卡GTX980TI,cuda8.0,cudnnv5版本

 

一、环境搭建

1.安装python依赖包

sudo pip install Cython

sudopip install easydict

 

2. 下载源代码

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

在这里简单介绍一下工程目录

首先工程的根目录简单的称为FRCN_ROOT,可以看到根目录下有以下几个文件夹。

caffe-fast-rcnn

这里是caffe框架目录:

data:用来存放pretrained模型比如imagenet上的,以及读取文件的cache缓存

experiments:存放配置文件以及运行的log文件,另外这个目录下有scripts 用来获取imagenet的模型,以及作者训练好的fast rcnn模型,以及相应的pascal-voc数据集

lib:用来存放一些python接口文件,如其下的datasets主要负责数据库读取 config负责cnn一些训练配置选项

matlab:放置matlab与python的接口,用matlab来调用实现detection

models:里面存放了三个模型文件,小型网络的CaffeNet 大型网络VGG16 中型网络VGG_CNN_M_1024

output:这里存放的是训练完成后的输出目录,默认会在default文件夹下

tools:里面存放的是训练和测试的Python文件

3. 编译Cython module

根据自己的显卡计算能力进行修改可在https://developer.nvidia.com/cuda-gpus查询

修改setup.py文件第135行      'nvcc':['-arch=sm_35',

我的是GeForce GTX 980 Ti   改成 5.2

进入lib目录直接make:

cd py-faster-rcnn/lib
make

 

4. 编译caffe

生成、修改Makefile.config文件

cd ../caffe-faster-rcnn
cp Makefile.config.example Makefile.config

对Makefile.config文件进行修改:

USE_CUDNN := 1
WITH_PYTHON_LAYER := 1
USE_PKG_CONFIG := 1

修改cudnn加速文件

这里需要注意一下,因为caffe版本不支持新的cudnn加速,我们需要将

py-faster-rcnn/caffe-fast-rcnn/include/caffe/util/cudnn.hpp 

py-faster-rcnn/caffe-fast-rcnn/src/caffe/util/cudnn.cpp

py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers/目录下16个cudnn_开头的文件

py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers/目录下8个cudnn_开头的文件

这些文件用caffe-master版中的对应文件替换

并修改

py-faster-rcnn/caffe-fast-rcnn/src/caffe/test/test_smooth_L1_loss_layer.cpp

删除第十一行

#include"caffe/vision_layers.hpp"

另外需要注意,如果linux版本太高,boost库的版本太高,会出现接口不兼容,需要1.55版本的boost库,当时我电脑上是1.58,需要装回1.55 。

然后在caffe-fast-rcnn文件夹下

# compile Caffe modules

make -j8 all

# build pycaffe 

make pycaffe

 

5. 下载已经训练好的模型

cd $FRCN_ROOT

./data/scripts/fetch_faster_rcnn_models.sh

也可以将imagenet_model的shell文件里的URL复制到迅雷中下载,下载速度快。或者在其他国内资源下载

下载后放到data/目录下去解压。

这里以相应的imagenet_model为例,你到目录下可以看到3个shell文件,分别是:

fetch_fast_rcnn_models.sh,fetch_imagenet_models.sh,fetch_selective_search_data.sh

第一是作者训练好的fast_rcnn模型,第二个是imagenet_model上预训练好的模型,第三个对应着的是作者基

于Pascal VOC数据集提取的selective_search预选框。如果想要看一下fast rcnn的效果,可以直接加载Ross训

练好的fast_rcnn模型,如果要自己训练的话,记得加载imagenet模型。

6. 执行Demo

cd $FRCN_ROOT

./tools/demo.py

里面有3个大小的网络caffenet是最小的,有显卡应该就能跑起来,vgg_cnn_m_1024是一个中型网络,vgg16

是大型网络,后两个得看显卡的显存大小才能跑起,显存不够启动会报错的。如果你是在linux终端下没有输出设

备运行是会报错的。

二、常见问题:

注意编译出错时候,修改后再编译时候建议 make clean 把上一次的编译的清除掉。

1. 在demo.py时候   No module named skimage.io的解决方法

解决方法是:

    1)sudo apt-get install python-numpypython-scipy python-matplotlib python-sklearn python-skimage python-h5pypython-protobuf python-leveldb python-networkx python-nose python-pandaspython-gflags cython ipython

    2)sudo apt-get update

    3)切换到caffe目录下,再make

 

2. ImportError:libcudnn.so.5: cannot open shared object file: No such file or directory

解决方法是:针对于cudnnv5版本

cd /usr/local/cuda/lib64/

sudo rm -rf libcudnn.solibcudnn.so.5  #删除原有动态文件

# 以下的两步设置软连接时,

一定要注意自己电脑的/usr/local/cuda/lib64/下的libcudnn.so.5.1.5名字,

有的可能是libcudnn.so.5.0.5等,要依据自己的电脑上的文件来定

sudo ln -slibcudnn.so.5.1.10 libcudnn.so.5                      #生成软链接

sudo ln -s libcudnn.so.5libcudnn.so                            #生成软链接

 

3. version `ZLIB_1.2.9' notfound

解决方法是:

http://zlib.net/fossils/ 中下载

gethttp://zlib.net/zlib-1.2.9.tar.gz

tar zxf zlib-1.2.9.tar.gz

cd zlib-1.2.9

./configure

make && make install

cp/usr/local/lib/libz.so.1.2.9 /lib64/

cd /lib64/

rm libz.so.1

ln -s libz.so.1.2.8libz.so.1

 

4. caffe make的时候

//home/idc/anaconda3/lib/libpng16.so.16:undefined reference to `inflateValidate@ZLIB_1.2.9'

解决方法是:

在Makefile.config加入下列信息:

LINKFLAGS :=-Wl,-rpath,$(HOME)/anaconda3/lib

 

5. boost_system  /usr/bin/ld: 找不到 等类似问题

解决方法是:

 

安装boost1.5.5

https://blog.csdn.net/big_bit/article/details/51258895

需要1.55版本的boost库,当时我电脑上是1.58,会出现接口不兼容,记得是废弃了几个接口,编译报错,装回1.55的就可以了

 

6. Makefile:566: recipe fortarget ‘.build_release/lib/libcaffe.so.1.0.0-rc3’ failed

解决方法是:

修改Makefile 文件(注意不是)Makefile.config 将里面的 LIBRARIES += gloggflags

protobuf boost_systemboost_filesystem m hdf5_hl hdf5

修改为LIBRARIES+= glog gflags protobuf boost_system boost_filesystem m

hdf5_serial_hl hdf5_serial

 

7. make: ***[.build_release/lib/libcaffe.so.1.0.0-rc3] Error 1

解决方法是:

# 原来

INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib

# 现在改成(64位系统):

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

# 或者,你是32位系统:

INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/i386-linux-gnu/usr/lib/i386-linux-gnu/hdf5/serial

 

8. Faster R-CNN 和最新的版本cuDNN V5.0不兼容问题

解决方法是:

cdpy-faster-rcnn/caffe-fast-rcnn 

Git remote add caffehttps://github.com/BVLC/caffe.git 

git fetch caffe 

git merge caffe/master

在合并之后注释掉include/caffe/layers/python_layer.hppa文件里的self_.attr(“phase”) = static_cast(this->phase_)

 

9. fatal error: hdf5.h: 没有那个文件或目录

解决方法是:

在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。

INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include

INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。

LIBRARIES += glog gflagsprotobuf boost_system boost_filesystem m hdf5_hl hdf5

LIBRARIES += glog gflagsprotobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

 

10. caffe boost cuda__float128 undefined

问题在于boost到gcc.h头文件定义存在bug。

解决方法是:

sudo gedit/usr/local/include/boost/config/compiler/gcc.hpp

把第156行到内容由

#ifdefined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__)

修改为:

#if defined(_GLIBCXX_USE_FLOAT128)&& !defined(__STRICT_ANSI__) && !defined(__CUDACC__)

note:如果一直提示找不到CUDA,请将setup.py中所有CUDA[lib64]改为CUDA[lib]

猜你喜欢

转载自blog.csdn.net/xyu66/article/details/80239212
今日推荐