ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

文章和代码下载地址:

SiameseFC: Luca Bertinetto, Jack Valmadre, João F. Henriques, Andrea Vedaldi, Philip H.S. Torr. "Fully-Convolutional Siamese Networks for Object Tracking." ECCV workshop (2016). [paper] [project] [github]

预先环境设置:Ubuntu+GPU+MATLAB+CUDA

1、下载程序代码

https://github.com/bertinetto/siamese-fc

2、下载MatConvNet: CNNs for MATLAB

http://www.vlfeat.org/matconvnet/

推荐下载和作者一样的版本v1.0-beta20

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

3、下载预训练好的网络

http://www.robots.ox.ac.uk/~luca/siamese-fc.html

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

4、在工程目录下新建external_libs把下载的MatConvNet和预训练好的网络都放进去。

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

5、 解压matconvnet-1.0-beta20.tar.gz

# tar -zxvf matconvnet-1.0-beta20.tar.gz

6、打开matlab,进入/siamese-fc-master/external_libs/matconvnet-1.0-beta20/matlab路径

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

7、 编译vl_compilenn

(1)编译CPU版本,直接运行vl_compilenn即可。

(2)编译GPU版本,运行vl_compilenn('enableGpu', true)。

本文需要使用GPU,所以用方法(2)

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

9、可能遇到错误解决

如果直接就编译成功了可以跳过这一步骤。

遇到错误:error: function “atomicAdd(double *, double)” has already been defined

原因:cuda 8.0 提供了对atomicAdd的定义,但atomicAdd在之前的cuda toolkit中并未出现,因此一些程序重复定义了atomicAdd函数。

解决:把重复定义的函数注释掉或者使用宏定义。

(1)打开/siamese-fc-master/external_libs/matconvnet-1.0-beta20/matlab/src/bits/impl/pooling_gpu.cu更改第163行函数

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

添加宏定义更改为:

#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
#else
static __device__ double atomicAdd(double* address, double val)
{
  unsigned long long int* address_as_ull = (unsigned long long int*)address;
  unsigned long long int old = *address_as_ull, assumed;
  do {
    assumed = old;
    old = atomicCAS(address_as_ull, assumed,
                    __double_as_longlong(val +
                                         __longlong_as_double(assumed)));
  } while (assumed != old);
  return __longlong_as_double(old);
}
#endif

 (2)同理,打开/siamese-fc-master/external_libs/matconvnet-1.0-beta20/matlab/src/bits/impl/bilinearsampler_gpu.cu更改第25行函数。

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

10、运行vl_compilenn('enableGpu', true)编译成功

11、matlab进入目标/data/users/huangbo/Codes/siamese-fc-master/tracking/,去掉三个.m文件的.example后缀。

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

12、更改startup.m文件为:

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking) 13、更改env_paths_tracking.m为:

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

14、运行run_tracker('vot15_bag',1);得到跟踪结果

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)

 

 

训练 SiameseFC网络,待更新。。。