【深度學習】研究Fast rcnn程式碼
【原文:http://blog.sina.com.cn/s/blog_855a82cd0102vnjq.html】
原文:http://arxiv.org/pdf/1504.08083.pdf
程式碼:https://github.com/rbgirshick/fast-rcnn
1.準備工作
1.1 軟體準備
首先,需要安裝Caffe和pycaffe。
caffe原作者網頁:http://caffe.berkeleyvision.org/installation.html
歐新宇師兄的caffe安裝說明:http://ouxinyu.github.io/Blogs/20140723001.html
注意:必須在 Makefile.config配置檔案中開啟Python層支援。
# In your Makefile.config, make sure to have this line uncommented
WITH_PYTHON_LAYER := 1
其次,可能需要Python安裝包:cython,python-opencv,easydict
先裝一個python包管理器pip:
sudo apt-get install python-pip
再裝那三個包:
sudo pip install cython
#sudo pip install python-opencv
sudo pip install easydict
再次,可能需要MATLAB,主要用於對PASCAL voc資料集的評估。
1.2 硬體準備
對於訓練較小的網路(CaffeNet, VGG_CNN_M_1024),至少需要3G記憶體的GPU(如:Titan,K20,K40...)
對於訓練VGG16,至少需要一個K40(約11G記憶體),這裡我們就不考慮了。
2.安裝(用於demo)
2.1 從github上clone到Fast RCNN的倉庫。最好就直接這麼clone,不要自己去下載,不然還滿麻煩的。
# Make sure to clone with --recursive
git clone --recursive https://github.com/rbgirshick/fast-rcnn.git
2.2 生成Cython模組(下面的$FRCN_ROOT都是指fast-rcnn的解壓位置)
cd $FRCN_ROOT/lib
make
2.3 生成Caffe和pycaffe
cd $FRCN_ROOT/caffe-fast-rcnn
# Now follow the Caffe installation instructions here:
# http://caffe.berkeleyvision.org/installation.html
# If you're experienced with Caffe and have all of the requirements installed
# and your Makefile.config in place, then simply do:
make -j8 && make pycaffe
2.4 下載Fast RCNN檢測器
cd $FRCN_ROOT
./data/scripts/fetch_fast_rcnn_models.sh
3.執行demo
3.1 Python版
cd $FRCN_ROOT
./tools/demo.py
可能我安裝了cudnn,所以即使2G記憶體的GPU也是可以的。
如果用CPU模式,就是
cd $FRCN_ROOT
./tools/demo.py --cpu
顯然是慢很多的。效果圖如下所示:
demo中是用VGG16網路,在PASCAL VOC2007上訓練的模型來執行檢測的,這個模型比較大,如果把caffe弄崩潰了,可以換一個小一點的網路,其實還更快一點,如
./tools/demo.py --net caffenet
或者
./tools/demo.py --net vgg_cnn_m_1024
或者就用CPU模式好了。
3.2 MATLAB版(暫時沒找到編譯好的caffe,現在先不管)
在matlab資料夾下開啟matlab,下面是我的matlab的安裝地址。
cd $FRCN_ROOT/matlab
/usr/local/MATLAB/R2014a/bin/matlab # wait for matlab to start...
把$FRCN_ROOT/caffe-fast-rcnn/matlab下的caffe資料夾拷貝到$FRCN_ROOT/matlab中,為防止記憶體不夠,我們還是以CaffeNet為例,把fast-rcnn-demo.m中的所有VGG16改為CaffeNet。在matlab命令列下輸入命令:
>> fast_rcnn_demo
3.3 一些獲取object proposal的演算法程式碼
Selective Search: original matlab code, python wrapper
EdgeBoxes: matlab code
GOP and LPO: python code
MCG: matlab code
RIGOR: matlab code
4.準備資料集
4.1 首先要下載訓練集、驗證集、測試集,例子是VOC2007。資源在牆外,將給出百度雲盤中的地址。
wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
4.2 提取所有壓縮包到同一個下面稱為$VOCdevkit的資料夾下。
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
要有這些基本的目錄:
$VOCdevkit/ # development kit
$VOCdevkit/VOCcode/ # VOC utility code
$VOCdevkit/VOC2007 # image sets, annotations, etc.
4.3 建立對VOC2007資料集的symlink,也就是連結FRCN_ROOT和VOC2007的目錄。
cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007
這個方法非常好,因為別的工程裡面也可能用到這個資料集,這樣就不用多次拷貝了,節省了很多儲存空間,windows下面就沒有。
4.4 可以再用同樣的辦法得到VOC2010和2012的資料集,如果有需要的話。
4.5 下載預先用selective search計算好的object proposal。
cd $FRCN_ROOT
./data/scripts/fetch_selective_search_data.sh
會下載到$FRCN_ROOT/data下,解壓後是一個名為selective_search_data的資料夾。
4.6 下載預先訓練好的ImageNet模型。
cd $FRCN_ROOT
./data/scripts/fetch_imagenet_models.sh
下載到三個模型,分別是CaffeNet (model S), VGG_CNN_M_1024 (model M), and VGG16 (model L),會下載到$FRCN_ROOT/data下,解壓後是一個名為imagenet_models的資料夾。
5.模型的訓練與測試
5.1 訓練模型
訓練Fast R-CNN檢測器,以在VOC2007上訓練一個CaffeNet 的網路為例。
./tools/train_net.py --gpu 0 --solver models/CaffeNet/solver.prototxt --weights data/imagenet_models/CaffeNet.v2.caffemodel
這裡我出現了EnvironmentError: MATLAB command 'matlab' not found. Please add 'matlab' to your PATH.這種錯誤,說明沒把matlab的路徑新增到環境變數中,下面的語句設定環境變數:
export PATH=$PATH:"/usr/local/MATLAB/R2014a/bin"
又提示說ImportError: No module named yaml,那就下載安裝一個:
sudo apt-get install python-yaml
再次執行程式碼就可以了。如果顯示記憶體不夠,可以用nvidia-smi隨時檢視記憶體使用情況。每10000次迭代會生成一個model,結果存放在output資料夾中。
訓練VGG_CNN_M_1024網路時,會提示說記憶體不夠,就把$FRCN_ROOT/lib/fast_rcnn下的config.py中每個minibatch所用的圖片由2改為1,如果還不行,說明GPU記憶體太小,只能換GPU了。
./tools/train_net.py --gpu 0 --solver models/VGG_CNN_M_1024/solver.prototxt --weights data/imagenet_models/VGG_CNN_M_1024.v2.caffemodel
訓練 VGG16網路,據作者說,即使把每個minibatch所用的圖片由2改為1,也需要將近5G的GPU記憶體,3G以上記憶體的可以嘗試一下,cudnn可能在一定程度上起到了優化作用。
5.2 測試模型
在自己的模型還沒有訓練好,或者訓練得不夠好的時候,可以試試作者提供的模型:
./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt --net data/fast_rcnn_models/caffenet_fast_rcnn_iter_40000.caffemodel
在測試的時候一直報下面這樣的錯,困擾了很久,找到原因後覺得自己蠢哭了。
把VOCevaldet中相應檔名輸出來,發現問題出在VOCinit上,我們現在是在測試,把
下面再測試自己的模型:
./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel
測試的結果也在output資料夾中。
5.3 用全連線層壓縮的SVD來壓縮FRCNN模型
./tools/compress_net.py --def models/CaffeNet/test.prototxt --def-svd models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel
壓縮後的模型和壓縮前的模型是放在一起的,只是名字不一樣,在output下的相應資料夾下。再測試這個壓縮後的模型:
./tools/test_net.py --gpu 0 --def models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/vcaffenet_fast_rcnn_iter_40000_svd_fc6_1024_fc7_256.caffemodel
好像是快了一些吧,反正這也不是重點。
附錄
1.$FRCN_ROOT/experiments/scripts下的這些指令碼可以再現作者論文中的實驗,有興趣的話可以試一下。
2.日誌檔案下載地址:Experiment logs
3.PASCAL VOC的一些檢測結果
voc_2007_test_results_fast_rcnn_caffenet_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg16_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg_cnn_m_1024_trained_on_2007_trainval.tgz voc_2012_test_results_fast_rcnn_vgg16_trained_on_2007_trainvaltest_2012_trainval.tgzvoc_2012_test_results_fast_rcnn_vgg16_trained_on_2012_trainval.tgz
4.Fast R-CNN VGG16 modeltrained on VOC07 train,val,test union with VOC12 train,val
最後,為什麼自己用selective search生成的bounding boxes就再難再現demo裡面那麼好的效果,而作者目前也沒給出迴應。
感謝歐新宇師兄的熱心指導。
相關文章
- RCNN & SPP-net & Fast-RCNN & Faster-RCNNCNNAST
- RCNN、SPP-net、Fast-RCNN和Faster-RCNNCNNAST
- Fast-RCNN解析:訓練階段程式碼導讀ASTCNN
- Windows下編譯fast rcnnWindows編譯ASTCNN
- 寫給程式設計師的機器學習入門 (九) - 物件識別 RCNN 與 Fast-RCNN程式設計師機器學習物件CNNAST
- 深度學習程式碼積累深度學習
- 深度學習技術研究會深度學習
- 深度學習高頻手撕程式碼深度學習
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- 深度學習論文翻譯解析(十二):Fast R-CNN深度學習ASTCNN
- 李沐動手學習深度學習 錨框部分程式碼解析深度學習
- 用深度學習自動生成HTML程式碼深度學習HTML
- 5步實現深度學習OpenCV物件檢測:Faster-RCNN圖片識別深度學習OpenCV物件ASTCNN
- 深度學習研究的新變化:教計算機如何編碼深度學習計算機
- Python TensorFlow深度學習迴歸程式碼:DNNRegressorPython深度學習DNN
- 這 6 段程式碼,成就瞭如今的深度學習深度學習
- pytorch深度學習分類程式碼簡單示例PyTorch深度學習
- 深度學習(一)深度學習學習資料深度學習
- 流體力學深度學習建模技術研究進展深度學習
- 深入研究神經網路和深度學習神經網路深度學習
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 深度學習及深度強化學習研修深度學習強化學習
- 【課程學習】課程2:十行程式碼高效完成深度學習POC行程深度學習
- 深度學習學習框架深度學習框架
- 深度學習03-sklearn.LinearRegression 原始碼學習深度學習原始碼
- 深度學習深度學習
- ####深度學習深度學習
- 深度 學習
- 基於深度學習的時間序列分類[含程式碼]深度學習
- 利用深度學習和機器學習預測股票市場(附程式碼)深度學習機器學習
- [譯] 使用深度學習自動生成 HTML 程式碼 - 第 1 部分深度學習HTML
- 深度學習及深度強化學習應用深度學習強化學習
- 深度學習趣談:什麼是遷移學習?(附帶Tensorflow程式碼實現)深度學習遷移學習
- 帶你用深度學習虛擬機器進行文字遷移學習(附程式碼)深度學習虛擬機遷移學習
- 深度學習論文和開原始碼深度學習原始碼
- 釋出Tensor2Tensor,加快深度學習研究深度學習
- Petuum新研究助力臨床決策:使用深度學習實現自動ICD編碼深度學習
- FAST_START_MTTR_TARGE 引數學習AST