Meet YOLO26: next-gen vision AI.

Link to this sectionEnsemble de Modelos YOLOv5#

📚 Este guia explica como usar o model ensembling do Ultralytics YOLOv5 🚀 durante o teste e inferência para melhorar o mAP e o Recall.

Do ensemble learning:

A modelagem de conjunto (ensemble modeling) é um processo no qual múltiplos modelos diversos são criados para prever um resultado, seja usando muitos algoritmos de modelagem diferentes ou usando diferentes conjuntos de training data. O modelo de conjunto então agrega a previsão de cada modelo base e resulta em uma previsão final para os dados não vistos. A motivação para usar modelos de conjunto é reduzir o erro de generalização da previsão. Desde que os modelos base sejam diversos e independentes, o erro de previsão do modelo diminui quando a abordagem de conjunto é utilizada. A abordagem busca a sabedoria das multidões ao fazer uma previsão. Embora o modelo de conjunto tenha múltiplos modelos base dentro dele, ele atua e tem o desempenho de um modelo único.

Link to this sectionAntes de começares#

Clone o repositório e instale os requirements.txt em um ambiente Python>=3.8.0, incluindo PyTorch>=1.8. Modelos e datasets são baixados automaticamente a partir da última release do YOLOv5.

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

Link to this sectionTeste Normal#

Antes de fazer o ensemble, estabeleça o desempenho básico de um único modelo. Este comando testa o YOLOv5x no COCO val2017 com tamanho de imagem de 640 pixels. yolov5x.pt é o maior e mais preciso modelo disponível. Outras opções são yolov5s.pt, yolov5m.pt e yolov5l.pt, ou o seu próprio checkpoint treinado em um conjunto de dados personalizado ./weights/best.pt. Para detalhes sobre todos os modelos disponíveis, veja a pretrained checkpoints table.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Saída:

val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients

val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00,  1.05it/s]
                 all       5000      36335      0.746      0.626       0.68       0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640)  # <--- baseline speed

Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.504  # <--- baseline mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.688
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.546
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.382
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.681  # <--- baseline mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826

Link to this sectionTeste de Ensemble#

Múltiplos modelos pré-treinados podem ser combinados em um ensemble no momento do teste e da inferência simplesmente adicionando modelos extras ao argumento --weights em qualquer comando val.py ou detect.py existente. Este exemplo testa um ensemble de 2 modelos juntos:

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

Você pode listar quantos checkpoints desejar, incluindo pesos personalizados como runs/train/exp-5/weights/best.pt. O YOLOv5 executará automaticamente cada modelo, alinhará as previsões por imagem e calculará a média das saídas antes de realizar o NMS.

Saída:

val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients  # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients  # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']  # Ensemble notice

val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00,  1.52s/it]
                 all       5000      36335      0.747      0.637      0.692      0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640)  # <--- ensemble speed

Evaluating pycocotools mAP... saving runs/val/exp-3/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.515  # <--- ensemble mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.699
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.557
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.387
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.638
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.689  # <--- ensemble mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844

Link to this sectionInferência de Ensemble#

Adicione modelos extras ao argumento --weights para executar a inferência de ensemble:

python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images

Saída:

YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']

image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp-2
Done. (0.223s)
YOLO inference result

Link to this sectionBenefícios do Model Ensembling#

O model ensembling com o YOLOv5 oferece várias vantagens:

  1. Precisão Melhorada: Como demonstrado nos exemplos acima, combinar múltiplos modelos aumenta o mAP de 0.504 para 0.515 e o mAR de 0.681 para 0.689.
  2. Melhor Generalização: Combinar modelos diversos ajuda a reduzir o overfitting e melhora o desempenho em dados variados.
  3. Robustez Aprimorada: Ensembles são tipicamente mais robustos a ruídos e outliers nos dados.
  4. Pontos Fortes Complementares: Diferentes modelos podem se destacar na detecção de diferentes tipos de objetos ou em diferentes condições ambientais.

A principal desvantagem é o aumento do tempo de inferência, como mostrado nas métricas de velocidade (22.4ms para um modelo único vs. 39.5ms para um ensemble).

Link to this sectionQuando usar Model Ensembling#

Considere usar o model ensembling nestes cenários:

  • Quando a precisão é mais importante do que a velocidade de inferência
  • Para aplicações críticas onde falsos negativos devem ser minimizados
  • Ao processar imagens desafiadoras com iluminação, oclusão ou escala variadas
  • Durante competições ou benchmarking onde o desempenho máximo é necessário

Para aplicações em tempo real com requisitos rigorosos de latência, a inferência com um único modelo pode ser mais apropriada.

Link to this sectionAmbientes Suportados#

A Ultralytics fornece uma gama de ambientes prontos a usar, cada um pré-instalado com dependências essenciais como CUDA, CUDNN, Python e PyTorch, para dar início aos teus projetos.

Link to this sectionStatus do Projeto#

YOLOv5 CI

Este selo indica que todos os testes de Integração Contínua (CI) do GitHub Actions do YOLOv5 estão passando com sucesso. Esses testes de CI verificam rigorosamente a funcionalidade e o desempenho do YOLOv5 em vários aspectos fundamentais: treinamento, validação, inferência, exportação e benchmarks. Eles garantem uma operação consistente e confiável no macOS, Windows e Ubuntu, com testes realizados a cada 24 horas e a cada novo commit.

Comentários