mot_challenge官方评估代码
mot_challenge官方代码使用介绍
评估mot17验证集:每个视频序列的后一半帧作为验证集
下载源码:git clone https://hub.fastgit.org/JonathonLuiten/TrackEval.git
官网上下载data样例,放在TrackEval/
下,结构如下:
data
|-- gt
| |-- bdd100k
| |-- davis
| |-- kitti
| |-- mot_challenge
| | |-- MOT15-train
| | |-- MOT16-train
| | |-- MOT17-train
| | |-- MOT20-train
| | |-- MOTS-train
| | `-- seqmaps
| |-- tao
| `-- youtube_vis
`-- trackers|-- bdd100k|-- davis|-- kitti|-- mot_challenge| |-- MOT15-train| | `-- MPNTrack| | `-- data| |-- MOT16-train| | `-- MPNTrack| | `-- data| |-- MOT17-train| | |-- MPNTrack| | | `-- data| | `-- yourtracker| | `-- data| |-- MOT20-train| | `-- MPNTrack| | `-- data| `-- MOTS-train| `-- track_rcnn| `-- data|-- tao`-- youtube_vis
评估支持多个数据集,这里只介绍mot_challenge如何使用这个评估。
gt表示每个数据集的标注,mot_challenge中只包含训练集的标注,因为测试集没有标注。
data/gt/mot_challenge/seqmaps里面存储的是每个数据需要测试的视频序列名称,因为mot17包含3种检测器的视频序列,通常我们只使用一个检测器的视频序列,因为gt的标注都一样。这里我使用SDP检测的视频序列,所以当评估mot17验证集时,需要把其他检测器的视频序列名称删除,这样你自己的tracker得到文件就不会报找不到文件错误了。
- 修改1:更改seqmaps文件下需要评测的视频序列名称
例如:
源文件内容:data/gt/mot_challenge/seqmaps/MOT17-train.txt
name
MOT17-02-DPM
MOT17-04-DPM
MOT17-05-DPM
MOT17-09-DPM
MOT17-10-DPM
MOT17-11-DPM
MOT17-13-DPM
MOT17-02-FRCNN
MOT17-04-FRCNN
MOT17-05-FRCNN
MOT17-09-FRCNN
MOT17-10-FRCNN
MOT17-11-FRCNN
MOT17-13-FRCNN
MOT17-02-SDP
MOT17-04-SDP
MOT17-05-SDP
MOT17-09-SDP
MOT17-10-SDP
MOT17-11-SDP
MOT17-13-SDP
删除后文件内容:
name
MOT17-02-SDP
MOT17-04-SDP
MOT17-05-SDP
MOT17-09-SDP
MOT17-10-SDP
MOT17-11-SDP
MOT17-13-SDP
- 修改2:生成验证集标签:
{gt_folder}/{seq}/gt/gt_val_half.txt
代码:
import os.path as osp
import os
import numpy as np
from tqdm import tqdm
def mkdir_if_missing(d):if osp.isfile(d):d = osp.dirname(d)if not osp.exists(d):os.makedirs(d)data_root = osp.join('../data/gt/mot_challenge') # the root directory of the dataset
gt_folder = osp.join(data_root, 'MOT17-train')
seqs_str = '''MOT17-02-SDPMOT17-04-SDPMOT17-05-SDPMOT17-09-SDPMOT17-10-SDPMOT17-11-SDPMOT17-13-SDP'''
seqs = [seq.strip() for seq in seqs_str.split()]def gen_gt_val():for seq in tqdm(seqs):print('start seq {}'.format(seq))seq_info = open(osp.join(gt_folder, seq, 'seqinfo.ini')).read()seqLength = int(seq_info[seq_info.find('seqLength=') + 10:seq_info.find('\nimWidth')])gt_txt = osp.join(gt_folder, seq, 'gt', 'gt.txt')gt = np.loadtxt(gt_txt, dtype=np.float64, delimiter=',')save_val_gt = osp.join(gt_folder, seq, 'gt', 'gt_val_half.txt')val_start = seqLength // 2with open(save_val_gt, 'w') as f:for obj in gt:label_str = '{:d},{:d},{:d},{:d},{:d},{:d},{:d},{:d},{:.6f}\n'.format(int(obj[0]), int(obj[1]), int(obj[2]), int(obj[3]), int(obj[4]), int(obj[5]), int(obj[6]), int(obj[7]), obj[8])if obj[0] > val_start:f.write(label_str)if __name__ == '__main__':gen_gt_val()
- 创建
yourtrack/data
文件夹保存每个视频跟踪的结果。如果是mot17验证集的结果就放入data/trackers/mot_challenge/MOT17-train/yourtracker/data
- 运行代码脚本:进入
TrackEval/scripts
python run_mot_challenge.py --BENCHMARK MOT17 --TRACKERS_TO_EVAL yourtracker --METRICS CLEAR Identity --USE_PARALLEL True --GT_LOC_FORMAT {gt_folder}/{seq}/gt/gt_val_half.txt
脚本参数含义:
Eval arguments:'USE_PARALLEL': False, # 是否使用并行'NUM_PARALLEL_CORES': 8,'BREAK_ON_ERROR': True,'PRINT_RESULTS': True,'PRINT_ONLY_COMBINED': False,'PRINT_CONFIG': True,'TIME_PROGRESS': True,'OUTPUT_SUMMARY': True,'OUTPUT_DETAILED': True,'PLOT_CURVES': True,Dataset arguments:'GT_FOLDER': os.path.join(code_path, 'data/gt/mot_challenge/'), # Location of GT data'TRACKERS_FOLDER': os.path.join(code_path, 'data/trackers/mot_challenge/'), # Trackers location'OUTPUT_FOLDER': None, # Where to save eval results (if None, same as TRACKERS_FOLDER)'TRACKERS_TO_EVAL': None, # Filenames of trackers to eval (if None, all in folder)'CLASSES_TO_EVAL': ['pedestrian'], # Valid: ['pedestrian']'BENCHMARK': 'MOT17', # Valid: 'MOT17', 'MOT16', 'MOT20', 'MOT15''SPLIT_TO_EVAL': 'train', # Valid: 'train', 'test', 'all''INPUT_AS_ZIP': False, # Whether tracker input files are zipped'PRINT_CONFIG': True, # Whether to print current config'DO_PREPROC': True, # Whether to perform preprocessing (never done for 2D_MOT_2015)'TRACKER_SUB_FOLDER': 'data', # Tracker files are in TRACKER_FOLDER/tracker_name/TRACKER_SUB_FOLDER'OUTPUT_SUB_FOLDER': '', # Output files are saved in OUTPUT_FOLDER/tracker_name/OUTPUT_SUB_FOLDERMetric arguments:'METRICS': ['HOTA', 'CLEAR', 'Identity', 'VACE']
# 默认配置,trackeval/datasets/mot_challenge_2d_box.pydefault_config = {'GT_FOLDER': os.path.join(code_path, 'data/gt/mot_challenge/'), # Location of GT data'TRACKERS_FOLDER': os.path.join(code_path, 'data/trackers/mot_challenge/'), # Trackers location'OUTPUT_FOLDER': None, # Where to save eval results (if None, same as TRACKERS_FOLDER)'TRACKERS_TO_EVAL': None, # Filenames of trackers to eval (if None, all in folder)'CLASSES_TO_EVAL': ['pedestrian'], # Valid: ['pedestrian']'BENCHMARK': 'MOT17', # Valid: 'MOT17', 'MOT16', 'MOT20', 'MOT15''SPLIT_TO_EVAL': 'train', # Valid: 'train', 'test', 'all''INPUT_AS_ZIP': False, # Whether tracker input files are zipped'PRINT_CONFIG': True, # Whether to print current config'DO_PREPROC': True, # Whether to perform preprocessing (never done for MOT15)'TRACKER_SUB_FOLDER': 'data', # Tracker files are in TRACKER_FOLDER/tracker_name/TRACKER_SUB_FOLDER'OUTPUT_SUB_FOLDER': '', # Output files are saved in OUTPUT_FOLDER/tracker_name/OUTPUT_SUB_FOLDER'TRACKER_DISPLAY_NAMES': None, # Names of trackers to display, if None: TRACKERS_TO_EVAL'SEQMAP_FOLDER': None, # Where seqmaps are found (if None, GT_FOLDER/seqmaps)'SEQMAP_FILE': None, # Directly specify seqmap file (if none use seqmap_folder/benchmark-split_to_eval)'SEQ_INFO': None, # If not None, directly specify sequences to eval and their number of timesteps'GT_LOC_FORMAT': '{gt_folder}/{seq}/gt/gt.txt', # '{gt_folder}/{seq}/gt/gt.txt''SKIP_SPLIT_FOL': False, # If False, data is in GT_FOLDER/BENCHMARK-SPLIT_TO_EVAL/ and in# TRACKERS_FOLDER/BENCHMARK-SPLIT_TO_EVAL/tracker/# If True, then the middle 'benchmark-split' folder is skipped for both.}
必须需要修改的默认参数配置:gt位置参数格式
- 对应参数
--GT_LOC_FORMAT {gt_folder}/{seq}/gt/gt_val_half.txt
需要添加的参数:
--BENCHMARK MOT17 # 数据集
--TRACKERS_TO_EVAL yourtracker # 你的tracker名称
--METRICS CLEAR Identity # 使用哪些度量标准
mot_challenge官方评估代码相关推荐
- OTB官方评估代码python版本--评估自己跟踪器,对比其他跟踪器
OTB官方评估代码python版本--评估自己跟踪器,对比其他跟踪器 代码环境准备 环境安装 数据集准备 跑自己跟踪器 结果格式准备 生成json文件并画图 Bonus OTB数据集是目标跟踪领域里面 ...
- OTB官方评估代码matlab版本
OTB最初就是MATLAB版本评估,后来又推出了python版本,不过精度貌似没有matlab高 python版本配置可以参考我另一篇博客:OTB官方评估代码python版本 tracker_benc ...
- OTB官方评估代码python版本
可参考:OTB官方评估代码python版本--评估自己跟踪器,对比其他跟踪器 博主写的很好,按照步骤可以运行 以下有几点注意的地方 1.我是用ubuntu系统,创建虚拟环境安装的python=2.7. ...
- Resnet的pytorch官方实现代码解读
Resnet的pytorch官方实现代码解读 目录 Resnet的pytorch官方实现代码解读 前言 概述 34层网络结构的"平原"网络与"残差"网络的结构图 ...
- Windows 10环境下「MSCOCO Captions」评估代码踩坑记录
文章目录 引言 解决python2→python3.x问题 验证评估代码是否可以正确运行 解决 jar 包运行出错的原因 排查jar包运行出错的原因 解决Could not reserve enoug ...
- HttpClient官方sample代码的深入分析(连接池)
前言 之前一直使用apache的httpclient(4.5.x), 进行http的交互处理. 而httpclient实例则使用了http连接池, 而一旦涉及到连接池, 那会不会在使用上有些隐藏很 ...
- 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法
微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法 参考文章: (1)微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法 (2)https://www.cnblogs.com/ ...
- FFMpeg.AutoGen(1)讲解官方example代码:Main函数、 解码
FFMpeg是一套C编译的开源工具集.主要用于视频处理,可以编解码视频,建立流媒体服务器等等.官方网站:http://ffmpeg.org/ FFMpeg.AutoGen封装方法以方便C#调用FFmp ...
- [Pytorch系列-61]:循环神经网络 - 中文新闻文本分类详解-3-CNN网络训练与评估代码详解
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
最新文章
- BC28、BC95通过LWM2M连接电信AEP(ctwing)
- 细说firewalld和iptables
- 堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式
- [转帖]Sqlcmd使用详解
- excel 文档管理服务器,Excel Server Tutorial
- kdump和crash的配置方法与内核故障原因分析(一)
- jQuery之load方法
- java 增 删 查 改_如何对java链表进行增、删、查、改操作
- (自用)Linux系统彻底卸载MySQL数据库
- 重邮数据结构实验课全部代码目录
- matlab进行多光栅衍射仿真,光栅衍射MATLAB仿真.docx
- _raw_writel, writel_relaxed 和 writel的区别
- RIME鼠须管保姆级五笔配置教程
- 远程桌面 服务器握手,《易语言远程控制技术教程》第2课_远程桌面(你的桌面我作主)王军...
- 实现用户一键登录的方案有哪些?
- 《zw版·delphi与halcon系列原创教程》zw版_THImagex控件函数列表
- Python字符串常规操作
- 查找该学号学生的成绩。
- 选择私有云解决方案,需要考虑哪些要素
- 服务器设置邮箱屏蔽,邮箱服务器IP被屏蔽的问题
热门文章
- NOI-1.5(14) 人口增长问题
- 伤感的一句话 偶尔看到
- 淘宝爆款返场什么意思?淘宝爆款返场怎么报名?
- 图像矩(Hu矩)简介
- 动网论坛后台显示不了
- 配置K8S出现以下错误“/proc/sys/net/ipv4/ip_forward contents are not set to 1”
- 织梦后台样式php,织梦系统(DEDECMS)后台模板修改
- 纪录一年多来项目管理的经历
- CCNP-BGP基本配置 理解IBGP和EBGP 学会IBGP全互联 学会用环回口建立EBGP邻居
- 720phi10p 和 720p有什么区别_HDMI接口有什么用?HDMI接口相关知识详解