ubuntu16.04, Matlab2016b caffe编译安装
转载自: https://www.cnblogs.com/haoliuhust/p/7738920.html
在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 共同学习,不定期分享论文和资源
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采