使用mmdetection检测框架进行相关的训练,由于MOT的数据集标注格式和检测常用的VOC以及COCO格式有很大的差距,因此用于检测任务的时候,需要将mot格式的数据集转化成VOC格式用于检测任务的训练,评估。
HUST小菜鸡:将MOT17-Det数据集转成VOC格式zhuanlan.zhihu.com之前我写过一篇将MOT17转化成VOC格式的文章,但是该方法是一个分布的步骤,而且在实际操作过程中很复杂,考虑到最近又要对MOT20数据集进行处理,同时后续数据集的处理需求,所以这里开源实现了一个mot2voc的开源git,用于其他学习需求,同时封装了一个生成train的结果脚本,用于直接生成结果的文件,用于使用matlab对结果进行评估。
HUST小菜鸡:基于MATLAB的MOT官方评估工具zhuanlan.zhihu.com不多说直接上git地址:
https://github.com/PanXF-HUST/mot2vocgithub.comPanXF-HUST/mot2voc
后续有其他的封装好的脚本我也会持续更新
解析命令行参数
def
这里针对数据集格式命令行必须输入参数为17或者20,分别代表对MOT17和MOT20进行处理
解析ini文件关于图片相关信息
def parse_ini(dir):
ini_fp = open(dir + 'seqinfo.ini','r')
seq_info = ini_fp.readlines()
seqLenth = int(seq_info[4][10:])
imWidth = int(seq_info[5][8:])
imHeight = int(seq_info[6][9:])
return seqLenth,imWidth,imHeight
生成标注文件
def gennerate_gt(gt,Annotation,frame,filename,width,height):
校验处理前后图片数量和标注是否一致
def check_num(data_dir, JPEGImage_dir,Annotations_dir=None,ori_num = 0):
num = 0
for folder in data_dir:
folder_len,_,_ = parse_ini(folder)
num += folder_len
img_list = os.listdir(JPEGImage_dir)
if ori_num==0:
img_num = len(img_list)
else:
img_num = len(img_list)-ori_num
# print('img_num:',img_num)
if Annotations_dir:
ann_list = os.listdir(Annotations_dir)
ann_num = len(ann_list)
assert ann_num == num
assert img_num == num,'if it is the second time run this demo, please delete the JPEGImages folder and retry'
# print('num:', num)
print('folders {} have been succeed checked'.format(data_dir))
return num
分割数据集
def segment_dataset(ImageSets,Main,thr1 = 0.8,thr2 = 0.9):
由于数据集只有train有标注,所以只有对训练集进行划分,将原数据集中的train划分成新的train,val,test用于后期的检测任务,按照thr1:(thr2-thr1):(1-thr2)的比例对其进行划分,这里默认的是8:1:1的比例进行划分。
整个处理的时间较长,受硬件等性能限制
test_result.py(将结果按照官方给定的评估格式生成txt文档用于后续的评估任务
# @Author : Pan Xiaofeng
# @Email : xiaofengpan@hust.edu.cn
# @FileName : test_result.py
# @DateTime : 2020/10/8 21:00
该脚本目前只实现了对MOT17训练集检测任务的处理,后期会更新,且实验中checkpoint以及work_dirs,outputs等并没有规范,所以需要在代码中手动更改,详见git