Ubuntu18.04+CUDA10.1+OpenCV3.4.12+Python2.7环境下安装caffe

几个前提

确认自己的机器上已经成功安装了NVIDIA driver、CUDA、cudnn
详细步骤可参考之前写的安装说明

说明

按照Caffe官方安装教程的说明,有两种安装方式,make(官方版)和cmake(社区支持),使用make过程中遇到不少坑,最终笔者使用cmake安装成功

开始

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 libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential

需要确保以上依赖都安装成功。验证某条命令是否执行成功,可多次执行命令直至类似如下提示界面说明安装成功。
在这里插入图片描述
2.安装OpenCV3.X版本
安装caffe需要OpenCV的支持,推荐3.X版本,便于修改Makefile和Makefile.config文件。根据相关博客的描述,使用OpenCV4.X版本需要在配置文件中多修改一些常量,暂未尝试过。
进入OpenCV官网,选择合适版本的源码包进行下载,之后解压到你想安装的位置,进入解压后的目录,执行

mkdir build # 创建编译的文件目录
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8  #编译

编译OpenCV成功后安装:

sudo make install #安装

安装完成后通过查看OpenCV版本验证是否安装成功:

pkg-config --modversion opencv  

在这里插入图片描述
3.安装Caffe
在你准备安装的路径下clone一份源码:

git clone https://github.com/BVLC/caffe.git

进入caffe目录,将 Makefile.config.example 文件复制一份并更名为 Makefile.config

sudo cp Makefile.config.example Makefile.config

Makefile文件中如下行做改动

#注释的是模板默认的写法
#wmy
#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 opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

Makefile.config中,做以下修改
(保持了使用系统默认的python2.7版本,有需要的读者可以尝试编译安装Python3.X版本,在该文件中修改相应的python依赖和路径即可)
3.1应用Cudnn

#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1

3.2 指明应用的openCV版本

#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3

3.3应用python接口

#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1

3.4修改include路径和library路径(很关键)

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 /usr/local/cuda /usr/bin/protoc /usr/include/opencv /usr/share/opencv
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/cuda/lib64

4.编译
有两种方式。

4.1使用Make

依序执行以下命令

cp Makefile.config.example Makefile.config  # 上面已经完成过这个步骤
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make all
make test
make runtest

make all遇到的一些问题
问题一:fatal error: google/protobuf/port_def.inc: No such file or directory compilation terminated
出现该错误的原因是Makefile中指定的protoc版本与实际使用的版本(大概率是使用了Anaconda中的protoc)不一致导致。由于安装了anaconda,anaconda安装了更高版本的protobuf:protobuf.3.11,而在编译时makefile文件调用的是anaconda下的protobuf,而不是系统下的protobuf

可以通过以下命令查看软件包及其依赖库

 whereis protoc 

在这里插入图片描述

ldd $(which protoc)

在这里插入图片描述
之后将protobuf需要的版本配置到Makefile中
在Makefile中修改以下两行

        # wmy
        #$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
        $(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
        # wmy
        #$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
        $(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --python_out
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值