文章目录
多目标跟踪数据集 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),bb开头的4个数代表物体框的左上角坐标及长宽。conf代表置信度,最后3个是MOT3D用到的内容,2D检测总是为-1.
img1:
这个目录下就是把视频一帧帧抽取出来的图片,总共600张。文件名则是从000001.jpg到000600.jpg。
gt文件:
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的分数如下进行计算:
上述公式中,IDTP 可以看作是在整个视频中检测目标被正确分配的数量,IDFN 在整个视频中检测目标被漏分配的数量,IDFP 在整个视频中检测目标被错误分配的数量。
4. 指标评测过程:
以MOT16数据集 评测 Deepsort为例,计算MOTA、 MOTP 、IDSwitch 、IDP 、IDR、IDF1、
- 首先准备数据集 上面博客中已经给出数据集下载地址,然后搭建自己的Deepsort跟踪模型,然后以 MOT16数据集中的 下文件为例进行计算:
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
结果为:
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")
会得到Deepsort的MOTA、 MOTP 、IDSwitch 、IDP 、IDR、IDF1指标。
文章出处登录后可见!