標(biāo)簽:深度學(xué)習(xí) Linux
Platform:ubuntu 16.04 LTS + CUDA 8.0 + OPENCV 2.4.13 + Python 2.7
四月份就要開(kāi)始做畢業(yè)設(shè)計(jì)的相關(guān)工作了。跑起來(lái)rcnn這是實(shí)現(xiàn)畢業(yè)設(shè)計(jì)的第一步,大概分為一下三個(gè)方面:
- caffe的編譯
- OPENCV的編譯
-
RCNN的編譯
注意,編譯的時(shí)間根據(jù)機(jī)器不同可能非常長(zhǎng),因此請(qǐng)做好玩手機(jī)或做其他事情的準(zhǔn)備。從今天開(kāi)始,小論文寫(xiě)完,等面試結(jié)果,以及做畢業(yè)設(shè)計(jì),要不然無(wú)法畢業(yè)啊!!!
caffe的編譯
這一章入的坑不多,如果你是第一次裝Ubuntu,先得自己動(dòng)手解決Nvidia開(kāi)源顯卡驅(qū)動(dòng)Xorg的問(wèn)題。建議先通過(guò)系統(tǒng)設(shè)置的附加驅(qū)動(dòng)先干掉Xorg提供的驅(qū)動(dòng),然后裝CUDA,記住一定要重新裝一遍顯卡驅(qū)動(dòng)啊,反正至少在Windows下如果不裝一遍CUDA里的顯卡驅(qū)動(dòng)那么獲取Compute Capability時(shí)會(huì)出問(wèn)題,還得重裝一遍CUDA多麻煩。這時(shí)候裝不裝CUDA包里的驅(qū)動(dòng)都無(wú)所謂了。這里編譯的caffe不是RCNN用到的caffe,作者略微修改了,但通過(guò)這個(gè)步驟可以驗(yàn)證caffe的依賴是否都已經(jīng)滿足。
下載caffe源碼
從BLVC caffe下載caffe的源碼,建議先從Ubuntu環(huán)境搞起,原生支持,遇到問(wèn)題查的資料比較多。在Ubuntu下折騰久了自然就對(duì)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
這一步很重要,不修改根本沒(méi)法編譯。重要的點(diǎn)有:
- USE_CUDNN := 1,這里筆者暫時(shí)沒(méi)有取消注釋,具體原因見(jiàn)后。
- WITH_PYTHON_LAYER := 1,Python接口選項(xiàng),一定要選
- 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ù)一致即可,你會(huì)看到所有CPU的使用率都是100%。一般X取2,4,8,16。第三條命令是對(duì)所有編譯的測(cè)試,從這可以看出編譯是否成功。
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)練,不同平臺(tái)訓(xùn)練時(shí)間如下:
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的安裝
筆者一開(kāi)始準(zhǔn)備偷懶采用其他人寫(xiě)的OPENCV一鍵下載編譯腳本的,后來(lái)發(fā)現(xiàn)略有問(wèn)題,因此還是按照官方文檔手工編譯。
下載源碼opencv2.4.13,這里由于caffe寫(xiě)配置文件的時(shí)候默認(rèn)就是opencv2,如果使用opencv3請(qǐng)修改配置文件。
進(jìn)入源碼,創(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
進(jìn)入release目錄,編譯
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install
RCNN的編譯
這一章可就厲害了,不光是要重新編譯caffe框架(RCNN也是基于框架寫(xiě)的,從作者github上git),而且編譯的時(shí)候會(huì)遇到各種各樣的問(wèn)題,大家最好有心理準(zhǔn)備。總之,這一章集成度比較高,一句話:缺什么補(bǔ)什么。
兩個(gè)依賴的安裝
sudo pip install cython
sudo pip install easydict
下載&編譯caffe
注意哦,這里的caffe應(yīng)當(dāng)是從py-faster-rcnn on Github上down下來(lái)的,為了區(qū)分暫且稱這個(gè)叫rcnn-caffe,第一章寫(xiě)的叫caffe。如果看到py-faster-rcnn目錄下的caffe是空的就對(duì)了,不知道GitHub是什么原理,rcnn那個(gè)caffe 如果通過(guò)下載zip文件的方式是不會(huì)下載下來(lái)的。這一點(diǎn)之前并不知道,因此看其他人的教程的時(shí)候云里霧里的,這啥都沒(méi)有啊!!!
將下載的文件解壓到py-faster-rcnn下相應(yīng)目錄,然后這時(shí)候就可以拷貝caffe的配置文件啦,上面那個(gè)caffe之所以沒(méi)有打開(kāi)cuDNN選項(xiàng)就是因?yàn)檫@里作者改過(guò)的rcnn-caffe不支持cuDNN5.0,編譯的時(shí)候容易出問(wèn)題。然后,就和caffe一樣的方法編譯以及測(cè)試,一般不會(huì)出問(wèn)題啦,上面都編譯過(guò)了嘛~
測(cè)試RCNN
編譯到這就完成了,其實(shí)也就是caffe再編譯一遍。接下來(lái)就是測(cè)試RCNN的流程。
下載Faster RCNN檢測(cè)器
cd py-faster-rcnn
./data/scripts/fetch_faster_rcnn_models.sh
運(yùn)行demo,不帶任何參數(shù)的是VGG16 net,需要大約11G顯存,估計(jì)大多數(shù)顯卡都跑不動(dòng)吧,所以可以加運(yùn)行參數(shù)選擇較小的zf net,但記住哦,顯存還需3G左右,如果提示類似于:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
這就是顯存不夠了,試著改網(wǎng)絡(luò)參數(shù)也好,換CPU模式跑也好,跟本教程無(wú)關(guān)
./tools/demo.py
./tools/demo.py --net zf
Q&A:
- 編譯rcnn-caffe出現(xiàn)
Error parsing text-format caffe.NetParameter: 244:21: Message type "caffe.LayerParameter" has no field named "roi_pooling_param".
那是你自己沒(méi)看清楚教程,安裝的是caffe官方的版本吧,請(qǐng)從py-fast-rcnn的github主頁(yè)上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可以打開(kāi)cudnn選項(xiàng),而這版caffe不行。據(jù)說(shuō)是不支持cudnn5.0,亟待解決
4.make test時(shí)出現(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,打開(kāi)這個(gè)文件刪掉第11?行報(bào)錯(cuò)的頭文件#include "caffe/vision_layers.hpp"
5.編譯 pycaffe時(shí)報(bào)錯(cuò):fatal error: numpy/arrayobject.h沒(méi)有那個(gè)文件或目錄
其實(shí)已經(jīng)裝好了numpy,但還要執(zhí)行以下命令重新裝一遍numpy:
sudo apt-get install python-numpy
反之在上面命令已經(jīng)輸入的情況下,如果還報(bào)錯(cuò)就在根目錄下:
sudo pip install numpy
5.make runtest時(shí)出現(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