1. 程式人生 > >FastRCNN 訓練自己資料集(一)——編譯配置

FastRCNN 訓練自己資料集(一)——編譯配置

FastRCNN是Ross Girshick在RCNN的基礎上增加了Multi task training整個的訓練過程和測試過程比RCNN快了許多。別的一些細節不展開,過幾天會上傳Fast RCNN的論文筆記。FastRCNN mAP效能上略有上升。Fast RCNN中,提取OP的過程和訓練過程仍然是分離的。因此我們在訓練過程中,需要用OP的方法先把影象OP提取好,再送入Fast RCNN中訓練,在檢測過程中也是如此需要先把相應的測試影象的OP提取出來送入檢測。

首先我要說的是如何安裝Fast RCNN環境,具體的流程在Ross Girshick的Github上有,他裡面主要是講解了如何安裝和使用。我會稍微提到這一部分內容,主要講解,如果要訓練自己的資料,應該修改那些地方,並把我自己訓練的過程跟大家分享一下。

1.當然是Git clone一下Ross的工程啦

這裡不要忘了加--recursive

2.在這裡簡單介紹一下工程目錄

首先工程的根目錄簡單的稱為 FRCN_ROOT,可以看到根目錄下有以下幾個資料夾

  • caffe-fast-rcnn

    這裡是caffe框架目錄

  • data

    用來存放pretrained模型 比如imagenet上的,以及讀取檔案的cache快取

  • experiments

    存放配置檔案以及執行的log檔案,另外這個目錄下有scripts 用來獲取imagenet的模型,以及作者訓練好的fast rcnn模型,以及相應的pascal-voc資料集

  • lib

    用來存放一些

    Python介面檔案,如其下的datasets主要負責資料庫讀取 config負責cnn一些訓練的配置選項

  • matlab

    放置matlab與python的介面,用matlab來呼叫實現detection

  • models

    裡面存放了三個模型檔案,小型網路的CaffeNet 大型網路VGG16 中型網路VGG_CNN_M_1024

  • output

    這裡存放的是訓練完成後的輸出目錄,預設會在default資料夾下

  • tools

    裡面存放的是訓練和測試的Python檔案

3.編譯Cython module

cd $FRCN_ROOT/lib
make

進入lib目錄直接make就可以了

4.編譯Caffe and pycaffe

cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

這裡需要注意的是你直接make -j8 && make pycaffe是會報錯的,

可以看到圖中是是沒有Makefile.config檔案,但是作者有一個Makefile.config.example檔案,你需要複製它一下然後重新命名為Makefile.config

需要注意的是裡面還有幾個配置需要新增

  • 開啟 USE_CUDNN = 1,這個選項預設情況下時關閉的,讓CUDA支援DNN

  • 開啟 WITH_PYTHON_LAYER = 1,這個在預設情況下也是關閉的,FastRCNN需要支援Python介面,因此需要開啟

  • Fast RCNN需要hdf5的支援,這個根據自己的Linux裡的庫檔案安裝路徑新增,不清楚的可以find一下,不過一般情況下,INCLUDE_DIRS 應該新增上 /usr/include/hdf5/serial LIBRARY_DIRS 新增上 /usr/lib/x86_x64-linux-gnu/hdf5/serial
  • 另外把USE_PKG_CONFIG = 1 記得開啟,要不然會找不到一些庫檔案,PKG是Linux用來管理庫檔案

這幾個是需要在Makefile.config.example中修改的,最好直接copy一個再修改。
另外還有一個需要注意的地方是,當初樓主的linux版本太高,ubuntu這玩意更新太快了,boost庫的版本太高,Fast RCNN裡面用的是1.55版本的boost庫,當時我電腦上是1.59,會出現介面不相容,記得是廢棄了幾個介面,編譯報錯,裝回1.55的就可以了

5.下載相應的模型檔案

Ross給出的操作是這樣的,其實我不推薦這麼弄,因為直接用wget去下載的速度比較慢,我們可以開啟裡面的shell檔案,把url粘貼出來,到迅雷裡面下載,幾分鐘就好了

cd $FRCN_ROOT
./data/scripts/fetch_fast_rcnn_models.sh

這裡以相應的 imagenet_model為例,你到目錄下可以看到3個shell檔案,分別是fetch_fast_rcnn_models.s h,fetch_imagenet_models.sh,fetch_selective_search_data.sh,第一是作者訓練好的fast_rcnn模型,第二個是imagenet_model上預訓練好的模型,第三個對應著的是作者基於Pascal VOC資料集提取的selective_search預選框。如果想要看一下fast rcnn的效果,可以直接載入Ross訓練好的fast_rcnn模型,如果要自己訓練的話,記得載入imagenet模型

這裡是imagenet_model的shell檔案,看家裡面的URL了沒,最後的URL連結就是這個連結再加上FILE變數,連結,你直接把它連結起來,複製到迅雷中下載就可以了,速度灰常快,直接下載的話炒雞慢啊。
下在之後記得放到data/目錄下去解壓哦,

6.執行網路和載入模型檔案

在tools下面有個demo.py檔案

cd $FRCN_ROOT
./tools/demo.py

就可以直接執行,記得看一下里面的引數,這裡對顯示卡有一定的要求,Ross說必須是3G的視訊記憶體以上才可以跑的動哦,裡面有3個大小的網路caffenet是最小的,有顯示卡應該就能跑起來,vgg_cnn_m_1024是一箇中型網路,vgg16是大型網路,後兩個得看顯示卡的視訊記憶體大小才能跑起,視訊記憶體不夠啟動會報錯的。

如果在cpu模式下的話速度是灰常慢的,GPU模式下大概0.2秒左右。

對了demo裡面都是有顯示的函式的,如果你是在linux終端下沒有輸出裝置執行是會報錯的

正確執行的結果如下
裡面有兩個圖片檢測效果,這裡放一張

7.關於訓練自己的資料樣本

請等待下一篇 過兩天就放上來 FastRCNN 訓練自己資料集 (2介面修改訓練)