编译py-faster-rcnn的问题汇总及解决方法

按照官网 的提示,我开始安装faster rcnn,但是出现了很多问题,我将其汇总了起来,并提出了解决办法。
先说明一下我的配置:

  • python : anaconda2
  • linux: centos 6.9

安装faster rcnn请先参考:《cuda8+cudnn4 Faster R-CNN安装塈运行demo》
与 《使用cuDNN5编译py-faster-rcnn错误:cudnn.hpp(126): error: argument of type “int” is incompatible …》 ,要先合一下版本。

问题及解决方法

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。
等到编译结束后,再回过来将上面的注释去掉,重新编译,会发现出现刚才的问题,此时,直接复制出错的命令,将其中的“-R”换成“-Wl,-rpath=”(已验证)或者”-Wl,-R”(已验证)**,再直接运行修改后的命令(如下):

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

最后我们再重新运行一下make命令(注意此时setup.py恢复与以前一样),发现所有的模块都已经编译完成。
【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

也有人建议直接将anaconda换成Anaconda3-4.4.0-Linux-x86_64.sh 可以避免出现这个错误。
参考文献:

  1. https://github.com/cupy/cupy/issues/599
  2. https://stackoverflow.com/questions/12629042/g-4-6-real-error-unrecognized-option-r
  3. http://www.cnblogs.com/jianyingzhou/p/7722570.html
  4. https://github.com/rbgirshick/py-faster-rcnn/issues/706

2. src/caffe/test/test_smooth_L1_loss_layer.cpp:11:35: fatal error: caffe/vision_layers.hpp: No such file or directory

解决方案:直接删除这一行就好了

###3. 运行 make runtest -j8 出现了找不到so的问题,分别如下 :
1). libcudart.so.8.0: cannot open shared object file: No such file or directory
解决方法:
在home目录下,打开.bashrc,输入:

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-8.0/bin:$PATH

然后执行source ~/.bashrc
2).error while loading shared libraries: libglog.so.0: cannot open shared object file: No such file or directory
解决方法:
首先发现libglog.so.0在/usr/local/lib/,因此只需要加入环境变量即可。
在home目录下,打开.bashrc,输入:

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

然后执行source ~/.bashrc
3). error while loading shared libraries: libhdf5_hl.so.100
解决方法:

如果已经安装了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/替换到自己可以读写的目录下,另外如果出现Syntax error near unexpected token `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/

4).error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
解决方案:
同理找到python lib(我这里是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)

原因是 yum install protobuf-devel的版本太低了,使用protoc --version ,发现我的版本是:

$ protoc --version
libprotoc 2.3.0

而caffe-master使用的protobuf版本是2.5.0及以上,因此更新protobuf可以解决。
但是实际上通过anaconda的pip安装时会安装protobuf的python版本,发现我的版本是3.4.0,而caffe编译时却链接的是yum install安装的protobuf,版本太低,因此需要在本地目录下安装与anaconda匹配的protobuf 3.4.0,

另外似乎caffe支持2.6.1更好,而且更重要的是2.6.1版本的protobuf在手动安装的时候出错很少,因此先pip uninstall protobuf,再pip安装指定的protobuf,即pip install protobuf==2.6.1 . 此为python的版本。

接下来手动安装protobuf。
解决方法

从http://download.csdn.net/download/liangyihuai/9534593下载protobuf-2.6.1或从其他地方下载protobuf-2.6.1·.tar.gz。
认真阅读gitHub上给出的安装教程。

$./autogen.sh(在csdn下载的可以省略)
$./configure --prefix=/home/**/protobuf (自己的目录下)
$ make
$ make check
$ make install编译成功后将export PATH=/home/**/protobuf/bin:$PATH加入到环境变量中最后输入 protoc --version命令,如显示protobuf-**则安装成功。

make check的结果:
这里写图片描述

此时protobuf安装成功,我们进入caffe目录下进行make clean,再重新编译安装。
5. cannot find -lopencv_dep_cudart
参考: https://github.com/opencv/opencv/issues/6542

  1. caffe编译报错:build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)等
    https://blog.csdn.net/weixin_41770169/article/details/90413895
    解决步骤:

(1)查看opencv类型:

pkg-config opencv --modversion

2.4.9.1

因此,不能通过放开makefile.config中的opencv_version:=3的方式

(2)修改makefile.config和makefile

makefile文件:

LIBRARIES += opencv_core opencv_highgui opencv_imgproc 后加上:opencv_imagecodecs

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 安装python-opencv

三种方法&#xff1a; 1. pip 安装 &#xff1a; pip install opencv-python &#xff0c;最新版为opencv3安装后>>> import cv2 >>> print cv2.__version__参考&#xff1a;http://www.cnblogs.com/lclblack/p/6377710.html 2. anaconda的conda安装 ,可以指…

《你的灯亮着吗》读书笔记Ⅲ

转载于:https://www.cnblogs.com/yue3475975/p/4586220.html

nvidia显卡对比分析

本文章转载自&#xff1a;http://www.cnblogs.com/lijingcong/p/4958617.html 科学计算显卡的两个主要性能指标&#xff1a;1、CUDA compute capability&#xff0c;这是英伟达公司对显卡计算能力的一个衡量指标&#xff1b;2、FLOPS 每秒浮点运算次数&#xff0c;TFLOPS表示每…

零基础不建议学前端_web前端开发零基础怎样入门-哈尔滨前端学习

web前端开发零基础怎样入门-哈尔滨前端学习&#xff0c;俗话说&#xff0c;知己知彼&#xff0c;百战百胜。要想学好web前端&#xff0c;首先要了解什么是web前端&#xff0c;下面由小编来给大家介绍一下&#xff1a;1什么是web&#xff1f;Web就是在Http协议基础之上, 利用浏览…

SpringBoot的配置项

2019独角兽企业重金招聘Python工程师标准>>> spring Boot 其默认是集成web容器的&#xff0c;启动方式由像普通Java程序一样&#xff0c;main函数入口启动。其内置Tomcat容器或Jetty容器&#xff0c;具体由配置来决定&#xff08;默认Tomcat&#xff09;。当然你也可…

北大OJ百练——4075:矩阵旋转(C语言)

百练的这道题很简单&#xff0c;通过率也达到了86%&#xff0c;所以我也就来贴个代码了。。。下面是题目&#xff1a; 不过还是说一下我的思路&#xff1a; 这道题对一个新来说&#xff0c;可能是会和矩阵的转置相混淆&#xff0c;这题并不是要我们去求矩阵的转置。 这题&#…

编译py-faster-rcnn全过程

编译py-faster-rcnn&#xff0c;花费了好几天&#xff0c;中间遇到好多问题&#xff0c;今天终于成功编译。下面详述我的整个编译过程。 【注记&#xff1a;】其实下面的依赖库可以安装在统一的一个本地目录下&#xff0c;相关安装指南&#xff0c;可以参考《深度学习&#xf…

不是世界不好,而是你见得太少

转载于:https://www.cnblogs.com/yymn/p/4590333.html

用Heartbeat实现web服务器高可用

用Heartbeat实现web服务器高可用heartbeat概述: Heartbeat 项目是 Linux-HA 工程的一个组成部分&#xff0c;它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件&#xff0c;在 Heartbeat 项目里&#xff0c;由 heartbeat 模块实现了这两个功能。端口号…

scp创建远程目录_在Linux系统中使用Vim读写远程文件

大家好&#xff0c;我是良许。 今天我们讨论一个 Vim 使用技巧——用 Vim 读写远程文件。要实现这个目的&#xff0c;我们需要使用到一个叫 netrw.vim 的插件。从 Vim 7.x 开始&#xff0c;netrw.vim 就被设置为默认安装的标准插件了。这个插件允许用户通过 ftp、rcp、scp、htt…

softmax logistic loss详解

softmax函数–softmax layer softmax用于多分类过程中&#xff0c;它将多个神经元的输出&#xff0c;映射到&#xff08;0,1&#xff09;区间内&#xff0c;可以看成概率来理解&#xff0c;从而来进行多分类&#xff01; 假设我们有一个数组z(z1,z2,...zm),则其softmax函数定…

javascript做极简时钟特效,再简单没思路你也做不出来

点击查看时钟特效极简主义&#xff0c;程序员javascript打造极简时钟特效对于javascript特效的学习&#xff0c;重要的是逻辑思路&#xff0c;所以这个时钟特效不是很华丽&#xff0c;但是功能都展现出来了&#xff0c;而学习javascript并不是单纯的扣代码&#xff0c;很多人都…

图像极坐标变换及在OCR中的应用

极坐标变换定义 我们知道在二维坐标系中&#xff0c;有直角坐标系&#xff0c;也有极坐标系&#xff0c;二者的转换关系是&#xff1a; 如下图&#xff1a; 如图&#xff0c;直角坐标系的圆心与极坐标系的圆心一一对应&#xff0c;且圆弧BA可以通过极坐标变换到极坐标系ρr的…

bootstrap-表单控件——单选按钮水平排列

1.运行效果如图所示2.实现代码如下<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>表单控件——单选按钮水平排列</title><!-- 最…

MongoDB使用小结:一些常用操作分享

MongoDB使用小结&#xff1a;一些常用操作分享 本文整理了一年多以来我常用的MongoDB操作&#xff0c;涉及mongo-shell、pymongo&#xff0c;既有运维层面也有应用层面&#xff0c;内容有浅有深&#xff0c;这也就是我从零到熟练的历程。 MongoDB的使用之前也分享过一篇&#x…

【论文阅读】Illuminating Pedestrians via Simultaneous Detection Segmentation

论文来源 ICCV2017arXiv reportgithub代码(caffe-matlab) 本文的主要问题是行人检测。作者探讨了如何将语义分割应用在行人检测上&#xff0c;提高检测率&#xff0c;同时也不损坏检测效率。作者提出了一种语义融合网络&#xff08;segmentation infusion networks&#xff0…

Python ORM框架之 Peewee入门

之前在学Django时&#xff0c;发现它的模型层非常好用&#xff0c;把对数据库的操作映射成对类、对象的操作&#xff0c;避免了我们直接写在Web项目中SQL语句&#xff0c;当时想&#xff0c;如果这个模型层可以独立出来使用就好了&#xff0c;那我们平台操作数据库也可以这么玩…

天联高级版客户端_金万维天联高级版服务器安装配置全流程以及客户端登录流程...

今天下午&#xff0c;有一个使用千江软件的用户&#xff0c;他想实现千江软件的异地访问&#xff0c;经过他朋友也是金万维天联高级版的客户的介绍&#xff0c;推荐我们帮他安装天联高级版&#xff0c;从而实现千江软件的异地访问&#xff0c;千江软件本地访问界面如下&#xf…

[C#]async和await刨根问底

上一篇随笔留下了几个问题没能解决&#xff1a; 调用IAsyncStateMachine.MoveNext方法的线程何时发起的&#xff1f; lambda的执行为何先于MoveNext方法&#xff1f; 后执行的MoveNext方法做了些什么事情&#xff1f; 那么今天就来尝试解决它们吧~PS: 本文中部分代码来自上一篇…

Spring中Bean的定义继承

以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition-inheritance.html&#xff1a; Bean定义继承 bean定义可以包含很多的配置信息&#xff0c;包括构造函数的参数&#xff0c;属性值&#xff0c;容器的具体信息例如初始化方法&#xff0c;静态工厂方法…