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、下载程序代码

GitHub - bertinetto/siamese-fc: Arbitrary object tracking at 50-100 FPS with Fully Convolutional Siamese networks.

2、下载MatConvNet: CNNs for MATLAB

Home - MatConvNet

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

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第1张图片

3、下载预训练好的网络

SiameseFC tracker

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第2张图片

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

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第3张图片

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)_第4张图片

7、 编译vl_compilenn

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

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

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

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第5张图片

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)_第6张图片

添加宏定义更改为:

#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)_第7张图片

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)_第8张图片

12、更改startup.m文件为:

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

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第10张图片

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

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第11张图片

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第12张图片

训练 SiameseFC网络

1、先注册

注意必须使用学校邮箱,edu.cn结尾那种邮箱。

2、下载数据集(86GB,速度挺快的,5M每秒)

http://www.image-net.org/download-images

(1)选择2015数据集

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第13张图片

(2) 选择VID

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第14张图片

(3) 选择完整数据集

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第15张图片

2、接下来要进行图像预处理

目的:将数据集变成如下的训练图像对,超出的部分进行RGB均值补充

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第16张图片

(1)拷贝文件

1)将/home1/publicData/ImagenetVID/ILSVRC/Data/VID/路径下的val文件夹拷贝到/home1/publicData/ImagenetVID/ILSVRC/Data/VID/train/路径中。

2)将/home1/publicData/ImagenetVID/ILSVRC/Annotations/VID/路径下的val文件夹拷贝到/home1/publicData/ImagenetVID/ILSVRC/Annotations/VID/train/路径中。

(注:原文将train路径下的文件夹重命名为(a)(b)...来减少路径长度,因为此数据集在服务器上是公用的,所以我没有那样做)

(2)生成文件目录

终端运行./video_ids.sh /home1/publicData/ImagenetVID/,注意对照下图中的两个目录更改

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第17张图片

(3)matlab运行

per_frame_annotation('/home1/publicData/ImagenetVID/ILSVRC/', 0)

per_frame_annotation('/home1/publicData/ImagenetVID/ILSVRC/', 1)

per_frame_annotation('/home1/publicData/ImagenetVID/ILSVRC/', 2)

per_frame_annotation('/home1/publicData/ImagenetVID/ILSVRC/', 3)

per_frame_annotation('/home1/publicData/ImagenetVID/ILSVRC/', 4)

一共运行5次,注意路径。

It's a long time to wait................

这一步骤的目的是生成一一对应的TXT,下图中的TXT文件都是这四行代码生成的

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第18张图片

(4)运行

parse_objects('/home1/publicData/ImagenetVID/ILSVRC/', 0)

parse_objects('/home1/publicData/ImagenetVID/ILSVRC/', 1)

parse_objects('/home1/publicData/ImagenetVID/ILSVRC/', 2)

parse_objects('/home1/publicData/ImagenetVID/ILSVRC/', 3)

parse_objects('/home1/publicData/ImagenetVID/ILSVRC/', 4)

一共运行5次,注意路径。

(5)运行

vid_setup_data('/home1/publicData/ImagenetVID/ILSVRC/')保存imdb_video.mat数据。

(6)复制数据集的目录结构

cd /home1/publicData/ImagenetVID/ILSVRC/ && find . -type d -exec mkdir -p -- /home1/publicData/NewData/{} \;

注意/home1/publicData/ImagenetVID/ILSVRC/为数据集原所在目录,/home1/publicData/NewData/为你新建的目录,这个新建的目录就是存放裁切之后的图像位置。

(7) 运行

imdb_video=load('imdb_video.mat')

save_crops(imdb_video, 1, 4404, '/home1/publicData/ImagenetVID/ILSVRC', '/home1/publicData/NewData')

注意/home1/publicData/ImagenetVID/ILSVRC为数据集原所在目录,/home1/publicData/NewData为上一步骤新建的目录

存放的结果如图:

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第19张图片

(8) 打开vid_image_stats.m

在函数首添加路径:

addpath('../external_libs/matconvnet-1.0-beta20/matlab/mex/');

在函数尾部添加:

save('vid_image_stats.mat', '-struct', 'stats', '-v7.3');

运行vid_image_stats(imdb_video, 0.1, '/home1/publicData/NewData/Data/VID/train/')得到vid_image_stats.mat文件。

3、训练

(1)进入路径/siamese-fc-master/training/,去掉那三个.example后缀。

(2)打开env_paths_training.m更改路径

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第20张图片

(3)打开startup.m更改路径,然后运行startup.m

ECCV2016跟踪算法SiameseFC的配置(Fully-Convolutional Siamese Networks for Object Tracking)_第21张图片

(4)运行run_experiment(imdb_video)开始训练

如果 imdb_video不在工作空间,则需要提前运行imdb_video=load('imdb_video.mat')将数据加载到工作空间。

至此,SiameseFC网络训练步骤结束,等待计算结果就好了。

你可能感兴趣的:(目标跟踪,目标跟踪,深度学习,SiameseFC,ECCV)