Ubuntu16+cuda9+cudnn7安裝編譯faster-rcnn

開始

在此我省略了cuda和cudnn、opencv、anaconda等的安裝直接跳至安裝caffe(有時間的話可以補上,不過網上一大推,隨便搜搜就有),要安裝faster-rcnn, 首先要先編譯caffe, 如果編譯caffe成功了,那麼安裝faster-rcnn就簡單很多了(由於花了兩天的時間來安裝faster-rcnn,才過很多的坑,今天決定記錄下來,以供有參考)

安裝編譯caffe

環境

系統:ubuntu16.04
GPU:cuda9+cudnn7
Python:anaconda創建的python2.7環境
OpenCV 3.2.4

創建Python 2

因爲caffe對Python 3的支持不是很好,官方默認是使用Linux內置的Python 2環境,我們自己使用anaconda創建的Python 2 環境

# 新建Python2.7,環境名爲py2caffe,anaconda是新建同時安裝anaconda的所有包,如果你不需要所有包的話,可以指定具體的python包,如numpy等
conda create -n py2caffe python=2.7 anaconda
# 查詢conda環境
conda env list
# 激活該虛擬環境,如果命令行前面有(py2caffe),說明激活成功
source activate py2caffe

如圖所示
在這裏插入圖片描述

安裝依賴

sudo apt-get update
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler 
sudo apt-get install -y libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev

下載caffe
https://github.com/BVLC/caffe
進入到caffe根目錄(以後就以ROOT_CAFFE代替,畢竟每個人下載放置的位置不一樣)。
首先檢查Python的依賴包是否完整,缺少則進行安裝。

$ cd ROOT_CAFFE/python
$ for req in $(cat requirements.txt); do pip install $req; done

編譯安裝

這裏坑最多,樣最多,我用5毛錢和你打賭,如果編譯過程中報錯,你上百度谷歌搜索,絕對和你的不重樣,絕望!!!
首先配置Makefile.config,這個是最難的,以爲每個人的系統、環境、等因素不同,配置的東西也不同,一般地:

修改Makefile.config

USE_CUDNN := 1 (可選,有GPU就選上)
USE_OPENCV := 1 (可選) 
OPENCV_VERSION := 3 (如果打開了USE_OPENCV,而且opencv版本爲3時)

# 還記得之前conda env list命令不,會顯示conda虛擬環境的路徑,** **內的路徑做替換成你的就行
PYTHON_INCLUDE := **/home/lzyx/.conda/envs/python2**/include/python2.7 \
		**/home/lzyx/.conda/envs/python2/lib/python2.7**/dist-packages/numpy/core/include

WITH_PYTHON_LAYER := 1 

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 /usr/lib/x86_64-linux-gnu/hdf5/serial

其他的可以根據你的系統做適當修改,這是我的Makefile.config,可以做參考、使用。

修改Makefile

第181行
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m
替換爲:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui

第425行
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
替換爲:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

這是我的Makefile,供參考使用。
修改如圖所示:
在這裏插入圖片描述
在這裏插入圖片描述

編譯caffe

第一種Make:

# 在ROOT_CAFFE目錄下運行以下代碼,編譯Makefile
make all
make test
make runtest

第二種Cmake:

# 在ROOT_CAFFE目錄下運行以下代碼,編譯Cmake
mkdir build
cd build
cmake ..       # 有兩點,別忘了
make all
make install
make runtest

如圖,make runtest測試成功結果
make runtest測試成功結果

編譯完之後,開始編譯Python版本的caffe

編譯pycaffe

# 在ROOT_CAFFE目錄下運行以下代碼
make pycaffe

測試pycaffe是否安裝成功:

# 在終端
$ python
>>> import caffe

如果沒有報錯就說明成功了

MINST數據測試

  1. 下載MNIST數據並解壓縮
# 在ROOT_CAFFE目錄下運行以下代碼
./data/mnist/get_mnist.sh
  1. 將其轉換成Lmdb數據格式
# 在ROOT_CAFFE目錄下運行以下代碼
./examples/mnist/create_mnist.sh
  1. 訓練網絡
# 在ROOT_CAFFE目錄下運行以下代碼
./examples/mnist/train_lenet.sh
  1. 測試結果:
    測試完成
    分割線2018-11-5,今天先寫到caffe的編譯安裝,晚上再補充faster-rcnn的安裝過程
    分割線2018-11-6,昨天感冒,晚上回來就睡着了,今天硬扛着寫完吧

安裝編譯faster-rcnn

(依然,我們繼續使用我們之前conda創建的虛擬環境變量python2,激活啓動)
在安裝完caffe後,依賴環境什麼的都齊全了,接下來直接安裝編譯py-faster-rcnn

下載

# Make sure to clone with --recursive
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

同樣的,我們把py-faster-rcnn的根目錄設爲FRCN_ROOT

編譯

編譯還是兩種辦法,makefile和cmake,官網是使用FRCN_ROOT/lib/makefile下進行編譯的,這個方法坑很多,具體表現在cudnn的版本上,因爲當時py-faster-rcnn當時寫的時候,cudnn才4.0版本,源代碼上的都是cudnn4.0進行編譯的,如果你的cudnn版本與作者一致,直接運行

# 首先到lib下進行make編譯
cd $FRCN_ROOT/lib
make

# 在到caffe下進行編譯
cd FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

由於現在絕大部分的cudnn都在5.0以上,這就使得我們要修改有關cudnn的源代碼。來,倒滿,幹!

編譯cudnn>=5.0的請看這裏

我們要把源py-faster-rcnn裏的caffe源代碼替換成現在的caffe源代碼,這杯敬過去:

  1. 合併caffe和faster
cd FRCN_ROOT/caffe-fast-rcnn
git remote add caffe https://github.com/BVLC/caffe.git
git fetch caffe
git merge -X theirs caffe/master
  1. 刪除多餘
# 完成合並後,到FRCN_ROOT/caffe-fast-rcnn/include/caffe/layers/python_layer.hpp第29行刪除或者註釋掉,就是一下一行
self_.attr("phase") = static_cast<int>(this->phase_)

如圖
在這裏插入圖片描述

  1. 開始編譯
    萬事俱備只欠東風,“東風”是什麼?還記得我們如何編譯的caffe嘛,這兒的caffe-faster-rcnn就是我們之前編譯的caffe的代碼,我們照葫蘆畫瓢,把"東風"引出來Makefile和Makefile.config,好,之前如果你的caffe編譯成功了,直接複製到這目錄下FRCN_ROOT/caffe-fast-rcnn,原來的刪除掉(重命名好像不可以)。
    然後開始編譯cmake
# 在FRCN_ROOT/caffe-fast-rcnn目錄下
- mkdir build && cd build
- cmake ..    # 有兩點,別落下啦~
- make all -j8
- make pycaffe -j8
  1. 測試
cd $FRCN_ROOT
# 下載模型
./data/scripts/fetch_faster_rcnn_models.sh
# 開始運行測試代碼
./tools/demo.py

因爲作者把三個模型都放在dropbox,國內上不去,所以一般情況下這個腳本下載失敗。最好的方法是文明上網(翻牆),自行下載,然後解壓放到FRCN_ROOT/data下。
dropout版:
faster_rcnn_models.tgz
imagenet_models.tgz
selective_search_data.tgz

百度雲:
鏈接: https://pan.baidu.com/s/1mjS29UNYZ-9LwxIPxl-NPQ
提取碼: 7t32

至於另一種編譯方法,即到lib下make,折騰了兩天沒弄出來我就算了,其實編譯原理和caffe差不多,就是cudnn版本不一致而已。

後續cudnn>5.0

如果你不進行上面git合併操作,你可以這樣:在原來的caffe源代碼和caffe-faster-rcnn下進行有關cudnn代碼的替換,具體的替換內容爲:

  1. ROOT_CAFFE/caffe/include/caffe/util/cudnn.hpp 替換 FRCN_ROOT/caffe-fast-rcnn/include/caffe/util/cudnn.hpp

  2. ROOT_CAFFE/caffe/include/caffe/layers/cudnn* 替換 FRCN_ROOT/caffe/include/caffe/layers/cudnn* (* 通配符,全匹配)

  3. ROOT_CAFFE/caffe/src/caffe/util/cudnn.cpp 替換 FRCN_ROOT/caffe-fast-rcnn/src/caffe/util/cudnn.cpp

  4. ROOT_CAFFE/caffe/src/caffe/layers/cudnn* 替換 FRCN_ROOT/caffe/src/caffe/layers/cudnn* (* 通配符,全匹配)

注意:是替換掉,最好不要重命名,替換完後就進行編譯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章