最近想跑3DOP算法,用于道路场景下物体检测,其中需要搭建caffe,顺道将caffe搭建起来。
由于实验室原因,cuda只能使用6.5,ubuntu14.04版本,已经安装好:
----OpenCV2.4.9
----Boost 1.60
----protobuf 2.5.0
----gcc 2.8.x
----python 2.7和3.x
参考:
一、配置
二、cuDNN安装
CUDA6.5本身对caffe没有直接什么影响,但是影响cuDNN,cuDNN
又影响caffe
。只有cuDNN v1 v2才支持CUDA6.5.
The current version is cuDNN v3; older versions are supported in older Caffe.
安装完成后进行以下设置:
$ sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.6.5.48 /usr/local/cuda/lib64/libcudnn.so.6.5
$ sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.6.5 /usr/local/cuda/lib64/libcudnn.so
注意,一定要有sudo ln命令
参考:
三、Caffe下载
The current version is cuDNN v3; older versions are supported in older Caffe.
下载older Caffe是问题,鉴于我对github了解不深,所以找了个现成的老版本,呵呵,多亏英伟达啊,良心好企业!下载caffe-0.12。
这里的export是为了后续编译的,在MakeFile文件中有CAFFE_HOME。可以写到~/.bashrc
注意:
总结下/etc/profile,/etc/bash.bashrc以及
/etc/ld.so.conf的区别和联系
(1)/etc/profile和/etc/bash.bashrc是一样的,里面写bin所在路径,PATH就写在这里,和windows下的环境变量path是一样的,/etc/profile里面就是调用/etc/bash.bashrc,所以bin路径写在哪里差别不大,注意写完后要使用source命令使其生效。
(2)/etc/ld.so.conf是lib所在路径,里面添加非标准库路径,标准的是在ld.so中,添加修改后需要调用ldconfig命令使其生效。
(3)最后说一下~/.bashrc,这个bash shell里面写的临时bin或lib或者宏定义,当没有root权限或者说本人测试时候使用,比如LD_LIBRARYZ_PATH经常放到里面,从而避免每次执行时候必须export。
其中,BLAS,我下载的是TLAS。
其中,python的两种环境搭建方法,我都试过,完全可行
至于matlab下载,使用R2014b,由于是从另一位童鞋那copy,所以大家只能自行下载了。
最后,我的环境设置为:
cat ~/.bashrc
注意,ld.so.confi中要添加/home/ql/anaconda2/lib,这样就同时避免找不到hd5,同时不要将词句写到.bashrc中,LD_LIBRARY_PATH不能添加此句,否则将导致gedit等出现以下错误:
注意,由于我是编译成功后才发的截图,所以PYTHONPATH被改变了,实际应该是$CAFFE_HOME/python,二者等价:
注意,不是
$CAFFE_HOME/build/python
另外,也没有LD_LIBRARY_PATH这一条,这也是在编译完caffe后加的。
另外,注意到caffe/build/lib和caffe/distribute/lib是等价的。
先预览下编译完caffe后,执行make distribute后的效果:
五、编译Caffe
注意,matlab务必选择off,反正我是on没有编译成功。。。
重点说下make方法,这种是妥妥的成功的。
重点修改:
CUDA_DIR:=/usr/local/cuda
BLAS:=atlas
BLAS_INCLUDE := /usr/include
BLAS_LIB := /usr/lib
MATLAB_DIR := /usr/local/MATLAB/R2014b
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
PYTHON_LIB := $(ANACONDA_HOME)/lib
1)如果出现错误:
/usr/local/include/boost/config/suffix.hpp(510): error: identifier "__float128" is undefined
2)如果出现错误:
error while loading shared libraries: libcudart.so.6.5:
cannot open shared object file: No such file or directory
则检查是否没有把libcudart.so.6.5所在目录/usr/local/cuda/lib64放到环境配置里:
类似的,libhdf5_hl.so.10需要添加其所在路径/home/ql/anaconda2/lib到/etc/ld.so.conf中
特别指出,如果提示google.protobuf找不到,确认下anaconda2下是否有google文件夹,一般默认安装在系统默认python2.7目录下,此时需要将其复制到/home/ql/anaconda2/lib/python2.7/sit-packages下:
3)如果出现错误:
/usr/local/cuda/lib64/libcudnn.so.6.5 is not a symbolic link
则,检查cuDNN安装中的cp后,没有使用ln建立软连接。
$ sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.6.5.48 /usr/local/cuda/lib64/libcudnn.so.6.5
$ sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.6.5 /usr/local/cuda/lib64/libcudnn.so
mkdir build
cd build
cmake ..
make all
make install
make runtest
make pycaffe
make matcaffe
make distribute
设置环境变量:
export PYTHONPATH=${HOME}/caffe/distribute/python:$PYTHONPATH
export LD_LIBRARY_PATH=${HOME}/caffe/build/lib:$LD_LIBRARY_PATH
六、验证测试
make runtest 2>&1|tee make.log
关于python接口测试:进入python,import caffe,只要不提示错误,就说明成功,一切ok,否则检查路径从头再来,甚至需要重新编译python。这一步容易提示google.protobuff找不到,参考前文解决。还可能提示numpy版本不对,那只能重新编译了,这可能是由于你在编译好python接口后,更新了numpy或者更改了默认的numpy路径(尤其是当安装了python2.7又安装了anaconda2)。
关于matlab接口测试:编译好之后得到mex文件,这是类似于C++工程的dll文件,是matlab的动态链接库(姑且这么理解),进入matlab2014b,cd到caffe/matlab/caffe,输入im = imread(‘peppers.png‘);[scores, maxlabel] = matcaffe_demo(im,1);
如下图所示就是成功。
参考:
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.
cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh
参考:
成功!