1. 程式人生 > >編譯Caffe的Matlab介面

編譯Caffe的Matlab介面

一般情況下不願意使用Caffe的Matlab介面,總覺得Linux版的Matlab很難配置,但是現在搞目標檢測,得到的原始碼是使用的Caffe的Matlab介面,只能硬著頭皮上了。

(1)修改caffe-master/Makefile.config

這一步主要是在Caffe的編譯配置檔案Makefile.config中加入Matlab的路徑。注意路徑資料夾是要包含Matlab安裝目錄的“bin”資料夾的。


(2)編譯介面。這裡預設已經編譯好了Caffe原始碼主體部分。所以直接編譯介面。在caffe-master目錄下開啟終端,輸入:  make matcaffe   至於如何編譯Caffe原始碼的主體部分請大家百度,就是make all ,make test那些。我是一開始沒有在Makefile.config

中加入Matlab路徑,所以編譯Caffe主體程式碼時不會編譯Matlab介面。

(3)測試介面。輸入 make mattest

這裡可能報錯:caffe_.mexa64: undefined symbol:
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE


錯誤原因是Matlab自帶的庫和Ubuntu的系統庫之間發生了衝突,一言不和就廢掉Matlab的自帶庫,使用Ubuntu系統庫,呵呵。

PS:只替換庫libstdc++.so.6

是不行的,要解決此問題需要多替換幾個庫。輸入終端命令:

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/

注意:目錄/usr/lib/x86_64-linux-gnu/是我的系統庫目錄。大家可以通過查詢庫所在位置來確定自己的系統庫目錄:

sudo find / -name  libstdc++.so.6

重新執行make mattest , 問題解決~


(4)在Matlab中試試介面

<1>下載bvlc_reference_caffenet.caffemodel 

連結:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel

下載好之後放入資料夾/caffe-master/models/bvlc_reference_caffenet 這是因為一會執行的demo要使用這個模型。

<2>在終端輸入命令“matlab”(打不開的自己去新增PATH)開啟Matlab,切換到目錄/caffe-master/matlab/demo/(這很重要)

<3>輸入命令 run('classification_demo.m') 或者雙擊開啟classification_demo.m直接點選上面控制檯上的“執行”即可,不需要輸入引數。

<4>輸出是一個1000×1的矩陣,因為ImageNet資料集有1000個類別。


到此OK,大家加油~

參考資料:

How to install Matlab API in Caffe

Matlab下對Caffe介面的呼叫