1. 程式人生 > >【caffe-windows】 caffe-master 之 matlab介面配置

【caffe-windows】 caffe-master 之 matlab介面配置

平臺環境: win10 64位 caffe-master  vs2013 Matlab2016a

第一步

開啟\caffe-master\windows下的CommonSettings.props檔案,

更改MatlabSupport,改成true(即支援Matlab介面)。

 如圖:



第二步

更改matlab的路徑,

如圖:


第三步

在includepath中增加一個路徑,若沒有的話,在編譯時候會出現如下錯誤:gpu/mxGPUArray.h" Not Found 

複製這段code

<IncludePath>$(MatlabDir)\extern\include;$(MatlabDir)\toolbox\distcomp\gpu\extern\include;$(IncludePath)</

IncludePath>

如圖:


第四步: 

開啟caffe-master\windows 下的 Caffe.sln ,找到matcaffe,選擇released(不要用debug),然後右鍵matcaffe,點選生成。

PS:不知道什麼原因出錯

錯誤    1   error : NuGet Error:Unable to find version'2.4.10' of package 'OpenCV.overlay-x64_v120_Release'. D:\NugetPackages\OpenCV.2.4.10\build\native\OpenCV.targets  772 5  libcaffe

選擇重新生成,可以解決。當然,沒出錯的同學忽略。

生成完畢後在caffe-master\Build\x64\Release\matcaffe\+caffe\private下會有檔案 :caffe_.mexw64

第五步:

開啟matlab,新增路徑

如圖:

第六步

新增系統環境變數,把..\caffe-master\Build\x64\Release  新增到系統環境變數中,如圖:


否者在執行 demo.m時候出會出現如下錯誤: 

Invalid MEX-file'D:\caffe-master\Build\x64\Release\matcaffe\+caffe\private\caffe_.mexw64': 找不到指定的模組。

 出錯 caffe.set_mode_cpu (line 5)

caffe_('set_mode_cpu');

 出錯 classification_demo (line 71)

 caffe.set_mode_cpu();

第七步

將caffe-master\Build\x64\Debug中所有dll檔案全複製到caffe-master\matlab\+caffe\private

如圖:


第八步:

下載model檔案(bvlc_reference_caffenet.caffemodel)放到caffe-master\models\bvlc_reference_caffenet資料夾下

第九步:

下載標籤檔案:synset_words.txt ,放在與classification_demo.m同一個資料夾下

第十步:

開啟classification_demo.m,執行。如果出現

未定義函式或變數 'caffe_'。 

出錯 caffe.set_mode_cpu (line 5)

caffe_('set_mode_cpu'); 

出錯 classification_demo (line 71)

 caffe.set_mode_cpu();

請修改 第二條語句  

 addpath('../../Build/x64/Release/matcaffe');

第十一步

下載連結:http://pan.baidu.com/s/1nvtwoBJ 密碼:t71u

 存放在與classification_demo.m同一個資料夾下

test_mat.m原始碼如下:

  1. %參考http://www.aichengxu.com/view/2422137  
  2. clear  
  3. clc  
  4. im = imread('../../examples/images/cat.jpg');%讀取圖片
  5. figure;imshow(im);%顯示圖片
  6. [scores, maxlabel] = classification_demo(im, 0);%獲取得分第二個引數0CPU1GPU  
  7. maxlabel %檢視最大標籤是誰
  8. figure;plot(scores);%畫出得分情況
  9. axis([0, 999, -0.1, 0.5]);%座標軸範圍
  10. grid on %有網格
  11. fid = fopen('synset_words.txt', 'r');  
  12. i=0;  
  13. while ~feof(fid)  
  14. i=i+1;  
  15. lin = fgetl(fid);  
  16. lin = strtrim(lin);  
  17.     if(i==maxlabel)  
  18.         fprintf('the label of %d is %s\n',i,lin)  
  19.         break  
  20.     end  

23. end  

執行結果如圖: