pysot toolkit 的eval文件

目前pysot toolkit与pysot的eval不同之处在于是否有VOT2019等最新的数据集评价程序。
包含的数据有:

  • OTB系列
  • VOT2016, 2018(2017)短时序列
  • VOT2018-LT
  • NFS
  • UAV
  • LaSOT
import os
import sys
import time
import argparse
import functools
sys.path.append("./")
sys.path.append("C:/Users/lpf/Desktop/Code_of_Paper/pysot-toolkit")
from glob import glob
from tqdm import tqdm
from multiprocessing import Pool
from pysot.datasets import OTBDataset, UAVDataset, LaSOTDataset, VOTDataset, NFSDataset, VOTLTDataset
from pysot.evaluation import OPEBenchmark, AccuracyRobustnessBenchmark, EAOBenchmark, F1Benchmark
from pysot.visualization import draw_success_precision, draw_eao, draw_f1dataset_dir = r"C:\Users\lpf\Desktop\Code_of_Paper\pysot-master\testing_dataset\OTB100"
# dataset_dir = r"F:\Linux2Win10\OTB1001\OTB100"
dataset = r"OTB100"# tracker_results_dir = r"F:\Linux2Win10\OTB1001\OTB100_backup"
tracker_results_dir =  r"C:\Users\lpf\Desktop\Code_of_Paper\pysot-toolkit\results\OTB100"
# 'MDNet',
trackers = [ 'SiamCAR', 'CFNet', 'DaSiamRPN', 'GradNet', 'SRDCF', 'fDSST', 'DeepSRDCF', 'SiamRPN', 'SiamDWfc', 'Staple']
num = 10if __name__ == '__main__':#step1、创建一个解析器——创建 ArgumentParser() 对象parser = argparse.ArgumentParser(description='Single Object Tracking Evaluation')#step2、添加参数——调用 add_argument() 方法添加参数parser.add_argument('--dataset_dir', type=str, default=dataset_dir, help='dataset root directory')#数据集根目录parser.add_argument('--dataset', type=str, default=dataset, help='dataset name')#数据集名称parser.add_argument('--tracker_result_dir', type=str, default=tracker_results_dir, help='tracker result root')#tracker 结果路径parser.add_argument('--trackers', default=trackers, nargs='+',help='Trackers name')#nargs='+' 设置一个或多个参数, 同时评估多个trackerparser.add_argument('--vis', dest='vis', action='store_true')#可视化,为真时绘图parser.add_argument('--show_video_level', dest='show_video_level', action='store_true')parser.add_argument('--num', type=int, help='number of processes to eval', default=8)#线程数目,有默认值 1,不是很重要#step3、解析参数——使用 parse_args() 解析添加的参数args = parser.parse_args()tracker_dir = args.tracker_result_dir#跟踪结果目录trackers = args.trackers#跟踪器名称root = args.dataset_dir#数据集根目录assert len(trackers) > 0#断言:至少有一个跟踪器args.num = min(args.num, len(trackers))#每个跟踪器配备一个进程,自适应跟踪器数量 与 进程数#OTB数据集上评价结果if 'OTB' in args.dataset:dataset = OTBDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)benchmark = OPEBenchmark(dataset)success_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_success,trackers), desc='eval success', total=len(trackers), ncols=100):success_ret.update(ret)precision_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,trackers), desc='eval precision', total=len(trackers), ncols=100):precision_ret.update(ret)benchmark.show_result(success_ret, precision_ret,show_video_level=args.show_video_level)#是否绘制跟踪结果if args.vis:for attr, videos in dataset.attr.items():draw_success_precision(success_ret,name=dataset.name,videos=videos,attr=attr,precision_ret=precision_ret)elif 'LaSOT' == args.dataset:dataset = LaSOTDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)benchmark = OPEBenchmark(dataset)success_ret = {}# success_ret = benchmark.eval_success(trackers)with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_success,trackers), desc='eval success', total=len(trackers), ncols=100):success_ret.update(ret)precision_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,trackers), desc='eval precision', total=len(trackers), ncols=100):precision_ret.update(ret)norm_precision_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_norm_precision,trackers), desc='eval norm precision', total=len(trackers), ncols=100):norm_precision_ret.update(ret)benchmark.show_result(success_ret, precision_ret, norm_precision_ret,show_video_level=args.show_video_level)if args.vis:draw_success_precision(success_ret,name=dataset.name,videos=dataset.attr['ALL'],attr='ALL',precision_ret=precision_ret,norm_precision_ret=norm_precision_ret)elif 'UAV' in args.dataset:dataset = UAVDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)benchmark = OPEBenchmark(dataset)success_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_success,trackers), desc='eval success', total=len(trackers), ncols=100):success_ret.update(ret)precision_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,trackers), desc='eval precision', total=len(trackers), ncols=100):precision_ret.update(ret)benchmark.show_result(success_ret, precision_ret,show_video_level=args.show_video_level)if args.vis:for attr, videos in dataset.attr.items():draw_success_precision(success_ret,name=dataset.name,videos=videos,attr=attr,precision_ret=precision_ret)elif 'NFS' in args.dataset:dataset = NFSDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)benchmark = OPEBenchmark(dataset)success_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_success,trackers), desc='eval success', total=len(trackers), ncols=100):success_ret.update(ret)precision_ret = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,trackers), desc='eval precision', total=len(trackers), ncols=100):precision_ret.update(ret)benchmark.show_result(success_ret, precision_ret,show_video_level=args.show_video_level)if args.vis:for attr, videos in dataset.attr.items():draw_success_precision(success_ret,name=dataset.name,video=videos,attr=attr,precision_ret=precision_ret)elif 'VOT2018' == args.dataset or 'VOT2016' == args.dataset:dataset = VOTDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)ar_benchmark = AccuracyRobustnessBenchmark(dataset)ar_result = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(ar_benchmark.eval,trackers), desc='eval ar', total=len(trackers), ncols=100):ar_result.update(ret)# benchmark.show_result(ar_result)benchmark = EAOBenchmark(dataset)eao_result = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval,trackers), desc='eval eao', total=len(trackers), ncols=100):eao_result.update(ret)# benchmark.show_result(eao_result)ar_benchmark.show_result(ar_result, eao_result,show_video_level=args.show_video_level)elif 'VOT2018-LT' == args.dataset:dataset = VOTLTDataset(args.dataset, root)dataset.set_tracker(tracker_dir, trackers)benchmark = F1Benchmark(dataset)f1_result = {}with Pool(processes=args.num) as pool:for ret in tqdm(pool.imap_unordered(benchmark.eval,trackers), desc='eval f1', total=len(trackers), ncols=100):f1_result.update(ret)benchmark.show_result(f1_result,show_video_level=args.show_video_level)if args.vis:draw_f1(f1_result)

pysot-toolkit--eval.py笔记(读取算法结果,根据评价指标计算结果并可视化)相关推荐

  1. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  2. Python数模笔记-模拟退火算法(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

  3. Python数模笔记-模拟退火算法(2)约束条件的处理

    1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资 ...

  4. Python数模笔记-模拟退火算法(1)多变量函数优化

    1.模拟退火算法 模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能 ...

  5. 深度学习word2vec笔记之算法篇

    本文转载自<深度学习word2vec笔记之算法篇>对排版和内容作了部分调整,感谢大佬分享. PDF版本关注微信公众号:[终南樵],回复:[word2vec基础]获取 1. 声明 该博文是G ...

  6. 读书笔记:算法图解 using Python

    读书笔记:算法图解 using Python 阅读书目:[美] Aditya Bhargava. "算法图解" 写在前面: 作者称自己是"视觉型学习者,对图解式写作风格钟 ...

  7. 区块链笔记-Hash算法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链笔记-Hash算法 区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的地方 ...

  8. des算法java_Java加密算法笔记--DES算法实现

    Java加密算法笔记--DES算法实现 在使用中发现,经过加密的字符串如果要进行传输,需要使用Base64进行编码,这样能保证加密信息的完整性,确保将来解密成功. import java.securi ...

  9. 模式分类笔记--聚类分析算法

    模式分类(Pattern Recognition/Classification)笔记--聚类分析算法 模式分类课程笔记.码字不易,转载注明出处:http://www.cnblogs.com/Lin-c ...

最新文章

  1. GD32定时器输入捕获例程
  2. 图像傅立叶变换的物理意义
  3. Ubuntu下python升级pip(ImportError: cannot import name 'main')
  4. android 自定义皮肤,Android Studio 自定义皮肤主题和背景
  5. 手把手教你用Python进行SSH暴力破解
  6. 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(五)
  7. MySQL的一些概念笔记
  8. ios开发text kit_IOS开发入门之TextKit详解
  9. Swift -- 7.3 类和结构体
  10. 美国《预防》杂志近期帮大家总结了11种自然疗法来对抗高血压
  11. 监控的1080P、3MP和5MP是什么意思?区别是什么?
  12. codeblocks 终端设置
  13. 大批量数据导出到Excel的实现
  14. cdrx8如何批量导出jpg_cdrx8如何批量导出jpg_办公软件操作技巧022:如何从word文档中批量导出多张图片......
  15. 数据结构_树状数组 详解
  16. m3u8流媒体下载 swift
  17. 2、通信中的交换技术
  18. python 桌面应用 h5_hdf 5文件格式及python中利用h5py模块读写h5文件
  19. Android 10适配要点,深色主题
  20. 微信订阅号简单开发指引

热门文章

  1. 如何用python打印一段文字,如何在PYTHON中正确打印阿拉伯文字
  2. 局域网内VSS无法连接的一个“恶心他妈给恶心开门”的问题
  3. linux awk判断字符串开头,Linux文件比较三剑客(awk/grep/sed)之awk
  4. matlab选址与GIS选址,ArcGIS入门教程(13)——多条件学校选址分析
  5. 软件评测和测试国家现行标准
  6. 2022.11.27 第10次周报
  7. 如果推动世界进步的是魔法,世界将会怎样?
  8. 锐龙r7 4800h性能怎么样
  9. 软件模拟中美gdp今后几年的变化情况
  10. EXCEL的100种便捷用法(2):怎么将EXCEL里面一个单元格的数据拆分为多列