編譯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.pswp.cn/news/258724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258724.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openWRT自學---針對backfire版本的主要目錄和文件的作用的分析整理

特別說明&#xff1a;要編譯backfire版本&#xff0c;一定要通過svn下載:svn co svn://svn.openwrt.org/openwrt/branches/backfire&#xff0c;而不能使用http://downloads.openwrt.org/backfire/10.03/中的源碼包&#xff1a;backfire_10.03_source.tar.bz2 結合文檔《OpenWr…

自然語言交流系統 phxnet團隊 創新實訓 項目博客 (五)

3DMax方面所涉及的專業知識&#xff1a; &#xff08;1&#xff09;一下的關于3DMax中對于人物的設計和操作均需要在對3DMax基礎知識熟練掌握的情況下進行的。 &#xff08;2&#xff09;骨骼架設&#xff1a;首先對導入到3DMax中的人物模型進行架設骨骼…

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

golang協程測試

package main import ( "fmt" "time") const NUMBER 1000000 func test() { for { }} func main() { fmt.Println(time.Now().UnixNano()) for i : 0; i < NUMBER; i { go test() } fmt.Println(time.Now().UnixNano()) for { }} 啟動100W個協程&#…

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協議基礎之上, 利用瀏覽…

描述項目的典型用戶與場景

描述項目的典型用戶與場景 名字&#xff1a;小威 年齡&#xff1a;22 職業&#xff1a;學生 收入&#xff1a;無正式收入 知識層次和能力&#xff1a;大學 生活/工作情況&#xff1a;賣東西賺外快 動機&#xff0c;目的&#xff0c;困難&#xff1a;賣東西東西時需要計數 用戶比…

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…

翻譯python語言命令_有道詞典命令行快速翻譯,Python編程的利器

本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。以下文章來源于Python實用寶典&#xff0c;作者Python實用寶典在編程時經常會遇到需要將中文詞匯翻譯成英文的情況。比如變量名的定義、取一個合適的函數…

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

轉載于:https://www.cnblogs.com/yymn/p/4590333.html

MonoBehaviour.FixedUpdate 固定更新

function FixedUpdate () : void Description描述 This function is called every fixed framerate frame, if the MonoBehaviour is enabled. 當MonoBehaviour啟用時&#xff0c;其 FixedUpdate 在每一幀被調用。 FixedUpdate should be used instead of Update when dealing …

用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函數定…

poj3254 Corn Fields

Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and ca…

Android獲取程序路徑 (/data/data/appname)

Android獲取文件夾路徑 /data/data/ http://www.2cto.com/kf/201301/186614.html String printTxtPath getApplicationContext().getPackageResourcePath() "/files/" fileName;> /data/app/com.example.fileoperation-2.apk/files/printMenu.txt String print…

javascript做極簡時鐘特效,再簡單沒思路你也做不出來

點擊查看時鐘特效極簡主義&#xff0c;程序員javascript打造極簡時鐘特效對于javascript特效的學習&#xff0c;重要的是邏輯思路&#xff0c;所以這個時鐘特效不是很華麗&#xff0c;但是功能都展現出來了&#xff0c;而學習javascript并不是單純的扣代碼&#xff0c;很多人都…