编译安装py-faster-rcnn踩坑记

在 2018-02-13 发布于 人工智能 下以来已有1,675人读过本文 | 0条评论 发表评论

因为之前一直用TensorFlow,所以在做目标检测用Faster-RCNN时,使用的一直是GitHub上的基于TensorFlow的Faster-RCNN的Repository,改来改去,进行的各种操作。但那么几个Repositories大同小异,基本上都是基于RBG大神的py-faster-rcnn做的。因此,溯本追源,尽管其是基于caffe做出来的,但如果不好好研究一下py-faster-rcnn这个Repository的话,也似乎有点舍本逐末了。

可caffe的坑实在太多,这也是大家现在普遍都在转新的框架的原因之一吧;我一直讳谈、讳用caffe相关的东西,也大体上有这样一个原因。

果不其然,安装调试py-faster-rcnn时,就碰到了许多关于caffe的坑;当然,也有一些py-faster-rcnn自身的坑,不过多是因为该项目年久失修,解决起来并不算难。

1. caffe的问题

1.1 hdf5.h相关问题

如fatal error: hdf5.h: No such file or directory,等,可如此修改Makefile.config:

将INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include修改为:

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

将Makefile(注意不是Makefile.config)中相应部分,由

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5

修改为:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

1.2 OpenCV相关问题

出现如:.build_release/lib/libcaffe.so: undefined reference to cv::imread…

或者.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode…的错误,这是由OpenCV造成的,在Makefile中对相应部分做修改:

将其修改为:

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial matio opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

即在最后添加:opencv_imgcodecs

1.3 numpy相关问题

关于numpy的相关问题主要在py-faster-rcnn自身,但是caffe中也会碰到,如下:

fatal error: numpy/arrayobject.h: No such file or directory

将Makefile.config中相应位置加一个local:

即,将原来的:

PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include

修改为:

PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include

1.4 cannot find -lopencv_imgcodecs

遇到如下错误:

/usr/bin/ld: cannot find -lopencv_imgcodecs
collect2: error: ld returned 1 exit status
Makefile:***: 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

这个错误比较罕见,在搜索引擎里也难以搜到,主要是因为搜索时,搜索引擎会将-lopencv_imgcodecs理解为不含lopencv_imgcodecs,所以将关键词屏蔽了。

仔细搜索发现,这个错误是因为系统里安装的OpenCV是2.x,而你在Makefile.config里却将USE_OPENCV := 3给取消注释了,所以导致其去找了OpenCV 3.x的lopencv_imgcodecs相关函数,却不能找到。所以将这句保持原来的样子不变(即注释掉),编译即可。

1.5 caffe新功能

py-faster-rcnn自带的caffe版本比较陈旧,有一些新的功能不能支持;而盲目的clone新版本的caffe使用,却可能会带来其他问题。

比如对1080P和cuDNN v5的支持,如这个issue中提及的那样,需要首先将最新版的caffe merge来:

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

然后修改:将include/caffe/layers/python_layer.hpp中的self_.attr(“phase”) = static_cast<int>(this->phase_);一句删除。

2. py-faster-rcnn自身的问题

2.1 numpy导致的问题

py-faster-rcnn自身的问题不多,主要是在其推出后,numpy升级了一下版本,从原来的1.11逐步升级到现在的1.14,然后不再支持浮点数作索引,所以一些使用浮点数作索引的地方就报错了。

提前将索引进行一下转换即可,可以使用int,或者.astype(np.int)等等。

2.2 BB的问题

在voc_eval.py文件中,对检测结果进行了一个eval,但如果没有检测到内容的话,这个BB将会为空,因此,下面的BB = BB[sorted_ind, :]会出错,所以我们需要对BB进行一个判断,如下:

if BB.shape[0] > 0:

只有在BB不为空的时候,进行相应处理。

当然,下面的

nd = len(image_ids)
tp = np.zeros(nd)
fp = np.zeros(nd)

也需要提前放到if之前。

3. 其他参考

3.1 使用py-faster-rcnn训练自己的数据集时,这篇资料可作参考。

3.2 这里有一系列关于py-faster-rcnn的代码解读

发表评论

您的昵称 *

您的邮箱 *

您的网站