目标跟踪HCF算法matlab代码运行教程(含GPU)

背景说明:前段时间电脑刚装了GPU,最近想起来之前是用CPU跑的HCF代码,想试试使用GPU运行的效果,结果遇到很多问题,经过各种努力和尝试,终于跑通了(PS:我下载的HCF代码是不带尺度估计的作者最早公布的代码)。

一、代码下载:

https://github.com/jbhuang0604/CF2/tree/4b895b516b2d73fc83174439729d2157902c9d63,下载完解压。

二、下载预训练模型:

http://www.vlfeat.org/matconvnet/models/imagenet-vgg-verydeep-19.mat,这个预训练模型大概有500多M,下载完成把文件拷贝到/CF2/model中。

三、使用CPU编译matconvnet:

直接运行demo.m,CPU编译matconvnet一般不会出什么问题,但你可能会遇到以下错误:

引用了不存在的字段 'filters'。

出错 vl_simplenn (line 153)
      res(i+1).x = vl_nnconv(res(i).x, l.filters, l.biases, 'pad', l.pad, 'stride', l.stride) ;

...

经过调试后发现 l 这个结构体里面确实没有filters和biases这两个字段,而是用weights来表示的,l.weights{1}相当于l.filters,l.weight{2}相当于l.biases,所以解决方案是:把l.filters改成l.weights{1},l.biases改成l.weights{2}。

四、在CPU上运行HCF代码:

由于HCF代码默认是使用CPU跑的,所以无需更改参数,直接运行run_tracker.m即可显示跟踪界面窗口。至此,成功使用CPU运行HCF代码。

五、使用GPU编译matconvnet:

先介绍下我的运行环境:win10+matlab2018a+vs2015+cuda9.1。

既然要用GPU跑,肯定先把matconvnet用GPU编译一下,需要在matlab命令行窗口执行以下命令:

vl_compilenn('enableGpu', true, 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1');

等待十几秒后,又报了一个错:

错误使用 mex
'D:\matlab\workspace\test\CF2\external\matconvnet\matlab\mex\vl_nnconv.mexw64' 使用了 '-R2018a' 进行编译并与
'-R2017b' 链接在一起。 有关详细信息,请参阅 MEX 文件使用了一个 API 进行编译并与另一个 API 链接在一起。

我估计HCF代码中自带的matconvnet版本比较旧,而网上大部分解决方案是针对版本比较新的matconvnet的,所以不太适用。我的解决方案是:

修改代码179行:

mex_opts = {'-largeArrayDims'};

改为:

mex_opts = {'-lmwblas'};

再次执行上面的GPU编译命令即可成功编译。

五、在GPU上运行HCF代码:

运行run_tracker.m之前,先修改run_tracker.m中第31行的enableGPU的默认值,将false改为true,然后运行run_tracker.m。

这时候你会发现还是报错,主要错误如下:

错误使用 vl_nnconv
DATA and FILTERS are not both CPU or GPU arrays.

...

解决方案:将vl_simplenn.m中第149行l = net.layers{i} ;的后面加入以下代码:

if gpuMode && strcmp(l.type, 'conv')
      l.weights{1} = gpuArray(l.weights{1});
      l.weights{2} = gpuArray(l.weights{2});
  end

就像这样:

这时再运行run_tracker.m就可以看到熟悉的跟踪界面窗口啦!

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值