Ubuntu18.04+Caffe(GPU)+MATLAB接口

前言

之前为了重装系统,不得不先保证自己可以会配Caffe的GPU版本的MATLAB接口,才敢大胆地删掉师姐辛辛苦苦配成的代码环境。毕竟一重装系统,那些代码环境都烟消云散了。我是在Ubuntu18.04上完成的这件事:Caffe的GPU版本(安装了CUDA但没有安装CUDNN,结果上并不影响代码使用显卡资源)配置MatlabR2017a的接口。

在网上找啊找,有很多讲如何配置Caffe的Python接口的,就是没有一篇详细地从头到尾讲如何配置Caffe的Matlab接口的。以摸索整整四天时间的代价,换来现在这一个经验教程。为了让看到这篇文章的人省事,我把Caffe配置文件中该填的坑都填了,只需要把几行命令复制粘贴执行即可。如果顺利的话,十分钟就能装完。

我从给机器安装Ubuntu开始写,为了阅读体验,分成了几个博客。这是最后一个,也是最关键的一个。因为这个接口非常容易出错,之前尝试了很多次,查了很多经验贴,这里直接上最终版方案。

在看这篇博客之前,你需要已经装好了Ubuntu18.04,CUDA,MatlabR2017a,OpenCV3.4.2,版本不一定严格对应。 没有的可以看看这两篇
Ubuntu18.04安装和CUDA安装
Ubuntu18.04安装MatlabR2017a和OpenCV3.4.2

没错,这两篇都是为了现在这篇的准备工作。“Ubuntu18.04安装MatlabR2017a和OpenCV3.4.2”,看看这前言不搭后语的题目,其实可以一共写5篇的,但为了简洁,就这样吧。

安装Caffe

安装Caffe相关文件

官方教程地址,写的太简略,难以看懂

1.安装相关的软件和依赖

sudo apt install caffe-cuda
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libopenblas-dev liblapack-dev libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install cmake-qt-gui

2.下载Caffe源代码

官方Github地址,亲测可完成sudo make runtest,但无法完成sudo make mattest,会出错误,如ubuntu16.04 matlab2017b 编译caffe的matlab接口 吐血经历。同时感谢这位大佬提供的解决方案,本文正是按照此种方案完成的。

正确Caffe代码地址,如果下的慢可以使用百度网盘链接提取码:bmq9

我的百度网盘分享中包含三个文件,压缩包是那个正确Caffe代码(Github下载),剩下的两个是我配置好的文件,可以直接用的那种。
在这里插入图片描述

  • 把压缩包解压,对应的文件夹名caffe-rpnbf-cudnn5-master改为caffe(不改也行,只是为了方便)
  • 把Makefile和Makefile.config替换掉caffe文件夹下的同名文件

3.网盘中Makefile.config文件相对于Makefile.config.example的修改

  • Cuda路径
    Makefile.config第30行
CUDA_DIR := /usr/local/cuda-10.2
  • Matlab路径
    Makefile.config第68行
MATLAB_DIR := /usr/local/MATLAB/R2017a

如果是CUDA和MATLAB安装时选择默认路径的话,以上两项不必再改。对于不求甚解的同学,只关注上两个地方即可,下面可跳过。以下为网盘中Makefile.config文件相对于Makefile.config.example的其他修改处。

  • CUDA_ARCH
    Makefile.config第39行开始,相较于原来,将前两项注释掉,修改为:
 CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \
   	#-gencode arch=compute_20,code=sm_21 \
   	-gencode arch=compute_30,code=sm_30 \
   	-gencode arch=compute_35,code=sm_35 \
   	-gencode arch=compute_50,code=sm_50 \
   	-gencode arch=compute_52,code=sm_52 \
   	-gencode arch=compute_60,code=sm_60 \
   	-gencode arch=compute_61,code=sm_61 \
   	-gencode arch=compute_61,code=compute_61
  • 依赖项
    Makefile.config第98行,修改如下
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/lib/x86_64-linux-gnu/hdf5/serial \
          /usr/local/lib /usr/lib
  • OpenCV
    Makefile.config第23行,去掉注释,修改如下
OPENCV_VERSION := 3

4.网盘中Makefile文件相对于Makefile原文件的修改 (可跳过)
参考recipe for target ‘.build_release/lib/libcaffe.so.1.0.0’ failed
Makefile第181行,修改为

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

修改环境变量和相关依赖项

1.修改环境变量

  • 打开环境变量
sudo gedit ~/.bashrc
  • 在.bashrc最后添加
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtiff.so.5:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libprotobuf.so.9
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-10.2/lib64

在这里插入图片描述

  • 使修改的环境变量生效
source ~/.bashrc

2.修改Matlab中的文件
参考Doesn’t Matlab work on ubuntu 16.04?

将/usr/local/MATLAB/R2017a/sys/os/glnxa64/中的libstdc++.so.6重命名为libstdc++.so.6.old,使其失效。

配置Caffe的MATLAB接口

依次运行以下命令。-j32是指32核cpu同时运行,这样会快很多。(建议先查一下机器是多少核cpu,我这里是32核。)

sudo make all matcaffe -j32
sudo make mattest  -j32

也可直接运行以下命令,会自动执行第一个命令

sudo make mattest  -j32

若看见下图,恭喜!编译成功!
在这里插入图片描述

在MatlabR2017a中使用Caffe

CAFFEPATH = '/media/HardDisk_C/caffe/';   % Caffe文件夹所在路径
                        
USE_GPU = true;         % set to false, if no GPU available -> slowest
GPU_ID = 0;             % 使用第0块显卡
addpath([CAFFEPATH '/matlab'])

if USE_GPU
  caffe.set_mode_gpu();
  caffe.set_device(GPU_ID);
else
  caffe.set_mode_cpu();
end

此时,需保证第0块显卡有足够的显存空间,否则Matlab会闪退!

下图是我从代码运行结果中挑出的一张比较喜欢的图片
在这里插入图片描述
大功告成!

值得参考的经验资料

1.ubuntu16.04 matlab2017b 编译caffe的matlab接口 吐血经历 解决几乎所有make mattest问题
2.ubuntu18.04系统安装caffe过程
3.caffe常错问题及解决方案
4.Ubuntu18.04LTS下基于 Anaconda3 安装和编译 Caffe-GPU
5.糟心的caffe+ matlab编译路程

附:Caffe的Python接口

1.用conda安装不香吗?

conda install caffe-gpu

只要有Anaconda,运行这条命令即可,不必在装cuda,下caffe,改环境变量,conda包办一切。

2.使用import caffe
在这里插入图片描述

结语

鉴于小王同学在研究Caffe的MATLAB接口时,没有一篇博客的方法从头到尾对他所在的情况都是正确的。小王在一些问题的解决方案上,甚至搞出了排列组合,所以他纯粹是试出来的。鉴于这种情况,小王想起了一句话:万物皆虚,万事皆允。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值