SiamFC---用于目标跟踪的全卷积孪生网络
论文地址:SiamFC
SiamFC是在2016年发表的,首次将目标跟踪问题转化为给定模板与候选图像的匹配问题。之前对于目标跟踪问题的解决方法是学习外观的排他性模型解决,而且只使用在线的方法,限制了他们可以学习的模型的丰富性。而在SiamFC之前的相关滤波方法中的HCF算法就已经考虑过使用深度特征的表达能力。但是由于事先不知道要跟踪的对象,有必要在线执行随机梯度下降以调整网络的权重,会影响到系统的速度。而一个优秀的目标跟踪器最重要的特点有三个:精确,高效,鲁棒性。SiamFC就被提出了,虽然时间久远,现在有很多更高效的跟踪器,但是由于SiamFC是孪生网络用于跟踪被首次提出,所以本文还是要对SiamFC进行解读以及复现。
网络结构
SiamFC简单的使用Fully-Convolutional网络对搜索图像x和模板图像z进行完全卷积。输出是标量值核心映射,其维度取决于搜索图像的大小。这使得能够在一次评估中为搜索图像内的所有转换的子窗口计算相似性函数。分数图中的红色和蓝色像素包含对应子窗口的相似性。红线表示对应。
代码复现
本文使用的代码是https://github.com/huanglianghua/siamfc-pytorch
其跟踪结果如下:
在代码文件里有两个文件夹,一个是siamfc文件夹,一个是tools文件夹
siamfc文件夹内是组成孪生网络的各个构架,如backbone,datasets, heads, losses, ops, transforms,最后组成TrackerSiamFC网络结构。在TrackerSiamFC中有参数设置函数,在训练之前需要按照自己设备的算力进行调整。
def parse_args(self, **kwargs):
# default parameters
cfg = {
# basic parameters
'out_scale': 0.001,
'exemplar_sz': 127,
'instance_sz': 255,
'context': 0.5,
# inference parameters
'scale_num': 3,
'scale_step': 1.0375,
'scale_lr': 0.59,
'scale_penalty': 0.9745,
'window_influence': 0.176,
'response_sz': 17,
'response_up': 16,
'total_stride': 8,
# train parameters
'epoch_num': 50,
'batch_size': 8,
'num_workers': 32,
'initial_lr': 1e-2,
'ultimate_lr': 1e-5,
'weight_decay': 5e-4,
'momentum': 0.9,
'r_pos': 16,
'r_neg': 0}
TrackerSiamFC里面还有track属性,可以对已经训练好的模型进行可视化操作。
training
代码如下:首先需要下载got10k官方库,只需要在终端输入(注意:在终端安装各种库的时候不能使用网络代理),在环境已经配置到的情况下,只需要该其中的路径和就可以运行。
pip install got10k
from __future__ import absolute_import
import os
from got10k.datasets import *
from siamfc import TrackerSiamFC
if __name__ == '__main__':
root_dir = os.path.expanduser('D:/Desktop/tracking/siamfc-pytorch-master/data/GOT-10k') # 这里的路径必须设置为绝对路径
seqs = GOT10k(root_dir, subset='train', return_meta=True)
# root_dir和seqs这两句是使用GOT10k数据集必备的语句
tracker = TrackerSiamFC()
tracker.train_over(seqs)
test
在test.py文件中,就是利用训练出来的模型进行测试,需要更改预训练模型的路径,测试集的路径,以OTB100为例,最后输出的是对每一帧目标位置的坐标点。我使用预训练了12轮的模型进行测试,最后输出结果如图所示
除了准确率和成功率图,还生成了一个性能JSON文件,还有每一视频帧的时间。
from __future__ import absolute_import
import os
from got10k.experiments import *
from siamfc import TrackerSiamFC
if __name__ == '__main__':
net_path = 'pretrained/siamfc_alexnet_e12.pth'
tracker = TrackerSiamFC(net_path=net_path)
root_dir = os.path.expanduser('D:/Desktop/tracking/OTB100')
e = ExperimentOTB(root_dir, version=2015)
e.run(tracker)
e.report([tracker.name])
demo
demo文件可以根据训练出来的模型对视频进行可视化。
这个代码库实现的siamfc较为简单,复现过程中没有什么技术性的错误,比较顺利。文章来源:https://www.toymoban.com/news/detail-725541.html
这个系列博客仅为了记录各目标跟踪算法的复现(大多为跑通大佬们实现的代码),包括其中出现的很多问题和错误,学到的新知识等等。文章来源地址https://www.toymoban.com/news/detail-725541.html
到了这里,关于单目标跟踪算法及其复现过程---SiamFC(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!