BoT-SORT: Rastreamento Multipedestre de Associações Robustas
Nir Aharon, Roy Orfaig, Ben-Zion Bobrovsky
https://arxiv.org/abs/2206.14651
O objetivo do rastreamento multiobjeto (MOT) é detectar e rastrear todos os objetos em uma cena, mantendo um identificador exclusivo para cada objeto. Neste artigo, apresentamos um novo rastreador robusto de última geração, que pode combinar as vantagens das informações de movimento e aparência, juntamente com a compensação de movimento da câmera e um vetor de estado do filtro de Kalman mais preciso. Nossos novos rastreadores BoT-SORT e BoT-SORT-ReID classificam-se em primeiro lugar nos conjuntos de dados do MOTChallenge [29, 11] nos conjuntos de testes MOT17 e MOT20, em termos de todas as principais métricas MOT: MOTA, IDF1 e HOTA. Para MOT17: 80,5 MOTA, 80,2 IDF1 e 65,0 HOTA são alcançados.
Rastreador | MOTA | IDF1 | QUENTE |
---|---|---|---|
BoT-SORT | 80,6 | 79,5 | 64,6 |
BoT-SORT-ReID | 80,5 | 80,2 | 65,0 |
Rastreador | MOTA | IDF1 | QUENTE |
---|---|---|---|
BoT-SORT | 77,7 | 76,3 | 62,6 |
BoT-SORT-ReID | 77,8 | 77,5 | 63,3 |
O código foi testado no Ubuntu 20.04
O código BoT-SORT é baseado em ByteTrack e FastReID.
Visite os guias de instalação para obter mais opções de configuração.
Etapa 1. Crie o ambiente Conda e instale o pytorch.
conda create -n botsort_env python=3.7
conda activate botsort_env
Etapa 2. Instale a tocha e o torchvision correspondente em pytorch.org.
O código foi testado usando torch 1.11.0+cu113 e torchvision==0.12.0
Etapa 3. Instale o BoT-SORT.
git clone https://github.com/NirAharon/BoT-SORT.git
cd BoT-SORT
pip3 install -r requirements.txt
python3 setup.py develop
Etapa 4. Instale pycocotools.
pip3 install cython ; pip3 install ' git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI '
Etapa 5. Outros
# Cython-bbox
pip3 install cython_bbox
# faiss cpu / gpu
pip3 install faiss-cpu
pip3 install faiss-gpu
Baixe MOT17 e MOT20 do site oficial. E coloque-os na seguinte estrutura:
<dataets_dir>
│
├── MOT17
│ ├── train
│ └── test
│
└── MOT20
├── train
└── test
Para treinar o ReID, os patches de detecção devem ser gerados da seguinte forma:
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 conjunto de dados à export FASTREID_DATASETS=<BoT-SORT_dir>/fast_reid/datasets
. Se não for definido, o padrão é fast_reid/datasets
Baixe e armazene os modelos treinados na pasta 'pré-treinado' da seguinte forma:
<BoT-SORT_dir>/pretrained
Usamos o zoológico modelo ByteTrack disponível publicamente, treinado em MOT17, MOT20 e estudo de ablação para detecção de objetos YOLOX.
Nossos modelos ReID treinados podem ser baixados em MOT17-SBS-S50, MOT20-SBS-S50.
Para MOT multiclasse, use YOLOX ou YOLOv7 treinado em COCO (ou qualquer peso personalizado).
Depois de gerar o conjunto de dados MOT ReID conforme descrito na seção 'Preparação de dados'.
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 o repositório FastReID para explicações e opções adicionais.
Ao enviar os arquivos txt produzidos nesta parte para o site MOTChallenge você poderá obter os mesmos resultados do artigo.
Ajustar cuidadosamente os parâmetros de rastreamento pode levar a um desempenho melhor. No artigo aplicamos a calibração do 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
Outros parâmetros podem ser usados sem passar o sinalizador --default-parameters.
Para avaliar os conjuntos de treinamento e validação, recomendamos o uso do código de avaliação oficial MOTChallenge da TrackEval.
# For all the available tracking parameters, see:
python3 tools/track.py -h
Outros parâmetros podem ser usados sem passar o sinalizador --default-parameters.
Para avaliar os conjuntos de treinamento e validação, recomendamos o uso do código de avaliação oficial MOTChallenge da TrackEval.
# For all the available tracking parameters, see:
python3 tools/track_yolov7.py -h
Demonstração com YOLOX baseado em BoT-SORT (-ReID) e multiclasse.
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
Demonstração com YOLOv7 baseado em BoT-SORT (-ReID) e multiclasse.
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)
Nosso módulo de compensação de movimento da câmera é baseado na versão C++ do OpenCV contrib do VideoStab Global Motion Estimation, que atualmente não possui uma versão Python.
Arquivos de movimento podem ser gerados usando o projeto C++ chamado 'VideoCameraCorrection' na pasta GMC.
Os arquivos gerados podem ser usados no rastreador.
Além disso, técnicas de estimativa de movimento baseadas em python estão disponíveis e podem ser escolhidas passando
'--cmc-method' <arquivos | orbe | ecc> para demo.py ou 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}
}
Grande parte dos códigos, ideias e resultados são emprestados de ByteTrack, StrongSORT, FastReID, YOLOX e YOLOv7. Obrigado pelo excelente trabalho!