got-toolkit使用教程

目录:

前言:

 got-toolkit的github仓库:https://github.com/got-10k/toolkit

 got-toolkit是一个专门针对于单目标跟踪算法和单目标跟踪数据集建立的工具程序,我更愿意把got-toolkit理解成是一个建立在算法的数据集之间的桥梁,在算法和数据集中间搭建起一个容易切换的平台。对于现在存在的绝大部分单目标跟踪算法以及单目标跟踪数据集,使用got工具即可轻松实现算法在不同数据集之间的切换,降低使用不同数据集时带来的成本。但是,got工具在带来便利的同时,也会有一些麻烦,比如适用于got-toolkit的数据集有严格的规定,只能使用指定的数据集,再比如使用got-toolkit对现有的开源的单目标跟踪算法进行融合的时候,需要耗费较多的时间和精力在算法分析和程序融合上。解决第一个问题只能依靠got-toolkit官方不断地更新got工具以适应更多的数据集,而解决第二个问题需要一些小技巧。这篇文章的目的就是讲解在融合单目标跟踪算法和got-toolkit程序时可以使用的小技巧。

了解如何使用got-toolkit

进入got-toolkit的github仓库以后,可以在README教程中初步了解如何使用got工具跑数据集。

根据README教程的指示,got-toolkit的框架文件如下所示:

from got10k.trackers import Tracker
from got10k.experiments import ExperimentGOT10k

class IdentityTracker(Tracker):
    def __init__(self):
        super(IdentityTracker, self).__init__(name='IdentityTracker')
    
    def init(self, image, box):
        self.box = box

    def update(self, image):
        return self.box

if __name__ == '__main__':
    # setup tracker
    tracker = IdentityTracker()

    # run experiments on GOT-10k (validation subset)
    experiment = ExperimentGOT10k('data/GOT-10k', subset='val')
    experiment.run(tracker, visualize=True)

    # report performance
    experiment.report([tracker.name])

使用IdentityTracker跑数据集

第二部分的代码如下所示:

if __name__ == '__main__':
    # setup tracker
    tracker = IdentityTracker()

    # run experiments on GOT-10k (validation subset)
    experiment = ExperimentGOT10k('data/GOT-10k', subset='val')
    experiment.run(tracker, visualize=True)

    # report performance
    experiment.report([tracker.name])

自定义跟踪器

第一部分的代码如下:

class IdentityTracker(Tracker):
    def __init__(self):
        super(IdentityTracker, self).__init__(name='IdentityTracker')
    
    def init(self, image, box):
        self.box = box

    def update(self, image):
        return self.box

解析 init 和 update 方法

可以简单的利用Python的print()函数和input()函数检查 init 和 update 方法的前置条件和后置条件。

在使用print和input方法重写 init update 方法之前,需要做一些准备工作:

建立一个文件夹,把算法文件(py文件)和数据集文件放入该文件夹中。文件架结构如下所示:

pic

文件夹结构:

test

toolkit_test.py

data

GOT-10k

test

重写 init 方法

重写 init 方法的代码如下所示:

def init(self, image, box):
        print("init")
        print(image)
        print(box)
        input()
        self.box = box
重写 update 方法

重写 update 方法的代码如下所示:

def update(self, image):
        print("update")
        print(image)
        input()
        return self.box
测试程序

测试程序的代码如下:

#-*- coding : utf-8 -*-
 
from got10k.trackers import Tracker
from got10k.experiments import ExperimentGOT10k

class IdentityTracker(Tracker):
    def __init__(self):
        super(IdentityTracker, self).__init__(name='IdentityTracker')
    
    def init(self, image, box):
        print("init")
        print(image)
        print(box)
        input()
        self.box = box

    def update(self, image):
        print("update")
        print(image)
        input()
        return self.box

if __name__ == '__main__':
    # setup tracker
    tracker = IdentityTracker()

    # run experiments on GOT-10k (validation subset)
    experiment = ExperimentGOT10k('data/GOT-10k', subset='test')
    experiment.run(tracker, visualize=False)

    # report performance
    experiment.report([tracker.name])

运行测试程序,结果如下;

pic

pic

可以看到,box 参数的内容就是 groundtruth.txt 文件中的内容,也就是数据集第一帧的框图信息。

box 参数是一个列表,列表的前两个元素:395 和 340 代表框图左上角的点的位置坐标(x,y),后两个元素代表框图的长和宽(width,height)。

以此类推,后面出现的 box 变量都是含有四个元素的列表,并且每个元素的信息都是确定的,和上面描述的一致。

总结:

 通过这篇文章,已经知道如何改写got-toolkit的框架文件来融合算法的got工具,但是不同的单目标跟踪算法的源码结构都是不同的,需要根据具体的算法实例来综合考虑如何融合算法源代码。