环境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类似。