0


用TrackEval评测自己的数据集

TrackEval库虽然很专业,但是设置路径很麻烦,于是我自己基于TrackEval简单写了个对评测自己数据集更友好的,仅限2DMOT数据集,可以评测多类别。

项目地址(欢迎star!)https://github.com/JackWoo0831/Easier_To_Use_TrackEval

以下是使用说明:

Easier to use TrackEval

I. 仓库说明

鉴于TrackEval库写的略有些复杂, 可能对初学者不太友好, 因此我想
简单优化一下, 让评估自定义的数据集更加方便.

跑通代码最重要的就是路径问题, 为此我写了两个config模板, 让配置路径更简单.

仅支持2D MOT数据集

II. 使用方法

目录结构

一般MOT的数据集的目录结构可以分为两大类(如果有别的以后还会补充), 一个是像MOT Challenge这样的(例如: UAVDT)

  1. # ${data_root}:
  2. # |
  3. # |___${train_folder_name}(Optional)
  4. # |
  5. # |____${seq_name}
  6. # |_______${image_folder}
  7. # |____${frame_name}
  8. # |_______${gt_folder_name}
  9. # |____${gt_txt_name}
  10. # |___${test_folder_name}(Optional)
  11. # |
  12. # |____${seq_name}
  13. # |_______${image_folder}
  14. # |____${frame_name}
  15. # |_______${gt_folder_name}
  16. # |____${gt_txt_name}

例如, 如果我的MOT17数据集在

  1. /data/datasets/

下, 其中的值就是:

  1. data_root: /data/datasets/MOT17
  2. train_folder_name: train, # 训练集文件夹名称
  3. seq_name: MOT17-02-DPM, ..., MOT17-13-SDP, # 序列名称
  4. image_folder: img1, # 存放序列帧图像文件夹的名称
  5. frame_name 000001.jpg, ..., 000600.jpg, ... , # 图片名称
  6. gt_folder_name: gt # 真值文件夹名称
  7. gt_txt_name: gt.txt # 真值文件的名称
  8. test_folder_name: test
  9. ...同上

当然, 有的数据集没有划分训练集和测试集, 因此

  1. train_folder_name

,

  1. train_folder_name

也可以没有, 例如UAVDT数据集.

另一种是类似于yolo格式: (例如, Visdrone)

  1. # ${data_root}:
  2. # |
  3. # |___${train_folder_name}(Optional)
  4. # |
  5. # |____${seq_folder_name}
  6. # | |_______${seq_name}
  7. # | |____${frame_name}
  8. # |____${gt_folder_name}
  9. # |____${gt_txt_name}
  10. # |___${test_folder_name}(Optional)
  11. # |
  12. # |____${seq_folder_name}
  13. # | |_______${seq_name}
  14. # | |____${frame_name}
  15. # |____${gt_folder_name}
  16. # |____${gt_txt_name}

例如, Visdrone的测试集目录结构如下(训练集测试集同理):
在这里插入图片描述

在该目录结构中, 真值文件夹和序列文件夹是平级的, 而不是包含在某个序列中. 因此对于Visdrone, 目录结构中的值如下:

  1. data_root: /data/datasets/VisDrone
  2. train_folder_name: VisDrone2019-MOT-train, # 训练集文件夹名称
  3. seq_folder_name: sequences # 存放序列的文件夹的名称
  4. seq_name: uav0000013_00000_v, ..., # 序列名称
  5. frame_name 0000002.jpg, ..., 00000200.jpg, ... , # 图片名称
  6. gt_folder_name: annotations # 真值文件夹名称
  7. gt_txt_name: {seq_name}.txt # 真值文件的名称, 与序列名称有关, 写成格式化字符串形式
  8. test_folder_name: test
  9. ...同上

All you do is to fill in!

您只需按照以下步骤设置:

  1. 选择一个数据集的目录结构模板(configs/template1.yaml或者configs/template2.yaml), 然后按照您的数据集的文件夹名称填入gt_structure_config中对应的值,

注意,

  1. gt_loc_format

需要谨慎检查, 它的意思是找到一个序列的真值txt的路径. 这是一个格式化的字符串, 里面的变量是

  1. gt_structure_config

中的变量, 因此名称要保持一致. 如果您的数据集有轻微的差别, 也仅仅需要修改这个地方.

设置其他信息: 您的数据集对应的:

序列信息:

  1. SEQ_INFO:
  2. 序列名称: 序列长度

需要评测的类别名称:

  1. CLASSES_TO_EVAL:
  2. - 类别1
  3. - 类别2
  4. - ...

类别名称到类别id的映射关系:

  1. CLASS_NAME_TO_CLASS_ID:
  2. 类别名称: 类别id

有效类别(和CLASSES_TO_EVAL一致):

  1. VALID_CLASS:
  2. - 类别1
  3. - 类别2
  4. - ...

设置干扰类别:
(这部分的作用是将跟踪结果中的这部分类别的结果扣去)

  1. DISTRACTOR_CLASSES_NAMES:
  2. - 类别5
  3. - 类别6
  4. - ...
  1. 将您的跟踪结果放在本工程目录的./result下, 如果您要对比多个跟踪器的性能, 按照如下目录设置:
  1. result
  2. |
  3. |____tracker1_name
  4. |
  5. |______{seq_name}.txt...
  6. |
  7. |____tracker2_name
  8. |
  9. |______{seq_name}.txt...

并将

  1. template.yaml

中的

  1. has_tracker_name

设置为

  1. True

如果不需要, 直接按照如下目录:

  1. result
  2. |
  3. |______{seq_name}.txt...

并将

  1. template.yaml

中的

  1. has_tracker_name

设置为

  1. False
  1. 运行!

  1. ./run_custom.sh

中命令的template_type参数设置一下, 随后

  1. bash run_custom.sh

一个示例

下面用一个小demo来演示一下. 我随便选取了MOT17数据集中的一个txt文件, 作为真值, 同时作为我的模型的跟踪结果.

随后我放在

  1. /data/datasets/my_test_data

下, 目录结构如下:

在这里插入图片描述

可以看出来, 这属于第二种模板. 同时, 我将跟踪结果放在当前目录

  1. ./result/seq1.txt

下.

为此, 我设置

  1. template2.yaml

:

  1. gt_structure_config:
  2. data_root: '/data/datasets/my_test_data/'
  3. has_split: True
  4. train_or_test: test
  5. train_folder_name: train
  6. test_folder_name: test
  7. gt_folder_name: annotations
  8. gt_txt_name: '{seq_name}.txt' # gt.txt, {seq_name}.txt, etc.
  9. gt_loc_format: '{data_root}/{split_name}/{gt_folder_name}/{gt_txt_name}'
  10. tracker_structure_config:
  11. trackers_folder: './result'
  12. has_split: False
  13. split_name: ''
  14. has_tracker_name: False
  15. trackers_to_eval: # None for all
  16. # other options
  17. OUTPUT_FOLDER: './track_eval_output' # Where to save eval results (if None same as TRACKERS_FOLDER)
  18. SEQ_INFO: # seq_name: seq_length
  19. 'seq1': 600
  20. # CLASS configs
  21. CLASSES_TO_EVAL:
  22. - 'pedestrian'
  23. - 'person_on_vehicle'
  24. - 'car'
  25. CLASS_NAME_TO_CLASS_ID:
  26. 'pedestrian': 1
  27. 'person_on_vehicle': 2
  28. 'car': 3
  29. 'bicycle': 4
  30. 'motorbike': 5
  31. 'non_mot_vehicle': 6
  32. 'static_person': 7
  33. 'distractor': 8
  34. 'occluder': 9
  35. 'occluder_on_ground': 10
  36. 'occluder_full': 11
  37. 'reflection': 12
  38. 'crowd': 13
  39. VALID_CLASS:
  40. 'pedestrian': 1
  41. 'person_on_vehicle': 2
  42. 'car': 3
  43. DISTRACTOR_CLASSES_NAMES:
  44. - 'person_on_vehicle'
  45. - 'static_person'
  46. - 'distractor'
  47. - 'reflection'

之后修改

  1. run_custom.sh

:

  1. template_type=2
  2. python scripts/run_custom_dataset.py --config_path ./configs/template${template_type}.yaml

运行

  1. bash run_custom.sh

运行结果:
在这里插入图片描述


本文转载自: https://blog.csdn.net/wjpwjpwjp0831/article/details/130126237
版权归原作者 wjpwjpwjp0831 所有, 如有侵权,请联系我们删除。

“用TrackEval评测自己的数据集”的评论:

还没有评论