BoT-SORT: Seguimiento multipeatonal de asociaciones robustas
Nir Aharon, Roy Orfaig, Ben-Zion Bobrovsky
https://arxiv.org/abs/2206.14651
El objetivo del seguimiento de objetos múltiples (MOT) es detectar y rastrear todos los objetos en una escena, manteniendo al mismo tiempo un identificador único para cada objeto. En este artículo, presentamos un nuevo rastreador robusto de última generación, que puede combinar las ventajas de la información de movimiento y apariencia, junto con la compensación del movimiento de la cámara y un vector de estado de filtro Kalman más preciso. Nuestros nuevos rastreadores BoT-SORT y BoT-SORT-ReID ocupan el primer lugar en los conjuntos de datos de MOTChallenge [29, 11] en los conjuntos de pruebas MOT17 y MOT20, en términos de todas las métricas principales de MOT: MOTA, IDF1 y HOTA. Para MOT17: se logran 80,5 MOTA, 80,2 IDF1 y 65,0 HOTA.
Rastreador | MOTA | IDF1 | CALIENTE |
---|---|---|---|
BOT-SORT | 80,6 | 79,5 | 64,6 |
BoT-SORT-ReID | 80,5 | 80.2 | 65.0 |
Rastreador | MOTA | IDF1 | CALIENTE |
---|---|---|---|
BOT-SORT | 77,7 | 76,3 | 62,6 |
BoT-SORT-ReID | 77,8 | 77,5 | 63.3 |
El código fue probado en Ubuntu 20.04.
El código BoT-SORT se basa en ByteTrack y FastReID.
Visite sus guías de instalación para obtener más opciones de configuración.
Paso 1. Cree el entorno Conda e instale pytorch.
conda create -n botsort_env python=3.7
conda activate botsort_env
Paso 2. Instale la antorcha y la torchvision correspondiente de pytorch.org.
El código fue probado usando torch 1.11.0+cu113 y torchvision==0.12.0
Paso 3. Instale BoT-SORT.
git clone https://github.com/NirAharon/BoT-SORT.git
cd BoT-SORT
pip3 install -r requirements.txt
python3 setup.py develop
Paso 4. Instale pycocotools.
pip3 install cython ; pip3 install ' git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI '
Paso 5. Otros
# Cython-bbox
pip3 install cython_bbox
# faiss cpu / gpu
pip3 install faiss-cpu
pip3 install faiss-gpu
Descargue MOT17 y MOT20 desde el sitio web oficial. Y ponlos en la siguiente estructura:
<dataets_dir>
│
├── MOT17
│ ├── train
│ └── test
│
└── MOT20
├── train
└── test
Para entrenar el ReID, los parches de detección se deben generar de la siguiente manera:
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
Vincular el conjunto de datos a export FASTREID_DATASETS=<BoT-SORT_dir>/fast_reid/datasets
. Si no se configura, el valor predeterminado es fast_reid/datasets
Descargue y almacene los modelos entrenados en la carpeta "preentrenados" de la siguiente manera:
<BoT-SORT_dir>/pretrained
Utilizamos el zoológico modelo ByteTrack disponible públicamente entrenado en MOT17, MOT20 y estudio de ablación para la detección de objetos YOLOX.
Nuestros modelos ReID entrenados se pueden descargar desde MOT17-SBS-S50, MOT20-SBS-S50.
Para MOT de varias clases, utilice YOLOX o YOLOv7 entrenados en COCO (o cualquier peso personalizado).
Después de generar el conjunto de datos MOT ReID como se describe en la sección "Preparación de datos".
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 "
Consulte el repositorio FastReID para obtener explicaciones y opciones adicionales.
Al enviar los archivos de texto producidos en esta parte al sitio web de MOTChallenge, podrá obtener los mismos resultados que en el documento.
Ajustar cuidadosamente los parámetros de seguimiento podría conducir a un mayor rendimiento. En el artículo aplicamos la calibración de 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
Se pueden utilizar otros parámetros sin pasar el indicador --default-parameters.
Para evaluar el tren y los conjuntos de validación, recomendamos utilizar el código de evaluación oficial MOTChallenge de TrackEval.
# For all the available tracking parameters, see:
python3 tools/track.py -h
Se pueden utilizar otros parámetros sin pasar el indicador --default-parameters.
Para evaluar el tren y los conjuntos de validación, recomendamos utilizar el código de evaluación oficial MOTChallenge de TrackEval.
# For all the available tracking parameters, see:
python3 tools/track_yolov7.py -h
Demostración con YOLOX basado en BoT-SORT(-ReID) y multiclase.
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
Demostración con YOLOv7 basado en BoT-SORT(-ReID) y multiclase.
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)
Nuestro módulo de compensación de movimiento de la cámara se basa en la versión OpenCV contrib C++ de VideoStab Global Motion Estimation, que actualmente no tiene una versión de Python.
Los archivos de movimiento se pueden generar utilizando el proyecto C++ llamado 'VideoCameraCorrection' en la carpeta GMC.
Los archivos generados se pueden utilizar desde el rastreador.
Además, hay disponibles técnicas de estimación de movimiento basadas en Python que se pueden elegir pasando
'--método-cmc' <archivos | orbe | ecc> a demo.py o 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}
}
Gran parte de los códigos, ideas y resultados están tomados de ByteTrack, StrongSORT, FastReID, YOLOX y YOLOv7. ¡Gracias por su excelente trabajo!