如何评价deepsort跟踪性能,常用的有MOT challenge提供的数据集,根据训练数据集的ground truth文件,对比deepsort跟踪窗口位置和跟踪ID,可以得到一系列评价指标。网上有很多有关MOT评价指标介绍和算法,近来找到一个纯采用python的算法代码,在此分享。
github网站在此:https://github.com/JonathonLuiten/TrackEval
克隆到本地

git clone https://github.com/JonathonLuiten/TrackEval

以MOT16-13为例,将使用过程记录如下。
下载MOT16,取训练数据集中的MOT16-13,取出其中的gt/gt.txt,这是MOT16-13.mp4的ground truth标注文件。img1目录下有750张1920×1080图片,将其组成视频文件MOT16-13.mp4。
运行deepsort程序,得到兼容MOT16格式的跟踪数据文件MOT16-13.txt。下面组织文件目录结构如下:
说明:
评估程序目录TrackEval下建立data子目录,下设gt和trackers子目录,将gt.txt和MOT16-13.txt放到图示子目录下,其中seqinfo.ini从MOT16-13数据集中得到,该文件描述MOT16-13视频序列。MOT16-train.txt描述指标评估中所采用的视频序列名称,其内容如下(这里只用了一个视频序列):

name
MOT16-13

在此看看gt.txt和MOT16-13.txt文件格式
gt.txt文件是CSV文本文件,每行包含一个对象,描述其中一帧中的一个跟踪对象,有9个值,用逗号分隔。TrackEval只用到前6个,帧序号,目标ID,跟踪框4个坐标,后3个(目标置信度,目标类别,可见性)不参与运算,可忽略,如下:

<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <class>, <visibility>

MOT16-13中gt.txt文件如下,各参数间用逗号分隔:

1,1,1376,485,37,28,0,11,1
2,1,1379,486,37,28,0,11,1
3,1,1382,487,38,29,0,11,1
4,1,1386,488,38,29,0,11,1
5,1,1389,490,38,29,0,11,1
6,1,1393,491,38,30,0,11,1

MOT16-13.txt格式与gt.txt略有差别,号称与MOT16格式“兼容”。“兼容”格式共10个值,其参数间以空格分隔。参与MOT16运算的前6个参数与gt.txt相同,后4个不参与指标运算,均为-1。

<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z>
5 1 1634 561 63 123 -1 -1 -1 -1 
5 2 1383 511 33 110 -1 -1 -1 -1 
5 4 496 542 38 95 -1 -1 -1 -1 
5 5 1551 556 48 127 -1 -1 -1 -1 

准备好目录结构和数据文件后,即可以运行评估程序

cd TrackEval/scripts
python run_mot_challenge.py --BENCHMARK MOT16 --METRICS CLEAR HOTA

运行结果,得到HOTA和CLEAR两类metrics指标

一点说明,trackval\datasets\mot_challenge_2d_box.py中,修改

'TRACKER_SUB_FOLDER': 'data',   

  'TRACKER_SUB_FOLDER': '' 

以适应以上构造的目录结构,若不修改则会多增加一级data目录。

def get_default_dataset_config():
        """Default class config values"""
        code_path = utils.get_code_path()
        default_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': 'MOT16',  # 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',少一级子目录data
            '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.
        }

进一步的尝试:仍用MOT16-13,而ground truth不用原来的gt.txt,该gt.txt只针对行人。现修改为针对小汽车car,这里采用DarkLabel视频序列标注程序,仅标注car,形成ground truth文件gt.txt,得到如下MOT指标:

看上去指标提高了不少耶!但这里DarkLabel有一点小缺陷,即帧序列号从0-749,而不是1-750,因此运行run_mot_challenge.py会出错。因为MOT16的ground truth文件gt.txt帧号规定从1开始,而TrackEval算法就执拗地认定帧号不能从0开始,否则非法,目前还没去找在哪里可以改掉这一偏见。无奈之下,只好在excel中修改gt.csv的帧号,将0-749改为1-750, 有点麻烦,但总算可以使用TrackEval。所以,不能直接利用DarkLabel标注的输出,来运行TrackEval中run_mot_challenge.py,切记切记。

MOT官网下载数据说明
从MOT challenge官网可下载MOT16,完整数据约1.9GB。以MOT16-13为例,有三个目录det, gt, img1,其中gt是ground truth,img1有750张1920×1080图片,与gt.txt相对应。就是说,gt.txt对这750张图片进行标注,注意图片坐标是1920×1080。用img1这750张图片可构造一段视频,帧率大小取fps=30或fps=25都可以,只要总帧数=750。
从MOT challenge官网下载对应的视频,为MOT16-13-raw.webm,分辨率为960×540。要保证得到正确的MOT指标,该视频需转换成分辨率1920×1080,与gt.txt分辨率一致。
下面的例子指出,若输入到deepsort中视频不同分辨率的计算结果。其中:
MOT16-13 视频序列分辨率 1920×1080
MOT16-13-720 视频序列分辨率 1280×720

很明显,与gt.txt不一致的视频分辨率得到错误结果,MOT16-13-720中,MOTA为-129.44,为错误的结果!

关于gt.txt和MOT16-13.txt中目标ID的问题。
gt.txt是标注产生的目标ID,而MOT16-13.txt则是deepsort跟踪产生的目标ID,显然同一个目标,两种方式产生的目标ID不同。那么,TrackEval如何判断两个txt文件中不同的目标ID属于同一个目标呢?
原来,TrackEVal根据同一帧图像中,跟踪框的相似性来判断,即用IOU判定。IOU是跟踪框面积相似性判定方法:IOU = 两个矩形交集的面积/两个矩形的并集面积

TrackEval算法将两个txt文件中同一帧图像中跟踪框IOU计算结果得到如下矩阵

以Frame 5为例,gt.txt中有三个目标ID:0,1,3, MOT16-13.txt有两个目标ID:1,2,从矩阵可知gtID0对应trackerID1,而gtID3对应trackerID2。gt.txt目标ID1在MOT16-13.txt中没出现,表明deepsort跟踪丢失。
Frame22, gtID0对应trackID1, gtID1对应trackerID7, gtID3对应trackerID2。deepsort丢失gtID2,且trackerID12是错误的跟踪。

来源:王定邦

物联沃分享整理
物联沃-IOTWORD物联网 » deepsort和MOT16指标评价

发表评论