1 背景
题主需要训练caffe的matlab接口的代码,因此就开始在ubuntu下面折腾的历程,记录一下在ubuntu下面编译caffe的matlab接口中遇到的各种问题及解决办法,防止下次遗忘,也希望可以帮助到有需要的朋友。
2 下载caffe源码,配置Makefile.config
题主选择CaffeMex_v2
git clone https://github.com/liuyuisanai/CaffeMex_v2.git
cd CaffeMex_v2
接下来执行
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config
因此我编译的GPU版本,所以需要注意设置 “USE_CUDNN := 1”,并且设置自己的MATLAB安装路径,我的是“MATLAB_DIR := /usr/local/MATLAB/R2015b”。具体修改见下面两张图片。
![](https://i-blog.csdnimg.cn/blog_migrate/7cc820eece1bb99a2b8a7f4f4773c2fa.png)
3 执行编译caffe
cd CaffeMex_v2
make clean
make all
不出意外的话会出现下面这个错误
把这个“./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: 没有那个文件或目录”输入到百度里寻找解决方案,发现了这篇并进行参考,主要的解决方案是
1. 在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
2. 在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
LIBRARIES += glog gflags protobuf boost_system m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf boost_system m hdf5_serial_hl hdf5_serial
于是我按照这个方案进行了替换,并继续执行
make clean
make all
不出意外,会出现以下错误
于是继续把”caffe编译时出现Unsupported gpu architecture 'compute_20'“ 复制到百度里面寻找解决办法,发现这篇
于是重新打开Makefile.config,进行了以下修改
继续执行
make clean
make all
正常的话,不会出现问题了,编译过程中产生的很多warnings自行忽略即可。
4 执行编译caffe的matlab接口
执行
make matcaffe
正常的话,出现”MEX comleted sucessfully“即表明接口编译成功。并显示一个警告,说是gcc的版本不支持。这个没有关系,只是警告,不是错误,不要再强迫症继续折腾这个gcc版本给自己找麻烦了。
如果你报下面这个错误,可按照图中方案改进
记得重新执行(不需要再make clean)
make matcaffe
5 执行测试
执行
make mattest
正常的话,会出现下面的错误。
查了下网上说是matlab和ubuntu的库有冲突,然后matlab被kill了。于是寻找到参考1和参考2,然后这两篇仅仅是参考,因为和我的问题不一样,所以没有解决问题,并最终找到这篇,和他的问题一样,按照他的如下方法进行修改。
进行了相应的修改如下
之后继续执行
make mattest
但是我这里又报错如下
于是把”“编译caffe的matlab接口时出现 This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.
这段话输入到百度里寻找解决办法。发现这篇,其中的意思就是显卡内存不够。
最终使用了这篇解决了库冲突的问题。
6 再matlab中调用caffe接口验证
打开下matlab软件,调用下刚刚编译的caffe的matlab接口,如果上面都没有问题的话,可以正常运行,效果如下图所示。
但是我的出现下面的问题
直接提示matlab崩掉了。 其实后来我检查了,是我matlab程序的原因,到这儿caffe已经编译好了。