折騰faster-rcnn(一)--配置篇

標(biāo)簽:深度學(xué)習(xí) Linux
Platform:ubuntu 16.04 LTS + CUDA 8.0 + OPENCV 2.4.13 + Python 2.7
四月份就要開始做畢業(yè)設(shè)計的相關(guān)工作了。跑起來rcnn這是實現(xiàn)畢業(yè)設(shè)計的第一步,大概分為一下三個方面:

  • caffe的編譯
  • OPENCV的編譯
  • RCNN的編譯
    注意,編譯的時間根據(jù)機器不同可能非常長,因此請做好玩手機或做其他事情的準(zhǔn)備。從今天開始,小論文寫完,等面試結(jié)果,以及做畢業(yè)設(shè)計,要不然無法畢業(yè)?。。。?/li>

caffe的編譯

這一章入的坑不多,如果你是第一次裝Ubuntu,先得自己動手解決Nvidia開源顯卡驅(qū)動Xorg的問題。建議先通過系統(tǒng)設(shè)置的附加驅(qū)動先干掉Xorg提供的驅(qū)動,然后裝CUDA,記住一定要重新裝一遍顯卡驅(qū)動啊,反正至少在Windows下如果不裝一遍CUDA里的顯卡驅(qū)動那么獲取Compute Capability時會出問題,還得重裝一遍CUDA多麻煩。這時候裝不裝CUDA包里的驅(qū)動都無所謂了。這里編譯的caffe不是RCNN用到的caffe,作者略微修改了,但通過這個步驟可以驗證caffe的依賴是否都已經(jīng)滿足。

下載caffe源碼

BLVC caffe下載caffe的源碼,建議先從Ubuntu環(huán)境搞起,原生支持,遇到問題查的資料比較多。在Ubuntu下折騰久了自然就對Windows下caffe編譯駕輕就熟。然后解壓至用戶目錄,好找。

安裝依賴

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

修改Makefile.config

這一步很重要,不修改根本沒法編譯。重要的點有:

  1. USE_CUDNN := 1,這里筆者暫時沒有取消注釋,具體原因見后。
  2. WITH_PYTHON_LAYER := 1,Python接口選項,一定要選
  3. include和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/hdf5/serial/

編譯

從這就正式編譯了,下面命令的X是多線程參數(shù),跟CPU核數(shù)一致即可,你會看到所有CPU的使用率都是100%。一般X取2,4,8,16。第三條命令是對所有編譯的測試,從這可以看出編譯是否成功。

sudo make all -jX
sudo make test -jX
sudo make runtest -jX
sudo make pycaffe -jX

總結(jié)

Hardware Platform Time Cost(min)
Xeon E5530 22
GT 620(CUDA Compute Capability:2.1) 14
GTX 960M(CUDA Compute Capability:5.0) 1

上面的編譯工作完成后,我們可以初步試水caffe。這里跑了下mnist的訓(xùn)練,不同平臺訓(xùn)練時間如下:

Hardware Platform Time Cost(min)
Xeon E5530 22
GT 620(CUDA Compute Capability:2.1) 14
GTX 960M(CUDA Compute Capability:5.0) 1

OPENCV的安裝

筆者一開始準(zhǔn)備偷懶采用其他人寫的OPENCV一鍵下載編譯腳本的,后來發(fā)現(xiàn)略有問題,因此還是按照官方文檔手工編譯。
下載源碼opencv2.4.13,這里由于caffe寫配置文件的時候默認(rèn)就是opencv2,如果使用opencv3請修改配置文件。

進入源碼,創(chuàng)建release目錄

cd opencv-2.4.9
mkdir release 

安裝opencv依賴

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev

進入release目錄,編譯

cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install

RCNN的編譯

這一章可就厲害了,不光是要重新編譯caffe框架(RCNN也是基于框架寫的,從作者github上git),而且編譯的時候會遇到各種各樣的問題,大家最好有心理準(zhǔn)備??傊?,這一章集成度比較高,一句話:缺什么補什么。

兩個依賴的安裝

sudo pip install cython
sudo pip install easydict

下載&編譯caffe

注意哦,這里的caffe應(yīng)當(dāng)是從py-faster-rcnn on Github上down下來的,為了區(qū)分暫且稱這個叫rcnn-caffe,第一章寫的叫caffe。如果看到py-faster-rcnn目錄下的caffe是空的就對了,不知道GitHub是什么原理,rcnn那個caffe 如果通過下載zip文件的方式是不會下載下來的。這一點之前并不知道,因此看其他人的教程的時候云里霧里的,這啥都沒有?。。?!
將下載的文件解壓到py-faster-rcnn下相應(yīng)目錄,然后這時候就可以拷貝caffe的配置文件啦,上面那個caffe之所以沒有打開cuDNN選項就是因為這里作者改過的rcnn-caffe不支持cuDNN5.0,編譯的時候容易出問題。然后,就和caffe一樣的方法編譯以及測試,一般不會出問題啦,上面都編譯過了嘛~

測試RCNN

編譯到這就完成了,其實也就是caffe再編譯一遍。接下來就是測試RCNN的流程。
下載Faster RCNN檢測器

cd py-faster-rcnn
./data/scripts/fetch_faster_rcnn_models.sh

運行demo,不帶任何參數(shù)的是VGG16 net,需要大約11G顯存,估計大多數(shù)顯卡都跑不動吧,所以可以加運行參數(shù)選擇較小的zf net,但記住哦,顯存還需3G左右,如果提示類似于:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
這就是顯存不夠了,試著改網(wǎng)絡(luò)參數(shù)也好,換CPU模式跑也好,跟本教程無關(guān)

./tools/demo.py
./tools/demo.py --net zf

Q&A:

  1. 編譯rcnn-caffe出現(xiàn)
Error parsing text-format caffe.NetParameter: 244:21: Message type "caffe.LayerParameter" has no field named "roi_pooling_param".

那是你自己沒看清楚教程,安裝的是caffe官方的版本吧,請從py-fast-rcnn的github主頁上git。

2.出現(xiàn)

Makefile:563: recipe for target '.build_release/src/caffe/layers/hdf5_data_layer.o' failed

解決方案:一定修改Makefile.config,將include和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/hdf5/serial/

3.出現(xiàn)

Makefile:563: recipe for target '.build_release/src/caffe/layers/bnll_layer.o' failed
make: *** [.build_release/src/caffe/layers/bnll_layer.o] Error 1

解決方案:將Makefile.config中cudnn注釋掉,不知為何官方的caffe可以打開cudnn選項,而這版caffe不行。據(jù)說是不支持cudnn5.0,亟待解決
4.make test時出現(xiàn):

Makefile:563: recipe for target '.build_release/src/caffe/test/test_smooth_L1_loss_layer.o' failed

解決方案:修改src/caffe/test/test_smooth_L1_loss_layer.cpp,為test_smooth_L1_loss_layer.cpp.orig,打開這個文件刪掉第11?行報錯的頭文件#include "caffe/vision_layers.hpp"
5.編譯 pycaffe時報錯:fatal error: numpy/arrayobject.h沒有那個文件或目錄
其實已經(jīng)裝好了numpy,但還要執(zhí)行以下命令重新裝一遍numpy:

sudo apt-get install python-numpy

反之在上面命令已經(jīng)輸入的情況下,如果還報錯就在根目錄下:

sudo pip install numpy

5.make runtest時出現(xiàn):

.build_release/tools/caffe: error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory
Makefile:526: recipe for target 'runtest' failed
make: *** [runtest] Error 127

解決方案:
32-bit: sudo ldconfig /usr/local/cuda/lib

64-bit: sudo ldconfig /usr/local/cuda/lib64

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容