Fast RCNN 训练自己数据集 (1编译配置)
Fast RCNN 訓練自己數據集 (1編譯配置)
FastRCNN 訓練自己數據集 (1編譯配置)
轉載請注明出處,樓燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/
https://github.com/YihangLou/fast-rcnn-train-another-dataset?這是我在github上修改的幾個文件的鏈接,求星星啊,求星星啊(原諒我那么不要臉~~)
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的工程啦
這里給出Github的鏈接https://github.com/rbgirshick/fast-rcnn
首先根據他的提示
Make sure to clone with --recursive
git clone --recursive?https://github.com/rbgirshick/fast-rcnn.git
這里不要忘了加--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變量,鏈接,你直接把它鏈接起來,復制到迅雷中下載就可以了,速度灰???#xff0c;直接下載的話炒雞慢啊。
下在之后記得放到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接口修改訓練)
評論列表 #1樓?2015-10-20 14:13?lightning16? demo我都跑通了,現在是想用自己的道路標識進行訓練,用什么工具能把這些標識提前出來在annoations呢? 支持(0)反對(0) #2樓[樓主]?2015-10-23 00:22?樓燚航的blog? @?lightning16
你說的應該是原始的GroundTruth,就是目標在圖中的位置吧,我當時是自己寫的python 和 opencv一個標注小工具 支持(0)反對(0) #3樓?2015-11-16 16:27?Vict? cd $FRCN_ROOT
./tools/demo.py
這之前的東西都搞定,但跑demo出問題。
Traceback (most recent call last):
File "./tools/demo.py", line 17, in <module>
from fast_rcnn.config import cfg
File "/home/zhaoyannan/fast-rcnn/tools/../lib/fast_rcnn/__init__.py", line 8, in <module>
from . import config
File "/home/zhaoyannan/fast-rcnn/tools/../lib/fast_rcnn/config.py", line 23, in <module>
from easydict import EasyDict as edict
ImportError: No module named easydict 支持(0)反對(0) #4樓?2015-11-16 16:28?Vict? 對了我是用cpu配置的caffe,沒配置cuda 支持(0)反對(0) #5樓[樓主]?2015-11-16 19:05?樓燚航的blog? @?Vict
我覺得你可能是easydict環境沒有配或者是附加模塊的路徑問題,你在編譯的時候Makefile.config下是否添加了相應的python附加包的路徑 支持(0)反對(0) #6樓?2015-11-17 02:17?sunjieee? 博主,我在fast rcnn編譯caffe-fast-rcnn出現問題
加上WITH_PYTHON_LAYER = 1就有問題
把這句注釋掉就能編譯,但跑會有問題
而我嘗試最新的caffe同樣加上WITH_PYTHON_LAYER = 1卻能夠編譯完成
這是哪里的問題?是boost版本問題嗎?
實驗室的服務器不敢改,用自己電腦gt750跑的話會要幾天嗎?
具體報錯:
.build_release/lib/libcaffe.so: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > > const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
collect2: error: ld returned 1 exit status
Makefile:545: recipe for target '.build_release/tools/device_query.bin' failed
make: *** [.build_release/tools/device_query.bin] Error 1
make: *** Waiting for unfinished jobs.... 支持(0)反對(0) #7樓[樓主]?2015-11-18 18:49?樓燚航的blog? @?sunjieee
我之前boost升級也碰到過問題,后來退回到1.55版本,就沒有Boost的問題了,你可以試試 支持(0)反對(0) #8樓?2015-12-28 19:55?野孩子1991? 樓主,可否給下你的selective search的代碼,我在網上找的產生的op都不好,對比demo里的檢測車輛那個,我的op只能找到兩輛車。謝謝。 支持(0)反對(0) #9樓?2016-01-27 14:52?黃豆豆是小小兵? 博主您好,參照您的博客安裝了fast-rcnn,但是在編譯caffe和pycaffe時出現了問題,向您請教一下~
.build_release/lib/libcaffe.so:對‘caffe::CuDNNConvolutionLayer<double>::Backward_gpu(std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&, std::vector<bool, std::allocator<bool> > const&, std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&)’未定義的引用
謝謝( ^_^ ) 支持(0)反對(0) #10樓[樓主]?2016-02-19 13:08?樓燚航的blog? @?野孩子1991
你可以直接到Fast或者FasterRCNN的Github主頁上有相應的鏈接,跳過去下載就可以了 支持(0)反對(0) #11樓[樓主]?2016-02-19 13:09?樓燚航的blog? @?黃豆豆是小小兵
你那個cuDNN的編譯選項要確保打開哦 支持(0)反對(0) #12樓?2016-03-09 13:40?keran? 唔,我剛才沒編譯,但是現在編譯出現了大bug呀,求幫助!
In file included from src/caffe/util/cudnn.cpp:2:0:
./include/caffe/util/cudnn.hpp:64:32: 錯誤: 變量或字段‘createTensor4dDesc’聲明為 void
./include/caffe/util/cudnn.hpp:64:32: 錯誤: ‘cudnnTensorDescriptor_t’在此作用域中尚未聲明
./include/caffe/util/cudnn.hpp:64:57: 錯誤: ‘desc’在此作用域中尚未聲明
。。。。。太多了放不下
./include/caffe/util/cudnn.hpp: 在函數‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, int, cudnnFilterDescriptor_t, int, int, int, int)’中:
./include/caffe/util/cudnn.hpp:104:3: 錯誤: ‘cudnnSetConvolution2dDescriptor’的實參不依賴模板參數,所以‘cudnnSetConvolution2dDescriptor’的聲明必須可用 [-fpermissive]
./include/caffe/util/cudnn.hpp:104:3: 附注: (如果您使用‘-fpermissive’,G++ 會接受您的代碼,但是允許使用未定義的名稱是不建議使用的風格)
./include/caffe/util/cudnn.hpp: 在函數‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:
./include/caffe/util/cudnn.hpp:117:13: 錯誤: ‘CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING’在此作用域中尚未聲明
./include/caffe/util/cudnn.hpp:123:3: 錯誤: ‘cudnnSetPooling2dDescriptor’的實參不依賴模板參數,所以‘cudnnSetPooling2dDescriptor’的聲明必須可用 [-fpermissive]
make: *** [.build_release/src/caffe/util/math_functions.o] 錯誤 1
謝謝! 支持(0)反對(0) #13樓?2016-03-30 15:31?雪花扇子? 樓主你好,為什么會出現cannot import name symbol_database 支持(0)反對(0) #14樓?2016-04-01 18:46?JustJay? @?野孩子1991
selective-search提取OP的坐標是[top left bottom right]形式,并且從1開始,demo.py里面OP坐標形式為[left top right bottom],并且從0開始。
所以你需要進行坐標變換:all_proposals=all_proposals[ : , (1,0,3,2)]-1。
我當時也是只能檢測出兩輛車,后來發現是坐標的問題 支持(0)反對(0) #15樓?2016-04-01 18:51?JustJay? @?雪花扇子
我建議你在make -j8 && make pycaffe 之后從上到下依次查找error。很多問題是沒有安裝庫文件。google相應error之后 sudo apt-get install 相應的庫 就好啦! 支持(0)反對(0) #16樓?2016-04-01 18:58?雪花扇子? @?JustJay
謝謝!那個問題以及解決了。我看了demo發現不僅有圖片還有.mat的數據文件,那在在測試的時候是不是還得準備測試圖片的.mat文件。這樣我隨便拿一張圖片來做測試不就不能測試嗎? 支持(0)反對(0) #17樓?2016-04-01 19:04?JustJay? @?雪花扇子
是這樣的,如果你需要測試自己的圖片就要提取Object Proposal,也就是那個生成的.mat文件。我目前用的是selective-search提取的,Edge-Boxes還沒有調好。不過你要非常注意坐標問題,正如博主提到的一樣。 支持(0)反對(0) #18樓?2016-04-01 19:10?雪花扇子? @?JustJay
那我如果是實際用呢?就比如像博主那樣要對道路上的車輛進行檢測,那是不是要把視頻每幀經過 selective-search 提取出 Object Proposal生成.mat文件然后和每幀圖片本身傳到模型做檢測啊。這樣的話有點麻煩 支持(0)反對(0) #19樓?2016-04-01 19:16?JustJay? @?雪花扇子
我是初學caffe,現在還只是進行到檢測自己的圖片階段,甚至還沒有開始訓練自己的數據集:(,不過你說的這個問題我不久會著手研究,如果你有什么進展,希望可以互相交流切磋!!! 支持(0)反對(0) #20樓?2016-04-01 19:21?雪花扇子? @?JustJay
我也是出學,只是在跑demo的時候發現這個問題,多多交流 支持(0)反對(0) #21樓?2016-04-05 10:33?野孩子1991? @?JustJay
非常感謝,我現在著手正在搞別的,等過段時間再搞一下試試。 支持(0)反對(0)
總結
以上是生活随笔為你收集整理的Fast RCNN 训练自己数据集 (1编译配置)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像去雾
- 下一篇: Fast RCNN 训练自己数据集 (2