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

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

一、下載文件:

首先,文件的下載可以有兩種途徑:

1、需要在官網上下載路徑:https://github.com/rbgirshick/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出一些詳細的解釋的手稿:



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