Widows下Faster R-CNN的MATALB配置(CPU)




說實話,費了很大的勁,在調試的過程中,遇到了很多的問題;

幸運的是,最終還是解決了問題;

這是一篇關於在Windows下Faster R-CNN的MATLAB源碼(該項目已不再維護)調試的筆記,目前只在CPU上Testing通過;

GPU版本見:Widows下Faster R-CNN的MATALB配置(GPU)

由於機器配置的原因,沒有涉及到Faster R-CNN的Training問題;

另外,機器的軟硬件是一個不小的問題,由於使用的Microsoft提供的caffe(該項目已不再維護),該項目使用VS2013、CUDA7.5,由於本文不使用GPU測試及訓練,因此不關注CUDA版本;至於VS,之前安裝過VS2015,遇到了一些問題,因此為了能夠快速的對Faster R-CNN源碼的測試,這里不建議使用VS2015;(當然了,使用VS2015也可能會得到想要的結果,但是相對來說,使用VS2013更容易些)

環境配置:

Windows 10
VS 2013
MATLAB 2018a

這里再補充一點,有些博主建議說先安裝VS再安裝MATLAB,防止MATLAB找不到VS的C/C++編譯器;由於本人之前就已經安裝過MATLAB,后來才安裝的VS2013,幸運的是,關於找不到C編譯器的這個問題,沒有遇到;

對了,這里做一個整體的概括,我們想要執行Faster R-CNN的MATLAB源碼完成Testing;大致可分為三個步驟:

  • 准備工作;下載一些文件;
  • 使用VS2013對Caffe編譯;(這一塊將會占用很大一部分時間)
  • 測試Faster R-CNN的MATLAB源碼;

說實話,里面有很多小細節,一招不慎,就會error;

下面也將分成三大部分進行介紹;



1. 准備工作

1.1 Faster R-CNN的MATLAB源碼

下載faster_rcnn的matlab源碼:下載地址

得到./faster_rcnn文件夾;

打開matlab,定位到./faster_rnn/,目錄結構如下圖所示;

部分文件夾介紹:
experiment/:主要是用於testing/training的腳本;
external/:主要存放成功編譯的提供matlab接口的caffe;(后面將花費很多時間在這個上面)
fetch_data/:作者提供的一些用於下載的腳本文件;

其中的都是一些依賴方法,大家可以去看一下;

補充說明:

  1. 有關external/存放的是編譯好的提供matlab接口的caffe,后續我們將使用VS進行編譯,並將編譯好的caffe放進其中;
  2. 有關fetch_data/中有一個腳本文件fetch_caffe_mex_windows_vs2013_cuda65.m用於下載作者提供的編譯好的caffe,因為我們需要重新編譯,所以並不會使用它;

1.2 Microsoft-Caffe

下載Microsoft提供的caffe:下載地址

解壓得到./caffe文件夾;

目前,我們得到兩個文件夾;

1.3 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打開CommonSettings.props,修改下面內容:

第7行: <CpuOnlyBuild>false</CpuOnlyBuild> 修改成:<CpuOnlyBuild>true</CpuOnlyBuild>
第8行: <UseCuDNN>true</UseCuDNN> 修改成: <UseCuDNN>false</UseCuDNN>
第16行: <MatlabSupport>false</MatlabSupport> 修改成: <MatlabSupport>true</MatlabSupport>

上述三處修改分別表示,僅僅使用CPU、不使用CudNN、使用MATLAB;

繼續修改:

第53行: <MatlabDir>C:\Program Files\MATLAB\R2014b</MatlabDir> 修改成:<MatlabDir>F:\software\Matlab 2018a</MatlabDir>
第55行: <IncludePath>$(MatlabDir)\extern\include;$(IncludePath)</IncludePath> 修改成:<IncludePath>$(MatlabDir)\extern\include;$(MatlabDir)\toolbox\distcomp\gpu\extern\include;$(IncludePath)</IncludePath>

上述第一處修改指定MATLAB安裝位置;第二處修改,添加文件mxGPUArray.h,否則后續會報錯;

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.cpp

打開解決方案資源管理器,找到libcaffe/cu/layers/右鍵—》添加—》現有項,在./caffe/src/caffe/layers/中找到roi_pooling_layers.cpp文件,進行添加,如下圖;

添加成功后,可以看到libcaffe/cu/layers/下有roi_pooling_layers.cpp文件;

2.4 編譯libcaffe

選中項目libcaff,右鍵—> 重新生成;

首先會自動還原NuGet包,然后生成成功;

補充說明:

在選擇重新生成后,會自動還原NuGet包;

需要還原哪些NuGet包,都在ibcaffe/packages.config中定義,如下圖所示;其中有些包的名稱為vc120表示適用於VS2013;而VS2015的話,對應名稱則為vc140;

之前安裝過VS2015,在這里遇到問題了,因為有些包在NuGet網站上就沒有對應於vc140的,只有vc120的;

2. 5 編譯matcaffe

如果上面幸運的話,沒出什么錯,那這里也不會遇到什么麻煩了;

類似重新生成libcaffe,以同樣的方式,選擇matcaffe,右鍵—> 生成;


到目前為止,我們已經有了三個文件夾,如下圖所示:

  • ./caffe/:表示microsoft提供的caffe;
  • ./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接口編譯正確;


2.6 在matlab中使用caffe

在對Faster R-CNN的源碼測試之前呢,先說明一下如何在matlab中使用編譯好的caffe;


參考其他博客中,最常見的做法是:

  • 首先,將./caffe/Build/x64/Release添加到系統變量的path中;
  • 然后,將./ccaffe/Build/x64/Release/matcaffe添加到matlab的搜索路徑中;
  • 最后,打開matlab,在命令行中使用caffe.reset_all()進行測試是否成功;

電腦重啟、maltab重啟都試過了,然而我的卻是總是錯誤:

未定義變量 "caffe" 或類 "caffe.reset_all"。

怎么解決的呢?最后對比./caffe/matlab/+caffe/./caffe/Build/x64/Release/matcaffe/+caffe/這兩個文件夾才發現了端倪,如下圖所示;

發現在多了一些.m文件,而且注意到reset_all.m這個文件在其中,有沒有很熟悉;

其實命令caffe.reset_all()中的caffe指的就是這里的文件夾+caffe.reset_all()就是調用的這個reset_all.m這個腳本文件;

而在編譯之后,+caffe這個文件夾是沒有reset_all()這個方法的;

因此,在設置系統變量path以及添加matlab搜索路徑之后,將缺失的這些方法都拷貝到編譯成功的./caffe/Build/x64/Release/matcaffe/+caffe/文件夾中;

這時候,再執行caffe.reset_all()就不會報錯了;

輸出結果如下:

Cleared 0 solvers and 0 stand-alone nets

那么接下來就開始執行faster r-cnn的源碼測試了;

3. Faster R-CNN的MATLAB源碼測試

在此之前,我們已經將Faster R-CNN的源碼已經下載了,那么就根據作者提供的README.md來一步步的執行;

3.1 Preparation for Testing

  1. Run fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m to download a compiled Caffe mex (for Windows only).
  2. Run faster_rcnn_build.m
  3. Run startup.m

其中,

  • 第0步:表示下載作者提供的編譯好的caffe,因為我們已經編譯好了,這里不需要執行;

  • 第1步:執行faster_rcnn_build.m

    如下圖所示,會報錯,沒關系,因為我們使用的是CPU;

  • 第2步:執行start_up.m,會出現下面錯誤;

    這是因為,我們沒有將編譯好的caffe放在./external/caffe/文件夾下;

    因此,根據錯誤提示,需要在./external/caffe/文件夾下新建一個空白名為matlab的文件夾;

    然后,再執行start_up.m,就不會報錯了;

3.2 Testing Demo

  1. Run fetch_data/fetch_faster_rcnn_final_model.m to download our trained models.
  2. 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,測試;

    進行如下圖所示修改:

    第一、二處指定使用CPU進行計算;

    第二處,由於VGG-16網絡有些大,我的筆記本扛不住,因此使用ZF-Net網絡;

最后的結果,如下圖所示:

3.3 Training

目前這個筆記本還做不了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM