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

欢迎关注公众号:CV_WithVision 共同学习,不定期分享论文和资源

posted @ 2017-10-26 20:04  CoderInCV  阅读(5421)  评论(1编辑  收藏  举报