Ubuntu16.04安裝caffe 框架

1 添加必要的庫

cython,python-opencv,easydict

$ sudo apt-get install python-pip
$ sudo pip install cython
$ sudo apt-get install python-opencv
$ sudo pip install easydict

2 下載源代碼 py-faster-rcnn

$ cd ~/software/caffe
$ git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
$ cp -r py-faster-rcnn/ ~/

注意,--recursive 一定要有,否則 py-faster-rcnn 目錄下沒有 caffe-fast-rcnn 文件夾。

3 修改~/py-faster-rcnn/caffe-fast-rcnn目錄下的Makefile和Makefile.config

直接把之前 caffe 目錄下的 Makefile 和 Makefile.config 復(fù)制到 caffe-fast-rcnn 下,

$ cp ~/caffe/Makefile ~/py-faster-rcnn/caffe-fast-rcnn/
$ cp ~/caffe/Makefile.config ~/py-faster-rcnn/caffe-fast-rcnn/

4 編譯~/py-faster-rcnn下的lib文件

4.1 修改py-faster-rcnn/lib/setup.py文件

第135行

  'nvcc': ['-arch=sm_35',

改為:自己顯卡的計算能力

 'nvcc': ['-arch=sm_20',

(不改好像也可以)

4.2 編譯 lib文件

$ cd ~/py-faster-rcnn/lib
$ make

5 編譯py-faster-rcnn下的caffe-fast-rcnn

$ cd ~/py-faster-rcnn/caffe-fast-rcnn/
$ make

此時會報錯,原因在于 faster rcnn 采用的是 cudnn_v4,而我們安裝的是 cudnn_v6,解決方法

如下:
(1) 用最新 caffe 源碼的以下文件替換掉 faster rcnn 的對應(yīng)文件
include/caffe/layers/cudnn_relu_layer.hpp,
include/caffe/layers/cudnn_sigmoid_layer.hpp,
include/caffe/layers/cudnn_tanh_layer.hpp,
src/caffe/layers/cudnn_relu_layer.cpp,
src/caffe/layers/cudnn_relu_layer.cu
src/caffe/layers/cudnn_sigmoid_layer.cpp,
src/caffe/layers/cudnn_sigmoid_layer.cu
src/caffe/layers/cudnn_tanh_layer.cpp,
src/caffe/layers/cudnn_tanh_layer.cu

$ cp ~/caffe/include/caffe/layers/cudnn_relu_layer.hpp ~/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers
$ cp ~/caffe/include/caffe/layers/cudnn_sigmoid_layer.hpp ~/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers
$ cp ~/caffe/include/caffe/layers/cudnn_tanh_layer.hpp ~/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers
$ cp ~/caffe/src/caffe/layers/cudnn_relu_layer.cpp ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers
$ cp ~/caffe/src/caffe/layers/cudnn_relu_layer.cu ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers
$ cp ~/caffe/src/caffe/layers/cudnn_sigmoid_layer.cpp ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers
$ cp ~/caffe/src/caffe/layers/cudnn_tanh_layer.cpp ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers
$ cp ~/caffe/src/caffe/layers/cudnn_tanh_layer.cu ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers

(2) 用 caffe 源碼中的這個文件替換掉 faster rcnn 對應(yīng)文件
include/caffe/util/cudnn.hpp

$ cp ~/caffe/include/caffe/util/cudnn.hpp ~/py-faster-rcnn/caffe-fast-rcnn/include/caffe/util

(3) 將 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函數(shù)名替換為
cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3 函數(shù)名替換為
cudnnConvolutionBackwardFilter

vim ~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers/cudnn_conv_layer.cu

運行指令clean,再編譯

$ cd ~/py-faster-rcnn/caffe-fast-rcnn/
$ make clean
$ make –j4
$ make pycaffe

出現(xiàn)警告:

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

暫時忽略。

6 下載faster_rcnn_models.tgz放在~/py-faster-rcnn/data并解壓

編譯好之后,需要下載一個 faster_rcnn_models.tgz 壓縮包

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

注意:最好再windows上下載。用命令下載,容易失敗,所有就換到windows下載,再復(fù)制到相應(yīng)目錄解壓

下載地址:http://www.cs.berkeley.edu/%7Erbg/faster-rcnn-data/faster_rcnn_models.tgz
或者
https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0
https://mm.ww.rrjs.pw/翻墻下載即可

下載好后,將壓縮包放在 py-faster-rcnn/data/下解壓即可

$ tar -zxvf faster_rcnn_models.tgz -C ~/py-faster-rcnn/data
$ cd ~/py-faster-rcnn/tools/

7 運行~/py-faster-rcnn/tools下的demo.py

$ cd ~/py-faster-rcnn/tools
$ ./demo.py

問題:

$ ./demo.py
Traceback (most recent call last):
  File "./demo.py", line 17, in <module>
    from fast_rcnn.config import cfg
  File "/home/fc/py-faster-rcnn/tools/../lib/fast_rcnn/config.py", line 23, in <module>
    from easydict import EasyDict as edict
ImportError: No module named easydict

解決:

$ sudo pip install easydict

其實easydict前面已經(jīng)安裝過了,所有再執(zhí)行這個命令還是不能解決問題。不斷嘗試后發(fā)現(xiàn),切換到root用戶就沒有這個問題了。

但出現(xiàn)新的問題

 File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in <module>
    raise ImportError, str(msg) + ', please install the python-tk package'
ImportError: No module named _tkinter, please install the python-tk package

這個問題到比較容易,缺python-tk那就安裝:

$ sudo apt-get install python-tk

新問題:

Loaded network /home/fc/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
F0105 20:51:57.321182 12180 relu_layer.cu:26] Check failed: error == cudaSuccess (9 vs. 0)  invalid configuration argument
*** Check failure stack trace: ***
已放棄 (核心已轉(zhuǎn)儲)

解決1:
網(wǎng)上(https://www.zhihu.com/question/41493725)說這個原因可能顯存不足 ,可以先使用小點的模型比如ZF來進(jìn)行檢測,執(zhí)行demo.py時加參數(shù)--net zf,或者直接修改demo.py里面的代碼將默認(rèn)加載的model改為zf.如果想修改batch_size進(jìn)行訓(xùn)練,可以在faster-rcnn-root/lib/fast_rcnn/config.py中進(jìn)行修改。
所以執(zhí)行:

$ ./demo.py --net zf

還是,不過“9 vs. 0”變成“8 vs. 0”

Loaded network /home/fc/py-faster-rcnn/data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel
F0105 20:57:31.931417 12305 roi_pooling_layer.cu:91] Check failed: error == cudaSuccess (8 vs. 0)  invalid device function
*** Check failure stack trace: ***
已放棄 (核心已轉(zhuǎn)儲)

解決2:
還有地方(http://blog.csdn.net/u013078356/article/details/51009470)說,是因為顯卡的計算能力不同而導(dǎo)致的,修改 ~/py-faster-rcnn/lib//setup.py 的第135行,將arch改為與你顯卡相匹配的數(shù)值,(比如我的GTX 760,計算能力是3.0,就將sm_35改成了sm_30,前面我已經(jīng)改過了)然后刪除 py-faster-rcnn/lib/utils/bbox.c,py-faster-rcnn/lib/nms/cpu_nms.c ,py-faster-rcnn/lib/nms/gpu_nms.cpp 重新編譯即可

$ mv ~/py-faster-rcnn/lib/utils/bbox.c ~/py-faster-rcnn/lib/utils/bbox.c_rmbyfc
$ mv ~/py-faster-rcnn/lib/nms/cpu_nms.c ~/py-faster-rcnn/lib/nms/cpu_nms.c_rmbyfc
$ mv ~/py-faster-rcnn/lib/nms/gpu_nms.cpp ~/py-faster-rcnn/lib/nms/gpu_nms.cpp_rmbyfc

重新編譯~/py-faster-rcnn/lib/里的文件

#./demo.py --net zf

終于成功了。

運行成功后,會有如下顯示


運行結(jié)果
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
Figure 7
Figure 8
Figure 9
Figure 10
Figure 11
最后編輯于
?著作權(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)容