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

本文详细介绍SiameseFC网络的环境搭建、代码下载、预训练网络使用及目标跟踪实现流程,涵盖Ubuntu、GPU、MATLAB、CUDA配置,提供解决编译错误方案,并指导如何训练网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章和代码下载地址:

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

3、下载预训练好的网络

SiameseFC tracker

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

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路径

7、 编译vl_compilenn

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

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

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

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行函数

添加宏定义更改为:

#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行函数。

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

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

12、更改startup.m文件为:

 13、更改env_paths_tracking.m为:

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

训练 SiameseFC网络

1、先注册

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

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

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

(1)选择2015数据集

(2) 选择VID

(3) 选择完整数据集

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

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

(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/,注意对照下图中的两个目录更改

(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文件都是这四行代码生成的

(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为上一步骤新建的目录

存放的结果如图:

(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更改路径

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值