說在前面,這篇是關於Windows下Faster R-CNN的MATLAB配置,GPU版本;CPU版本見:Widows下Faster R-CNN的MATALB配置(CPU);
相比較來說,CPU版本相對容易一些,因為涉及到GPU的計算,還需要配置CUDA以及CuDNN;
下面將分成三個部分進行介紹:
- 准備工作:下載caffe、faster rcnn源碼、安裝cuda、cudnn;
- VS2013編譯caffe: 編譯支持matlab接口的caffe;
- Faster R-CNN的MATLAB源碼測試:
環境配置:
Windows 10
VS 2013
CUDA 7.5, CuDNN V5
MATLAB 2018a
1. 准備工作
1.1 安裝CUDA、CuDNN
有關安裝CUDA的過程見:Windows下安裝CUDA8.0;該文章記錄的是安裝CUDA 8.0的過程以及在VS上的使用;
附加說明:
建議使用CUDA 7.5,CuDNN V5;
注意:將CuDNN壓縮包解壓到與下面的caffe與faster rcnn位於同級目錄;
1.2 Faster R-CNN的MATLAB源碼
下載faster_rcnn的matlab源碼:下載地址;
得到./faster_rcnn文件夾;
打開matlab,定位到./faster_rnn/,目錄結構如下圖所示;
部分文件夾介紹:
experiment/:主要是用於testing/training的腳本;
external/:主要存放成功編譯的提供matlab接口的caffe;(后面將花費很多時間在這個上面)
fetch_data/:作者提供的一些用於下載的腳本文件;
其中的都是一些依賴方法,大家可以去看一下;
1.3 Microsoft-Caffe
下載Microsoft提供的caffe:下載地址;
解壓得到./caffe文件夾;
目前,我們得到兩個文件夾;
1.4 matlab指定C/C++編譯器
打開matlab,執行:
mex -setup
選擇 Microsoft Visual C++ 2013 (C) 進行C語言編譯,如下圖:
2. VS2013編譯Caffe
2.1 CommonSettings.props
打開./caffe/windows/
,找到CommonSettings.props.example
文件,復制后,將名稱改為CommonSettings.props
,如下圖:
使用Notepad打開·./caffe/windows/CommonSettings.props
,根據自己的配置,做如下修改:
- 第一處紅框:使用CUDA加速計算、僅使用CPU計算,兩者選其一;由於我們配置GPU,CUDA版本7.5,因此配置如圖;
- 第二處紅框:提供matlab接口;
- 第三處紅框:指定CuDNN V5的路徑,我的配置路徑如圖所示;也就是說將下載好的CuDNN壓縮包解壓到
G:\ObjectDetection\Faster R-CNN\Faster R-CNN_GPU
中; - 第四處紅框:修改兩個位置,一個是MATLAB的安裝路徑,另一個如圖;
補充說明:
有關<CudaArchitecture>compute_35,sm_35;compute_52,sm_52</CudaArchitecture>
,可以修改為與自己顯卡相對應的計算能力,提示說可以減少編譯時間;
有關顯卡的計算能力查詢,見:英偉達GPU顯卡計算能力評估(深度學習);
2.2 項目-屬性配置
修改完成,使用VS2013打開./caffe/windows/Caffe.sln
,雙擊即可;
打開之后,將Debug模式調成Release模式;(在調試的過程中,可能會重新加載項目,注意需要調整成Release)
之后,
libcaffe項目右鍵—> 屬性—>配置屬性—> C/C++ —> 常規,將將警告視為錯誤修改為否;
否則,編譯libcaffe時會報下面的錯誤;
提示出現:error C2220:...,表示alt_sstream_impl.hpp文件編碼格式錯誤;解決方法是:雙擊錯誤信息,彈出錯誤提示信息,確定后打開一個alt_sstream_impl.hpp文件,然后Ctrl+S進行保存即可;
2.3 添加roi_pooling_layer
打開解決方案資源管理器,
在項目libcaffe中添加roi_pooling_layer.cu
, roi_pooling_layer.cpp
, roi_pooling_layer.hpp
:
libcaffe/cu/layers/
右鍵—>添加—>現有項,添加./caffe/src/caffe/layers/roi_pooling_layers.cu
文件;libcaffe/include/layers/
右鍵—>添加—>現有項,添加加./caffe/include/caffe/layers/roi_pooling_layers.hpp
文件;libcaffe/src/layers/
右鍵—>添加—>現有項,添加./caffe/src/caffe/layers/roi_pooling_layers.cpp
文件;
2.4 編譯libcaffe
選中項目libcaff,右鍵—> 重新生成;
首先會自動還原NuGet包,然后生成成功;
======== 全部重新生成: 成功 1 個,失敗 0 個,跳過 0 個 ==========
(如果出現錯誤(不包含警告),仔細檢查上面配置是否正確;)
2. 5 編譯matcaffe
如果上面幸運的話,沒出什么錯,那這里也不會遇到什么麻煩了;
類似重新生成libcaffe,以同樣的方式,選擇matcaffe,右鍵—> 生成;
成功后,輸出:
========== 生成: 成功 2 個,失敗 0 個,最新 1 個,跳過 0 個 ==========
到目前為止,我們已經有了四個文件夾,如下圖所示:
./caffe/
:表示microsoft提供的caffe;./cuda/
:表示CuDNN V5的文件,解壓到該處;./faster_rcnn/
:表示faster r-cnn的matlab源碼;./NugetPackages/
:就是在編譯libcaffe時還原出來的NuGet包;- 另外,
./caffe/Build/x64/Release/
下就是得到caffe;
其中,./caffe/Build/文件夾就是編譯caffe得到文件;
如果在./caffe/Build/x64/Release/matcaffe+caffe/private/文件夾下,有caffe_.mexw64文件表明caffe的matlab接口編譯正確;
3. Faster R-CNN的MATLAB源碼測試
3.1 external
在Faster R-CNN的源碼中,我們看到有./faster_rcnn/external/caffe/
文件夾,該文件夾是為了存放編譯好的caffe;
而在這里,並不打算將編譯好的caffe復制到該文件夾下,而是通過設置系統環境變量和添加matlab搜索路徑;
具體步驟如下:
- 將
./caffe/Build/x64/Release/
添加到系統變量的path中; - 將
./caffe/Build/x64/Release/matcaffe/
添加到matlab的搜索路徑中; - 將
./caffe/matlab/+caffe/
文件夾(不包含子文件夾)下的所有.m
文件拷貝到/caffe/Build/x64/Release/matcaffe/+caffe/
文件夾下; - 重啟電腦,完成caffe在matlab中的配置;
3.2 Preparation for Testing
- Run
fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m
to download a compiled Caffe mex (for Windows only).- Run
faster_rcnn_build.m
- Run
startup.m
其中,
- 第0步:表示下載作者提供的編譯好的caffe,因為我們已經編譯好了,這里不需要執行;
- 第1步:執行
faster_rcnn_build.m
;
打開faster_rcnn_build.m
后,修改nvmex.m
文件,如下圖:
- 按照VS的安裝位置修改紅框內的路徑;
- 第二個紅框注意修改CUDA版本;
- 其他變量都是通過系統變量來獲取得到的;
補充說明:
在使用Matlab 2018a執行faster_rcnn_build.m
時,總是報錯:
LIBCMT.lib(crt0dat.obj) : error LNK2005: _amsg_exit 已經在 MSVCRT.lib(MSVCR120.dll) 中定義
LIBCMT.lib(crt0dat.obj) : error LNK2005: _initterm_e 已經在 MSVCRT.lib(MSVCR120.dll) 中定義
...
不知道怎么解決,幸好沒有將之前安裝matlab 2016a卸載,使用matlab2016a再執行,就成功通過了;
-
第2步:執行
start_up.m
文件;這是因為,我們沒有將編譯好的caffe放在
./external/caffe/
文件夾下;因此,根據錯誤提示,需要在
./external/caffe/
文件夾下新建一個空白名為matlab
的文件夾;然后,再執行
start_up.m
,就不會報錯了;
3.2 Testing Demo
- Run
fetch_data/fetch_faster_rcnn_final_model.m
to download our trained models.- Run
experiments/script_faster_rcnn_demo.m
to test a single demo image.
其中,
-
第0步:下載作者提供的訓練好的模型文件;
其中下載鏈接好像需要翻牆,如果有需要的話,可以從這里下載:下載地址,提取碼:62n6;
下載完成后,解壓到./faster_rcnn/中,覆蓋原來的./faster_rcnn/output/文件夾,以及多出了五張圖片;
-
第1步:執行腳本文件
experiments/script_faster_rcnn_demo.m
,測試;當然該腳本中的參數,可以適當調整;
由於我的筆記本不行,即使換成ZF-Net也跑步了,檢測的結果了,結果應該和Widows下Faster R-CNN的MATALB配置(CPU)是一致;