1. 程式人生 > >Ubuntu下跑通py-faster-rcnn、詳解demo運作流程

Ubuntu下跑通py-faster-rcnn、詳解demo運作流程

在不同的伺服器不同的機器上做過很多次實驗,分別遇到各種不一樣的錯誤並且跑通Py-Faster-RCNN,因此,在這裡做一個流程的彙總:

一、下載檔案:

首先,檔案的下載可以有兩種途徑:

該方法的下載之後資料夾:py-faster-rcnn/caffe-fast-rcnn/下可能是空白:這個時候你是需要繼續用命令列進行下載的

cd caffe-fast-rcnn
git submodule update --init --recursive

2、在Ubuntu下直接進行命令列的下載:(個人更推薦這一方法:比較穩定)

  git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

二、編譯CAFFE:

1、下載完成後我們進入py-faster-rcnn//lib 檔案下編譯:

cd$FRCN_ROOT/lib
make
     2、在py-faster-rcnn/caffe-fast-rcnn/檔案路徑下,下載Makefile.config檔案:

連結網址:https://dl.dropboxusercontent.com/s/6joa55k64xo2h68/Makefile.config?dl=0

3、改變裡面兩個引數:(不改變的話後面的編譯可以進行,但是跑到後面的demo 的時候會發現一大堆的標頭檔案沒有包含進來,如下圖)


所以改變下面兩個引數非常有必要:

# In your Makefile.config, make sure to have this line uncommented
WITH_PYTHON_LAYER := 1 # Unrelatedly, it's also recommended that you use CUDNN USE_CUDNN := 1
4、編譯caffe:
cd $FRCN_ROOT/caffe-fast-rcnn
make -j64

可能會出現錯誤,如下所示:


解決辦法:進入自己根目錄下原來的Caffe下面拷貝相應的檔案進入caffe-fast-rcnn

1.將./include/caffe/util/cudnn.hpp 換成最新版的caffe裡的cudnn的實現,即相應的cudnn.hpp.

2. 將./include/caffe/layers裡的,所有以cudnn開頭的檔案,例如cudnn_conv_layer.hpp。   都替換成最新版的caffe裡的相應的同名檔案。

3.將./src/caffe/layer裡的,所有以cudnn開頭的檔案,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。

   都替換成最新版的caffe裡的相應的同名檔案。如下圖所示:

繼續上面工作:


編譯成功!繼續前面命令列的編譯 :

make pycaffe

編譯正確:繼續後面步驟;

三、下載訓練好的模型:

1、命令列下載:

cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh
2、從ImageNet訓練來的Caffe models (ZF, VGG16) pre-trained 模型下載命令(在SCRIPTS檔案下包含下載的指令碼,如果遇到錯誤一定是伺服器上翻牆的問題)
./data/scripts/fetch_imagenet_models.sh
3、 從VOC 2007訓練來的Faster R-CNN models trained 模型下載命令(同上)
./data/scripts/fetch_faster_rcnn_models.sh

4、設定好以上下載之後,我們的./data目錄下會出現需要的模型:



四、跑通demo.py檔案:

上面已經編譯好了caffe並且下載做好了訓練好的模型何必要資料:我們現在可以開始跑demo了:

cd $FRCN_ROOT
./tools/demo.py
跑通之後我們可以看到自己預測的圖片的目標框:


五、我們不侷限於跑通demo.py,我們需要了解demo.py檔案裡面的原理:

首先我們來切割demo.py檔案裡面的功能塊:無非是:def vis_detections( ) def demo( ) def parse_args() 

         先來看一張功能解析圖:


我們可以看到:demo.py檔案的主流是黃色箭頭def vis_detections( ) 是紫色箭頭def demo( ) 是淺藍色箭頭def parse_args() 是紅棕色箭頭

隨著箭頭的延伸我們越來越深入瞭解裡面的函式轉換:其中:scores代表分數;boxes代表目標框對角兩個點四個座標值;dets代表各個框座標和分陣列成的矩陣、inds超過閾值符合要求的視窗對應的下標。

六、具體程式碼內容解釋:

Po出一些詳細的解釋的手稿: