由于工作需要进行ssd网络的训练,在台式机上安装caffe-ssd。因为之前装过cuda、cudnn等显卡驱动等配置,因此直接进入caffe-ssd的安装。
1)下载caffe-ssd
下载地址:https://github.com/weiliu89/caffe/tree/ssd
并解压
2)根据自己需求修改Makefile.config,Makefile两个文件
2.1)Makefile.config修改
切换到caffe文件夹下,运行:
#复制并重命名
cp Makefile.config.example Makefile.config
1.若使用cudnn,取消“# USE_CUDNN := 1” 前的注释即:USE_CUDNN := 1
2.若使用opencv3.x,取消“# OPENCV_VERSION := 3” 前的注释,即:OPENCV_VERSION := 3
3.取消“# WITH_PYTHON_LAYER := 1” 前的注释。即 WITH_PYTHON_LAYER := 1
4.加入hdf5的目录:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
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
2.2)Makefile修改:
有三处要修改:
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
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
修改为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
LIBRARIES += boost_thread stdc++#后加boost_regex
修改为:
LIBRARIES += boost_thread stdc++ boost_regex
3)进行编译
make all j8
make py
make test -j8
make runtest -j8
4)编译过程中的各种报错:
4.1)镜像源问题
make all j8后的报错:
PROTOC src/caffe/proto/caffe.proto make: protoc: Command not found
需要安装protoc-c
sudo apt-get update
报错:
Hash Sum mismatch
上网搜索发现是下载的镜像源的问题
。
准备换源,一开始是通过替换sources.list的文件内容
sudo gedit /etc/apt/sources.list
但是替换了Alibaba等几个源后还是没有用,于是上网查到,在设置里面改:
system setting->Software&Updates里改为http://ftp.sjtu.edu.cn/ubuntu xenial-updates/main ,如下图所示
换源后,开始安装附加依赖项:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
4.2)boost未安装问题
然后再执行make all j8,报错:
fatal error: boost/thread.hpp: No such file or directory.
上网搜索需要安装boost:
选择安装 boost 1.68.0:
从 https://dl.bintray.com/boostorg/release/1.68.0/source/ 下载,
解压:
tar zvxf boost_1_68_0.tar.gz
cd boost_1_68_0
./bootstrap.sh --with-libraries=all –with-python-root=/usr/bin/python
sudo ./b2 install#这一步骤消耗时间较长。
Sudo gedit /etc/ld.so.conf #在打开的文件中添加 /usr/local/lib
sudo ldconfig
4.3)cuda版本问题
继续编译caffe-ssd:
make all -j8 后报错:
fatal error: cublas_v2.h: No such file or directory compilation terminated.
上述问题即为:ubuntu16.04 cuda8.0 caffe 编译 error: cublas_v2.h 没有那个文件或目录:
CUDA8.0 中的include、lib路径是安装目录下/usr/local/cuda-8.0下面的include和lib
将其分别添加到caffe根目录下Makefile.config中的"INCLUDE_DIRS"、“LIBRARY_DIRS”后面就可以了。
将原
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改为对应的cuda版本,我装的是cuda8.0,修改如下:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/cuda-8.0/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/cuda-8.0/lib64
Makefile.config中第30行
CUDA_DIR := /usr/local/cuda
改为
CUDA_DIR := /usr/local/cuda-8.0
4.4)系统时钟问题
完成上述操作后再次编译:
make warning: Clock skew detected. Your build may be incomplete.
是时钟的问题,将系统的时间设置未自动获取
后,
make all -j8
make test -j8
make runtest -j8#结果见下图
make pycaffe
4.5)python环境中导入caffe问题
编译 pycaffe 成功后,验证一下是否可以在 python 中导入 caffe 包,进入
python 环境,在终端中运行 caffe,然后导入 caffe,出现以下错误:
直接报:ImportError: No Module named skimage.io
这是因为没有环境变量,解决方法:
#需要输入caffe的根目录
sudo echo export PYTHONPATH="~/media/linux_data/chengxu/caffe-ssd/python" >> ~/.bashrc
source ~/.bashrc
export PYTHONPATH=/media/linux_data/chengxu/caffe-ssd/python:$PYTHONPATH
重新在 python 下 import caffe,出现以下错误:
import skimage.io
ImportError: No Module named skimage.io
一般是因为没有安装 skimage 或者部分依赖库没有安装,解决方法:
首先安装依赖包:
sudo apt-get install python-matplotlib python-numpy python-pil python-scipy
sudo apt-get install build-essential cython
安装 skimage 包:
方法一:sudo apt-get install python-skimage
方法二:pip install scikit-image
重新在 python 下 import caffe,报错:
numpy.dtype size changed, may indicate binary incompatibility
numpy版本有问题,就是各种库之间的版本不匹配,只需要把numpy的版本降到1.14.5就可以了.将numpy删除后重新安装
sudo pip uninstall numpy
sudo pip install numpy==1.14.5
再在python下import caffe就正常了。