YOLO v5, v7, v8 + 各种跟踪器(SORT, DeepSORT, ByteTrack, BoT-SORT)实现多目标跟踪

最近做了一个小工作, 想着把几种多目标跟踪的tracker用统一的步骤和代码风格写一下, 就以YOLO v7作为检测器, 集成了SORT, DeepSORT, ByteTrack, BoT-SORT, DeepMOT五种tracker. 在MOT17与VisDrone2019-MOT数据集上训练并测试.

更新: 现已经支持MOT17数据集, 并加入了一些其他的改进与优化!

项目地址GitHub,

如果对您有用, 欢迎star!!!

亮点

  1. 统一代码风格, 对多种tracker重新整理, 详细注释, 方便阅读, 适合初学者
  2. 多类多目标跟踪
  3. 各种tracker集成在一个文件夹"./tracker/"内, 方便移植到其他detector.

跟踪效果

TrackerMOTAIDF1IDSfps
SORT26.436.4326412.2
DeepSORT12.126.9386012.4
ByteTrack25.140.8159014.32
DeepMOT15.024.836667.64
BoT-SORT23.041.410145.41

集成的tracker:

SORT,
DeepSORT,
ByteTrack(ECCV2022),
DeepMOT(CVPR2020),
BoT-SORT(arxiv2206),

TODO

  • 集成UAVMOT(CVPR2022)
  • 达到更好的结果(缓解类别不平衡, 小目标等等)…

效果

在VisDrone2019-MOT train训练约10 epochs, 采用YOLO v7 w6结构, COCO预训练模型基础上训练. GPU: single Tesla A100, 每个epoch约40min.
在VisDrone2019-MOT test dev测试, 跟踪所有的类别.

TrackerMOTAIDF1IDSfps
SORT26.436.4326412.2
DeepSORT12.126.9386012.4
ByteTrack25.140.8159014.32
DeepMOT15.024.836667.64
BoT-SORT23.041.410145.41

fps具有一定的随机性

YOLO v5, v7, v8 + 各种跟踪器(SORT, DeepSORT, ByteTrack, BoT-SORT)实现多目标跟踪
YOLO v5, v7, v8 + 各种跟踪器(SORT, DeepSORT, ByteTrack, BoT-SORT)实现多目标跟踪

使用指南:

环境配置

  • python=3.7.0 pytorch=1.7.0 torchvision=0.8.0 cudatoolkit=11.0
  • py-motmetrics (pip install motmetrics)
  • cython-bbox (pip install cython_bbox)
  • opencv

训练

训练遵循YOLO v7的训练方式, 数据集格式可以参照YOLO v5 train custom data
即数据集文件遵循

class x_center y_center width height

其中x_center y_center width height必须是归一化的.
如果您训练VisDrone数据集, 可以直接调用:

python tools/convert_VisDrone_to_yolov2.py --split_name VisDrone2019-MOT-train --generate_imgs

需要您修改一些路径变量.

准备好数据集后, 假如训练YOLO v7-w6模型(single GPU):

python train_aux.py --dataset visdrone --workers 8 --device <$GPU_id$> --batch-size 16 --data data/visdrone_all.yaml --img 1280 1280 --cfg cfg/training/yolov7-w6.yaml --weights <$YOLO v7 pretrained model path$> --name yolov7-w6-custom --hyp data/hyp.scratch.custom.yaml

更多训练信息参考YOLO v7

跟踪

model_path 参数为训练后的detector model, 假设路径为 runs/train/yolov7-w6-custom4/weights/best.pt

SORT :

python tracker/track.py --dataset visdrone --data_format origin --tracker sort --model_path runs/train/yolov7-w6-custom4/weights/best.pt

DeepSORT:

python tracker/track.py --dataset visdrone --data_format origin --tracker deepsort --model_path runs/train/yolov7-w6-custom4/weights/best.pt

ByteTrack:

python tracker/track.py --dataset visdrone --data_format origin --tracker bytetrack --model_path runs/train/yolov7-w6-custom4/weights/best.pt 

DeepMOT:

python tracker/track.py --dataset visdrone --data_format origin --tracker deepmot --model_path runs/train/yolov7-w6-custom4/weights/best.pt

BoT-SORT:

python tracker/track.py --dataset visdrone --data_format origin --tracker botsort --model_path runs/train/yolov7-w6-custom4/weights/best.pt

您也可以通过增加

--save_images --save_videos

来控制保存跟踪结果的图片与视频.

将./tracker应用于其他detector

只需保证detector的输出格式为

(batch_size, num_objects, x_center, y_center, width, height, obj_conf, category)

或经典的yolo格式

(batch_size, num_objects, x_center, y_center, width, height, obj_conf, category_conf0, category_conf1, category_conf2, ...)

注意: 推理的时候batch_size要求为1.

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年3月8日 下午8:16
下一篇 2023年3月8日 下午8:18

相关推荐