Skip to content

Yolo v7 and several Multi-Object Tracker(SORT, DeepSORT, ByteTrack, BoT-SORT, etc.) in VisDrone2019 Dataset. It uses a unified style and integrated tracker for easy embedding in your own projects.

License

Notifications You must be signed in to change notification settings

oceanechy/Yolov7-tracker

 
 

Repository files navigation

YOLO v7 + 各种tracker实现多目标跟踪

更新记录

2022.11.09修复了BoT-SORT中的一处错误issue 16, 加粗了边界框与字体.

2022.11.08更新了track.py, track_yolov5.py, basetrack.py和tracker_dataloader.py, 修复了yolo格式读取数据以及保存视频功能的一些bug, 并增加了隔帧检测的功能(大多数时候用不到).

2022.10.22本代码的匹配代码比较简单, 不一定会达到最好的效果(每次匹配只用一次linear assignment, 没有和历史帧的特征相匹配), 您可以使用cascade matching的方式(参见StrongSORT的line94-134)

2022.10.15增加了对yolo v5的支持, 只需替换track.py, 将tracker文件夹放到v5的根目录(我测试的是官方的repo)下即可. 代码在yolo v5.

2022.09.27修复了STrack类中update不更新外观的问题, 代码有较大更改, 您可能需要重新下载./tracker文件夹. 尝试加入StrongSORT, 但是目前还不work:(, 尽力调一调

亮点

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

集成的tracker:

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

TODO

  • 集成UAVMOT(CVPR2022)
  • 达到更好的结果(缓解类别不平衡, 小目标等等)...
  • MOT challenge数据集
  • 更换Re-ID模型(更换了OSNet, 效果不好...)

效果

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

YOLO v7 VisDrone训练完模型:

链接:https://pan.baidu.com/s/1m13Q8Lx_hrPVFZI6lLDrWQ 提取码:ndkf

Tracker MOTA IDF1 IDS fps
SORT 26.4 36.4 3264 12.2
DeepSORT 16.4 33.1 1387 12.51
ByteTrack 25.1 40.8 1590 14.32
DeepMOT 15.0 24.8 3666 7.64
BoT-SORT 23.0 41.4 1014 5.41
UAVMOT 25.0 40.5 1644 18.56

fps具有一定的随机性

gif

环境配置

  • 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

跟踪

在跟踪之前, 您需要选择读取数据的方式, 即opts.data_format参数, 如果选择yolo格式, 您需要在工程根目录下按照yolo的方式(例如本仓库的./visdrone/test.txt), 您需要修改track.py中的DATA_ROOT等变量, 与test.txt中的路径配合起来. 如果使用数据集原本的路径, 要根据数据集本身的路径特点进行调整. 一是track.py中的路径变量, 二是track_dataloder.pyTrackerLoader类的初始化函数中的路径.

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

UAVMOT

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

StrongSORT(目前有问题 正在修复)

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

StrongSORT中OSNet的下载地址, 请参照https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet/blob/master/strong_sort/deep/reid_model_factory.py

您也可以通过增加

--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.

更多运行命令参考 run_yolov7.txt文件

About

Yolo v7 and several Multi-Object Tracker(SORT, DeepSORT, ByteTrack, BoT-SORT, etc.) in VisDrone2019 Dataset. It uses a unified style and integrated tracker for easy embedding in your own projects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 95.6%
  • Jupyter Notebook 3.9%
  • Other 0.5%