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
終于成功了。
運行成功后,會有如下顯示











