一.环境安装:
1.依赖库安装
-
基本的依赖库安装
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 libatlas-base-dev
建立pycaffe interface需要的python头文件
sudo apt-get install the python-dev
sudo apt-get python-matplotlib
sudo apt-get install python-scipy
sudo apt-get install python-numpy
其他库的安装
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
注意,在安装上述依赖库的过程中,对于protobuf-compiler会因为版本的问题出现bug,具体修复方法见后面
最后其他库的安装libgflags,libgoogle-glog-dev因为我之前已经用源码进行安装,所以尽量不要安装,防止版本问题
需要GPU的话需要安装cuda与cudnn,具体的方法见博客安装cuda,cudnn等
2.Caffe安装
- 下载caffehttps://github.com/BVLC/caffe
- 进去安装界面,将 Makefile.config.example 文件复制一份并更名为 Makefile.config.因为example只是给用户的实例,需要Makefile.config来配置Makefile文件
sudo cp Makefile.config.example Makefile.config
然后修改Makefile.config文件
1.应用cudnn
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
2.应用opencv版本
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
3.应用python接口
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
4.修改python路径
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
之后修改caffe目录下的Makefile文件
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
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!
- 之后使用cmake配置
mkdir build && cd build
cmake -DMAKE_BUILD_TYPE=Release -DCPU_ONLY=NO ..
- sudo make all
在make过程中,可能会遇到构建目标时的bug,具体情况下下方
- sudo make install
安装好之后,可以进行测试,输入
- sudo make runtest
没有报错说明caffe安装完成.
二.pycaffe环境安装
在编译好caffe后,分别安装python依赖
sudo apt-get update
sudo apt-get install python-pip python-dev python-numpy
$sudo apt-get install gfortran graphviz
$sudo pip install -r ${CAFFE_ROOT}/python/requirements.txt
需要把${CAFFE_ROOT}的路径换成自己caffe的路径,最后一句是要到所对应的位置下下载requirements.txt里面写下的所需下载的python依赖项.可能会遇到需要的依赖版本要在python3环境下才能安装,这时根据提示修改requirements.txt中的版本.
之后进入caffe文件夹下的python.import caffe成功.
三.bug记录
1./usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o):relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
解决:
这是在编译过程中没有加入-fPIC所导致,因此对于一般的CMakeList.txt的文件,在文件中加入
set(CMAKE_C_FLAGS“$ {CMAKE_C_FLAGS} -fPIC”)
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)
即可.
或者因为我的gflags是使用源码安装,因此解决方法是:
进入gflags/build中,找到CMakeCache.txt
改为CMAKE_CXX_FLAGS:STRING=-fPIC
然后在build中,执行
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make && make install
之后回到caffe编译就没有问题了
2.fatal error: caffe/protp/caffe.pb.h:no such file or directory
解决:
make 太快可能会丢失文件,首先进入~/applications/caffe/src/caffe/proto,这对应的是我当面目录,需要你根据位置进行修改,看到当前文件夹下有个名为caffe.proto的文件,然后终端输入
protoc --cpp_out=~/caffe/include/caffe/ caffe.proto
之后在caffe/include/caffe下新建文件夹命名为proto,将编译出来的caffe.pb.h与caffe.pb.cc放进去就好
3..build_release/src/caffe/proto/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is #error This file was generated by a newer version of protoc which is
解决:proto版本问题,网上搜索了很多方法都没用,解决的方法就是没有安装官方的方法进行安装,而是用cmake再make的方法就没有这个问题了
命令 whereis protoc 可以查看哪些路径下安装了protoc
命令which protoc 可以查看默认选用protoc的路径
命令 protoc --version 可以查看当前protoc版本
指定protoc的版本可以在 Makefile文件内修改
在Makefile 中修改这两句:
$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
为
$(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
$(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
即把开头的"protoc"补全路径即可 (/usr/bin/protoc即为自己向指定给的版本路径)
想要把默认的环境改为你当前需要的protobuf
则需要
- ~/.profile 加入 export LD_LIBRARY_PATH=/usr/local/lib
- source ~/.profile
- rm /usr/bin/protoc
- ln -s /usr/local/bin/protoc /usr/bin/protoc