Este repositório contém uma coleção de rastreadores multi-objetos de ponta e rastreadores para segmentação, detecção de objetos e estimativa de pose. Para os métodos usando a descrição da aparência, os modelos Reid pesados (cliperid) e leves de última geração (LightMBN, OSNET e muito mais) estão disponíveis para download automático. Fornecemos exemplos sobre como usar este pacote junto com modelos populares de detecção de objetos, como: yolov8, yolov9 e yolov10
Rastreador | Status | HOTA ↑ | Mota ↑ | IDF1 ↑ |
---|---|---|---|---|
Botsort | ✅ | 68.504 | 77.165 | 80.986 |
fortsort | ✅ | 68.329 | 76.348 | 81.206 |
bytetrack | ✅ | 66.536 | 76.909 | 77.855 |
ocsort | ✅ | 65.187 | 74.819 | 75.957 |
PRASSOC | ✅ | 64.096 | 76.511 | 71.875 |
Deepocsort | ✅ | 62.913 | 74.483 | 73.459 |
híbrido |
Notas: A avaliação foi realizada na segunda metade do conjunto de treinamento do MOT17, pois o conjunto de validação não é acessível ao público. As detecções e incorporações pré-geradas utilizadas foram provenientes daqui. Cada rastreador foi configurado com os parâmetros originais fornecidos em seus repositórios oficiais.
As opções de rastreamento de vários objetos de hoje dependem fortemente dos recursos de computação do hardware subjacente. O Boxmot fornece uma grande variedade de métodos de rastreamento que atendem a diferentes limitações de hardware, desde a CPU apenas até as GPUs maiores. Morover, fornecemos scripts para experimentação ultra rápida, salvando detecções e incorporações, que então são carregadas em qualquer algoritmo de rastreamento. Evitando a sobrecarga de gerar repetidamente esses dados.
Comece com Python> = 3.9 Ambiente.
Se você quiser executar os exemplos Yolov8, Yolov9 ou Yolov10:
git clone https://github.com/mikel-brostrom/boxmot.git
cd boxmot
pip install poetry
poetry install --with yolo # installed boxmot + yolo dependencies
poetry shell # activates the newly created environment with the installed dependencies
Mas se você quiser importar apenas os módulos de rastreamento, pode simplesmente:
pip install boxmot
$ python tracking/track.py --yolo-model yolov10n # bboxes only
python tracking/track.py --yolo-model yolov9s # bboxes only
python tracking/track.py --yolo-model yolov8n # bboxes only
yolov8n-seg # bboxes + segmentation masks
yolov8n-pose # bboxes + pose estimation
$ python tracking/track.py --tracking-method deepocsort
strongsort
ocsort
bytetrack
botsort
imprassoc
O rastreamento pode ser executado na maioria dos formatos de vídeo
$ python tracking/track.py --source 0 # webcam
img.jpg # image
vid.mp4 # video
path/ # directory
path/ * .jpg # glob
' https://youtu.be/Zgi9g1ksQHc ' # YouTube
' rtsp://example.com/media.mp4 ' # RTSP, RTMP, HTTP stream
Alguns métodos de rastreamento combinam a descrição da aparência e o movimento no processo de rastreamento. Para aqueles que usam a aparência, você pode escolher um modelo REID com base nas suas necessidades neste zoológico do REID Model. Esses modelo podem ser otimizados para suas necessidades pelo script reid_export.py
$ python tracking/track.py --source 0 --reid-model lmbn_n_cuhk03_d.pt # lightweight
osnet_x0_25_market1501.pt
mobilenetv2_x1_4_msmt17.engine
resnet50_msmt17.onnx
osnet_x1_0_msmt17.pt
clip_market1501.pt # heavy
clip_vehicleid.pt
...
Por padrão, o rastreador rastreia todas as classes MS Coco.
Se você deseja rastrear um subconjunto das classes que você modelo prevê, adicione o índice correspondente após o sinalizador de classes,
python tracking/track.py --source 0 --yolo-model yolov8s.pt --classes 16 17 # COCO yolov8 model. Track cats and dogs, only
Aqui está uma lista de todos os objetos possíveis que um modelo YOLOV8 treinado no MS Coco pode detectar. Observe que a indexação para as classes neste repositório começa em zero
Avalie uma combinação de detector, método de rastreamento e modelo REID no conjunto de dados MOT padrão ou você personaliza um por
$ python3 tracking/val.py --benchmark MOT17-mini --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method deepocsort --verbose --source ./assets/MOT17-mini/train
$ python3 tracking/val.py --benchmark MOT17 --yolo-model yolov8n.pt --reid-model osnet_x0_25_msmt17.pt --tracking-method ocsort --verbose --source ./tracking/val_utils/MOT17/train
Detecções e incorporações são armazenadas para o modelo YOLO e REID selecionado, respectivamente, que são carregados em qualquer algoritmo de rastreamento. Evitando a sobrecarga de gerar repetidamente esses dados.
Utilizamos um algoritmo genético multiobjetivo rápido e elitista para o ajuste do rastreador hyperparâmetro. Por padrão, os objetivos são: HOTA, MOTA, IDF1. Execute -o por
# saves dets and embs under ./runs/dets_n_embs separately for each selected yolo and reid model
$ python tracking/generate_dets_n_embs.py --source ./assets/MOT17-mini/train --yolo-model yolov8n.pt yolov8s.pt --reid-model weights/osnet_x0_25_msmt17.pt
# evolve parameters for specified tracking method using the selected detections and embeddings generated in the previous step
$ python tracking/evolve.py --benchmark MOT17-mini --dets yolov8n --embs osnet_x0_25_msmt17 --n-trials 9 --tracking-method botsort
O conjunto de hiperparâmetros que levam ao melhor resultado do HOTA são gravados no arquivo de configuração do rastreador.
Apoiamos o modelo Reid Export para ONNX, OpenVino, TorchScript e Tensorrt
# export to ONNX
$ python3 boxmot/appearance/reid_export.py --include onnx --device cpu
# export to OpenVINO
$ python3 boxmot/appearance/reid_export.py --include openvino --device cpu
# export to TensorRT with dynamic input
$ python3 boxmot/appearance/reid_export.py --include engine --device 0 --dynamic
O conjunto de hiperparâmetros que levam ao melhor resultado do HOTA são gravados no arquivo de configuração do rastreador.
Exemplo de descrição | Caderno |
---|---|
Rastreamento de caixa delimitador da Torchvision com Boxmot | |
Rastreamento de pose da Torchvision com boxmot | |
Rastreamento de segmentação de Torchvision com Boxmot |
Para bugs de rastreamento de YOLO e solicitações de recursos, visite problemas do GitHub. Para consultas de negócios ou solicitações de suporte profissional, envie um e-mail para: [email protected]