caffe.net matlab,【caffe-Windows】微软官方caffe之 matlab接口配置
前言
按照微軟的官方地址配置可能會出現一個問題caffe_.mexw64找不到引用模塊問題,或者在matlab里面壓根找不到caffe_這個函數,下面會提到這兩個問題。還是按照步驟來吧
【PS1】有GPU同樣按照下述步驟,進行即可
【PS2】文章在matlab2013a、matlab2014a、matlab2015b、matlab2016a、matlab2018a中配置成功,但是在高版本或者更低版本情況下可能會出現問題
matlab2015b下載地址:鏈接:http://pan.baidu.com/s/1hsmlNeO 密碼:o1fu
【注】比較建議安裝matlab2015b和VS2013,因為如果涉及到混合編程,MATLAB2012之類的可能無法選擇VS2013的編譯器。
第一步
修改配置文件,使之支持matlab接口,修改兩個地方,第一個是matlabsupport,第二個是matlabdir也就是你的matlab安裝目錄(對matlab桌面圖標右鍵屬性查看):
【PS】最近Microsoft 的github貌似更新了matcaffe中的caffe_.cpp文件,第十六行添加了對gpu/mxGPUArray.h的引用,可以在此步驟的IncludePath中添加MatlabDir,如下所示:
C:\Program Files\MATLAB\R2013a
$(MatlabDir)\extern\lib\win64\microsoft;$(LibraryPath)
$(MatlabDir);$(MatlabDir)\extern\include;$(IncludePath)
然后修改matcaffe中的第十六行#include"gpu/mxGPUArray.h"中修改為
#include
第二步
編譯caffe文件夾里面的Windows里面的caffe.sln工程里面的matcaffe一項
【注】此時先選擇release選項吧,別用debug了
第三步
使用release編譯以后,在\Build\x64\Release下會生成一個matcaffe文件夾,重點要有下面畫框的文件。
第四步
【此步是按照微軟官方配置方法】這一步不會安裝成功,不想看到這種出錯情況不要直接跳入第五步,先通讀一下第四步,然后除了路徑和環境變量不用加,其余的該拷貝還是得拷貝~~~
首先將上一步生成的matcaffe加入matlab的路徑中,直接在setpath里面設置
然后將release(如果你的caffe.sln是在Debug下生成的,就把Release換成Debug)加入系統變量path【手動copy進去就行了,我這里沒加,因為我測試了一下貌似沒啥效果,你們可以試試可以成功不】,加環境變量后記得重啟一下
【更新日志】在2016.10.18編譯matlab2015b的接口,發現這一步還是必須的,詳細看第五步。
最后運行這個demo
遇到的就是我說的找不到caffe_的問題了
接下來我把這個\Build\x64\Release\matcaffe\+caffe\private這個文件夾里面的東西全都拷貝到\matlab\+caffe\private覆蓋,然后遇到下面問題
第五步
暴力解決它,把\Build\x64\Debug下的所有的鏈接文件也就是dll文件也拷貝到這個文件夾去,原文件在這里
拷貝到\matlab\+caffe\private以后是這樣
【更新日志】在2016.10.18試了一下matlab 2015b,結果還是出現了
Invalid MEX-file 'E:\caffe-2015b\caffe-windows\matlab\+caffe\private\caffe_.mexw64': 找不到指
定的程序。
出錯 caffe.set_mode_cpu (line 5)
caffe_('set_mode_cpu');
出錯 classification_demo (line 70)
caffe.set_mode_cpu();
然后試了許久才發現,還是需要在第四步中加入對應的matcaffe根目錄,比如我在編譯matlab2015b的caffe接口的時候使用了Debug模式(即生成的matcaffe存在于Debug目錄下),那么我在環境變量中還是得添加E:\caffe-2015b\caffe-windows\Build\x64\Debug;,然后才解決了這個問題,比較奇怪的是,竟然在matlab2013a和matlab2015b下都能使用matlab/demo/classification.m了。不過解決了就是好事嘛~~
【更新日志】在2016.12.26網友測試了matlab2016a,加上已知評論區的朋友,已知在matlab2016下配置成功了三臺機器
按照matlab2015b的配置完畢以后,會出現
錯誤使用 CHECK (line 4)
invalid Net handle
出錯 caffe.Net (line 38)
CHECK(is_valid_handle(hNet_net), 'invalid Net handle');
出錯 caffe.get_net (line 28)
net = caffe.Net(hNet);
出錯 caffe.Net (line 33)
self = caffe.get_net(varargin{:});
出錯 classification_demo (line 84)
net = caffe.Net(net_model, net_weights, phase);
按照評論區網友@zhaocaoou1435的方法“這個問題可以通過在matlab里,把\caffe-master\matlab\+caffe\private文件夾點開,再重新運行就可以了”。
哈哈,感覺這種解決辦法好奇怪,原理暫時未知。
第六步
下載一下model文件放到caffe-master\models\bvlc_reference_caffenet文件夾下
下載地址 ?鏈接:http://pan.baidu.com/s/1geUv01l 密碼:yp9p
標簽文件如下
synset_words.txt地址:
鏈接:https://pan.baidu.com/s/1_cciKtw_a7Njyyn4Dm127g 密碼:zzzg
測試一下效果,建立一個test.m測試文件,路徑如下【忽視readlabel,我自己寫的讀文件,最后放到test.m里面了】
【最好在matlab里面加一下路徑】
代碼如下:
%參考http://www.aichengxu.com/view/2422137
clear
clc
im = imread('../../examples/images/cat.jpg');%讀取圖片
figure;imshow(im);%顯示圖片
[scores, maxlabel] = classification_demo(im, 0);%獲取得分第二個參數0為CPU,1為GPU
maxlabel %查看最大標簽是誰
figure;plot(scores);%畫出得分情況
axis([0, 999, -0.1, 0.5]);%坐標軸范圍
grid on %有網格
fid = fopen('synset_words.txt', 'r');
i=0;
while ~feof(fid)
i=i+1;
lin = fgetl(fid);
lin = strtrim(lin);
if(i==maxlabel)
fprintf('the label of %d is %s\n',i,lin)
break
end
end
運行之,效果
本文同步分享在 博客“風翼冰舟”(CSDN)。
如有侵權,請聯系 support@oschina.cn 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
總結
以上是生活随笔為你收集整理的caffe.net matlab,【caffe-Windows】微软官方caffe之 matlab接口配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp 微信小程序修改BarTit
- 下一篇: STM32------>第三天,spi补