Ubuntu16.04 安装caffe

一.环境安装:

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

则需要

  1. ~/.profile 加入 export LD_LIBRARY_PATH=/usr/local/lib
  2. source ~/.profile
  3. rm /usr/bin/protoc
  4. ln -s /usr/local/bin/protoc /usr/bin/protoc

猜你喜欢

转载自blog.csdn.net/weixin_40609307/article/details/83186322