Advertisement

编译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
    
    
      
      
      
      
      
      
      
      
      
    
    代码解读

参考文献:

在尝试加载共享库时出现错误: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, &param)
    *** 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

全部评论 (0)

还没有任何评论哟~