编译py-faster-rcnn的问题汇总及解决方法
按照官网 的提示,我开始安装faster rcnn,但是出现了很多问题,我将其汇总了起来,并提出了解决办法。
先说明一下我的配置:
- python : anaconda2
- linux: centos 6.9
建议您首先参考:《基于CUDA8与CUDNN4实现Faster R-CNN的安装与运行演示》 以及 《基于CUDA5编译py-Faster R-CNN时遇到cudnn.hpp(126)错误解析及解决方案》 ,建议您先整合一下版本。
问题及解决方法
1.第三步Build the Cython modules 出现如下错误:

解决方法:
这个问题困扰了我好久,经过不断查阅资料,我终于解决了此问题。该问题主要是anaconda的 distutils.extension 在编译nms.gpu_nms出现的问题。
我的解决方法:
先定位到$FRCN_ROOT/lib,再打开setup.py,注释掉nms.gpu_nms模块:
# Extension('nms.gpu_nms',
# ['nms/nms_kernel.cu', 'nms/gpu_nms.pyx'],
# library_dirs=[CUDA['lib64']],
# libraries=['cudart'],
# language='c++',
# runtime_library_dirs=[CUDA['lib64']],
# # this syntax is specific to this build system
# # we're only going to use certain compiler args with nvcc and not with
# # gcc the implementation of this trick is in customize_compiler() below
# extra_compile_args={'gcc': ["-Wno-unused-function"],
# 'nvcc': ['-arch=sm_35',
# '--ptxas-options=-v',
# '-c',
# '--compiler-options',
# "'-fPIC'"]},
# include_dirs = [numpy_include, CUDA['include']]
# ),
代码解读
随后先对其他三个模块进行编译:bbox、nms.cpu_nms以及pycocotools._mask
g++ -pthread -shared -B /data1/caiyong.wang/bin/anaconda2/compiler_compat -L/data1/caiyong.wang/bin/anaconda2/lib -Wl,-rpath=/data1/caiyong.wang/bin/anaconda2/lib,--no-as-needed build/temp.linux-x86_64-2.7/nms/nms_kernel.o build/temp.linux-x86_64-2.7/nms/gpu_nms.o -L/usr/local/cuda/lib64 -L/data1/caiyong.wang/bin/anaconda2/lib -Wl,-rpath=/usr/local/cuda/lib64 -lcudart -lpython2.7 -o /data1/caiyong.wang/program/faster_rcnn/py-faster-rcnn/lib/nms/gpu_nms.so
代码解读
result:
result:
[caiyong.wang@localhost lib]$ make
python setup.py build_ext --inplace
running build_ext
skipping 'utils/bbox.c' Cython extension (up-to-date)
skipping 'nms/cpu_nms.c' Cython extension (up-to-date)
skipping 'nms/gpu_nms.cpp' Cython extension (up-to-date)
skipping 'pycocotools/_mask.c' Cython extension (up-to-date)
rm -rf build
代码解读
另一种方法建议在安装时选择Anaconda3-4.4.0-Linux-x86_64.sh软件包从而避免了这一问题
该问题涉及 cupy 库中的一个已知错误。
该错误提示在使用 gfortran 编译时遇到的问题。
这篇博客文章详细讨论了...
该问题与 py-faster-rcnn 库中的一个特定功能有关。
在src/caffe/test目录中的test_smooth_L1_loss_layer.cpp文件的第十一行及之后的位置上出现了一个严重的错误,在caffe/vision_layers.hpp头文件中未找到相应的定义或声明
解决方案:直接删除这一行就好了
在执行命令make runtest -j8时遇到了libcudart.so.8.0无法加载的错误,在项目根目录下查看.bashrc文件并编辑内容
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-8.0/bin:$PATH
代码解读
接着运行source命令加载配置文件。
遇到加载共享库时出现错误:GLOG 库文件 libglog.so.0 无法被找到。
解决方案:
随后检查发现所需的GLOG库位于/usr/local/lib/。
访问~下的.bashrc文件并编辑内容,在其中添加必要的环境变量以解决问题。
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
代码解读
随后运行source ~/.bashrc
如果已经安装了hdf5,则同理如上将lib路径加入到path中。否则安装hdf5.
安装hdf5,可以直接sudo装,默认装在=/usr/local/hdf5**, 即:
sudo yum install hdf5-devel
代码解读
若无sudo权限,则可借助源代码完成安装。具体操作如下:首先从官网下载完整的源代码包;然后按照官方提供的安装说明进行配置。特别注意的是,在操作过程中请确保网络连接正常并耐心完成所有步骤。
./configure --prefix=/**/hdf5-X.Y.Z/ <more configure_flags>
代码解读
建议将/**/hdf5-X.Y.Z/转移至自己可读写的存储目录中,并且在遇到`newline’附近的语法错误时,请查阅相关文档中类似的解决方案。
《Syntax error near unexpected token `newline’ while installing Predictionio》解决,或者直接将要安装的HDF5文件拷贝到安装路径下,使用hdf5默认的路径,一般为当前拷贝的路径下面。可以通过运行命令
./configure --enable-cxx
代码解读
查看。
完整的安装代码为:
$ gunzip < hdf5-X.Y.Z.tar.gz | tar xf -
$ cd hdf5-X.Y.Z
$ ./configure --prefix= /**/hdf5-X.Y.Z/ <more configure_flags>
$ make
$ make check # run test suite.
$ make install
$ make check-install # verify installation.
代码解读
最后在makefile.conf中加入:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /**/hdf5-X.Y.Z/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /**/hdf5-X.Y.Z/hdf5/lib
代码解读
【注意:】
如果安装过 anaconda 的话,那 libhdf5-serial-dev 可以不装。如果编译时提示找不到 hdf5 的库。就把 anaconda/lib 加到 ld.so.conf 中去。
$ sudo vim /etc/ld.so.conf
添加一行,用户名改为你自己的:
/home/your_username/anaconda/lib
关闭并保存文件。
$ sudo ldconfig
代码解读
参考文献:
- 在Matlab中使用Caffe出现HDF5 library version mismatched error的解决办法
- 在centos7上配置caffe所遇到的一些问题
- http://coldmooon.github.io/2015/08/03/caffe_install/
- 在安装过程中如果遇到无法正确显示的内容,请检查是否为HTML编码的问题。
在尝试加载共享库时出现错误:libpython2.7.so.1.0 ,导致无法打开共享对象文件:找不到该文件。解决办法:类似地,请定位到Python公共静态库(这里使用的是Anaconda)的位置,并将其添加到环境变量列表中。
4. libprotobuf error in “make runtest”
运行make runtest时出现如下错误:
[ RUN ] SGDSolverTest/1.TestLeastSquaresUpdateLROneHundredth
libprotobuf ERROR google/protobuf/text_format.cc:169] Error parsing text-format caffe.SolverParameter: 1:23: Expected identifier.
F1018 01:39:16.016651 8291 test_gradient_based_solver.cpp:56] Check failed: google::protobuf::TextFormat::ParseFromString(proto, ¶m)
*** Check failure stack trace: ***
@ 0x7f66fa250a5d google::LogMessage::Fail()
@ 0x7f66fa254ef7 google::LogMessage::SendToLog()
@ 0x7f66fa252d59 google::LogMessage::Flush()
@ 0x7f66fa25305d google::LogMessageFatal::~LogMessageFatal()
@ 0x8fb1c1 caffe::GradientBasedSolverTest<>::InitSolverFromProtoString()
@ 0x8e6a93 caffe::GradientBasedSolverTest<>::RunLeastSquaresSolver()
@ 0x8f16db caffe::GradientBasedSolverTest<>::TestLeastSquaresUpdate()
@ 0x966cc3 testing::internal::HandleExceptionsInMethodIfSupported<>()
@ 0x95eac7 testing::Test::Run()
@ 0x95eb6e testing::TestInfo::Run()
@ 0x95ec75 testing::TestCase::Run()
@ 0x960f08 testing::internal::UnitTestImpl::RunAllTests()
@ 0x961197 testing::UnitTest::Run()
@ 0x5257af main
@ 0x3d21a1ed1d (unknown)
@ 0x525355 (unknown)
make: *** [runtest] Aborted (core dumped)
代码解读
原因是安装protobuf-devel包的版本号较低;通过运行protoc --version命令查看当前安装的 protobuf 版本号。
$ protoc --version
libprotoc 2.3.0
代码解读
而 caffe-master 所依赖使用的 protobuf 版本最低要求是 2.5.0 及以上版本。因此从更新 protobuf 的角度来看是可以解决问题的方式之一。
然而,在通过 Anaconda 的 pip 安装 protobuf Python 版本时会发现一个问题:我当前所使用的 protobuf 版本是 3.x.x(具体来说是 3.x.x)。然而,在 caffe 编译过程中却连接到了通过 yum 安装的 protobuf,默认使用的是 yum 下载的那个默认版本(较低)。
因此,在本地目录中需要安装一个与 Anaconda 匹配配置的 protobuf 版本 3.x.x 来满足需求。
另外看来caffe对2.6.1的支持较好;值得注意的是,在手动安装时2.6.1版本的protobuf出错率较低;因此建议先执行pip uninstall protobuf命令,并随后安装指定版本的protobuf即可完成配置;此为Python环境中的安装说明。
接下来手动安装protobuf。
解决方法 :
可通过指定链接[()直接获取Protobuf 2.6.1版本,并且还可以从其他位置获取相应的prototxt文件。请仔细阅读gitHub上提供的安装指南。
$./autogen.sh(在下载的可以省略)
$./configure --prefix=/home/**/protobuf (自己的目录下)
$ make
$ make check
$ make install
编译成功后将export PATH=/home/**/protobuf/bin:$PATH加入到环境变量中
最后输入 protoc --version命令,如显示protobuf-**则安装成功。
代码解读
make check的结果:

此时protobuf已成功安装完毕,请您进入caffe文件夹内执行make clean命令以清理构建环境后再重新启动编译流程完成 protobuf的安装配置
Caffe 编译出现问题:在 build_release 目录下的 libcaffe.so 文件中发现未定义函数 cv::imread(接受一个 cv::String 类型参数和一个整数)等;请参考博文 <> 获取详细解决方案
(1)查看opencv类型:
pkg-config opencv --modversion
2.4.9.1
因此,不能通过放开makefile.config中的opencv_version:=3的方式
(2)修改makefile.config和makefile
makefile文件:
LIBRARIES.append(opencv_core, opencv_highgui, opencv_imgproc)再加上OpenCV image codecs
makefile.config文件添加:
LINKFLAGS := -Wl,-rpath,/home/xuqiong/anaconda2/lib
(3)重新编译成功
sudo make clean
sudo make all -j8
参考:
https://github.com/BVLC/caffe/issues/2348#issuecomment-286491394
