用pysot里面的vot测试功能测试DIMP50在vot2018上的表现


此前花了两天时间,准备用vot-toolkit(matlab)去测一下DIMP50 baseline在VOT2018上的表现的,结果发现dimp50 fail之后总是不能初始化成功,最后总会归结到类似这样的错误上:

AttributeError: module 'trax.server' has no attribute 'ServerOptions'
AttributeError: 'VOT' object has no attribute '_trax'

因为新版的vot-trax里面是没有ServerOptions这个属性的,所以很无奈,虽然vot-toolkit(matlab)已经配置成功,具体出错可见下面两个issue:

没有办法,后来群里很多小伙伴都劝我不要尝试了,直接用pysot里面vot测试的部分,今天就试了一下,目前还是可行的,今天就记录一下,方便其他小伙伴取用:

一、将实验添加到myexperiments.py中

/home/lz/PycharmProjects/pytracking/pytracking/experiments/myexperiments.py里面添加如下几行:

def dimp50_vot2018():
    trackers = trackerlist('dimp', 'dimp50_vot18', run_ids=10)
    dataset = get_dataset('vot')
    return trackers, dataset

二、稍微调整一下run_experiment.py的运行接口

我这里改写了一下/home/lz/PycharmProjects/pytracking/pytracking/run_experiment.py的运行接口,方便直接在pycharm里面右键Run运行,不该的话就是按照README里面命令行运行即可,改写后如下:

def main(dataset):
    parser = argparse.ArgumentParser(description='Run tracker.')
    # parser.add_argument('experiment_module', type=str, help='Name of experiment module in the experiments/ folder.')
    # parser.add_argument('experiment_name', type=str, help='Name of the experiment function.')
    # parser.add_argument('--debug', type=int, default=0, help='Debug level.')
    # parser.add_argument('--threads', type=int, default=0, help='Number of threads.')
    #
    # args = parser.parse_args()
    # run_experiment(args.experiment_module, args.experiment_name, args.debug, args.threads)

    experiment_module = 'myexperiments'
    debug = 0
    threads = 0
    run_experiment(experiment_module, dataset, debug, threads)


if __name__ == '__main__':
    for dataset in ['dimp50_vot2018']: 
        main(dataset)

三、修改votdataset.py中的gt格式

/home/lz/PycharmProjects/pytracking/pytracking/evaluation/votdataset.py中,原来是有这么一部分的,为的是把VOT2018里面的polygon根式的GT BBOX转化成[x,y,w,h]格式的,这里我们注释掉,之后会用pysot里面的函数处理【这一步要做的就是在votdataset.py注释掉下面的几句】:

# Convert gt
if ground_truth_rect.shape[1] > 4:
    gt_x_all = ground_truth_rect[:, [0, 2, 4, 6]]
    gt_y_all = ground_truth_rect[:, [1, 3, 5, 7]]

    x1 = np.amin(gt_x_all, 1).reshape(-1,1)
    y1 = np.amin(gt_y_all, 1).reshape(-1,1)
    x2 = np.amax(gt_x_all, 1).reshape(-1,1)
    y2 = np.amax(gt_y_all, 1).reshape(-1,1)

    ground_truth_rect = np.concatenate((x1, y1, x2-x1, y2-y1), 1)

四、修改tracker.py文件需要

  1. 这一步是最关键的,也是改动最多的,因为比较多改动,这里就直接提供改完后的tracker.py文件。
  2. 与此同时,在/home/lz/PycharmProjects/pytracking/pytracking下面新建一个文件夹,名为vot_utils,然后去pysot中把编译好的region整个复制过来,就是/home/lz/PycharmProjects/pysot-master/toolkit/utils这个文件夹下的全复制过来,复制好之后就是这样的:
    在这里插入图片描述

五、修改running.py中保存结果的地方

/home/lz/PycharmProjects/pytracking/pytracking/evaluation/running.py该文件的导入部分加入这样一句话:

from pytracking.vot_utils.region import vot_float2str

在该文件原本的【52-55行】,本来是这样的:

else:
     # Single-object mode
     bbox_file = '{}.txt'.format(base_results_path)
     save_bb(bbox_file, data)

修改为下面的这样:

else:
    # Single-object mode
    bbox_file = '{}.txt'.format(base_results_path)
    try:
        save_bb(bbox_file, data)
    except:
        save_vot_bb(bbox_file, data)

自然我们需要在原本22行的save_bb后加一个save_vot_bb函数:

def save_vot_bb(file, data):
    with open(file, 'w') as f:
        for x in data:
            if isinstance(x, int):
                f.write("{:d}\n".format(x))
            else:
                f.write(','.join([vot_float2str("%.4f", i) for i in x]) + '\n')

六、这样就可以运行了

这样去到run_experiment.py下在pycharm里面右键Run运行了,运行后可以生成这样的结果文件(dimp50_001,dimp50_002,dimp50_003是我之前跑的其他实验,不必管)
在这里插入图片描述
然后把这些文件放到vot-toolkit里面跑(或者在pysot里面也行),然后就可以得到结果了,因为是用作者模型跑的,还是和论文(0.440)很接近的:
在这里插入图片描述

七、关于vot-toolkit其他结果的得到说明

  • Accuracy(overlap)和EAO用vot-toolkit能直接给出,主要是Robustness(failures),你参照这个:

in the VOT18 Challenge results paper, the raw robustness is reported. You can convert the toolkit output into the paper’s scores as follows:
paper’s robustness = (pooled robustness / (total number of frames in the dataset = 21356)) * 100
this can be interpreted as an average number of failures per 100 frames. The pooled robustness score from the toolkit report represents total number of failures on the whole dataset.
感谢@chunhui小伙伴的解答和帮助

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laizi_laizi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值