天天看點

糟心的caffe+ matlab編譯路程

配置:Ubuntu16.04+MatlabR2016b+cuda8.0+cudnn5.1+caffe

配置caffe真的不是很容易,特别是對初次接觸Linux的同學,各種報錯(ノ_;\( `ロ´),搞了好幾天才解決

caffe安裝可能出現的問題

可能會出現的問題

問題1."libcudart.so.8.0 cannot open shared object file: No such file or directory"

解決方法:

解決辦法是将一些檔案複制到/usr/local/lib檔案夾下:

注意自己CUDA的版本号!

sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
           

問題2."libcudnn.so.5 cannot open shared object file: No such file or directory"

解決方法:

解決辦法是将一些檔案複制到/usr/local/lib檔案夾下

注意自己CUDA的版本号!

sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so /usr/local/lib/libcudnn.so && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5.1.5 /usr/local/lib/libcudnn.so.5.1.5 && sudo ldconfig

           

問題3."OSError: libcudnn.so.7.0: cannot open shared object file: No such file or directory錯誤"

解決方法:

#因為cuda的路徑可能設定錯了

sudo ldconfig /usr/local/cuda/lib64

           

問題4.linux下Matcaffe調用及庫連結問題的解決(mattest不通過)

解決方法:

編譯make matcaffe後,執行make mattest後,往往出現“Invalid MEX-file"問題,其原因是MATLAB和linux的庫沖突,解決的方法是用linux的庫(在編譯caffe之前大家的opencv等庫肯定也早已裝好了)

大部分的解決方法是通過export LD_LIBRARY_PATH和 LD_PRELOAD來連結,但是效果不好。最後發現,隻有直接去MATLAB下面删除庫并重新連結到x86_64-linux-gnu的方法是最好的。具體方法如下:

1.不需要降級gcc和g++,就用linux的自帶版本,否則caffe編譯不一定通過。我的是14.04的5.4(千萬不要先用5去編譯caffe再降級用4.4編譯matcaffe)

2.不要去用改LIBRARY_PATH的方法,因為很可能不成功,尤其是有倒黴催的anaconda的情況下。

3.找到你的linux庫的位置(一般是/usr/lib/x86_64-linux-gnu/)以及MATLAB庫的位置(預設是/usr/local/MATLAB/R2014a/sys/os/glnxa64/)。然後寫個sh執行下列操作

rm -rf /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9  /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_imgproc.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9  /usr/local/MATLAB/R2017a/bin/glnxa64/libopencv_imgproc.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_highgui.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9  /usr/local/MATLAB/R2017a/bin/glnxa64/libopencv_highgui.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libfreetype.so.6
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6  /usr/local/MATLAB/R2017a/bin/glnxa64/libfreetype.so.6

           

問題5.Invalid MEX-file

\'/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64\':

/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64: undefined

symbol:

_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE

Error in caffe.set_mode_cpu (line 5)

caffe_(\'set_mode_cpu\');

Error in caffe.run_tests (line 6)

caffe.set_mode_cpu();

解決方法:

root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_imgproc.so.2.4 libopencv_imgproc.so.2.4.bak
root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_highgui.so.2.4 libopencv_highgui.so.2.4.bak
root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_core.so.2.4 libopencv_core.so.2.4.bak

root@test222:/matlab/r2016a/bin/glnxa64# ln /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9 libopencv_core.so.2.4
root@test222:/matlab/r2016a/bin/glnxa64# ln /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9 libopencv_highgui.so.2.4
root@test222:/matlab/r2016a/bin/glnxa64# ln /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9 libopencv_imgproc.so.2.4

           
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64
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
           

問題6.錯誤:undefined

symbol:

_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE

解決方法:

root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_imgproc.so.2.4 libopencv_imgproc.so.2.4.bak
root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_highgui.so.2.4 libopencv_highgui.so.2.4.bak
root@test222:/matlab/r2016a/bin/glnxa64# mv libopencv_core.so.2.4 libopencv_core.so.2.4.bak

root@test222:/matlab/r2016a/bin/glnxa64# sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9 libopencv_core.so.2.4
root@test222:/matlab/r2016a/bin/glnxa64#sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9 libopencv_highgui.so.2.4
root@test222:/matlab/r2016a/bin/glnxa64#sudo  ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9 libopencv_imgproc.so.2.4
           

問題7.警告: 執行 \'caffe.Solver\' 類析構函數時,捕獲到以下錯誤:

錯誤使用 caffe_

Usage: caffe_(\'delete_solver\', hSolver)

出錯 caffe.Solver/delete (line 40)

caffe_(\'delete_solver\', self.hSolver_self);

出錯 caffe.Solver (line 17)

function self = Solver(varargin)

出錯 caffe.test.test_solver (line 22)

self.solver = caffe.Solver(solver_file);

出錯 caffe.run_tests (line 14)

run(caffe.test.test_solver) ...

In caffe.Solver (line 17)

In caffe.test.test_solver (line 22)

In caffe.run_tests (line 14)

解決方法:

https://blog.csdn.net/xiaojiajia007/article/details/72850247

40行:
      if ~isempty(self.hNet_self)
        caffe_(\'delete_net\', self.hNet_self);
      end

    if ~isempty(self.hNet_self)
        caffe_(\'delete_net\', self.hNet_self);
    end

    if self.isvalid
        caffe_(\'delete_net\', self.hNet_self);
    end

           

問題8.matlab測試

https://blog.csdn.net/weiqi_fan/article/details/71023222

解決方法:

設定GPU
gpu_id = 0
caffe.set_mode_gpu();
caffe.set_device(gpu_id);
           

問題9.matlab奔潰的問題

解決方法:

https://askubuntu.com/questions/758892/doesnt-matlab-work-on-ubuntu-16-04
           

問題10.更換caffe版本

解決方法:

https://www.codeleading.com/article/1186958985/

使用新版本的問題:
./include/caffe/util/cudnn.hpp
./include/caffe/layers/cudnn_conv_layer.hpp
./include/caffe/layers/cudnn_relu_layer.hpp
./include/caffe/layers/cudnn_sigmoid_layer.hpp
./include/caffe/layers/cudnn_tanh_layer.hpp
 
./src/caffe/layers/cudnn_conv_layer.cpp
./src/caffe/layers/cudnn_conv_layer.cu
./src/caffe/layers/cudnn_relu_layer.cpp
./src/caffe/layers/cudnn_relu_layer.cu
./src/caffe/layers/cudnn_sigmoid_layer.cpp
./src/caffe/layers/cudnn_sigmoid_layer.cu
./src/caffe/layers/cudnn_tanh_layer.cpp
./src/caffe/layers/cudnn_tanh_layer.cu


儲存原來的檔案 mv cudnn.hpp cudnn.hpp.bak

layers:
 mv cudnn_conv_layer.hpp cudnn_conv_layer.hpp.bak
 mv cudnn_relu_layer.hpp cudnn_relu_layer.hpp.bak
 mv cudnn_sigmoid_layer.hpp cudnn_sigmoid_layer.hpp.bak
 mv cudnn_tanh_layer.hpp cudnn_tanh_layer.hpp.bak
 

src:
mv cudnn_conv_layer.cpp cudnn_conv_layer.cpp.bak
mv cudnn_conv_layer.cu cudnn_conv_layer.cu.bak

mv cudnn_relu_layer.cpp cudnn_relu_layer.cpp.bak
mv cudnn_relu_layer.cu cudnn_relu_layer.cu.bak

mv cudnn_sigmoid_layer.cpp cudnn_sigmoid_layer.cpp.bak
mv cudnn_sigmoid_layer.cu cudnn_sigmoid_layer.cu.bak

mv cudnn_tanh_layer.cpp cudnn_tanh_layer.cpp.bak
mv cudnn_tanh_layer.cu cudnn_tanh_layer.cu.bak


複制檔案:     源檔案:/home/a/public1/denglei_codeFile/caffe/  
                     目标檔案夾:/home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/

cp  /home/a/public1/denglei_codeFile/caffe/include/caffe/util/cudnn.hpp       /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/include/caffe/util/

cp  /home/a/public1/denglei_codeFile/caffe/include/caffe/layers/cudnn_conv_layer.hpp       /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/include/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/include/caffe/layers/cudnn_relu_layer.hpp      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/include/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/include/caffe/layers/cudnn_sigmoid_layer.hpp       /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/include/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/include/caffe/layers/cudnn_tanh_layer.hpp       /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/include/caffe/layers/

cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_conv_layer.cpp      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_conv_layer.cu      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_relu_layer.cpp      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_relu_layer.cu      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_sigmoid_layer.cpp      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_sigmoid_layer.cu     /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_tanh_layer.cpp      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
cp  /home/a/public1/denglei_codeFile/caffe/src/caffe/layers/cudnn_tanh_layer.cu      /home/a/public1/denglei_codeFile/caffe2v/caffe-rpnbf-cudnn5/src/caffe/layers/
           

問題11.matlab奔潰報錯,/MATLAB/R2016b/bin/glnxa64/libboost_filesystem.so _ZNK5boost1

解決方法:

對gcc,g++版本進行降級
           

https://blog.csdn.net/betty13006159467/article/details/78394974

問題12.設定protobuf

解決方法:

注意重新編譯protobuf,要使用gcc5 和gvv5,不然後面通不過的

有用的部落格

github

問題13.make runtest -j32 顯示check failed error == cudasuccess (2 vs. 0) out of memory

解決方法:

使用這句話來測試

make runtest -j$(nproc)

           

參考連結:

很有用的部落格

安裝好caffe之後配置Matlab的接口

MatCaffe用法總結

Ubuntu16.04 Caffe 安裝步驟記錄(超詳盡)

caffe的Matlab接口的使用方法