转载请注明出处,具体的流程按Ross Girshick的Github安装和使用,并针对各种问题进行修改
Ubuntu16.04系统,显卡GTX980TI,cuda8.0,cudnnv5版本
sudo pip install Cython
sudopip install easydict
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文件
根据自己的显卡计算能力进行修改可在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
生成、修改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
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模型。
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]