SiamFC代码配置复现 matlab版本

原创

SiamFC代码配置复现

写在前面

最近在研究SiamRPN,究其根本,CNN依托于AlexNet骨架,所以花些功夫研究以下SiamFC代码,将其阶段性复现。

[ Tracking only ]

关于GPU显卡配置、cudn和cudnn安装可以参考Ubuntu16.0下安装显卡驱动、 cuda10.0 、cudnn的活生生案例

1.Ubuntu16.04配置Matconvnet

[可参考官方教程](http://www.vlfeat.org/matconvnet/)

%% 编译安装MatConvNet工具箱
mex -setup,mex -setup C++ %绑定C++编译器
% 将matlab工作路径切换到./MatConvNet,在该工作空间下输入:
addpath matlab %添加搜索路径
vl_compilenn %编译工具箱-一般编译(使用cpu)(注:一般在这行会报错,可用以下代码替换:vl_compilenn('EnableImreadJpeg',false))
vl_setupnn %启动工具箱
% 以下两种方式二选一即可
vl_compilenn('enableGpu',true) %使用cuda编译,编译速度一般
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-10.0','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5') %使用cudnn编译(具体相应的路径名根据自身实际情况进行设置)
%% 测试
vl_testnn %测试cpu编译成功
vl_testnn('gpu',true) %测试GPU编译成功

       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注意:以上对MatConvNet的配置均在MatConvNet所在的工作目录下进行

2.运行阶段:
run_tracker('vot15_bag',1)

       
       
       
       
  • 1

注意:对于一些关键路径的修改,可根据报错提示进行相对应的修改,关于stats.mat文件,可以参考SiamFCdemo运行所需stats.mat文件,下载后放到相对应的文件路径即可;最后运行以上一句代码即可。
[2019/3/2 写]


看到一个相对比较良心的代码复现博文[论文复现] Fully-Convolutional Siamese Networks for Object Tracking可作为参考;
[2019/3/3 更]


MatConvNet是什么;
MatConvNet函数文档;
[2019/3/4 更]


又写在前面

突然警醒到:深度学习的关键所在在于神经网络的训练过程,你所搭建的自己的architecture一旦形成,需要利用相应的数据集进行训练,得到真正属于自己的architecture的权重参数,这才是end to end的真谛吧。
所以就有了接下来的工作,balabalabala…

[ Training only ]

关于配置问题,参见上面的[Training only]部分,在这里需要指出的是Matconvnet的版本问题,本人用的是v1.0-beta25版本,而Siamfc原作者当初用的是v1.0-beta20版本(Matconvnet工具箱下载链接),在tracking阶段,两者均可,但是,在训练阶段,可能由于版本的原因,会弹出一些很痛心的bug…诸如此图(ps:如果你到了这一步,你真的就离成功不远了,我真的是费了九牛二虎之力才到了这一步,奈何我是如此之菜…)
vl_nnbnorm错误关于解决方案,先别着急,等到了这一步自会说;

1.进行图片原始数据的预处理工作

在这里插入图片描述上图为step-by-step instructions步骤;【1】中链接为ILSVRC官网下载链接,但是需要注册,如果对官网所给的数据集并不是了解的话,建议使用这个直截了当的链接——ILSVRC2015_VID数据集下载链接,直接点击下载即可,一共89.6G;
【3】中要求做的是将VID中的validation和train数据集合并为一个,并将相应的5个文件夹的名称改为a,b,c,d,e;
【4】中按要求运行即可,
【5】中要求对每个视频的每一帧图片进行相应的处理(合并了一些信息),这一步骤耗费了大约一周的时间,持续不断的运行,5个matlab并行处理,全是泪…
【6】中对图片中的object进行操作,但是按要求运行并没有什么卵用,空的,不知道哪里出了问题,所以基于【7】以上步骤做的工作全部作废,一周的运行化为泡影…
所以,作此总结:
使用谷歌浏览器直接下载imdb_video.mat即可,给出的【4-7】的操作只为了得到一个它,所以直接下载它即可;
【8】中搞不懂它在做些什么;
【9】中需要做的是复制ILSVRC2015文件夹的tree结构供后续【10】中作crop得到的图片存储用,按照给定的要求做即可,这里以Ubuntu为例(过程可作参考,结合自身理解后期记录,可能会有错误,但能够有些帮助,知道相应的指令能够完成怎样的操作):

#将当前路径下的文件夹的tree结构存储到dirs.txt
find . -type d >dirs.txt
#新建一个文件夹ILSVRC2015_
mkdir ILSVRC2015_
cd ILSVRC2015_ | cp ../ILSVRC2015/dirs.txt ./
# 从dirs.txt产生相应的目录
xargs mkdir -p 
       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

【10】中运行save_crops.m;这里虽然他那样讲,但是实际并不能够达到效果,会出现一些bugs,以下可以作为参考:

% load imdb_video.mat
imdb_video = load('/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_imdb_video_2016-10.mat')
% run save_crop
% -imdb_video这里用imdb_video.imdb_video,你查看导入的imdb_video即能明白为啥这么做;
% v_1:1;v_end:4417;一共4417组VID,对其全部进行crop操作
% root_original:你存放ILSVRC2015的路径;root_crops:crop后存放的图片路径
%save_crops(imdb_video,v_1,v_end, root_original, root_crops)
save_crops(imdb_video.imdb_video,1,4417,'/home/db/Subject/SiamFC/v1/siamese-fc/ILSVRC2015', '/media/db/ZZXin EXT/ILSVRC2015_')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

【11】中可以按照要求做,忘记自己run的还是直接下载的,建议还是用原作者给的吧
至此,对图片的原始数据预处理工作全部完成;

2. training过程

在这里插入图片描述

  1. 配置Matconvnet(和上同),可以将这个文件写成一个脚本文件即可,每次进行Matconvnet的配置运行该脚本即可;
%% 编译安装MatConvNet工具箱
mex -setup,mex -setup C++ %绑定C++编译器
% 将matlab工作路径切换到./MatConvNet,在该工作空间下输入:
addpath matlab %添加搜索路径
vl_compilenn %编译工具箱-一般编译(使用cpu)(注:一般在这行会报错,可用以下代码替换:vl_compilenn('EnableImreadJpeg',false))
vl_setupnn %启动工具箱
% 以下两种方式二选一即可
vl_compilenn('enableGpu',true) %使用cuda编译,编译速度一般
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-10.0','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5') %使用cudnn编译(具体相应的路径名根据自身实际情况进行设置)
%% 测试
vl_testnn %测试cpu编译成功
vl_testnn('gpu',true) %测试GPU编译成功

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注:该脚本的运行路径是在Matconvnet文件夹下;

  1. 移除掉siam-fc/training/下的.example后缀,修改env_paths_training中的访问路径(很重要)
    % 这里是到crop后的ILSVRC2015_crops的路径,要涵盖全,一直到train/下
    % opts.rootDataDir = '/path/to/ILSVRC2015_crops/Data/VID/train/';
    opts.rootDataDir = '/media/db/ZZXin EXT/ILSVRC2015_/Data/VID/train';
    % 一直到imdb_video.mat的路径
    %opts.imdbVideoPath = '/path/to/imdb_video.mat';
    opts.imdbVideoPath = '/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_imdb_video_2016-10.mat';
    % 一直到imageStats.mat的路径
    %opts.imageStatsPath = '/path/to/imageStats.mat';
    opts.imageStatsPath = '/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_ILSVRC2015.stats.mat';

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 直接运行run_experiment.m
# 运行training主程序
run_experiment(imdb_video.imdb_video)

   
   
   
   
  • 1
  • 2

至此,大工告成了么?
并没有,还记得最初的那个bug么?
解决方案
在这里插入图片描述
将BatchNorm.m中的第32行的参数‘moments’整行删除掉,并将第33行% obj.moments=[ ]注释掉;
至此,完工。
[2019/4/29 写]

                                
0 个人打赏
文章最后发布于: 2019-04-29 22:18:06
        

emmmmmmm…举报回复

  • weixin_44287997
    目标跟踪的小白妹子 回复 ZZXin_ 1周前
    谢谢博主 呀 你真的是个小天才 啊啊啊啊啊我真的是个视频跟踪的小白。。
    删除举报回复
  • ZZXin_
    ZZXin_ 回复 目标跟踪的小白妹子 1周前
    ILSVRC数据集下载链接:http://bvisionweb1.cs.unc.edu/ilsvrc2015/ILSVRC2015_VID.tar.gz
    没有百度网盘链接 数据集太大 来不及上传
    举报回复
    • weixin_43911766
      M-C100 2个月前 #3楼 博主你好,想问下可以发下“SiamFCdemo运行所需stats.mat文件”这个文件给我吗,谢谢啦,邮箱是[email protected]。感谢感谢 举报回复查看回复(1)
      • weixin_44287997
        目标跟踪的小白妹子 回复 M-C100 1周前
        加1 我也要 没有外网进不去网址 我还想要百度云的链接 就是数据集 还有那个stats.matz文件 谢谢博主大大啊 [email protected] 也是我的QQ
        删除举报回复
    • liu_yong0220
      书亦烧仙草 3个月前 #2楼 你好,我想请问siamese系列更换训练的数据集或者只训练ilsvrc2015数据集的一部分(因为数据集太大,想用部分来训练),该如何操作,谢谢啦 举报回复查看回复(1)
      • ZZXin_
        ZZXin_ 回复 书亦烧仙草 2个月前
        具体的话,我不是很记得了,你可以看看源代码,着重调试数据获取那一部分就行,应该是可以实现的;另外实际他的训练耗时并不是很长,不用训练那么多epoch
        举报回复
    • weixin_44519401
      weixin_44519401 5个月前 #1楼 您好,请问有没有tensorflow代码中video sequences 好下载一点的链接 github上的完全下不下来T-T 举报回复查看回复(1)
      • ZZXin_
        ZZXin_ 回复 weixin_44519401 5个月前 您是指的ILSVRC2015数据集的下载么? 举报回复

    • 上一页
    • 1
    • 下一页

    Siamese Network理解(附代码

    02-02 阅读数 5万+

    本文主要通过论文来讲解下siamesenetwork。提起siamesenetwork一般都会引用这两篇文章:《Learningasimilaritymetricdiscriminatively,wi... 博文 来自: 快来学习鸭~~~

    DL实战(2):SiamFC - TensorFlow配置

    06-11 阅读数 2347

    git链接:https://github.com/torrvision/siamfc-tf管理员身份运行AnacondaPrompt(我的是py36版本)安装virtualenv,其用来为一个应用创建... 博文 来自: 银山词霸的碎碎念

    SiameseFC-TensorFlow 代码详细注解(一):预训练模型下载转换测试以及结果可视化

    05-27 阅读数 6454

    说明:该系列博客源码链接为:https://github.com/bilylee/SiamFC-TensorFlow,是实验室同小组的师兄用TensorFlow实现SiameseFC算法的最终公开版本... 博文 来自: StayHappy_Fan的博客

    SiameseFC和CFNet细节笔记

    08-21 阅读数 2549

    这两篇文章出自牛津大学同一个实验室,一个发表在ECCV2016,一个发表在CVPR2017,两篇文章的matlab代码是一起的,在代码中可以选择这两个方法中的一个。看代码的过程中需要对论文熟悉,就再看... 博文 来自: 闲逸的炫鹰

    tracker benchmark v1.0 如何把性能曲线修改为自选方式显示?

    02-20

    - 问答

    CFNet视频目标跟踪源码运行笔记(1)——only tracking

    03-30 阅读数 4109

    友情提示:如果希望了解如何从头开始训练网络并进行跟踪,可以阅读本人另一篇博客:CFNet视频目标跟踪源码运行笔记(2)——trainingandthentracking论文信息论文题目:End-to-... 博文 来自: 越野者的博客

    【ZMK】CFnet目标跟踪算法Matlab代码运行指南

    05-22 阅读数 1680

    由于最近在做相关滤波方面的工作。CFnet是文章End-to-endrepresentationlearningforCorrelationFilterbasedtracking中算法的简称。该算法页... 博文 来自: 死水微澜的博客

    你可能感兴趣的:(siamese,深度学习)