编译测试MATLAB版本的faster rcnn和rfcn

来源:互联网 发布:不锈钢交易网软件 编辑:程序博客网 时间:2024/05/18 18:43

环境Ubuntu16.04,MATLAB2016b。

使用过MATLAB2014a,但内置编译器和系统版本不一致,无法解决,于是改用MATLAB2016b。


MATLAB2016b的解决方法。

第一步,把MATLAB内置的stdc++库备份,也就是改个名字让它不起作用。

cd /usr/local/programFiles/MATLAB/R2016a/sys/os/glnxa64

mv libstdc++.so.6 libstdc++.so.6.bak

第二步,挂载系统的库。

ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6


另外,opencv的几个库也要如法炮制。

mv /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_core.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_core.so.2.4.bak
ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9  /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_core.so.2.4
mv /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_imgproc.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_imgproc.so.2.4.bak
ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9  /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_imgproc.so.2.4
mv /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_highgui.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_highgui.so.2.4.bak
ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9  /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_highgui.so.2.4


编译caffe。

第一步:配置路径

把Makefile.config.example复制一份,并改名叫Makefile.config

主要改动位置:

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

因为不加后面几个路径,会找不到hdf5

第二步:编译

make -j8 && make matcaffe

注意,后一个命令不能用make all,否则MATLAB接口没有。


测试faster rcnn。

如果caffe放在faster rcnn根目录下,名字叫caffe-faster-R-CNN。

1,修改demo脚本和训练脚本内的opts.caffe_version = 'caffe-faster-R-CNN';

2,修改active_caffe_mex.m里面的caffe_dir = = fullfile(curdir, 'external', 'caffe', 'matlab');,改成caffe_dir = fullfile(pwd, caffe_version);。

3,修改startup.m里面的caffe_path = fullfile(curdir, 'external', 'caffe', 'matlab');,改成caffe_path = fullfile(curdir, 'caffe-faster-R-CNN');


遇到的错误。

运行script_faster_rcnn_demo的时候,报错找不到nms_gpu_mex。

把nms(aboxes, nms_overlap_thres, use_gpu)这里的use_gpu改成0。

不知道这里为什么报这个错误,应该是我MATLAB调用cuda程序的设置不对。因为这个nms_gpu_mex函数定义在nms_gpu_mex.cu这个文件里。

最后发现原因是没有先运行faster_rcnn_build.m......


运行demo可以,但运行训练程序的时候,MATLAB崩溃。

崩溃时弹出警告框提示:Disabled - No sandbox or build area path

以及:

"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.
...
A technical support engineer might contact you with further information.
MATLAB is exiting because of fatal error"

因为是终端打开的MATLAB,所有终端还有输出错误:Check failed: fd != -1 (-1 vs. -1) File not found: .\models\rpn_prototxts\ZF\train_val.prototxt


解决方法,把solver.prototxt里面的模型文件路径修改一下。

比如:net: ".\\models\\rpn_prototxts\\ZF\\train_val.prototxt"

改成:net: "/models/rpn_prototxts/ZF/train_val.prototxt"

就可以了。

原因可能是因为原来的源码是在Windows上面测试的,Ubuntu下面路径写法不太一样。


测试RFCN类似。