BoT-SORT:强大的关联多人行人跟踪
尼尔·阿哈龙、罗伊·奥费格、本·锡安·博布罗夫斯基
https://arxiv.org/abs/2206.14651
多对象跟踪 (MOT) 的目标是检测和跟踪场景中的所有对象,同时为每个对象保留唯一的标识符。在本文中,我们提出了一种新的鲁棒的最先进的跟踪器,它可以结合运动和外观信息的优点,以及相机运动补偿和更准确的卡尔曼滤波器状态向量。我们的新跟踪器 BoT-SORT 和 BoT-SORT-ReID 在 MOT17 和 MOT20 测试集上的 MOTchallenge [29, 11] 数据集中排名第一,就所有主要 MOT 指标而言:MOTA、IDF1 和 HOTA。对于 MOT17:实现了 80.5 MOTA、80.2 IDF1 和 65.0 HOTA。
追踪器 | 莫塔 | 以色列国防军1 | 和田 |
---|---|---|---|
机器人排序 | 80.6 | 79.5 | 64.6 |
机器人排序-ReID | 80.5 | 80.2 | 65.0 |
追踪器 | 莫塔 | 以色列国防军1 | 和田 |
---|---|---|---|
机器人排序 | 77.7 | 76.3 | 62.6 |
机器人排序-ReID | 77.8 | 77.5 | 63.3 |
代码在Ubuntu 20.04上测试
BoT-SORT 代码基于 ByteTrack 和 FastReID。
请访问他们的安装指南以获取更多设置选项。
步骤1.创建Conda环境并安装pytorch。
conda create -n botsort_env python=3.7
conda activate botsort_env
步骤 2.从 pytorch.org 安装 torch 和匹配的 torchvision。
该代码使用 torch 1.11.0+cu113 和 torchvision==0.12.0 进行测试
步骤 3.安装 BoT-SORT。
git clone https://github.com/NirAharon/BoT-SORT.git
cd BoT-SORT
pip3 install -r requirements.txt
python3 setup.py develop
步骤4.安装pycocotools。
pip3 install cython ; pip3 install ' git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI '
步骤5.其他
# Cython-bbox
pip3 install cython_bbox
# faiss cpu / gpu
pip3 install faiss-cpu
pip3 install faiss-gpu
从官网下载MOT17和MOT20。并将它们放入以下结构中:
<dataets_dir>
│
├── MOT17
│ ├── train
│ └── test
│
└── MOT20
├── train
└── test
为了训练 ReID,必须按如下方式生成检测补丁:
cd < BoT-SORT_dir >
# For MOT17
python3 fast_reid/datasets/generate_mot_patches.py --data_path < dataets_dir > --mot 17
# For MOT20
python3 fast_reid/datasets/generate_mot_patches.py --data_path < dataets_dir > --mot 20
将数据集链接到 FastReID export FASTREID_DATASETS=<BoT-SORT_dir>/fast_reid/datasets
。如果未设置,默认为fast_reid/datasets
下载训练好的模型并将其存储在“pretrained”文件夹中,如下所示:
<BoT-SORT_dir>/pretrained
我们使用在 MOT17、MOT20 和消融研究上训练的公开可用的 ByteTrack 模型动物园来进行 YOLOX 对象检测。
我们训练有素的 ReID 模型可以从 MOT17-SBS-S50、MOT20-SBS-S50 下载。
对于多类 MOT,请使用在 COCO(或任何自定义权重)上训练的 YOLOX 或 YOLOv7。
按照“数据准备”部分所述生成 MOT ReID 数据集后。
cd < BoT-SORT_dir >
# For training MOT17
python3 fast_reid/tools/train_net.py --config-file ./fast_reid/configs/MOT17/sbs_S50.yml MODEL.DEVICE " cuda:0 "
# For training MOT20
python3 fast_reid/tools/train_net.py --config-file ./fast_reid/configs/MOT20/sbs_S50.yml MODEL.DEVICE " cuda:0 "
请参阅 FastReID 存储库以获取其他说明和选项。
将这部分生成的txt文件提交到MOTChallenge网站,可以获得与论文中相同的结果。
仔细调整跟踪参数可以带来更高的性能。在本文中我们应用了ByteTrack的校准。
cd < BoT-SORT_dir >
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --with-reid --benchmark " MOT17 " --eval " test " --fp16 --fuse
python3 tools/interpolation.py --txt_path < path_to_track_result >
cd < BoT-SORT_dir >
python3 tools/track.py < dataets_dir/MOT 20> --default-parameters --with-reid --benchmark " MOT20 " --eval " test " --fp16 --fuse
python3 tools/interpolation.py --txt_path < path_to_track_result >
cd < BoT-SORT_dir >
# BoT-SORT
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --benchmark " MOT17 " --eval " val " --fp16 --fuse
# BoT-SORT-ReID
python3 tools/track.py < dataets_dir/MOT 17> --default-parameters --with-reid --benchmark " MOT17 " --eval " val " --fp16 --fuse
可以使用其他参数而无需传递 --default-parameters 标志。
为了评估训练集和验证集,我们建议使用 TrackEval 的官方 MOTchallenge 评估代码。
# For all the available tracking parameters, see:
python3 tools/track.py -h
可以使用其他参数而无需传递 --default-parameters 标志。
为了评估训练集和验证集,我们建议使用 TrackEval 的官方 MOTchallenge 评估代码。
# For all the available tracking parameters, see:
python3 tools/track_yolov7.py -h
使用基于 YOLOX 和多类别的 BoT-SORT(-ReID) 进行演示。
cd < BoT-SORT_dir >
# Original example
python3 tools/demo.py video --path < path_to_video > -f yolox/exps/example/mot/yolox_x_mix_det.py -c pretrained/bytetrack_x_mot17.pth.tar --with-reid --fuse-score --fp16 --fuse --save_result
# Multi-class example
python3 tools/mc_demo.py video --path < path_to_video > -f yolox/exps/example/mot/yolox_x_mix_det.py -c pretrained/bytetrack_x_mot17.pth.tar --with-reid --fuse-score --fp16 --fuse --save_result
基于 YOLOv7 和多类的 BoT-SORT(-ReID) 演示。
cd < BoT-SORT_dir >
python3 tools/mc_demo_yolov7.py --weights pretrained/yolov7-d6.pt --source < path_to_video/images > --fuse-score --agnostic-nms (--with-reid)
我们的相机运动补偿模块基于VideoStab Global Motion Estimation的OpenCV contrib C++版本,目前没有Python版本。
可以使用 GMC 文件夹中名为“VideoCameraCorrection”的 C++ 项目生成运动文件。
生成的文件可以从跟踪器中使用。
此外,还可以使用基于 python 的运动估计技术,并且可以通过以下方式进行选择
'--cmc-method' <文件 |球体| ecc> 到 demo.py 或 track.py。
@article{aharon2022bot,
title={BoT-SORT: Robust Associations Multi-Pedestrian Tracking},
author={Aharon, Nir and Orfaig, Roy and Bobrovsky, Ben-Zion},
journal={arXiv preprint arXiv:2206.14651},
year={2022}
}
很大一部分代码、思想和结果借鉴于ByteTrack、StrongSORT、FastReID、YOLOX和YOLOv7。感谢他们的出色工作!