Ir al contenido

Ensamblaje de modelos YOLOv5

馃摎 Esta gu铆a explica c贸mo utilizar el ensamblaje de modelos Ultralytics YOLOv5 馃殌 durante las pruebas y la inferencia para mejorar el mAP y el Recall.

Del aprendizaje por conjuntos:

La modelizaci贸n por conjuntos es un proceso en el que se crean m煤ltiples modelos diversos para predecir un resultado, ya sea utilizando muchos algoritmos de modelizaci贸n distintos o utilizando diferentes conjuntos de datos de entrenamiento. A continuaci贸n, el modelo de conjunto agrega la predicci贸n de cada modelo base y da como resultado una predicci贸n final para los datos no vistos. La motivaci贸n para utilizar modelos de conjunto es reducir el error de generalizaci贸n de la predicci贸n. Siempre que los modelos de base sean diversos e independientes, el error de predicci贸n del modelo disminuye cuando se utiliza el enfoque de conjunto. El enfoque busca la sabidur铆a de la multitud para hacer una predicci贸n. Aunque el modelo ensemble tiene m煤ltiples modelos base dentro del modelo, act煤a y funciona como un 煤nico modelo.

Antes de empezar

Clonar repo e instalar requirements.txt en a Python>=3.8.0 incluyendo PyTorch>=1.8. Los modelos y conjuntos de datos se descargan autom谩ticamente de la 煤ltimaversi贸n de YOLOv5 .

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

Prueba normalmente

Antes de ensamblar, establezca el rendimiento de referencia de un 煤nico modelo. Este comando prueba YOLOv5x en COCO val2017 con un tama帽o de imagen de 640 p铆xeles. yolov5x.pt es el modelo m谩s grande y preciso disponible. Otras opciones son yolov5s.pt, yolov5m.pt y yolov5l.pto su propio punto de control a partir del entrenamiento de un conjunto de datos personalizado ./weights/best.pt. Para m谩s detalles sobre todos los modelos disponibles, consulte la tabla de puntos de control preentrenados.

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

Salida:

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

Prueba de conjunto

Se pueden ensamblar varios modelos preentrenados en el momento de la prueba y de la inferencia simplemente a帽adiendo modelos adicionales al modelo --weights en cualquier comando val.py o detect.py existente. Este ejemplo prueba un conjunto de 2 modelos juntos:

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

Salida:

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/exp3/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

Inferencia conjunta

A帽adir modelos adicionales al --weights para ejecutar la inferencia de conjunto:

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

Salida:

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/exp2
Done. (0.223s)

YOLO resultado de la inferencia

Ventajas del ensamblaje de modelos

El ensamblaje de modelos con YOLOv5 ofrece varias ventajas:

  1. Mayor precisi贸n: Como se demuestra en los ejemplos anteriores, el ensamblaje de varios modelos aumenta mAP de 0,504 a 0,515 y mAR de 0,681 a 0,689.
  2. Mejor generalizaci贸n: La combinaci贸n de diversos modelos ayuda a reducir el sobreajuste y mejora el rendimiento con datos variados.
  3. Mayor robustez: Los conjuntos suelen ser m谩s resistentes al ruido y a los valores at铆picos de los datos.
  4. Puntos fuertes complementarios: Los distintos modelos pueden destacar en la detecci贸n de diferentes tipos de objetos o en diferentes condiciones ambientales.

La principal contrapartida es el aumento del tiempo de inferencia, como muestran las m茅tricas de velocidad (22,4 ms para el modelo 煤nico frente a 39,5 ms para el conjunto).

Cu谩ndo utilizar el ensamblaje de modelos

Considere la posibilidad de utilizar el ensamblaje de modelos en estos escenarios:

  • Cuando la precisi贸n es m谩s importante que la velocidad de inferencia
  • Para aplicaciones cr铆ticas en las que deben minimizarse los falsos negativos
  • Al procesar im谩genes dif铆ciles con iluminaci贸n, oclusi贸n o escala variables
  • Durante competiciones o evaluaciones comparativas en las que se exige el m谩ximo rendimiento

Para aplicaciones en tiempo real con estrictos requisitos de latencia, la inferencia de modelo 煤nico puede ser m谩s apropiada.

Entornos compatibles

Ultralytics proporciona una serie de entornos listos para usar, cada uno de ellos preinstalado con dependencias esenciales como CUDACUDNN, Pythony PyTorchpara poner en marcha sus proyectos.

Estado del proyecto

YOLOv5 CI

Este distintivo indica que todas las pruebas de integraci贸n continua (IC) deYOLOv5 GitHub Actions se han superado con 茅xito. Estas pruebas de IC comprueban rigurosamente la funcionalidad y el rendimiento de YOLOv5 en varios aspectos clave: formaci贸n, validaci贸n, inferencia, exportaci贸n y puntos de referencia. Garantizan un funcionamiento coherente y fiable en macOS, Windows y Ubuntu, con pruebas realizadas cada 24 horas y en cada nueva confirmaci贸n.

Creado hace 1 a帽o 鉁忥笍 Actualizado hace 11 d铆as

Comentarios