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



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


    2023.12.25更新:


    本人在写这个代码的时候, 没想到会有这么多人看到. 然而, 必须承认我这份代码是以尽量整合为目的, 加了我自己的理解, 所以有的部分也许和原论文有出入, 导致效果不一定是最好的.

    为此, 给大家推荐一个成熟的repo: https://github.com/mikel-brostrom/yolo_tracking

    我这个代码大家可以作为学习之用, 也就是熟悉MOT的流程. 如果追求更好的效果, 我建议采纳更成熟的那些.

    我会不断听取大家的问题和建议, 希望和大家一起学习!


    项目地址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具有一定的随机性

      \space  
      \space  

    使用指南:

    环境配置

    • 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
    
    • 1

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

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

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

    准备好数据集后, 假如训练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
    
    • 1

    更多训练信息参考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
    
    • 1

    DeepSORT:

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

    ByteTrack:

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

    DeepMOT:

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

    BoT-SORT:

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

    您也可以通过增加

    --save_images --save_videos
    
    • 1

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

    将./tracker应用于其他detector

    只需保证detector的输出格式为

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

    或经典的yolo格式

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

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

  • 相关阅读:
    WiFi protocol 详解
    算法题练习——用Java、Python题解NC39 N皇后问题
    Qt控制台项目也能使用opencv的imshow来显示摄像头视频
    dpdk hw-offload flows i
    力扣刷题记录163.1-----684.冗余连接
    搭建个人博客,Docsify+Github webhook+JGit解决方案
    SAP HANA 体系结构,LandScape,规模调整:完整教程
    MFC CFileDialog选中多个路径文件并获取每个文件具体路径
    【玩转Rabbitmq系列】01一文带你敲响Rabbitmq的大门
    深入理解java虚拟机-1.自动内存管理
  • 原文地址:https://blog.csdn.net/wjpwjpwjp0831/article/details/126398459