ByteTrack多目标跟踪数据集预处理——COCO格式详解

本文介绍了如何将MOT数据集转换为COCO格式以便用于训练ByteTrack模型,包括train_half和val_half的划分,以及如何处理images、annotations和videos等信息。
摘要由CSDN通过智能技术生成


项目地址: ByteTrack

MOT数据集
关于MOT数据集的格式可以参考我的另一篇文章:【2024最新】多目标跟踪MOTchallenge数据集格式介绍

COCO格式

在训练ByteTrack之前,所有数据集都要转为COCO格式,这也是多目标跟踪数据集预处理中常见的做法。

cd <ByteTrack_HOME>
python3 tools/convert_mot17_to_coco.py
python3 tools/convert_mot20_to_coco.py
python3 tools/convert_crowdhuman_to_coco.py
python3 tools/convert_cityperson_to_coco.py
python3 tools/convert_ethz_to_coco.py

那么coco格式到底是怎样的呢?我们以convert_mot17_to_coco.py为例介绍。

train

首先是将训练集分为 train_half 和 val_half
SPLITS = ['train_half', 'val_half', 'train', 'test']

Train_half

输出为包含四个列表的字典
{'images': [], 'annotations': [], 'videos': [], 'categories': [{'id': 1, 'name': 'pedestrian'}]}

Videos

先把视频文件夹放入 videos[],这里视频一共 30 个,就是视频的序号和名字
out['videos'].append({'id': video_cnt, 'file_name': seq})
Out: “videos”: [{“id”: 1, “file_name”: “MOT17-01”}, {“id”: 2, “file_name”: “MOT17-03”},…

Images

把每个视频下图像进行编号
将所有图片一分为二:依次读取图片,获取 image_info,并且加到 images 列表中。

image_info = {'file_name': '{}/img1/{:06d}.jpg'.format(seq, i + 1), 
              'id': image_cnt + i + 1, 
              'frame_id': i + 1 - image_range[0], 
              'prev_image_id': image_cnt + i if i > 0 else -1,  
              'next_image_id': image_cnt + i + 2 if i < num_images - 1 else -1,
              'video_id': video_cnt,
              'height': height, 'width': width}
out['images'].append(image_info)

其中,id 为整个训练集中的图片编号,从 1 开始,frame_id 为当前视频序列中的图片编号,从 1 开始,prev_image_idnext_image_id 整个训练集的前一个和后一个图片序号,video_id 为视频序号,结果如下:
{“images”: [{“file_name”: “MOT17-01/img 1/000001. Jpg”, “id”: 1, “frame_id”: 1, “prev_image_id”: -1, “next_image_id”: 2, “video_id”: 1, “height”: 1080, “width”: 1920}, {“file_name”: “MOT17-01/img 1/000002. Jpg”, “id”: 2, “frame_id”: 2, “prev_image_id”: 1, “next_image_id”: 3, “video_id”: 1, “height”: 1080, “width”: 1920}, …]

Annotations

根据 gt.txt 和 det.txt 中第一列 (帧数),选取一半图片,即第一列在 0-一半图片 之间的图片注释,将数据写入 gt 文件夹下的新建的 gt_train_half.txt 和 det 文件夹下的 det_train_half.tx 中。

依次读取 gt 中每一行,只读取那些第一列在前半部分的
track_id = int(anns[i][1]),cat_id = int(anns[i][7]),ann_cnt += 1

 ann = {'id': ann_cnt,
        'category_id': category_id,
        'image_id': image_cnt + frame_id,
        'track_id': tid_curr,
        'bbox': anns[i][2:6].tolist(),
        'conf': float(anns[i][6]),
        'iscrowd': 0,
        'area': float(anns[i][4] * anns[i][5])}
out['annotations'].append(ann)

id 为所有图片编号,category_id 这里均为 1,image_id 与 images 中的 id 是对应的,track_id 即为轨迹编号,这里的 track_id 并不是 global ID。

Test

Test 中 annotations 为空,其他和上述一样
需要注意的是,计算评价指标时 test 是需要 gt 的。

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值