多目标跟踪数据集 :mot16、mot17数据集介绍以及多目标跟踪指标评测
后台-插件-广告管理-内容页头部广告(手机) |
文章目录
- 1. MOT16 数据集
- 2. MOT17数据集介绍
- 3. 指标计算
- 3.1 基础评测指标
- 3.2 MOTA和MOTP
- 3.3 IDP、IDR、IDF
- 4. 指标评测过程:
多目标跟踪数据集 MOT16 、MOT1数据集介绍:
1. MOT16 数据集
数据集百度网分享:
点击此处
提取码: miao
文件格式:
解压MOT16后在文件夹下面有两个目录:test 和 train。分别代表训练集和测试集。
这两个目录分别有7个子目录。 每个子目录下都是一段视频的抽帧图片及标注。由于train里面的内容比较全,train里面的数据比test多了一个ground truth,所以下面以train为例介绍。
** MOT16-02**
在“MOT16\train\MOT16-02”目录下有三个目录和一个文件,三个目录分别是:det、gt和img1。一个文件是seqinfo.ini.
det文件:
det目录下只有一个det.txt文件,每行一个标注,代表一个检测的物体。
上面每行数字中的含义是:
<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z>- 1
第一个代表第几帧,第二个代表轨迹编号(在这个文件里总是为-1),bb开头的4个数代表物体框的左上角坐标及长宽。conf代表置信度,最后3个是MOT3D用到的内容,2D检测总是为-1.
img1:
这个目录下就是把视频一帧帧抽取出来的图片,总共600张。文件名则是从000001.jpg到000600.jpg。
gt文件:
第一个代表第几帧,第二个值为目标运动轨迹的ID号,第3个到第六个数代表物体框的左上角坐标及长宽,第7个值为目标轨迹是否进入考虑范围内的标志,0表示忽略,1表示active。第八个值为该轨迹对应的目标种类(种类见下面的表格中的label-ID对应情况),第九个值为box的visibility ratio,表示目标运动时被其他目标box包含/覆盖或者目标之间box边缘裁剪情况。
seqinfo.ini文件
主要介绍视频的帧率、分辨率等基本信息。
2. MOT17数据集介绍
百度网盘链接:点击此处
提取码:miao
下载后,解压如下:
在“MOT17\train\MOT17-02”目录下有三个目录和一个文件,三个目录分别是:det、gt和img1。一个文件是seqinfo.ini.
内容跟16相同
3. 指标计算
3.1 基础评测指标
1、ID Switches (ID Sw.): 被跟踪目标身份发生错误地更改时被称为身份跳变。在对视频序列的跟踪过程当中,ID Sw.表示所有跟踪目标身份交换的次数。
2、Frames Per Second (FPS): 多目标跟踪器的跟踪速度。
3、False Positives (FP): 在视频序列中不能与 真实轨迹的边界框 相匹配的 假设边界框 被称为假阳性;即本来是假的,预测认为是真的。FP 表示整个视频序列中假阳性的数量。
4、False Negatives (FN): 在视频序列中不能与 假设边界框 相匹配的 真实轨迹的边界框 被称为假阴性;即本来是真的,预测认为是假的。FN 表示整个视频序列中假阴性的数量。
5、Mostly Tracked tracklets (MT):在跟踪过程中各个目标至少有 80%的视频帧都能被正确地跟踪的跟踪轨迹数量。
6、Mostly Lost tracklets (ML):在跟踪过程中各个目标至多有 20%的视频帧能被正确地跟踪的跟踪轨迹数量。
7、Fragments (Frag):真实跟踪轨迹由于某种原因发生中断并在后来又继续被准确跟踪上被称为跟踪碎片。Frag 表示整个视频序列中碎片的总数。
以上 7 种评测指标主要度量多目标跟踪器的基础性能,其中加粗的比较常用;为了进一步评判多目标跟踪器的综合性能,出现了其他指标。
3.2 MOTA和MOTP
CLEAR MOT 指标提出了 多目标跟踪精度MOTA 和 多目标跟踪准确度MOTP 两个综合性的指标,这两个指标能够衡量多目标跟踪器在整体上的性能好坏。
MOTA(Multiple Object Tracking Accuracy) :MOTA主要考虑的是tracking中所有对象匹配错误,给出的是非常直观的衡量跟踪其在检测物体和保持轨迹时的性能,与目标检测精度无关,MOTA取值小于100,但是当跟踪器产生的错误超过了场景中的物体,MOTA可以变为负数。
MOTP(Multiple Object Tracking Precision) : 是使用bonding box的overlap rate来进行度量(在这里MOTP是越大越好,但对于使用欧氏距离进行度量的就是MOTP越小越好,这主要取决于度量距离d的定义方式) MOTP主要量化检测器的定位精度,几乎不包含与跟踪器实际性能相关的信息。
MOTA&MOTP是计算所有帧相关指标后再进行平均的
3.3 IDP、IDR、IDF
IDP : 识别精确度
整体评价跟踪器的好坏,识别精确度 IDP 的分数如下进行计算:
IDR:识别召回率
它是当IDF1-score最高时正确预测的目标数与真实目标数之比,识别召回率 IDR 的分数如下进行计算:
IDF1:平均数比率
IDF1是指正确的目标检测数与真实数和计算检测数和的平均数比率,这里, IDF1的分数如下进行计算:
I
D
F
1
=
I
D
T
P
I
D
T
P
+
0.5
I
D
F
P
+
0.5
I
D
F
N
IDF1=\frac{I D T P}{I D T P+0.5 I D F P+0.5 I D F N}
IDF1=IDTP+0.5IDFP+0.5IDFNIDTP
上述公式中,IDTP 可以看作是在整个视频中检测目标被正确分配的数量,IDFN 在整个视频中检测目标被漏分配的数量,IDFP 在整个视频中检测目标被错误分配的数量。
4. 指标评测过程:
以MOT16数据集 评测 Deepsort为例,计算MOTA、 MOTP 、IDSwitch 、IDP 、IDR、IDF1、
- 首先准备数据集 上面博客中已经给出数据集下载地址,然后搭建自己的Deepsort跟踪模型,然后以 MOT16数据集中的 下文件为例进行计算:
因为官网的MOT16-02视频分辨率和数据集中的不同,因此,写一段代码将数据集中的图像帧合并成视频。
600张图片如下:
代码:
import os import cv2 video_writer = cv2.VideoWriter("result.mp4", cv2.VideoWriter_fourcc(*"mp4v"), 30, (1920, 1080)) images_path = "img1" images_list = os.listdir(images_path) images_list.sort() for image_name in images_list: image = cv2.imread(os.path.join(images_path, image_name)) video_writer.write(image) show = cv2.resize(image, (1280, 720)) cv2.imshow("test", show) if cv2.waitKey(10) != ord('q'): pass- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
结果为:
MOT16-02
然后使用此视频,用Deepsort代码进行跟踪,会生成一个txt文件和一个跟踪结果视频的文件。
然后使用这个txt 文件,并将此数据集重命名为deep_ts.txt 将其和数据集中的 gt.txt 使用下面代码进行评估。
import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import motmetrics as mm # 用于正常显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示符号 plt.rcParams['axes.unicode_minus'] = False mm.lap.default_solver = 'lap' gt_file = "./gt.txt" deep_ts_file = "./deep_ts.txt" gt = mm.io.loadtxt(gt_file, fmt="mot16", min_confidence=1) deep_ts = mm.io.loadtxt(deep_ts_file, fmt="mot16") deep_ts = deep_ts.sort_values(by=["Id", "FrameId"]) deep_acc = mm.utils.compare_to_groundtruth(gt, deep_ts, 'iou', distth=0.5) mh = mm.metrics.create() metrics = ['num_frames', 'num_switches', 'idp', 'idr', 'idf1', 'mota', 'motp', 'precision', 'recall'] deep_summary = mh.compute(deep_acc, metrics=metrics, name='deepsort') summary = pd.concat([deep_summary], axis=0, join='outer', ignore_index=False) if os.path.exists("result.csv"): os.remove("result.csv") summary.to_csv("result.csv")- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
会得到Deepsort的MOTA、 MOTP 、IDSwitch 、IDP 、IDR、IDF1指标。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |