世界在旅程的尽头终结

0%

配置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
Invalid MEX-file
2
'/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64':
3
/home/xw/caffeBuild/caffe-master/matlab/+caffe/private/caffe_.mexa64: undefined
4
symbol:
5
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE
6
7
Error in caffe.set_mode_cpu (line 5)
8
caffe_('set_mode_cpu');
9
10
Error in caffe.run_tests (line 6)
11
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
bopencv_core.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9
2
libopencv_highgui.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9
3
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)[http://qiniu.s1nh.org/synset_words.txt]到`./matlab/demo`目录
  3. ./matlab/demo目录创建test.m 内容为如下代码。
1
%参考http://www.aichengxu.com/view/2422137
2
clear
3
clc
4
5
im = imread('../../examples/images/cat.jpg');%读取图片
6
figure;imshow(im);%显示图片
7
[scores, maxlabel] = classification_demo(im, 0);%获取得分第二个参数0为CPU,1为GPU
8
maxlabel %查看最大标签是谁
9
figure;plot(scores);%画出得分情况
10
axis([0, 999, -0.1, 0.5]);%坐标轴范围
11
grid on %有网格
12
13
fid = fopen('synset_words.txt', 'r');
14
i=0;
15
while ~feof(fid)
16
    i=i+1;
17
    lin = fgetl(fid);
18
    lin = strtrim(lin);
19
    if(i==maxlabel)
20
        fprintf('the label of %d is %s\n',i,lin)
21
        break
22
    end
23
end

运行后结果如下:

matcaffe helloworld