由于siameseFC运行需要调用GPU,即需要安装CUDA和visual studio,CUDA安装可以参考的我的上一篇博客
若是要运行tensorflow版本,可以参考这篇博客

一、失败经验

先介绍一下失败经验,有类似的小伙伴可以及时收手。
由于电脑之前安装了visual studio2017,加上看到有人使用vs2017运行cuda,想着应该可以,但最终发现,matlab2018a+cuda9.0只支持到visual studio2015,如果有继续想尝试vs2017的小伙伴,我建议下个vs2015,一下子就通过。
1.1 ‘cl.exe’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

在这里插入图片描述
解决方法
打开vl_compilenn.m文件,修改647行,寻找自己vs安装目录,找到cl.exe文件,将目录放入。
在这里插入图片描述
路径配置成功后运行如下:
在这里插入图片描述
1.2nvcc_compile(opts, srcs{i}, objfile, flags) 出错,且出现不支持visual studio的字样。
错误使用 vl_compilenn>nvcc_compile (line 615)
Command “C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc” -c -o
“D:\Matlab2018a\bin\siamese-fc-master\matconvnet\matlab\mex.build\bits\data.obj”
“D:\Matlab2018a\bin\siamese-fc-master\matconvnet\matlab\src\bits\data.cu” -DENABLE_GPU -DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES
–std=c++11 -I"D:\Matlab2018a\extern\include" -I"D:\Matlab2018a\toolbox\distcomp\gpu\extern\include"
-gencode=arch=compute_50,code=“sm_50,compute_50” --compiler-options=/MD --compiler-bindir=“C:\Program Files
(x86)\Vision\VC\Tools\MSVC\14.14.26428\bin\Hostx64” failed.

出错 vl_compilenn (line 487)
nvcc_compile(opts, srcs{i}, objfile, flags) ;

在这里插入图片描述
遇到这种情况的小伙伴,我的建议是安装visual studio2015,我解决了很久都搞不定,包括修改C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\crt\config.h,131行处(如下)将1911调为2000,都无法解决。

#if _MSC_VER < 1600 || _MSC_VER > 1911

二、visual studio2015社区版安装

解压iso文件,双击vs_community.exe,选择安装目录后,选择自定义安装,一定要勾上Visual C++
在这里插入图片描述

三、matlab编译

3.1首先输出mex -setup

在这里插入图片描述
如果没有输出C++编译器,可以输入mbuild -setup进行选择
3.2cl.exe文件位置的修改
在新装的visual studio2015下寻找cl.exe文件,打开vl_compilenn.m文件,修改647行。
3.3Matconvnet的GPU编译
方法一、打开vl_compilenn.m文件,修改170-190行。
在这里插入图片描述
如果有安装cuDNN也可以在对应行进行修改。
方法二:
在命令行直接输入

`vl_compilenn('enableGpu',true,'cudaRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0','cudaMethod' ,'nvcc','enableCudnn','true','cudnnRoot','local/cuda')`

3.4正常编译结果如下
在这里插入图片描述
3.5可能遇到的问题
错误使用 mex
‘D:\Matlab2018a\bin\siamese-fc-master\matconvnet\matlab\mex\vl_nnconv.mexw64’ 使用了 ‘-R2018a’ 进行编译并与 ‘-R2017b’ 链接在一起。
出错 vl_compilenn>mex_link (line 627)
mex(args{:}) ;
出错 vl_compilenn (line 500)
mex_link(opts, objs, flags.mex_dir, flags) ;

解决方法:
产生该问题的原因在于matlab2018a和matconvnet v1.0-beta25版本不兼容。
对vl_compilenn的622行和359行进行修改
在这里插入图片描述
在这里插入图片描述

四、Siamese FC代码运行

4.1按作者提示(Go to siam-fc/tracking/ and remove the trailing .example from env_paths_tracking.m.example, startup.m.example and run_tracking.m.example),将tracking文件夹下的几个文件的 .example 后缀删掉,只剩下 .m 后缀,修改后如下
在这里插入图片描述
4.2若只实现跟踪,需要到作者主页下载训练好的深度网络,siamese-fc-master文件夹下新建nets文件夹,将下载的两个.mat文件保存进来。
在这里插入图片描述
在这里插入图片描述
4.3打开 env_paths_tracking.m 文件,修改对应路径(第一二行)
在这里插入图片描述
4.4将siamese-fc-master底下的文件在matlab添加路径,如下
在这里插入图片描述
此步未完成会出现如下问题

未定义函数或变量 'find_layers_from_type'。
出错 load_pretrained (line 12)
    [~,xcorrId] = find_layers_from_type(net, 'XCorr');
出错 tracker (line 53)
    net_z = load_pretrained([p.net_base_path p.net], p.gpus);
出错 run_tracker (line 11)
    tracker(params);

在这里插入图片描述
4.5在\siamese-fc-master\tracking目录下,在命令行输入run_tracker(‘vot15_bag’,1);
在这里插入图片描述
DONE!

2020年5月28日更新
关于SiameseFC跟踪失败的纠正
其实很早之前就发现了这个问题,但一直拖着没有补充,那就是发现SiameseFC跟踪效果极差,跟踪白色塑料袋没几帧就丢了,但想想就不应该,作者给的跟踪序列怎么可能有这么差的效果,后来在一个论坛发现原来是matlab版本的问题
红色矩形框是源代码,改成紫色方框就好了(原因主要是因为直接对GPU数据插值导致响应图发生扭曲,所以导致失败,而原文是在旧版本的matlab上运行的,所以没出错,具体原因感兴趣的朋友可以自行去了解,不在此细究)
在这里插入图片描述

responseMaps_cpu=gather(responseMaps(:,:,s));
responseMapsUP_cpu=imresize(responseMaps_cpu, p.responseUp, 'bicubic');
responseMapsUP(:,:,s)=gpuArray(responseMapsUP_cpu);

纠正后跟踪效果如下:
在这里插入图片描述

参考文献
windows7 + vs2015 + matlab2018b + cuda9.2 配置SiameseFC 目标跟踪网络
MATLAB中如何设置编译器

Logo

欢迎来到由智源人工智能研究院发起的Triton中文社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐