安装结果:
caffe安装后测试通过。安装后的caffe使用了cuda,没有使用cudnn。尝试使用cudnn,但是可能因为版本问题一直出错,所以最后决定不用cudnn.
环境:
ubuntu16.04(uname -a查看)
cuda9.0(cat /usr/local/cuda/version.txt
)
cudnn7.4(cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2)
python3.6(使用的是通过anaconda安装的python,其中anaconda安装在/home/mlxuan/anaconda3中)
opencv3.4(查看版本号pkg-config opencv --modversion; 查看安装路径sudo find / -iname "*opencv*")
安装过程
1.首先,参考官方网站的教程(http://caffe.berkeleyvision.org/installation.html),去官方网站下载源码(https://github.com/BVLC/caffe),然后安装所需的各种依赖
2.
cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
修改Makefile.config和Makefile,这是最重要的一个步骤,且电脑配置不同,修改不同
Makefile.config修改部分:
1.# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
2.# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \
#-gencode arch=compute_20,code=sm_21 \
3.python的设置(很重要,根据自己python的配置而设置)
ANACONDA_HOME := /home/mlxuan/anaconda3
PYTHON_LIBRARIES := boost_python-py35 python3.6m#注意,boost_python-py35要去/usr/lib/x86_64-linux-gnu查看是否有,有哪个版本,然后写上对应的版本;python3.6m位于/home/mlxuan/anaconda3/lib中,所以要设置PYTHON_LIB := /home/mlxuan/anaconda3/lib。因为要保证编译和运行时都能找到这两个库文件,所以需要在~/.bashrc中设置export LD_LIBRARY_PATH=/home/mlxuan/anaconda3/lib:$LD_LIBRARY_PATH
PYTHON_INCLUDE := /home/mlxuan/anaconda3/include \
/home/mlxuan/anaconda3/include/python3.6m \
/home/mlxuan/anaconda3/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIB := /home/mlxuan/anaconda3/lib
WITH_PYTHON_LAYER := 1
4.设置hdf5所在的头文件和库文件的路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include /usr/local/cuda/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/cuda/lib64
或者
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 /usr/lib/x86_64-linux-gnu/hdf5/serial
这两个写法都测试过,都可以
注意:
一开始运行时(执行make runtest)提示我hdf5的头文件版本和库的版本不一致,检查发现在/home/mlxuan/anaconda3/include包含hdf5.h,在/usr/include/hdf5/serial也包含hdf5.h,且/home/mlxuan/anaconda3/include和/usr/include/hdf5/serial都是我们的头文件目录。因为我们想要使用的是usr/include/hdf5/serial下的hdf5.h,所以将/home/mlxuan/anaconda3/include下的hdf5.h修改为了hdf5_1.h,这样执行make runtest没有报错。注意,这个更改可能导致python导入包时出错,所以使用python时可能需要在改回来。
如果不想修改,改变INCLUDE_DIRS中路径的顺序也可以,改为
INCLUDE_DIRS := /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include /usr/local/cuda/include $(PYTHON_INCLUDE)
注意2:
我们没有使用cudnn,所以# USE_CUDNN := 1
5.安装caffe需要先安装opencv,如何安装opencv请查看https://blog.csdn.net/u013066730/article/details/79411730
注意:要设置-DBUILD_TIFF=ON
我的安装命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=OFF -D PYTHON_EXCUTABLE=/home/mlxuan/anaconda3/bin/python -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_EXAMPLES=ON -D WITH_IPP=OFF -DBUILD_TIFF=ON ..
Makefile修改部分:
注意:这里不要使用 gedit makefile 命令,而是找到 makefile 直接打开
将 NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) (第425行)替换为
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
网上一些教程说,还需要修改
/usr/local/cuda/include/host_config.h 文件 :
将#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
这一步修改我没有去做。
测试:
make runtest没有问题后则使用minist数据测试(参考:https://blog.csdn.net/yggaoeecs/article/details/79163789):
1.将终端定位到Caffe根目录
cd ~/caffe
2.下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
3.将其转换成Lmdb数据库格式
./examples/mnist/create_mnist.sh
4.训练网络
./examples/mnist/train_lenet.sh
caffe+python的测试:
首先,保证make pycaffe没有错误,然后在python中import caffe不出错
查看caffe的路径:help(caffe)
导入caffe前需要指定python所在的路径:
caffe_root='/media/mlxuan/LinuxH/project/SegNet/caffe-master/'
sys.path.insert(0, caffe_root+'python')
import caffe
设置python的导包路径可以在~/.bashrc中设置:export PYTHONPATH=xxx
在python下使用caffe的教程:https://blog.csdn.net/jnulzl/article/details/52077915
在import caffe时如果出现undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE的错误,是因为没有设置PYTHON_LIBRARIES := boost_python-py35 python3.6m
注意:
安装好后的caffe只是安装在了当前的路径下,需要设置全局变量等才能把当前编译好的caffe给其他程序使用
gedit ~/.bashrc(打开.bashrc)
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH(注意:path/to是自己caffe的路径)
保存, 生效 source ~/.bashrc
参考博客:
https://blog.csdn.net/zhuzizhong/article/details/84426982
https://blog.csdn.net/yhaolpz/article/details/71375762
其他问题:
出现libpng16.so.16:对‘inflateValidate@ZLIB_1.2.9’未定义的引用
重新安装zlib 1 git clone https://github.com/madler/zlib 2 cd path/to/zlib #这里黄色标注的换成自己的路径即可 3 ./configure 4 make 5 make install # you may add 'sudo'
总结:
关键:根据自己的python路径设置所用的python
出现问题谷歌搜索并且要思考可能的原因和解决方式