在安装caffe的过程中实在是遇到太多坑了,因为我之前在Ubuntu16.04上配置过TensorFlow GPU版,又是安装CUDA8.0,又是安装cuDNN6.0,过程中还因为一些兼容问题降级过gcc版本,这才导致了在第一次安装caffe时遇到了不必要的问题,在后面会说明该问题的解决办法,但是安装caffe本身并不困难,于是我决定重装Ubuntu16.04系统,然后重新尝试安装了caffe并且成功。以下是安装过程。
sudo apt-get install libprotobuf-dev
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
sudo apt-get install libatlas-base-dev
apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install git
下载caffe:
git clone http://github.com/BVLC/caffe.git
进入到caffe目录下:
cd caffe/
拷贝一个Makefile.config副本:
cp Makefile.config.example Makefile.config
修改Makefile.config文件:
(1)去掉CPU_ONLY := 1前面的#号
(2)原来的路径配置:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为(解决如果不修改出现的找不到hdf5相关文件的问题):
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
修改完后,保存退出。
编译caffe:
sudo make all
sudo make test
sudo make runtest
注意:只要make不成功,在下次make之前一定要执行命令:make clean 清理一下上次的错误编译生成的文件。
sudo apt-get install python-pip
安装numpy,否则编译会出错提示没有arrayobject.h文件
sudo apt-get install python-numpy
cd ~/caffe/python
该目录下requirements.txt文件中有需要的依赖库和版本信息,执行以下命令安装:
for req in $(cat requirements.txt); do pip install $req; done
安装结束后,可以执行以下命令验证是否安装成功:
sudo pip install -r requirements.txt
(提示ipython没有安装成功,对于python2.7版本需要安装ipython5.x长期支持版本,先没有管这个问题,但是后面还是编译成功了)
将caffe根目录下的python文件夹加入到环境变量:
先打开配置文件bashrc:
Vi ~/.bashrc
在文件的最后添加:
export PYTHONPATH=/home/tong/caffe/python:$PYTHONPATH
注意:这里的路径每个人电脑都不一样,例如,我下载的caffe在/home/tong/下面,所以路径为/home/tong/caffe/python
然后执行更新配置(有时更新不起作用时,可以重启电脑就会有效)
编译python接口:
cd ~/caffe/
sudo make pycaffe
验证python接口:
进入python环境,导入caffe包,如果没有报错则安装成功,如果报错可能之前添加环境变量后配置没有更新成功,重启电脑后,重新导入应该就可以了。
.build_release/lib/libcaffe.so: undefined reference to google ::protobuf...
解决办法:自行在GitHub上clone protobuf源码,然后根据GitHub上protobuf编译说明编译一遍,再重新编译caffe就可以了。注意编译之前先make clean一下。
2. 编译过程中出错,提示需要编译器支持c++11特性
解决办法:修改Makefile文件中CXXFLAGS,在后面加上: -std=c++11 这一选项。