简体中文 | English
ByteTrack(ByteTrack: Multi-Object Tracking by Associating Every Detection Box) 通过关联每个检测框来跟踪,而不仅是关联高分的检测框。对于低分数检测框会利用它们与轨迹片段的相似性来恢复真实对象并过滤掉背景检测框。此处提供了几个常用检测器的配置作为参考。由于训练数据集、输入尺度、训练epoch数、NMS阈值设置等的不同均会导致模型精度和性能的差异,请自行根据需求进行适配。
检测训练数据集 | 检测器 | 输入尺度 | ReID | 检测mAP(0.5:0.95) | MOTA | IDF1 | FPS | 配置文件 |
---|---|---|---|---|---|---|---|---|
MOT-17 half train | YOLOv3 | 608x608 | - | 42.7 | 49.5 | 54.8 | - | 配置文件 |
MOT-17 half train | PP-YOLOE-l | 640x640 | - | 52.9 | 50.4 | 59.7 | - | 配置文件 |
MOT-17 half train | PP-YOLOE-l | 640x640 | PPLCNet | 52.9 | 51.7 | 58.8 | - | 配置文件 |
mix_mot_ch | YOLOX-x | 800x1440 | - | 61.9 | 77.3 | 71.6 | - | 配置文件 |
mix_det | YOLOX-x | 800x1440 | - | 65.4 | 84.5 | 77.4 | - | 配置文件 |
注意:
det_weights
和reid_weights
,运行tools/eval_mot.py
评估的命令即可自动下载,reid_weights
若为None则表示不需要使用。reid_weights:
为自己的权重路径。dataset/mot/
文件夹下。dataset/mot/
目录下。为了验证精度可以都用MOT17-half val数据集去评估。网络 | 测试集 | MOTA | IDF1 | IDS | FP | FN | FPS | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|
ByteTrack-x | MOT-17 Train | 84.4 | 72.8 | 837 | 5653 | 10985 | - | 下载链接 | 配置文件 |
ByteTrack-x | MOT-17 Test | 78.4 | 69.7 | 4974 | 37551 | 79524 | - | 下载链接 | 配置文件 |
ByteTrack-x | MOT-16 Train | 83.5 | 72.7 | 800 | 6973 | 10419 | - | 下载链接 | 配置文件 |
ByteTrack-x | MOT-16 Test | 77.7 | 70.1 | 1570 | 15695 | 23304 | - | 下载链接 | 配置文件 |
注意:
dataset/mot/
目录下。模型 | 输入尺寸 | MOTA | IDF1 | IDS | FP | FN | FPS | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|
ByteTrack-x | 1440x800 | 64.1 | 63.4 | 4191 | 185162 | 210240 | - | 下载链接 | 配置文件 |
骨干网络 | 输入尺寸 | MOTA | IDF1 | IDS | FP | FN | FPS | 下载链接 | 配置文件 |
---|---|---|---|---|---|---|---|---|---|
ByteTrack-x | 1440x800 | 72.6 | 61.8 | 5163 | 71235 | 154139 | - | 下载链接 | 配置文件 |
注意:
多类别ByteTrack,可以参考 bytetrack_ppyoloe_ppvehicle9cls.yml,表示使用 PP-Vehicle 中的PPVehicle9cls数据集训好的模型权重去做多类别车辆跟踪。由于没有跟踪的ground truth标签无法做评估,故只做跟踪预测,只需修改TestMOTDataset
确保路径存在,且其中的anno_path
表示指定在一个label_list.txt
中记录具体类别,需要自己手写,一行表示一个种类,注意路径anno_path
如果写错或找不到则将默认使用COCO数据集80类的类别。
如需更换检测器权重,可改动其中的det_weights:
为自己的权重路径,并注意数据集路径、label_list.txt
和类别数做出相应更改。
预测多类别车辆跟踪:
# 下载demo视频
wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/bdd100k_demo.mp4
# 使用PPYOLOE 多类别车辆检测模型
CUDA_VISIBLE_DEVICES=1 python tools/infer_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe_ppvehicle9cls.yml --video_file=bdd100k_demo.mp4 --scaled=True --save_videos
注意:
apt-get update && apt-get install -y ffmpeg
。--scaled
表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE的YOLOv3则为False,如果使用通用检测模型则为True。--save_videos
表示保存可视化视频,同时会保存可视化的图片在{output_dir}/mot_outputs/
中,{output_dir}
可通过--output_dir
设置,默认文件夹名为output
。通过如下命令一键式启动训练和评估
python -m paddle.distributed.launch --log_dir=ppyoloe --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml --eval --amp
# 或者
python -m paddle.distributed.launch --log_dir=ppyoloe --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/mot/bytetrack/detector/yolox_x_24e_800x1440_mix_det.yml --eval --amp
注意:
--eval
是边训练边验证精度;--amp
是混合精度训练避免溢出,推荐使用paddlepaddle2.2.2版本。CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml -o weights=https://bj.bcebos.com/v1/paddledet/models/mot/ppyoloe_crn_l_36e_640x640_mot17half.pdparams
# 或者
CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/mot/bytetrack/detector/yolox_x_24e_800x1440_mix_det.yml -o weights=https://bj.bcebos.com/v1/paddledet/models/mot/yolox_x_24e_800x1440_mix_det.pdparams
注意:
tools/eval.py
, 评估跟踪使用的是tools/eval_mot.py
。CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/bytetrack/bytetrack_yolov3.yml --scaled=True
# 或者
CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe.yml --scaled=True
# 或者
CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe_pplcnet.yml --scaled=True
# 或者
CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/bytetrack/bytetrack_yolox.yml --scaled=True
注意:
--scaled
表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE YOLOv3则为False,如果使用通用检测模型则为True, 默认值是False。{output_dir}/mot_results/
中,里面每个视频序列对应一个txt,每个txt文件每行信息是frame,id,x1,y1,w,h,score,-1,-1,-1
, 此外{output_dir}
可通过--output_dir
设置,默认文件夹名为output
。使用单个GPU通过如下命令预测一个视频,并保存为视频
# 下载demo视频
wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mot17_demo.mp4
# 使用PPYOLOe行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/bytetrack/bytetrack_ppyoloe.yml --video_file=mot17_demo.mp4 --scaled=True --save_videos
# 或者使用YOLOX行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/bytetrack/bytetrack_yolox.yml --video_file=mot17_demo.mp4 --scaled=True --save_videos
注意:
apt-get update && apt-get install -y ffmpeg
。--scaled
表示在模型输出结果的坐标是否已经是缩放回原图的,如果使用的检测模型是JDE的YOLOv3则为False,如果使用通用检测模型则为True。--save_videos
表示保存可视化视频,同时会保存可视化的图片在{output_dir}/mot_outputs/
中,{output_dir}
可通过--output_dir
设置,默认文件夹名为output
。Step 1:导出检测模型
# 导出PPYOLOe行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/ppyoloe_crn_l_36e_640x640_mot17half.pdparams
# 或者导出YOLOX行人检测模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/bytetrack/detector/yolox_x_24e_800x1440_mix_det.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/yolox_x_24e_800x1440_mix_det.pdparams
Step 2:导出ReID模型(可选步骤,默认不需要)
# 导出PPLCNet ReID模型
CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/deepsort/reid/deepsort_pplcnet.yml -o reid_weights=https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet.pdparams
python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/ppyoloe_crn_l_36e_640x640_mot17half/ --tracker_config=deploy/pptracking/python/tracker_config.yml --video_file=mot17_demo.mp4 --device=GPU --save_mot_txts
# 或者
python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/yolox_x_24e_800x1440_mix_det/ --tracker_config=deploy/pptracking/python/tracker_config.yml --video_file=mot17_demo.mp4 --device=GPU --save_mot_txts
注意:
--save_mot_txts
(对每个视频保存一个txt)或--save_mot_txt_per_img
(对每张图片保存一个txt)表示保存跟踪结果的txt文件,或--save_images
表示保存跟踪结果可视化图片。frame,id,x1,y1,w,h,score,-1,-1,-1
。@article{zhang2021bytetrack,
title={ByteTrack: Multi-Object Tracking by Associating Every Detection Box},
author={Zhang, Yifu and Sun, Peize and Jiang, Yi and Yu, Dongdong and Yuan, Zehuan and Luo, Ping and Liu, Wenyu and Wang, Xinggang},
journal={arXiv preprint arXiv:2110.06864},
year={2021}
}