ubuntu16.04, Matlab2016b caffe編譯安裝


在Ubuntu上編譯安裝caffe還是個比較蛋疼的事,有時候會莫名其妙的碰到很多庫的問題,這篇文章就把我在Ubuntu上編譯安裝caffe的過程和遇到的問題大致記錄一下。
1.安裝opencv
http://machinelearninguru.com/computer_vision/installation/opencv/opencv.html
建議參考這篇文章,過程寫得比較清晰
2.安裝Matlab
因為我要用到matcaffe所以需要裝matlab,這個過程可以參考:
http://blog.csdn.net/generallc/article/details/52793820
3.Python
建議安裝anaconda,可以省很多事
4.一些依賴庫安裝
openblas:

  $ sudo apt update
  $ apt search openblas
  $ sudo apt install libopenblas-dev
  $ sudo update-alternatives --config libblas.so.3
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

python 依賴庫

cd /home/zzh/caffe/python
apt-get install python-pip  
pip install --upgrade pip
for req in $(cat requirements.txt); do pip install $req; done  

5.caffe編譯
修改Makefile.config文件.

cd ~/caffe  //進入你的caffe目錄
cp Makefile.config.example Makefile.config

我有用到gpu和opencv以及后面要matlab,所以我修改了下面這些:

USE_CUDNN:=1
USE_OPENCV:=1
MATLAB_DIR:=/home/liuhao/MATLAB/

python路徑用的是anaconda的目錄。

問題1: 這里需要修改一個地方,如果不改的話后面會碰到fatal error: hdf5.h:這個錯誤。

把INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面加上 /usr/include/hdf5/serial  
把LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib /usr/lib/x86_64-linux-gnu 后面加上/usr/lib/x86_64-linux-gnu/hdf5/serial

開始編譯:

make all -j8

測試:

make runtest

python接口:

make pycaffe

Matlab接口:

make matcaffe
make mattest

6.可能遇到的問題
6.1 運行make mattest時可能會碰到下面這個錯誤:
MEX-file '/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64' 無效:
/usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:
version `GLIBCXX_3.4.21' not found (required by
/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64)
解決方式是將matlab的libstdc++.so.6鏈接到系統的庫文件。

sudo rm /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/Matlab/R2016a/sys/os/glnxa64/libstdc++.so.6 

6.2 No module named google.protobuf.internal
這個問題會在python 中import caffe時遇到

sudo apt-get install python-protobuf

pip install protobuf

/home/username/anaconda2/bin/pip install protobuf

我的是用第一條命令搞定了
6.3 Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
這個也是在import caffe的時候碰到的。

conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl mkl-service

6.4 AttributeError: 'module' object has no attribute 'bool_'
這個就要把caffe/python目錄加到系統路徑里

export PYTHONPATH="/home/liuhao/framework/caffe/python:$PYTHONPATH"

可以把這個加到.bashrc里面
6.5 其他問題
Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch

export CPLUS_INCLUDE_PATH=/usr/include/python2.7

中間還碰到過一個詭異問題,因為一個叫libharfbuzz.so.0的庫弄得vim和桌面都掛了,解決的方式是重裝了harfbuzz和freetype。可以參考 http://www.linuxfromscratch.org/blfs/view/svn/general/harfbuzz.html

還有個好像是cuda和gcc版本問題,直接注釋/usr/include/host_config.h里面檢測gcc版本的地方就可以了。

還有一些問題忘記了,具體再google吧一般都有人踩過的坑。

PS: 除了這種方式,還可以用cmake來裝,這樣就避免了手工去改Makefile.config文件。

10.27 update
支持多GPU要開啟NCCL,
NCCL安裝:

$ git clone https://github.com/NVIDIA/nccl.git

$ cd nccl

$ sudo make install -j4

在~/.bashrc中將NCCL加入

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/liuhao/framework/nccl/build/lib/"

遇到新問題:
caffe/proto/caffe.pb.h: No such file or directory

You need to generate caffe.pb.h manually using protoc as follows.

#In the directory you installed Caffe to
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto

不過我是直接運行下面的命令可以了:

sudo apt-get remove libprotobuf-dev

Python.h找不到,config 文件里的python path檢查一下

2017.11.1 update
error: /home/liuhao/anaconda2/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
解決方式:自行編譯zlib1.2.9

wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/
unzip xxx
cd xxx
./configure
make
sudo make install

歡迎關注公眾號:vision_home 共同學習,不定期分享論文和資源


免責聲明!

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



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