配置Matcaffe

配置Matcaffe的时候碰到了两个小坑,记录一下:

第一个坑:

1
Invalid MEX-file '/root/caffe/matlab/+caffe/private/caffe_.mexa64': /matlab/r2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/caffe/matlab/+caffe/private/caffe_.mexa64)

第二个坑与前一篇文章《在anaconda下安装caffe失败》错误相同。

1
2
3
4
5
6
7
8
9
10
11
12
Invalid MEX-file
'/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64':
/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64: undefined
symbol:
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE

Error in caffe.set_mode_cpu (line 5)
caffe_('set_mode_cpu');

Error in caffe.run_tests (line 6)
caffe.set_mode_cpu();

0x01 解决方法

坑1

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6

坑2: 修改软链接

原因是Caffe用系统的opencv编译,但是运行matcaffe时链接了matlab的opencv版本(https://github.com/BVLC/caffe/issues/3934)

进入matlab的安装目录``,修改了如下软链接,问题解决

1
2
3
bopencv_core.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9
libopencv_highgui.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9
libopencv_imgproc.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9

网上还有另一种办法,采用export LD_PRELOAD修改链接库。可是我不太懂得原理,就没用这种办法,欢迎在下面留言,教我怎么用^_^

0x02 测试matcaffe

这一步运行一个demo来测试matcaffe

  1. 运行./scripts/download_model_binary.py models/bvlc_reference_caffenet 下载训练好的文件
  2. 下载(synset_words.txt)[//qiniu.s1nh.org/synset_words.txt]到./matlab/demo目录
  3. ./matlab/demo目录创建test.m 内容为如下代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%参考http://www.aichengxu.com/view/2422137
clear
clc

im = imread('../../examples/images/cat.jpg');%读取图片
figure;imshow(im);%显示图片
[scores, maxlabel] = classification_demo(im, 0);%获取得分第二个参数0为CPU,1为GPU
maxlabel %查看最大标签是谁
figure;plot(scores);%画出得分情况
axis([0, 999, -0.1, 0.5]);%坐标轴范围
grid on %有网格

fid = fopen('synset_words.txt', 'r');
i=0;
while ~feof(fid)
i=i+1;
lin = fgetl(fid);
lin = strtrim(lin);
if(i==maxlabel)
fprintf('the label of %d is %s\n',i,lin)
break
end
end

运行后结果如下:

matcaffe helloworld