caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)
上一篇博客中講了在Ubuntu下安裝caffe的經驗總結(各種問題,簡直懷疑人生了)。博客鏈接:點我打開
faster-rcnn有兩個版本,分別是python的和MATLAB的。這里介紹python版本的faster-rcnn的配置。
網上有很多相關的教程,起初我在配置時也被一些博客坑了,這里分享一下調試和解決問題的過程。
下載工程
輸入指令:
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git由于git的速度有點慢,所以可以選擇直接訪問他的網址,在github上直接下載。鏈接:點我打開
我是直接在github上下載的,下載完后發現了caffe-faster-rcnn文件夾中是空的。所以還需要另外下載caffe-faster-rcnn文件夾,可以選擇使用指令:
或者直接點擊,進入caffe-faster-rcnn,進行下載。下載后拷貝到py-faster-rcnn目錄下即可。
安裝Caffe依賴包
安裝一些要用的依賴包,否則編譯時會報錯。
sudo apt-get install python-pip sudo pip install cython sudo pip install easydict sudo apt-get install python-opencv每個人裝的都不一樣,少了哪個就裝哪個吧。我編譯的時候少了easydict和python-opencv,這塊問題不多,全部都會自動配置完成。
補充:有一個朋友安裝easydict時發現輸入指令后安裝成功,但是在python shell下import easydict報錯。這種情況可以重啟一下,再試試能不能正常import easydict。有可能是配置還沒立即生效。
編譯caffe
默認用$RCNN_ROOT表示下載下來的py-faster-rcnn目錄所在的路徑。
cd $RCNN_ROOT/lib make -j8-j8是使用多核編譯,這樣編譯速度快一點。
輸入指令:
先進入到caffe-fast-rcnn目錄下:
cd $RCNN_ROOT/caffe-fast-rcnn復制Makefile.config.example為Makefile.config。
cp Makefile.config.example Makefile.config編輯Makefile.config。
sudo gedit Makefile.config在Makefile.config中有兩處要改。
# In your Makefile.config, make sure to have this line uncommented WITH_PYTHON_LAYER := 1 # Unrelatedly, it's also recommended that you use CUDNN USE_CUDNN := 1把前面的注釋去掉即可。
WITH_PYTHON_LAYER必須開,否則會報錯。
USE_CUDNN建議開,但是由于代碼提供者的caffe版本是老版本的,沒有”與時俱進“,所以只兼容CUDNN 較老版本的。我裝的是v5.0版本的,開了它就會報錯。
解決辦法有兩種:一、更換CUDNN的版本為老版本的v3.0或是v4.0的;二、注釋掉CUDNN那句代碼,我是直接注釋掉了,使用也不影響。
推薦使用cuDNN,由于不想重新折騰CUDNN,我就沒有更換為老版本的。暫時還沒找到相對好的解決辦法,如果找到了其他會再補充。
—————————————————2017.7.30 補充————————————————-
我使用的是cuDNN v5版本,不能支持py-faster-rcnn。今天找到了一個不需要更換cuDNN,就能使cuDNN v5也能兼容py-faster-rcnn。
參考鏈接:faster rcnn +cudnn V5
其中給出了兩種方法:
一種是到github去下載新版的caffe并將它與py-faster-rcnn中的caffe-faster-rcnn合并,更換成新版的caffe,使其支持cuDNN v5版本;
另一種是自己手動更改一些文件,更改caffe的一些配置使其兼容cuDNN v5。
第一種方法較簡單,但是一旦工程被修改過就很容易出錯,不推薦;所以我采用了第二種方法。
1、用最新版本的caffe源碼目錄中的如下文件替換py-faster-rcnn/caffe-fast-rcnn中的對應文件。
include/caffe/layers/cudnn_relu_layer.hpp,
src/caffe/layers/cudnn_relu_layer.cpp,
src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp,
src/caffe/layers/cudnn_sigmoid_layer.cpp,
src/caffe/layers/cudnn_sigmoid_layer.cu
include/caffe/layers/cudnn_tanh_layer.hpp,
src/caffe/layers/cudnn_tanh_layer.cpp,
src/caffe/layers/cudnn_tanh_layer.cu
2、用caffe源碼中的這個文件替換掉faster rcnn 對應文件
include/caffe/util/cudnn.hpp
3、打開 py-faster-rcnn/caffe-fast-rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu文件,并將:
cudnnConvolutionBackwardData_v3
替換為
cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3
替換為
cudnnConvolutionBackwardFilter
修改之后,即使不注釋USE_CUDNN := 1,在編譯時也不會報錯了。
修改完成之后就可以編譯了:
make -j8 make pycaffe -j8編譯caffe工程和caffe的python支持,要等一會兒。
make完的結果:
make pycaff完的結果:
獲取faster_rcnn_models
輸入指令:
cd $RCNN_ROOT ./data/scripts/fetch_faster_rcnn_models.sh執行腳本,實質是訪問http://www.cs.berkeley.edu/%7Erbg/faster-rcnn-data/faster_rcnn_models.tgz 下載文件,但是我們這邊訪問總是被拒絕。
好了,這里給出一個翻墻下載的方法,速度也還可以。
用https://mm.ww.rrjs.pw/翻墻下載,這是一個網頁代理,在網頁輸入你想要訪問的地址,它會幫你跳轉到國外的網站去。
在網頁下輸入:
https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0
這個url可以在fetch_faster_rcnn_models.sh中查到。
點擊開始瀏覽,即可進行下載了。我下載下來有728.6MB。
把這個文件移到$RCNN_ROOT/data下,將其解壓。
指令和結果截圖:
獲取imagenet_models
方法同faster_rcnn_models。
網上通用的方法是:
很有可能,你看到的是半天沒反應。
所以還是使用https://mm.ww.rrjs.pw/翻墻下載。
輸入網址:
https://dl.dropbox.com/s/gstw7122padlf0l/imagenet_models.tgz?dl=0
此URL可以在fetch_imagenet_models.sh中找到。
這種方法翻墻的網速還算挺快的。
如果有別的較快的翻墻手段的,或者自己買了vpn的,都可以直接輸入指令下載。
文件有1.1GB。把它復制到$RCNN_ROOT/data下,解壓。
指令和結果截圖:
測試demo.py文件
先直接運行demo.py看看吧:
cd $RCNN_ROOT ./tools/demo.py我運行后出現了錯誤:
Loaded network /home/xhb/Study/Caffe_Study/py-faster-rcnn-master/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel F0726 11:58:39.877975 3897 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0) out of memory *** Check failure stack trace: *** 已放棄意思是,在載入VGG16_faster_rcnn_final.caffemodel時出錯。查閱資料,發現這是因為gpu的顯存不夠。
如果是自己訓練和測試模型,可以去更改配置文件中的batch_size,將test和train的batch_size都改為1。我們只是測試別人訓練的模型也沒法更改了。
起初我也很困惑,明明我的gpu顯存有4G,而這個要求的應該是3G,應該是可以的。試了很多方法,但是還是會報錯。
下面是官方給出的說明:
- For training smaller networks (ZF, VGG_CNN_M_1024) a good GPU (e.g., Titan, K20, K40, …) with at least 3G of memory suffices
- For training Fast R-CNN with VGG16, you’ll need a K40 (~11G of memory)
- For training the end-to-end version of Faster R-CNN with VGG16, 3G of GPU memory is sufficient (using CUDNN)
退一步考慮,我們下載下來的faster_rcnn_models模型中有兩個:
VGG16_faster_rcnn_final.caffemodel ZF_faster_rcnn_final.caffemodelVGG16是大型模型,而ZF模型則是較小的模型。
所以我們換成使用ZF模型進行測試。
方法一:
使用如下指令:
方法二:
由于默認使用VGG16模型,所以修改為使用ZF模型。
打開demo.py:
定義了一個字典,有兩個模型,VGG16和ZF。
修改vgg16為zf,這樣默認載入的就是zf的模型而不是vgg16的了。
保存一下,可以開始測試了。
輸入指令:
測試結果:
自動載入圖片進行測試,識別出的東西會用紅框標出。
這次只是跑了一個faste-rcnn,依然還有很多問題,后面解決了還會補上解決方案。
我使用的是gpu版本的caffe,如果要使用CPU版本的caffe,可以參考這篇博客:ubuntu16.04+py-faster-rcnn+ZF運行demo.py 。 修改一些東西,使用步驟大致一樣。
下面這幾篇博客給出了一些常見報錯及解決辦法:
為了caffe(四)學習人家的文章
caffe跑試驗遇到錯誤:Check failed: error == cudaSuccess (2 vs. 0) out of memory
—————————————————2017.7.30 補充————————————————-
今天我在文章中補充了cuDNN v5不兼容的解決辦法。
之前我跑vgg16的模型總是說顯存不夠,最后選擇了使用zf模型,在我今天開啟了cuDNN后重新編譯了caffe,重新運行發現能夠正常使用vgg16的模型了。
總結一下:
我的筆記本帶的gpu內存是4G。
只有開啟了cuDNN支持后,要求gpu至少有3G的顯存,可以正常使用vgg16、zf等模型;
若不開啟cuDNN支持,編譯也可以正常通過,但是只有zf可以使用,使用vgg16模型會報錯,提示顯存不夠。
運行VGG16模型的結果:
總結
以上是生活随笔為你收集整理的caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe学习(三):caffe开发环境
- 下一篇: 个人喜欢的关于模式识别、机器学习、推荐系