CFNet视频目标跟踪源码运行笔记(2)——training and then tracking

友情提示:如果只希望了解如何利用作者发布的预训练网络直接进行tracking(免训练模式),可以阅读本人另一篇博客:CFNet视频目标跟踪源码运行笔记(1)——only tracking

论文信息

论文题目:End-to-end representation learning for Correlation Filter based tracking
论文出处:CVPR 2017
论文作者:Jack Valmadre,Luca Bertinetto等人
论文主页:http://www.robots.ox.ac.uk/~luca/cfnet.html
源码链接:https://github.com/bertinetto/cfnet

运行环境介绍

  • Windows 10 x64
  • MATLAB 2017b
  • Visual Studio 2015
  • CUDA 8.0.61 for win10
  • cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0
  • MatConvNet(来源于官方网站,以前下载使用时似乎没有版本说明。2018年2月份以前发布的版本应该都可以用,可以自己尝试一下)

准备

  1. 安装CUDA,具体步骤可以参考本人另一篇博客:
    https://blog.csdn.net/discoverer100/article/details/79758499

  2. 安装cuDNN,具体步骤可以参考本人另一篇博客:
    https://blog.csdn.net/discoverer100/article/details/79759282

  3. 检查MatConvNet是否可用,具体步骤可以参考本人另一篇博客:
    https://blog.csdn.net/discoverer100/article/details/78963233

  4. 下载CFNet的MATLAB源码:https://github.com/bertinetto/cfnet

  5. 下载SiamFC目标跟踪的MATLAB源码:https://github.com/bertinetto/siamese-fc,后续进行crop图像生成时需要借用里面的部分代码。

  6. 下载cfnet_ILSVRC2015.stats.mat文件,链接:
    https://drive.google.com/file/d/0B7Awq_aAemXQcndzY3M5dkprVTA/view?usp=sharing

  7. 下载ILSVRC2015视频图像集,地址:http://bvisionweb1.cs.unc.edu/ilsvrc2015/ILSVRC2015_VID.tar.gz,如果不能直接下载,则需要到网页上进行注册(http://bvisionweb1.cs.unc.edu/ilsvrc2015/download-videos-3j16.php#vid),在这个页面中能够看到一个VID文件下载链接(如下图所示)。该文件的文件名为ILSVRC2015_VID.tar.gz,大约占用86GB磁盘空间,强烈建议用迅雷下载该文件,有条件的也可以用淘宝的代下载服务。
    这里写图片描述

  8. 下载CFNet的官方Metadata,地址:http://bit.ly/cfnet_imdb_video,其文件名为cfnet_imdb_video_2016-10.mat,占用空间大约为6GB,同样建议用迅雷或者淘宝上的代下载服务。

Crop图像生成

  1. 在CFNet源码文件夹中的data目录中创建VID文件夹(此时,创建后的VID文件夹为空)

  2. 将准备工作中下载的ILSVRC2015_VID.tar.gz文件(大小约86GB)解压,可以解压到任何地方(友情提示:1.最好不要放太深或者有空格的路径;2.一定不要放到CFNet源码文件夹data里面,否则上述空VID文件夹会受到影响),解压后会得到一个ILSVRC2015文件夹,其中我们关注的目录有两个:Data\VID\trainData\VID\val,如下面两张图所示(注意:对于train目录我们还关心它里面的四个子文件夹):
    这里写图片描述
    这里写图片描述

  3. 将上述val目录移动到上述train目录中(注意:是移动整个val文件夹),移动后,Data\VID\train目录就包含了五个文件夹:四个自带的文件夹,加上新进来的val文件夹,按照Windows资源管理器默认的名称增序排序如下:

    ILSVRC2015_VID_train_0000
    ILSVRC2015_VID_train_0001
    ILSVRC2015_VID_train_0002
    ILSVRC2015_VID_train_0003
    val

  4. 对上述五个文件夹进行重命名,分别命名为abcde,如下:

    ILSVRC2015_VID_train_0000 -> a
    ILSVRC2015_VID_train_0001 -> b
    ILSVRC2015_VID_train_0002 -> c
    ILSVRC2015_VID_train_0003 -> d
    val -> e

  5. 在CMD窗口中,利用xcopy命令(参考:https://superuser.com/questions/530128/how-to-copy-a-directory-structure-without-copying-files),将刚刚移动了文件夹、并修改了文件夹名字的ILSVRC15图像数据集中的文件夹结构复制到步骤1中创建的空VID文件夹中(注意:只是复制文件目录结构,不要复制里面的文件),具体命令形如:

    xcopy D:\ILSVRC15\data\VID D:\Dev\MATLAB_2017\cfnet-master\data\VID /t /e

    如果采用Linux系统,则需要用形如下面的命令来进行目录结构复制(感谢yangkang779760348同学进行补充~)

    find ./VID/ -type d -exec mkdir -p VI/{} \; linux下的xcopy

    执行该命令可能需要花费几分钟至十几分钟的时间,执行完毕后到cfnet-master\data\VID目录下检查一下是否有一堆空的文件夹(文件夹里面可能还会有文件夹,但一定没有任何文件)。

  6. 将准备工作中下载的cfnet_ILSVRC2015.stats.mat文件(大小约728KB)复制到cfnet-master\data目录中,并修改文件名为ILSVRC2015.stats.mat;将下载的cfnet_imdb_video_2016-10.mat文件(大小约6GB)复制到cfnet-master\data目录中,并修改文件名为imdb_video.mat,复制后的data文件夹如下所示:
    这里写图片描述

  7. 将准备工作中下载的SiamFC源码包进行解压,将里面的ILSVRC15-curation文件夹拷贝到cfnet-master\src目录中,这样,src目录中一共有四个文件夹:

    ILSVRC15-curation
    tracking
    training
    util

  8. 在MATLAB中打开cfnet-master\src\ILSVRC15-curation\save_crops.m文件,并在其命令窗口中一行一行地运行:

    imdb_video = load(‘D:/Dev/MATLAB_2017/cfnet-master/data/imdb_video.mat’);
    imdb_video = imdb_video.imdb_video;
    save_crops(imdb_video, 1, 4417, ‘D:\ILSVRC15’, ‘D:/Dev/MATLAB_2017/cfnet-master’);

    上述三条命令,其具体路径与自己实际情况保持一致。关于参数4417的来历,可以在MATLAB中打开load后的imdb_video.mat变量,发现其id属性有4417个元素。

    注意:该crop工作持续的时间可能非常长(配置Intel Core i5标压CPU的机器可能需要40-50个小时),源码也没有断点恢复机制,为防止机器断电造成损失,可以通过修改参数1和4417来分段进行crop

  9. Crop的图像和标注数据会写入到步骤1创建的VID空文件夹中,该过程执行完毕后,其内部应该包含个8,021,672个文件,占用37.4GB的磁盘空间,如下图所示:
    这里写图片描述

  10. Crop操作相当于对视频原始图像进行了裁剪、缩小和补全等处理,以下是一个crop前(上图)和crop后(下图)比较的例子:
    这里写图片描述
    这里写图片描述

训练

  1. 进入目录cfnet-master\src\training,复制env_paths_training.m.examplestartup.m.example文件并去掉其.example后缀,如下图所示:
    这里写图片描述

  2. 打开上述两个文件并修改里面的配置信息(注意有些地方需要在末尾带上正斜杠,文件名一定要与之前的对应起来),如下图所示:
    这里写图片描述
    这里写图片描述

  3. 以训练conv2为例,运行run_experiment_cfnet_conv2.m文件,代码中默认迭代100次,完整的训练过程可能会花费很长的时间,如果只是希望简单体验一下可以调低该源码文件中参数opts.train.numEpochs的值进行训练,训练时会产生类似下图的输出:
    这里写图片描述

  4. 训练网络时,代码会在cfnet-master\src\training中创建一个文件夹,每进行一次迭代,都会在该文件夹中保存一个网络文件。这样,CFNet的网络训练是允许中途关机的。

跟踪

选择上述某一轮迭代保存的网络文件,拷贝到cfnet-master\pretrained\networks目录中,运行对应的源码即可。以conv2层为例,打开文件run_cfnet2_evaluation.m,修改参数tracker_par.net的值为刚刚拷贝的网络文件名,再运行即可。

关于跟踪过程的详细操作,可以阅读本人另一篇博客:
https://blog.csdn.net/discoverer100/article/details/79758131

这里需要注意的是:代码默认仅仅计算物体坐标,并不会在屏幕上显示视频画面内容和标定。如果需要显示画面,可以进入tracker.m文件,将第16行的p.visualization赋值为true,这样的效果如下图所示:

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/discoverer100/article/details/79805347