ECO是MD大神发表在CVPR2017上的论文《ECO: Efficient Convolution Operators for Tracking》中的模型。下面介绍如何在本机中运行和测试ECO模型。
环境:Ubuntu 18.04 LST、Matlab2016b、gcc6.4.0
以下翻译部分源于“https://github.com/martin-danelljan/ECO”;
1.在https://github.com/martin-danelljan/ECO中下载模型的ZIP文件,并解压;
2.在https://github.com/vlfeat/matconvnet中下载MatConvnet,并解压到ECO解压目录的"/external_libs/matconvnet/"文件夹下;
3.在https://github.com/pdollar/toolbox中下载PDollorToolBox,并解压到ECO解压目录的"/external_libs/pdollar_toolbox/"文件夹下;
4.打开Matlab,将当前文件夹切换到ECO文件夹,在命令行窗口输入insall;
在这一步骤中,会涉及到gcc版本问题,我最开始使用的是gcc4.7,执行install的时候,会报warning,提示应使用gcc4.9,并且在install结束时会报错。我尝试去安装gcc4.9,但是找不到安装gcc4.9的源。
于是,我安装了gcc5和gcc6,发现用这两个版本的每个版本都可以成功的执行install(虽然还是有waring)。
5.install成功后,执行demo_ECO,成功的话,会看到如下图所示的图片(一帧一帧的动)
但是,,,怎么可能一次就成功呢!会出现这个错误:
Invalid MEX-file '/home/matconvnet-1.0-beta20/matlab/mex/vl_nnconv.mexa64':
/usr/local/MATLAB/R2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version
`GLIBCXX_3.4.21' not found (required by /home/matconvnet-1.0-beta20/matlab/mex/vl_nnconv.mexa64)
这个问题折磨了我好久,尝试了很多办法,终于找到了一个好使的!(出自https://stackoverflow.com/questions/25929332/version-glibcxx-3-4-11-not-found-required-by-buildw-mexglx?rq=1)
解决步骤如下:
a.删除/重命名Matlab的libstdc++.so,并将系统版本与相同名称进行符号链接:
sudo rm /usr/local/MATLAB/R20116b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6
b.删除Matlab版本,选择系统中的libstdc++:
sudo rm /usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6
c.添加环境变量
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 matlab
这样就解决了上述问题。
6.这时,我又想运行demo_ECO_gpu,结果,运行时又报错了,如下:
Error using vl_nnconv
An input is not a numeric array (or GPU support not compiled).
Error in vl_simplenn (line 300)
res(i+1).x = vl_nnconv(res(i).x, l.weights{1}, l.weights{2}, ...
Error in get_cnn_layers (line 23)
cnn_feat = vl_simplenn(fparams.net, im,[],[],'CuDNN',true, 'Mode', 'test');
Error in extract_features (line 59)
feature_map(ind:ind+num_blocks-1) = feat.getFeature(img_samples{img_sample_ind},
feat.fparams, gparams);
Error in tracker (line 347)
xl = extract_features(im, sample_pos, currentScaleFactor, features, global_fparams,
feature_extract_info);
Error in testing_ECO_gpu (line 129)
results = tracker(params);
Error in demo_ECO_gpu (line 13)
results = testing_ECO_gpu(seq);
意思不就是你没有对matconvnet进行gpu的编译么(大概是这个意思吧。。。),然后我就去对matconvnet进行编译去了,参考https://blog.csdn.net/qq_27432889/article/details/54866471和https://blog.csdn.net/m0_37407756/article/details/72541222,最后的vl_testnn('gpu', true)显示如下结果:
按理说,应该已经编译好了把,可是运行demo_ECO_gpu还是报一样的错误,这个问题待研究。
研究出来了,链接在这:https://blog.csdn.net/ms961516792/article/details/82762973