ubuntu下 編譯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/

可以通過 ldd ./matlab/+caffe/private/caffe_.mexa64 查看其依賴了那些動態庫,將其增加到你的 LD_PRELOAD中,見caffe官網  http://caffe.berkeleyvision.org/tutorial/interfaces.html#matlab

這個要視具體目錄而定,我這邊寫了個腳本,如下:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64


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 matlab

   

注意:目錄/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

http://blog.csdn.NET/buyi_shizi/article/details/51607109

Matlab下對Caffe接口的調用

http://blog.csdn.Net/u012746763/article/details/50419153


免責聲明!

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



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