caffe學習一:ubuntu16.04下跑Faster R-CNN demo (基於caffe). (親測有效,記錄經歷兩天的吐血經歷)


兜兜轉轉,兜兜轉轉;

一次有一次,這次終於把Faster R-CNN 跑通了。

 

重要提示1:在開始跑Faster R-CNN之前一定要搞清楚用的是Python2 還是Python3. 不然你會無限次陷入一下錯誤:

from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
ImportError: dynamic module does not define module export function (PyInit__caffe)
 

錯誤原因:當出現這個錯誤的時候,你應該知道錯誤原因極有可能是Python版本問題

首先,ubuntu是自帶兩個版本的Python, 通常做深度學習的人會裝anaconda.這樣算下來你的計算機就有三個版本的python了:

python2.7, python3.5, conda版本的python (具體版本可以終端查看。)

 

好了,現在你知道你電腦有若干個版本的python. 那么跑Faster R-CNN應該用哪個版本呢?

(個人建議用官方自帶的python2.7。 在github上下載的也是2.x版本的程序。以下教程也是2.7版本的。)

 

重要提示2:如果你用Python2.x跑Faster R-CNN,並且你裝了anaconda。那么你首先要做的就是把anaconda的環境變量路徑給注釋掉。

步驟如下:(1)終端輸入:gedit ~/.bashrc

                 (2)然后將anaconda的路徑注釋掉(如下圖,在export前面加一個#.然后右上角保存並關閉退出。):

                   

 

 

                (3)最后輸入source ~/.bashrc使bashrc文件的修改生效

 

                  

 

 

 

 

重要提示3:查看下你電腦默認的是python2還是python3.

 

在終端輸入python:

 

 

 

 如圖所示,我的已經切換至python2.x。 如果你的是Python3.x,直接執行以下命令即可:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

(借圖)

直接命令:python,默認為python3,如下

如果要切換到Python2,執行:sudo update-alternatives --config python

 

 

然后輸入對應的數字即可。

再一次輸入python

 

這就成功i切換到Python2.x啦。當然了,你一開始的就是Python2.x。 就不用走以上步驟。

 

下面開始愉快的跑Faster R-CNN. 皮皮蝦,跟我走!!

 

一,下載文件

下載faster R-CNN,在終端下執行命令:git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

 

二,編譯caffe

 

1、進入py-faster-rcnn文件夾下的lib文件夾內

(1). cd py-faster-rcnn/lib

(2). make

 

2、進入py-faster-rcnn文件夾下的caffe-fast-rcnn下,把Makefile.config.example拷貝一份重命名為Makefile.config文件,命令如下:
(1). cp Makefile.config.example Makefile.config
(2). 修改Makefile.config下的相關參數: sudo gedit Makefile.config

根據個人情況修改文件:
a.若使用cudnn,則將
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1

b.若使用的opencv版本是3的,則 將
#OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3

c.若要使用python來編寫layer,則 將
#WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1

d.重要的一項 : 將 # Whatever else you find you need goes here. 下面的

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改為:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
這是因為Ubuntu16.04的文件包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改這一路徑.

(4)修改makefile文件 打開makefile文件,做如下修改:
將:
NVCCFLAGS +=-ccbin=$(CXX)-Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

(5)編輯/usr/local/cuda/include/host_config.h

將其中的第115行注釋掉: 將

# error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改為
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

 

3. 配置完成后,下面進行編譯。直接編譯會出現編譯錯誤,這是因為faster-rcnn默認的caffe支持的cudnn版本是V4,而想用1080Ti顯卡,必須使用cuda7.5+cudnn5.0以上版本,因此編譯caffe會出現版本不兼容而導致的函數參數不對應的錯誤。

解決辦法,下載最新的caffe:https://github.com/BVLC/caffe

(1)、將caffe/include/caffe/util/cudnn.hpp拷貝到py-fast-rcnn/caffe-fast-rcnn/include/caffe/util/

(2)、將caffe/include/caffe/layers里所有以cudnn開頭的文件都拷貝至py-fast-rcnn/caffe-fast-rcnn/include/caffe/layers,全部替換掉

(3).將caffe/src/caffe/layers里所有以cudnn開頭的文件都拷貝至py-fast-rcnn/caffe-fast-rcnn/src/caffe/layers,全部替換掉

改好后先 make clean

再重新執行 make

不再報錯

再執行

make pycaffe

 

三. 下載預訓練模型:

1  ./data/scripts/fetch_faster_rcnn_models.sh

2  ./data/scripts/fetch_imagenet_models.sh

下載完成后data目錄會有對應的模型文件存在

 

四. 運行demo.py

1. cd py-faster-rcnn/tools

2. ./demo.py                            # 該命令默認的是VGG16的模型

或者執行

./demo.py --net zf     #執行此命令可以運行zf模型

 

效果如下圖:

 

 

貼一個很有用的帖子:https://blog.csdn.net/flygeda/article/details/78638824


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM